diff --git a/SOURCES/0034-Revert-kernel-install-also-remove-modules.builtin.al.patch b/SOURCES/0034-Revert-kernel-install-also-remove-modules.builtin.al.patch
deleted file mode 100644
index 3d79797..0000000
--- a/SOURCES/0034-Revert-kernel-install-also-remove-modules.builtin.al.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From c8e786f039efec9e509b839ab8b82237d9344398 Mon Sep 17 00:00:00 2001
-From: Michal Sekletar <msekleta@redhat.com>
-Date: Thu, 17 Mar 2022 12:35:35 +0100
-Subject: [PATCH] Revert "kernel-install: also remove
- modules.builtin.alias.bin"
-
-This reverts commit fdcb1bf67371615f12c4b11283f2bd6a25bda019.
-
-Related: #2065061
-
-[msekleta: this revert is done in order to make backporting easier,
-patch will be reapplied later.]
----
- src/kernel-install/50-depmod.install | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
-index fd00c43632..2fd959865f 100644
---- a/src/kernel-install/50-depmod.install
-+++ b/src/kernel-install/50-depmod.install
-@@ -36,7 +36,7 @@ case "$COMMAND" in
-     remove)
-         [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-             echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
--        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin{,.alias}.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
-+        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
-         ;;
-     *)
-         exit 0
diff --git a/SOURCES/0034-test-check-systemd-RPM-macros.patch b/SOURCES/0034-test-check-systemd-RPM-macros.patch
new file mode 100644
index 0000000..fbab83d
--- /dev/null
+++ b/SOURCES/0034-test-check-systemd-RPM-macros.patch
@@ -0,0 +1,240 @@
+From 29cda567564d548cce5867c9d054ebb6cefcdca0 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 3 Mar 2022 20:30:43 +0100
+Subject: [PATCH] test: check systemd RPM macros
+
+Make sure our RPM macros work as intended. Based on the original PR
+(#16464) by Mikhail Novosyolov.
+
+Co-authored-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
+(cherry picked from commit 55c09511e13c6a57ffe64bef4a9d0a00f34d37d9)
+
+Related: #2017035
+---
+ .github/workflows/unit_tests.sh |   1 +
+ .semaphore/semaphore-runner.sh  |   2 +-
+ test/meson.build                |  16 ++++
+ test/test-rpm-macros.sh         | 162 ++++++++++++++++++++++++++++++++
+ 4 files changed, 180 insertions(+), 1 deletion(-)
+ create mode 100755 test/test-rpm-macros.sh
+
+diff --git a/.github/workflows/unit_tests.sh b/.github/workflows/unit_tests.sh
+index 9c7beb6d19..f41b070e57 100755
+--- a/.github/workflows/unit_tests.sh
++++ b/.github/workflows/unit_tests.sh
+@@ -20,6 +20,7 @@ ADDITIONAL_DEPS=(
+     perl
+     python3-libevdev
+     python3-pyparsing
++    rpm
+     zstd
+ )
+ 
+diff --git a/.semaphore/semaphore-runner.sh b/.semaphore/semaphore-runner.sh
+index d02b449e0e..6ccf271a82 100755
+--- a/.semaphore/semaphore-runner.sh
++++ b/.semaphore/semaphore-runner.sh
+@@ -42,7 +42,7 @@ apt-get -q --allow-releaseinfo-change update
+ apt-get -y dist-upgrade
+ apt-get install -y eatmydata
+ # The following four are needed as long as these deps are not covered by Debian's own packaging
+-apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev
++apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev rpm
+ apt-get purge --auto-remove -y unattended-upgrades
+ systemctl unmask systemd-networkd
+ systemctl enable systemd-networkd
+diff --git a/test/meson.build b/test/meson.build
+index 8de1043e17..04ae9ebc78 100644
+--- a/test/meson.build
++++ b/test/meson.build
+@@ -163,6 +163,22 @@ endif
+ 
+ ############################################################
+ 
++rpm = find_program('rpm', required : false)
++rpmspec = find_program('rpmspec', required : false)
++test_rpm_macros = find_program('test-rpm-macros.sh')
++
++if rpm.found() and rpmspec.found()
++        if want_tests != 'false'
++                test('test-rpm-macros',
++                     test_rpm_macros,
++                     args : [project_build_root])
++        endif
++else
++      message('Skipping test-rpm-macros since rpm and/or rpmspec are not available')
++endif
++
++############################################################
++
+ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
+         udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh')
+ 
+diff --git a/test/test-rpm-macros.sh b/test/test-rpm-macros.sh
+new file mode 100755
+index 0000000000..5843b72346
+--- /dev/null
++++ b/test/test-rpm-macros.sh
+@@ -0,0 +1,162 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++# This test makes some basic checks that RPM macros work correctly.
++# RPM is a simple C program available on different Linux distros, not only RPM-based ones,
++# and even BSD systems, so it must not be a problem to require it.
++# rpmspec utility is required (so this test will work with RPM 4 but won't work with RPM 5).
++set -eu
++
++BUILD_DIR="${1:?Missing argument: build directory}"
++RPM_MACROS_FILE="${BUILD_DIR:?}/src/rpm/macros.systemd"
++
++if ! command -v rpm >/dev/null || ! command -v rpmspec >/dev/null; then
++    echo >&2 "Missing necessary utilities (rpm, rpmspec), can't continue"
++    exit 1
++fi
++
++if [[ ! -f "${RPM_MACROS_FILE:?}" ]]; then
++    echo "RPM macros file not found in $RPM_MACROS_FILE!"
++    exit 1
++fi
++
++at_exit() {
++    if [[ -v WORK_DIR && -d "$WORK_DIR" ]]; then
++        rm -frv "$WORK_DIR"
++    fi
++}
++
++trap at_exit EXIT
++
++WORK_DIR="$(mktemp -d)"
++RPM_SPEC="$(mktemp "$WORK_DIR/systemd-test-rpm-macros-XXX.spec")"
++TEMP_LOG="$(mktemp "$WORK_DIR/out-XXX.log")"
++
++die() {
++    echo >&2 "${1:?}"
++    exit 1
++}
++
++mk_mini_spec() {
++    cat >"${RPM_SPEC:?}" <<EOF
++%{load:$RPM_MACROS_FILE}
++Summary: Test systemd RPM macros
++Name: systemd-test-rpm-macros
++License: LGPLv2+ and MIT and GPLv2+
++Version: 1
++Release: 1
++%description
++%{summary}
++END_OF_INITIAL_SPEC
++EOF
++}
++
++echo "=== Test basic loadability ==="
++mk_mini_spec
++# ensure its loadability (macros will be just loaded and not used for now)
++# also check that rpm supports %load
++rpmspec --parse "$RPM_SPEC"
++
++echo "=== Test %systemd_requires ==="
++mk_mini_spec
++# The idea of tests is the following:
++# - make a minimal spec file
++# - add macros into its %description section
++# - use rpmspec(8) to print spec file with expanded macros
++# - check that macros have been expanded as required.
++echo "%systemd_requires" >>"$RPM_SPEC"
++: >"$TEMP_LOG"
++rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
++for i in post preun postun; do
++    echo "== Requires($i) =="
++    grep "^Requires($i): systemd$" "$TEMP_LOG"
++done
++
++echo "=== Test %systemd_ordering ==="
++mk_mini_spec
++echo "%systemd_ordering" >>"$RPM_SPEC"
++: >"$TEMP_LOG"
++rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
++for i in post preun postun; do
++    echo "== OrderWithRequires($i) =="
++    grep "^OrderWithRequires($i): systemd$" "$TEMP_LOG"
++done
++
++echo "=== Test macros requiring an argument without specifying such argument ==="
++for i in \
++    systemd_post \
++    systemd_preun \
++    systemd_postun \
++    systemd_postun_with_restart \
++    systemd_user_preun \
++    systemd_user_postun \
++    systemd_user_postun_with_restart \
++    tmpfiles_create \
++    tmpfiles_create_package \
++    sysusers_create \
++    sysusers_create_package
++do
++    echo "== Macro: $i =="
++    mk_mini_spec
++    echo "%${i}" >>"$RPM_SPEC"
++    if rpmspec --parse "$RPM_SPEC"; then
++        die "Unexpected pass with macro $i (no arguments)"
++    fi
++done
++
++echo "=== Test macros requiring two arguments ==="
++for i in \
++    tmpfiles_create_package \
++    sysusers_create_package
++do
++    echo "== Macro: $i =="
++    # Test with an incorrect number of arguments (0, 1, 3)
++    for args in "" "arg1" "arg1 arg2 arg3"; do
++        mk_mini_spec
++        echo "%${i} $args" >>"$RPM_SPEC"
++        if rpmspec --parse "$RPM_SPEC"; then
++            die "Unexpected pass with macro $i (arguments: $args)"
++        fi
++    done
++
++    # Test with the correct number of arguments (2)
++    mk_mini_spec
++    echo "%${i} arg1 arg2" >>"$RPM_SPEC"
++    if ! rpmspec --parse "$RPM_SPEC"; then
++        die "Unexpected fail with macro $i (arguments: $args)"
++    fi
++done
++
++
++# Test that:
++# - *_create_package macros do work correctly
++# - shell syntax is correct (https://github.com/systemd/systemd/commit/93406fd37)
++# - RPM macros, loaded from macros.in, are actually expanded
++echo "=== Test %*_create_package macros ==="
++for i in sysusers tmpfiles; do
++    echo "== Macro: ${i}_create_package =="
++
++    PKG_DATA_FILE="$(mktemp "$WORK_DIR/pkg-data-XXX")"
++    EXP_OUT="$(mktemp "$WORK_DIR/exp-out-XXX.log")"
++    CONF_DIR="$(pkg-config --variable="${i}dir" systemd)"
++    EXTRA_ARGS=()
++
++    if [[ "$i" == tmpfiles ]]; then
++        EXTRA_ARGS+=("--create")
++    fi
++
++    echo "TEST_DATA" >"$PKG_DATA_FILE"
++    mk_mini_spec
++    echo "%${i}_create_package TEST_NAME ${PKG_DATA_FILE}" >>"$RPM_SPEC"
++
++    cat >"$EXP_OUT" <<EOF
++systemd-$i --replace=$CONF_DIR/TEST_NAME.conf ${EXTRA_ARGS[*]:+${EXTRA_ARGS[@]} }- <<SYSTEMD_INLINE_EOF || :
++TEST_DATA
++SYSTEMD_INLINE_EOF
++EOF
++
++    : >"$TEMP_LOG"
++    rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
++    diff "$EXP_OUT" <(grep -A1 -B1 '^TEST_DATA$' "$TEMP_LOG")
++
++    rm -f "$PKG_DATA_FILE"
++done
diff --git a/SOURCES/0035-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch b/SOURCES/0035-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
deleted file mode 100644
index 8290d92..0000000
--- a/SOURCES/0035-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 5c9bf430dfa9ad75fedf342a4a2be88fa31cd309 Mon Sep 17 00:00:00 2001
-From: Michal Sekletar <msekleta@redhat.com>
-Date: Thu, 17 Mar 2022 12:37:57 +0100
-Subject: [PATCH] Revert "kernel-install: prefer /boot over /boot/efi for
- $BOOT_ROOT"
-
-This reverts commit d0e98b7a1211412dccfcf4dcd2cc0772ac70b304.
-
-Related: #2065061
-
-[msekleta: this revert is done in order to make backporting easier,
-patch will be reapplied later.]
----
- src/kernel-install/kernel-install | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index d85852532b..b358b03b2f 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -108,7 +108,7 @@ fi
- [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
- 
- [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
--    for pref in "/efi" "/boot" "/boot/efi" ; do
-+    for pref in "/efi" "/boot/efi" "/boot"; do
-         if [ -d "$pref/$suff" ]; then
-             BOOT_ROOT="$pref"
-             break 2
diff --git a/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch b/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch
new file mode 100644
index 0000000..86068c7
--- /dev/null
+++ b/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch
@@ -0,0 +1,161 @@
+From 7cc55d22394b8583b637e7e4b8baa00eb8f0dc49 Mon Sep 17 00:00:00 2001
+From: Luca Boccassi <luca.boccassi@microsoft.com>
+Date: Wed, 12 Jan 2022 22:38:22 +0000
+Subject: [PATCH] test: do not assume x86-64 arch in TEST-58-REPART
+
+(cherry picked from commit 8e65d93e85f06e3f28b0b7a6e33b041ddf119917)
+
+Related: #2017035
+---
+ test/units/testsuite-58.sh | 76 ++++++++++++++++++++++++++++++++------
+ 1 file changed, 65 insertions(+), 11 deletions(-)
+
+diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
+index 78c25051a2..4b3c984c84 100755
+--- a/test/units/testsuite-58.sh
++++ b/test/units/testsuite-58.sh
+@@ -11,6 +11,60 @@ fi
+ export SYSTEMD_LOG_LEVEL=debug
+ export PAGER=cat
+ 
++machine="$(uname -m)"
++if [ "${machine}" = "x86_64" ]; then
++    root_guid=4f68bce3-e8cd-4db1-96e7-fbcaf984b709
++    root_uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0
++    usr_guid=8484680c-9521-48c6-9c11-b0720656f69e
++    usr_uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16
++    architecture="x86-64"
++elif [ "${machine}" = "i386" ] || [ "${machine}" = "i686" ] || [ "${machine}" = "x86" ]; then
++    root_guid=44479540-f297-41b2-9af7-d131d5f0458a
++    root_uuid=02b4253f-29a4-404e-8972-1669d3b03c87
++    usr_guid=75250d76-8cc6-458e-bd66-bd47cc81a812
++    usr_uuid=7b42ffb0-b0e1-4395-b20b-c78f4a571648
++    architecture="x86"
++elif [ "${machine}" = "aarch64" ] || [ "${machine}" = "aarch64_be" ] || [ "${machine}" = "armv8b" ] || [ "${machine}" = "armv8l" ]; then
++    root_guid=b921b045-1df0-41c3-af44-4c6f280d3fae
++    root_uuid=055d0227-53a6-4033-85c3-9a5973eff483
++    usr_guid=b0e01050-ee5f-4390-949a-9101b17104e9
++    usr_uuid=fce3c75e-d6a4-44c0-87f0-4c105183fb1f
++    architecture="arm64"
++elif [ "${machine}" = "arm" ]; then
++    root_guid=69dad710-2ce4-4e3c-b16c-21a1d49abed3
++    root_uuid=567da89e-8de2-4499-8d10-18f212dff034
++    usr_guid=7d0359a3-02b3-4f0a-865c-654403e70625
++    usr_uuid=71e93dc2-5073-42cb-8a84-a354e64d8966
++    architecture="arm"
++elif [ "${machine}" = "loongarch64" ]; then
++    root_guid=77055800-792c-4f94-b39a-98c91b762bb6
++    root_uuid=d8efc2d2-0133-41e4-bdcb-3b9f4cfddde8
++    usr_guid=e611c702-575c-4cbe-9a46-434fa0bf7e3f
++    usr_uuid=031ffa75-00bb-49b6-a70d-911d2d82a5b7
++    architecture="loongarch64"
++elif [ "${machine}" = "ia64" ]; then
++    root_guid=993d8d3d-f80e-4225-855a-9daf8ed7ea97
++    root_uuid=dcf33449-0896-4ea9-bc24-7d58aeef522d
++    usr_guid=4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea
++    usr_uuid=bc2bcce7-80d6-449a-85cc-637424ce5241
++    architecture="ia64"
++elif [ "${machine}" = "s390x" ]; then
++    root_guid=5eead9a9-fe09-4a1e-a1d7-520d00531306
++    root_uuid=7ebe0c85-e27e-48ec-b164-f4807606232e
++    usr_guid=8a4f5770-50aa-4ed3-874a-99b710db6fea
++    usr_uuid=51171d30-35cf-4a49-b8b5-9478b9b796a5
++    architecture="s390x"
++elif [ "${machine}" = "ppc64le" ]; then
++    root_guid=c31c45e6-3f39-412e-80fb-4809c4980599
++    root_uuid=061e67a1-092f-482f-8150-b525d50d6654
++    usr_guid=15bb03af-77e7-4d4a-b12b-c0d084f7491c
++    usr_uuid=c0d0823b-8040-4c7c-a629-026248e297fb
++    architecture="ppc64-le"
++else
++    echo "Unexpected uname -m: ${machine} in testsuite-58.sh, please fix me"
++    exit 1
++fi
++
+ rm -f /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump
+ mkdir -p /tmp/testsuite-58-defs/
+ 
+@@ -25,7 +79,7 @@ EOF
+ 
+ cat >/tmp/testsuite-58-defs/usr.conf <<EOF
+ [Partition]
+-Type=usr
++Type=usr-${architecture}
+ SizeMinBytes=10M
+ Format=ext4
+ ReadOnly=yes
+@@ -33,7 +87,7 @@ EOF
+ 
+ cat >/tmp/testsuite-58-defs/root.conf <<EOF
+ [Partition]
+-Type=root
++Type=root-${architecture}
+ SizeMinBytes=10M
+ Format=ext4
+ MakeDirectories=/usr /efi
+@@ -47,9 +101,9 @@ systemd-repart --definitions=/tmp/testsuite-58-defs/ \
+ 
+ sfdisk --dump /var/tmp/testsuite-58.img | tee /tmp/testsuite-58.dump
+ 
+-grep -qxF '/var/tmp/testsuite-58.img1 : start=        2048, size=       20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name="esp"' /tmp/testsuite-58.dump
+-grep -qxF '/var/tmp/testsuite-58.img2 : start=       22528, size=       20480, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0, name="root-x86-64", attrs="GUID:59"' /tmp/testsuite-58.dump
+-grep -qxF '/var/tmp/testsuite-58.img3 : start=       43008, size=       20480, type=8484680C-9521-48C6-9C11-B0720656F69E, uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16, name="usr-x86-64", attrs="GUID:60"' /tmp/testsuite-58.dump
++grep -qixF "/var/tmp/testsuite-58.img1 : start=        2048, size=       20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name=\"esp\"" /tmp/testsuite-58.dump
++grep -qixF "/var/tmp/testsuite-58.img2 : start=       22528, size=       20480, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.dump
++grep -qixF "/var/tmp/testsuite-58.img3 : start=       43008, size=       20480, type=${usr_guid}, uuid=${usr_uuid}, name=\"usr-${architecture}\", attrs=\"GUID:60\"" /tmp/testsuite-58.dump
+ 
+ # Second part, duplicate it with CopyBlocks=auto
+ 
+@@ -61,14 +115,14 @@ EOF
+ 
+ cat >/tmp/testsuite-58-defs/usr.conf <<EOF
+ [Partition]
+-Type=usr
++Type=usr-${architecture}
+ ReadOnly=yes
+ CopyBlocks=auto
+ EOF
+ 
+ cat >/tmp/testsuite-58-defs/root.conf <<EOF
+ [Partition]
+-Type=root
++Type=root-${architecture}
+ CopyBlocks=auto
+ EOF
+ 
+@@ -91,7 +145,7 @@ mkdir -p /tmp/testsuite-58.3-defs/
+ 
+ cat >/tmp/testsuite-58.3-defs/root.conf <<EOF
+ [Partition]
+-Type=root
++Type=root-${architecture}
+ EOF
+ 
+ truncate -s 10g /var/tmp/testsuite-58.3.img
+@@ -111,7 +165,7 @@ sfdisk --dump /var/tmp/testsuite-58.3.img | tee /tmp/testsuite-58.3.dump
+ 
+ grep -qF '/var/tmp/testsuite-58.3.img1 : start=        2048, size=       69044,' /tmp/testsuite-58.3.dump
+ grep -qF '/var/tmp/testsuite-58.3.img2 : start=       71092, size=     3591848,' /tmp/testsuite-58.3.dump
+-grep -qxF '/var/tmp/testsuite-58.3.img3 : start=     3662944, size=    17308536, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0, name="root-x86-64", attrs="GUID:59"' /tmp/testsuite-58.3.dump
++grep -qixF "/var/tmp/testsuite-58.3.img3 : start=     3662944, size=    17308536, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.3.dump
+ 
+ rm /var/tmp/testsuite-58.3.img /tmp/testsuite-58.3.dump
+ rm -r /tmp/testsuite-58.3-defs/
+@@ -120,7 +174,7 @@ rm -r /tmp/testsuite-58.3-defs/
+ mkdir -p /tmp/testsuite-58-issue-21817-defs/
+ truncate -s 100m /tmp/testsuite-58-issue-21817.img
+ LOOP=$(losetup -P --show -f /tmp/testsuite-58-issue-21817.img)
+-printf 'size=50M,type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709\n,\n' | sfdisk -X gpt /tmp/testsuite-58-issue-21817.img
++printf 'size=50M,type=%s\n,\n' "${root_guid}" | sfdisk -X gpt /tmp/testsuite-58-issue-21817.img
+ cat >/tmp/testsuite-58-issue-21817-defs/test.conf <<EOF
+ [Partition]
+ Type=root
+@@ -129,7 +183,7 @@ systemd-repart --pretty=yes --definitions /tmp/testsuite-58-issue-21817-defs/ "$
+ sfdisk --dump "$LOOP" | tee /tmp/testsuite-58-issue-21817.dump
+ losetup -d "$LOOP"
+ 
+-grep -qF 'p1 : start=        2048, size=      102400, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709,' /tmp/testsuite-58-issue-21817.dump
++grep -qiF "p1 : start=        2048, size=      102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump
+ grep -qF 'p2 : start=      104448, size=      100319,' /tmp/testsuite-58-issue-21817.dump
+ 
+ rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
diff --git a/SOURCES/0036-kernel-install-50-depmod-port-to-bin-sh.patch b/SOURCES/0036-kernel-install-50-depmod-port-to-bin-sh.patch
deleted file mode 100644
index abee01e..0000000
--- a/SOURCES/0036-kernel-install-50-depmod-port-to-bin-sh.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 323059e195652d602142dd9930983b438cd1c4d1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Thu, 16 Dec 2021 14:35:17 +0100
-Subject: [PATCH] kernel-install: 50-depmod: port to /bin/sh
-
-(cherry picked from commit b3ceb3d9fff69b33b8665a0137f5177f72c45cc0)
-
-Related: #2065061
----
- src/kernel-install/50-depmod.install | 28 +++++++++++++++-------------
- 1 file changed, 15 insertions(+), 13 deletions(-)
-
-diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
-index 2fd959865f..aa1f6b8e0e 100644
---- a/src/kernel-install/50-depmod.install
-+++ b/src/kernel-install/50-depmod.install
-@@ -1,4 +1,4 @@
--#!/usr/bin/env bash
-+#!/bin/sh
- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
- # ex: ts=8 sw=4 sts=4 et filetype=sh
- # SPDX-License-Identifier: LGPL-2.1-or-later
-@@ -20,23 +20,25 @@
- 
- COMMAND="$1"
- KERNEL_VERSION="$2"
--ENTRY_DIR_ABS="$3"
--KERNEL_IMAGE="$4"
--INITRD_OPTIONS_START="5"
--
--[[ $KERNEL_VERSION ]] || exit 1
- 
- case "$COMMAND" in
-     add)
--        [[ -d "/lib/modules/${KERNEL_VERSION}/kernel" ]] || exit 0
--        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--            echo "Running depmod -a ${KERNEL_VERSION}"
--        exec depmod -a "${KERNEL_VERSION}"
-+        [ -d "/lib/modules/$KERNEL_VERSION/kernel" ] || exit 0
-+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+depmod -a $KERNEL_VERSION"
-+        exec depmod -a "$KERNEL_VERSION"
-         ;;
-     remove)
--        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--            echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
--        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
-+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Removing /lib/modules/$KERNEL_VERSION/modules.dep and associated files"
-+        exec rm -f \
-+            "/lib/modules/$KERNEL_VERSION/modules.alias" \
-+            "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \
-+            "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \
-+            "/lib/modules/$KERNEL_VERSION/modules.dep" \
-+            "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \
-+            "/lib/modules/$KERNEL_VERSION/modules.devname" \
-+            "/lib/modules/$KERNEL_VERSION/modules.softdep" \
-+            "/lib/modules/$KERNEL_VERSION/modules.symbols" \
-+            "/lib/modules/$KERNEL_VERSION/modules.symbols.bin"
-         ;;
-     *)
-         exit 0
diff --git a/SOURCES/0036-tests-add-repart-tests-for-block-devices-with-1024-2.patch b/SOURCES/0036-tests-add-repart-tests-for-block-devices-with-1024-2.patch
new file mode 100644
index 0000000..dc76052
--- /dev/null
+++ b/SOURCES/0036-tests-add-repart-tests-for-block-devices-with-1024-2.patch
@@ -0,0 +1,68 @@
+From 9a98a3b83e9e974d8d1cdc31e2286a862cc548be Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Mon, 7 Feb 2022 14:35:40 +0100
+Subject: [PATCH] tests: add repart tests for block devices with 1024, 2048,
+ 4096 byte sector sizes
+
+let's make sure repart works with 4K drives and exotic sector sizes.
+
+(cherry picked from commit 2cd341afb96486bd4afcdba23f02a27631c5b8db)
+
+Related: #2017035
+---
+ test/units/testsuite-58.sh | 42 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 42 insertions(+)
+
+diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
+index 4b3c984c84..7aed965fb4 100755
+--- a/test/units/testsuite-58.sh
++++ b/test/units/testsuite-58.sh
+@@ -189,6 +189,48 @@ grep -qF 'p2 : start=      104448, size=      100319,' /tmp/testsuite-58-issue-2
+ rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
+ rm -r /tmp/testsuite-58-issue-21817-defs/
+ 
++testsector()
++{
++    echo "Running sector test with sector size $1..."
++
++    mkdir -p /tmp/testsuite-58-sector
++    cat > /tmp/testsuite-58-sector/a.conf <<EOF
++[Partition]
++Type=root
++SizeMaxBytes=15M
++SizeMinBytes=15M
++EOF
++    cat > /tmp/testsuite-58-sector/b.conf <<EOF
++[Partition]
++Type=linux-generic
++Weight=250
++EOF
++
++    cat > /tmp/testsuite-58-sector/c.conf <<EOF
++[Partition]
++Type=linux-generic
++Weight=750
++EOF
++
++    truncate -s 100m "/tmp/testsuite-58-sector-$1.img"
++    LOOP=$(losetup -b "$1" -P --show -f "/tmp/testsuite-58-sector-$1.img" )
++    systemd-repart --pretty=yes --definitions=/tmp/testsuite-58-sector/ --seed=750b6cd5c4ae4012a15e7be3c29e6a47 --empty=require --dry-run=no "$LOOP"
++    rm -rf /tmp/testsuite-58-sector
++    sfdisk --verify "$LOOP"
++    sfdisk --dump "$LOOP"
++    losetup -d "$LOOP"
++
++    rm "/tmp/testsuite-58-sector-$1.img"
++}
++
++# Valid block sizes on the Linux block layer are >= 512 and <= PAGE_SIZE, and
++# must be powers of 2. Which leaves exactly four different ones to test on
++# typical hardware
++testsector 512
++testsector 1024
++testsector 2048
++testsector 4096
++
+ echo OK >/testok
+ 
+ exit 0
diff --git a/SOURCES/0037-kernel-install-90-loaderentry-port-to-bin-sh.patch b/SOURCES/0037-kernel-install-90-loaderentry-port-to-bin-sh.patch
deleted file mode 100644
index 25a4f98..0000000
--- a/SOURCES/0037-kernel-install-90-loaderentry-port-to-bin-sh.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From 96310f2157e896a82de6df260926ac1ec66f65ea Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Thu, 16 Dec 2021 14:35:33 +0100
-Subject: [PATCH] kernel-install: 90-loaderentry: port to /bin/sh
-
-Also, forward the rm -f exit code on removal instead of swallowing it
-
-(cherry picked from commit 662f45e3ea9f6e933234b81bec532d584bda6ead)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 110 +++++++++-------------
- 1 file changed, 45 insertions(+), 65 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 044eced3f0..35324e69a9 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -1,4 +1,4 @@
--#!/usr/bin/env bash
-+#!/bin/sh
- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
- # ex: ts=8 sw=4 sts=4 et filetype=sh
- # SPDX-License-Identifier: LGPL-2.1-or-later
-@@ -22,68 +22,53 @@ COMMAND="$1"
- KERNEL_VERSION="$2"
- ENTRY_DIR_ABS="$3"
- KERNEL_IMAGE="$4"
--INITRD_OPTIONS_START="5"
-+INITRD_OPTIONS_SHIFT=4
- 
--if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
--    exit 0
--fi
--
--if [ "$KERNEL_INSTALL_LAYOUT" != "bls" ]; then
--    exit 0
--fi
-+[ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0
- 
- MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
- BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
- 
- BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
--if [[ "$BOOT_MNT" == '/' ]]; then
-+if [ "$BOOT_MNT" = '/' ]; then
-     ENTRY_DIR="$ENTRY_DIR_ABS"
- else
-     ENTRY_DIR="${ENTRY_DIR_ABS#$BOOT_MNT}"
- fi
- 
--if [[ $COMMAND == remove ]]; then
--    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
--    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
--    exit 0
--fi
--
--if ! [[ $COMMAND == add ]]; then
--    exit 1
--fi
--
--if ! [[ $KERNEL_IMAGE ]]; then
--    exit 1
--fi
-+case "$COMMAND" in
-+    remove)
-+        exec rm -f \
-+            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
-+            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
-+        ;;
-+    add)
-+        ;;
-+    *)
-+        exit 1
-+        ;;
-+esac
- 
--if [[ -f /etc/os-release ]]; then
-+if [ -r /etc/os-release ]; then
-     . /etc/os-release
--elif [[ -f /usr/lib/os-release ]]; then
-+elif [ -r /usr/lib/os-release ]; then
-     . /usr/lib/os-release
- fi
- 
--if ! [[ $PRETTY_NAME ]]; then
--    PRETTY_NAME="Linux $KERNEL_VERSION"
--fi
-+[ -n "$PRETTY_NAME" ] || PRETTY_NAME="Linux $KERNEL_VERSION"
- 
--if [[ -f /etc/kernel/cmdline ]]; then
--    read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
--elif [[ -f /usr/lib/kernel/cmdline ]]; then
--    read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
-+if [ -r /etc/kernel/cmdline ]; then
-+    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </etc/kernel/cmdline)"
-+elif [ -r /usr/lib/kernel/cmdline ]; then
-+    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </usr/lib/kernel/cmdline)"
- else
--    declare -a BOOT_OPTIONS
--
--    read -r -d '' -a line < /proc/cmdline
--    for i in "${line[@]}"; do
--        [[ "${i#initrd=*}" != "$i" ]] && continue
--        [[ "${i#BOOT_IMAGE=*}" != "$i" ]] && continue
--        BOOT_OPTIONS+=("$i")
--    done
-+    BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
- fi
-+BOOT_OPTIONS="${BOOT_OPTIONS% }"
- 
--if [[ -f /etc/kernel/tries ]]; then
-+if [ -r /etc/kernel/tries ]; then
-     read -r TRIES </etc/kernel/tries
--    if ! [[ "$TRIES" =~ ^[0-9]+$ ]] ; then
-+    if ! echo "$TRIES" | grep -q '^[0-9][0-9]*$'; then
-         echo "/etc/kernel/tries does not contain an integer." >&2
-         exit 1
-     fi
-@@ -106,43 +91,38 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
-     exit 1
- }
- 
--INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" )
--
--for initrd in "${INITRD_OPTIONS[@]}"; do
--    if [[ -f "${initrd}" ]]; then
--        initrd_basename="$(basename ${initrd})"
--        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--            echo "Installing $ENTRY_DIR_ABS/${initrd_basename}"
--        install -g root -o root -m 0644 "${initrd}" "$ENTRY_DIR_ABS/${initrd_basename}" || {
--            echo "Could not copy '${initrd}' to '$ENTRY_DIR_ABS/${initrd_basename}'." >&2
--            exit 1
--        }
--    fi
--done
-+shift "$INITRD_OPTIONS_SHIFT"
-+for initrd; do
-+    [ -f "$initrd" ] || continue
- 
--# If no initrd option is supplied, fall back to "initrd" which is
--# the name used by dracut when generating it in its kernel-install hook
--[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd )
-+    initrd_basename="${initrd##*/}"
-+    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
-+    install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || {
-+        echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
-+        exit 1
-+    }
-+done
- 
- mkdir -p "${LOADER_ENTRY%/*}" || {
-     echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
-     exit 1
- }
- 
--[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--    echo "Creating $LOADER_ENTRY"
-+# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
-+[ $# -eq 0 ] && set -- "initrd"
-+
-+[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY"
- {
-     echo "title      $PRETTY_NAME"
-     echo "version    $KERNEL_VERSION"
-     echo "machine-id $MACHINE_ID"
--    echo "options    ${BOOT_OPTIONS[*]}"
-+    echo "options    $BOOT_OPTIONS"
-     echo "linux      $ENTRY_DIR/linux"
--    for initrd in "${INITRD_OPTIONS[@]}"; do
--        [[ -f $ENTRY_DIR_ABS/$(basename ${initrd}) ]] && \
--            echo "initrd     $ENTRY_DIR/$(basename ${initrd})"
-+    for initrd; do
-+        [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd     $ENTRY_DIR/${initrd##*/}"
-     done
-     :
--} > "$LOADER_ENTRY" || {
-+} >"$LOADER_ENTRY" || {
-     echo "Could not create loader entry '$LOADER_ENTRY'." >&2
-     exit 1
- }
diff --git a/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch b/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch
new file mode 100644
index 0000000..a810f33
--- /dev/null
+++ b/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch
@@ -0,0 +1,31 @@
+From c16ff9acad53e741ee121a21bd2ba5dfce1f459e Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 25 Feb 2022 15:09:07 +0100
+Subject: [PATCH] test: accept both unpadded and padded partition sizes
+
+Since util-linux/util-linux@921c7da55ec78350e4067b3fd6b7de6f299106ee
+libfdisk aligns the last partition (on GPT) for optimal I/O. Let's
+account for that.
+
+Fixes: #22606
+(cherry picked from commit d490188b8f6da658d8086dd53b7db95735e5cca1)
+
+Related: #2017035
+---
+ test/units/testsuite-58.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
+index 7aed965fb4..f1b690a71f 100755
+--- a/test/units/testsuite-58.sh
++++ b/test/units/testsuite-58.sh
+@@ -184,7 +184,8 @@ sfdisk --dump "$LOOP" | tee /tmp/testsuite-58-issue-21817.dump
+ losetup -d "$LOOP"
+ 
+ grep -qiF "p1 : start=        2048, size=      102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump
+-grep -qF 'p2 : start=      104448, size=      100319,' /tmp/testsuite-58-issue-21817.dump
++# Accept both unpadded (pre-v2.38 util-linux) and padded (v2.38+ util-linux) sizes
++grep -qE "p2 : start=      104448, size=      (100319| 98304)," /tmp/testsuite-58-issue-21817.dump
+ 
+ rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
+ rm -r /tmp/testsuite-58-issue-21817-defs/
diff --git a/SOURCES/0038-kernel-install-fix-shellcheck.patch b/SOURCES/0038-kernel-install-fix-shellcheck.patch
deleted file mode 100644
index 792d464..0000000
--- a/SOURCES/0038-kernel-install-fix-shellcheck.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From d778dd4a03f7bd45108fdebcc75dff5e886c30b2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Thu, 16 Dec 2021 14:37:53 +0100
-Subject: [PATCH] kernel-install: fix shellcheck
-
-(cherry picked from commit 0bb1cb1fce5ebf307501dec1679e37f0c0157be9)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index b358b03b2f..f6da0cf7a8 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -26,8 +26,8 @@ usage()
-     echo "  $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
-     echo "  $0 [OPTIONS...] remove KERNEL-VERSION"
-     echo "Options:"
--    echo "  -h,--help     Print this help"
--    echo "  -v,--verbose  Increase verbosity"
-+    echo "  -h, --help     Print this help"
-+    echo "  -v, --verbose  Increase verbosity"
- }
- 
- dropindirs_sort()
-@@ -58,15 +58,15 @@ dropindirs_sort()
- 
- export LC_COLLATE=C
- 
--for i in "$@"; do
--    if [ "$i" == "--help" -o "$i" == "-h" ]; then
-+for i; do
-+    if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then
-         usage
-         exit 0
-     fi
- done
- 
- KERNEL_INSTALL_VERBOSE=0
--if [ "$1" == "--verbose" -o "$1" == "-v" ]; then
-+if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then
-     shift
-     KERNEL_INSTALL_VERBOSE=1
- fi
-@@ -185,13 +185,13 @@ case $COMMAND in
-         for f in "${PLUGINS[@]}"; do
-             if [[ -x $f ]]; then
-                 [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[@]}"
-+                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}"
-                 "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
-                 x=$?
--                if [[ $x == $SKIP_REMAINING ]]; then
-+                if [ $x -eq "$SKIP_REMAINING" ]; then
-                     break
-                 fi
--                ((ret+=$x))
-+                ((ret+=x))
-             fi
-         done
-         ;;
-@@ -203,10 +203,10 @@ case $COMMAND in
-                     echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
-                 "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
-                 x=$?
--                if [[ $x == $SKIP_REMAINING ]]; then
-+                if [ $x -eq "$SKIP_REMAINING" ]; then
-                     break
-                 fi
--                ((ret+=$x))
-+                ((ret+=x))
-             fi
-         done
- 
-@@ -222,4 +222,4 @@ case $COMMAND in
-         ;;
- esac
- 
--exit $ret
-+exit "$ret"
diff --git a/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch b/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
new file mode 100644
index 0000000..fcdd5e9
--- /dev/null
+++ b/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
@@ -0,0 +1,41 @@
+From fcaf368341c85285017f77333543656e1382975e Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 9 Feb 2022 22:35:03 +0100
+Subject: [PATCH] test: lvm 2.03.15 dropped the static autoactivation
+
+so install the respective generator only if we're running with older
+lvm versions.
+
+See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
+(cherry picked from commit d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4)
+
+Related: #2017035
+---
+ test/test-functions | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 4827b6bedf..dcc893733c 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -973,16 +973,19 @@ install_lvm() {
+     image_install lvm
+     image_install "${ROOTLIBDIR:?}"/system/lvm2-lvmpolld.{service,socket}
+     image_install "${ROOTLIBDIR:?}"/system/{blk-availability,lvm2-monitor}.service
+-    image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
+     image_install -o "/lib/tmpfiles.d/lvm2.conf"
+     if get_bool "$LOOKS_LIKE_DEBIAN"; then
+         inst_rules 56-lvm.rules 69-lvm-metad.rules
+     else
+         # Support the new udev autoactivation introduced in lvm 2.03.14
+         # https://sourceware.org/git/?p=lvm2.git;a=commit;h=67722b312390cdab29c076c912e14bd739c5c0f6
++        # Static autoactivation (via lvm2-activation-generator) was dropped
++        # in lvm 2.03.15
++        # https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
+         if [[ -f /lib/udev/rules.d/69-dm-lvm.rules ]]; then
+             inst_rules 11-dm-lvm.rules 69-dm-lvm.rules
+         else
++            image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
+             image_install "${ROOTLIBDIR:?}"/system/lvm2-pvscan@.service
+             inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules
+         fi
diff --git a/SOURCES/0039-kernel-install-port-to-bin-sh.patch b/SOURCES/0039-kernel-install-port-to-bin-sh.patch
deleted file mode 100644
index f2e4a9c..0000000
--- a/SOURCES/0039-kernel-install-port-to-bin-sh.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From b60234140cbceaa579b889d03b863953ca53b3e1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Thu, 16 Dec 2021 15:06:06 +0100
-Subject: [PATCH] kernel-install: port to /bin/sh
-
-(cherry picked from commit 76b1274a5cb54acaa4a0f0c2e570d751f9067c06)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 109 ++++++++++++------------------
- 1 file changed, 43 insertions(+), 66 deletions(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index f6da0cf7a8..2e8f382d5f 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -1,4 +1,4 @@
--#!/usr/bin/env bash
-+#!/bin/sh
- # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
- # ex: ts=8 sw=4 sts=4 et filetype=sh
- # SPDX-License-Identifier: LGPL-2.1-or-later
-@@ -18,7 +18,7 @@
- # You should have received a copy of the GNU Lesser General Public License
- # along with systemd; If not, see <http://www.gnu.org/licenses/>.
- 
--SKIP_REMAINING=77
-+skip_remaining=77
- 
- usage()
- {
-@@ -32,24 +32,17 @@ usage()
- 
- dropindirs_sort()
- {
--    local suffix=$1; shift
--    local -a files
--    local f d i
--
--    readarray -t files <<<"$(
--        for d in "$@"; do
--            for i in "$d/"*"$suffix"; do
--                if [[ -e "$i" ]]; then
--                    echo "${i##*/}"
--                fi
--            done
--        done | sort -Vu
--    )"
--
--    for f in "${files[@]}"; do
--        for d in "$@"; do
--            if [[ -e "$d/$f" ]]; then
--                echo "$d/$f"
-+    suffix="$1"
-+    shift
-+
-+    for d; do
-+        for i in "$d/"*"$suffix"; do
-+            [ -e "$i" ] && echo "${i##*/}"
-+        done
-+    done | sort -Vu | while read -r f; do
-+        for d; do
-+            if [ -e "$d/$f" ]; then
-+                [ -x "$d/$f" ] && echo "$d/$f"
-                 continue 2
-             fi
-         done
-@@ -65,27 +58,25 @@ for i; do
-     fi
- done
- 
--KERNEL_INSTALL_VERBOSE=0
-+export KERNEL_INSTALL_VERBOSE=0
- if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then
-     shift
-     KERNEL_INSTALL_VERBOSE=1
- fi
--export KERNEL_INSTALL_VERBOSE
- 
--if [[ "${0##*/}" == 'installkernel' ]]; then
--    COMMAND='add'
--    # make install doesn't pass any parameter wrt initrd handling
--    INITRD_OPTIONS=()
-+if [ "${0##*/}" = "installkernel" ]; then
-+    COMMAND=add
-+    # make install doesn't pass any initrds
- else
-     COMMAND="$1"
--    shift
--    INITRD_OPTIONS=( "${@:3}" )
-+    [ $# -ge 1 ] && shift
- fi
- 
- KERNEL_VERSION="$1"
- KERNEL_IMAGE="$2"
-+[ $# -ge 2 ] && shift 2
- 
--if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
-+if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then
-     echo "Not enough arguments" >&2
-     exit 1
- fi
-@@ -99,12 +90,11 @@ fi
- # Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine
- # ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate
- # a new machine ID in /etc/machine-info. If that fails, use "Default".
--
--[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
--[ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && read -r MACHINE_ID </etc/machine-id
--[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ] && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
-+[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
-+[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]                && read -r MACHINE_ID </etc/machine-id
-+[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ]   && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
- [ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info
--[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
-+[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
- [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
- 
- [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
-@@ -125,11 +115,6 @@ done
- [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot"
- 
- 
--ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
--
--export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
--export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
--
- if [ -z "$layout" ]; then
-     # Administrative decision: if not present, some scripts generate into /boot.
-     if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then
-@@ -152,21 +137,23 @@ MAKE_ENTRY_DIR_ABS=$?
- 
- ret=0
- 
--readarray -t PLUGINS <<<"$(
-+PLUGINS="$(
-     dropindirs_sort ".install" \
-         "/etc/kernel/install.d" \
-         "/usr/lib/kernel/install.d"
- )"
-+IFS="
-+"
- 
--case $COMMAND in
-+case "$COMMAND" in
-     add)
--        if [[ ! "$KERNEL_IMAGE" ]]; then
-+        if [ -z "$KERNEL_IMAGE" ]; then
-             echo "Command 'add' requires an argument" >&2
-             exit 1
-         fi
- 
--        if [[ ! -f "$KERNEL_IMAGE" ]]; then
--            echo "Kernel image argument ${KERNEL_IMAGE} not a file" >&2
-+        if ! [ -f "$KERNEL_IMAGE" ]; then
-+            echo "Kernel image argument $KERNEL_IMAGE not a file" >&2
-             exit 1
-         fi
- 
-@@ -182,32 +169,22 @@ case $COMMAND in
-             fi
-         fi
- 
--        for f in "${PLUGINS[@]}"; do
--            if [[ -x $f ]]; then
--                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}"
--                "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
--                x=$?
--                if [ $x -eq "$SKIP_REMAINING" ]; then
--                    break
--                fi
--                ((ret+=x))
--            fi
-+        for f in $PLUGINS; do
-+            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*"
-+            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@"
-+            err=$?
-+            [ $err -eq $skip_remaining ] && break
-+            ret=$(( ret + err ))
-         done
-         ;;
- 
-     remove)
--        for f in "${PLUGINS[@]}"; do
--            if [[ -x $f ]]; then
--                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--                    echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
--                "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
--                x=$?
--                if [ $x -eq "$SKIP_REMAINING" ]; then
--                    break
--                fi
--                ((ret+=x))
--            fi
-+        for f in $PLUGINS; do
-+            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
-+            "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
-+            err=$?
-+            [ $err -eq $skip_remaining ] && break
-+            ret=$(( ret + err ))
-         done
- 
-         if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
diff --git a/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch b/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch
new file mode 100644
index 0000000..3926a40
--- /dev/null
+++ b/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch
@@ -0,0 +1,39 @@
+From 494045e03c7e1b81ac4dcea7d4bf776e2bc50c77 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 10 Feb 2022 12:29:53 +0100
+Subject: [PATCH] test: accept GC'ed units in newer LVM
+
+Since lvm 2.03.15 the transient units are started without `-r`, thus
+disappearing once they finish and breaking the test (which expects them
+to remain loaded after finishing). Let's accept `LoadState=not-found` as
+a valid result as well to fix this.
+
+Follow-up to: d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4
+See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855
+
+(cherry picked from commit b034f02c628057c30a2136289a1b388a6fb9a737)
+
+Related: #2017035
+---
+ test/units/testsuite-64.sh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh
+index f75382d90a..dc8b263b10 100755
+--- a/test/units/testsuite-64.sh
++++ b/test/units/testsuite-64.sh
+@@ -96,6 +96,14 @@ helper_wait_for_lvm_activate() {
+             if [[ "$(systemctl show -P SubState "$lvm_activate_svc")" == exited ]]; then
+                 return 0
+             fi
++        else
++            # Since lvm 2.03.15 the lvm-activate transient unit no longer remains
++            # after finishing, so we have to treat non-existent units as a success
++            # as well
++            # See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855
++            if [[ "$(systemctl show -P LoadState "$lvm_activate_svc")" == not-found ]]; then
++                return 0
++            fi
+         fi
+ 
+         sleep .5
diff --git a/SOURCES/0040-kernel-install-90-loaderentry-error-out-on-nonexiste.patch b/SOURCES/0040-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
deleted file mode 100644
index fcc8805..0000000
--- a/SOURCES/0040-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 6b47726b54a3bf71e0f7ba35bbfe915c7a64a7d1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Fri, 17 Dec 2021 19:51:12 +0100
-Subject: [PATCH] kernel-install: 90-loaderentry: error out on nonexistent
- initrds instead of swallowing them quietly
-
-(cherry picked from commit 742561efbe938c45936f2e4f5d81b3ff6b352882)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 12 +++++++-----
- 1 file changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 35324e69a9..e588e72bf9 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -93,7 +93,10 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
- 
- shift "$INITRD_OPTIONS_SHIFT"
- for initrd; do
--    [ -f "$initrd" ] || continue
-+    [ -f "$initrd" ] || {
-+        echo "Initrd '$initrd' not a file." >&2
-+        exit 1
-+    }
- 
-     initrd_basename="${initrd##*/}"
-     [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
-@@ -108,9 +111,6 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
-     exit 1
- }
- 
--# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
--[ $# -eq 0 ] && set -- "initrd"
--
- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY"
- {
-     echo "title      $PRETTY_NAME"
-@@ -119,8 +119,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
-     echo "options    $BOOT_OPTIONS"
-     echo "linux      $ENTRY_DIR/linux"
-     for initrd; do
--        [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd     $ENTRY_DIR/${initrd##*/}"
-+        echo "initrd     $ENTRY_DIR/${initrd##*/}"
-     done
-+    # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
-+    [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
-     :
- } >"$LOADER_ENTRY" || {
-     echo "Could not create loader entry '$LOADER_ENTRY'." >&2
diff --git a/SOURCES/0040-shared-Add-more-dlopen-tests.patch b/SOURCES/0040-shared-Add-more-dlopen-tests.patch
new file mode 100644
index 0000000..6113824
--- /dev/null
+++ b/SOURCES/0040-shared-Add-more-dlopen-tests.patch
@@ -0,0 +1,127 @@
+From 3ed5b365c5134cb18da8aed397c7c4551af25715 Mon Sep 17 00:00:00 2001
+From: Daan De Meyer <daan.j.demeyer@gmail.com>
+Date: Tue, 1 Mar 2022 17:04:13 +0000
+Subject: [PATCH] shared: Add more dlopen() tests
+
+Add dlopen_dw(), dlopen_elf() and dlopen_pcre2() to the dlopen test.
+To enable adding dlopen_pcre2(), we move pcre2-dlopen.h/c from
+src/journal to src/shared.
+
+(cherry picked from commit ee48779e05831a0ec5e1ba5e7ed5fe92aaca1d9e)
+
+Related: #2017035
+---
+ src/journal/meson.build                |  2 --
+ src/shared/elf-util.c                  |  4 ++--
+ src/shared/elf-util.h                  |  3 +++
+ src/shared/meson.build                 |  2 ++
+ src/{journal => shared}/pcre2-dlopen.c |  0
+ src/{journal => shared}/pcre2-dlopen.h |  0
+ src/test/test-dlopen-so.c              | 11 +++++++++++
+ 7 files changed, 18 insertions(+), 4 deletions(-)
+ rename src/{journal => shared}/pcre2-dlopen.c (100%)
+ rename src/{journal => shared}/pcre2-dlopen.h (100%)
+
+diff --git a/src/journal/meson.build b/src/journal/meson.build
+index eb66bfd584..270592f2ac 100644
+--- a/src/journal/meson.build
++++ b/src/journal/meson.build
+@@ -49,8 +49,6 @@ systemd_cat_sources = files('cat.c')
+ 
+ journalctl_sources = files('''
+         journalctl.c
+-        pcre2-dlopen.c
+-        pcre2-dlopen.h
+ '''.split())
+ 
+ if install_sysconfdir_samples
+diff --git a/src/shared/elf-util.c b/src/shared/elf-util.c
+index 4d93e7eaba..6d9fcfbbf2 100644
+--- a/src/shared/elf-util.c
++++ b/src/shared/elf-util.c
+@@ -80,7 +80,7 @@ unsigned int (*sym_elf_version)(unsigned int);
+ GElf_Phdr *(*sym_gelf_getphdr)(Elf *, int, GElf_Phdr *);
+ size_t (*sym_gelf_getnote)(Elf_Data *, size_t, GElf_Nhdr *, size_t *, size_t *);
+ 
+-static int dlopen_dw(void) {
++int dlopen_dw(void) {
+         int r;
+ 
+         r = dlopen_many_sym_or_warn(
+@@ -123,7 +123,7 @@ static int dlopen_dw(void) {
+         return 1;
+ }
+ 
+-static int dlopen_elf(void) {
++int dlopen_elf(void) {
+         int r;
+ 
+         r = dlopen_many_sym_or_warn(
+diff --git a/src/shared/elf-util.h b/src/shared/elf-util.h
+index cf3d9be128..b28e64cea6 100644
+--- a/src/shared/elf-util.h
++++ b/src/shared/elf-util.h
+@@ -4,6 +4,9 @@
+ #include "json.h"
+ 
+ #if HAVE_ELFUTILS
++int dlopen_dw(void);
++int dlopen_elf(void);
++
+ /* Parse an ELF object in a forked process, so that errors while iterating over
+  * untrusted and potentially malicious data do not propagate to the main caller's process.
+  * If fork_disable_dump, the child process will not dump core if it crashes. */
+diff --git a/src/shared/meson.build b/src/shared/meson.build
+index 5dc58a863d..006310a917 100644
+--- a/src/shared/meson.build
++++ b/src/shared/meson.build
+@@ -241,6 +241,8 @@ shared_sources = files('''
+         parse-argument.h
+         parse-socket-bind-item.c
+         parse-socket-bind-item.h
++        pcre2-dlopen.c
++        pcre2-dlopen.h
+         pe-header.h
+         pkcs11-util.c
+         pkcs11-util.h
+diff --git a/src/journal/pcre2-dlopen.c b/src/shared/pcre2-dlopen.c
+similarity index 100%
+rename from src/journal/pcre2-dlopen.c
+rename to src/shared/pcre2-dlopen.c
+diff --git a/src/journal/pcre2-dlopen.h b/src/shared/pcre2-dlopen.h
+similarity index 100%
+rename from src/journal/pcre2-dlopen.h
+rename to src/shared/pcre2-dlopen.h
+diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c
+index ea2ef31b1f..002f666ed8 100644
+--- a/src/test/test-dlopen-so.c
++++ b/src/test/test-dlopen-so.c
+@@ -5,10 +5,12 @@
+ 
+ #include "bpf-dlopen.h"
+ #include "cryptsetup-util.h"
++#include "elf-util.h"
+ #include "idn-util.h"
+ #include "libfido2-util.h"
+ #include "macro.h"
+ #include "main-func.h"
++#include "pcre2-dlopen.h"
+ #include "pwquality-util.h"
+ #include "qrcode-util.h"
+ #include "tests.h"
+@@ -49,6 +51,15 @@ static int run(int argc, char **argv) {
+         assert_se(dlopen_bpf() >= 0);
+ #endif
+ 
++#if HAVE_ELFUTILS
++        assert_se(dlopen_dw() >= 0);
++        assert_se(dlopen_elf() >= 0);
++#endif
++
++#if HAVE_PCRE2
++        assert_se(dlopen_pcre2() >= 0);
++#endif
++
+         return 0;
+ }
+ 
diff --git a/SOURCES/0041-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch b/SOURCES/0041-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
deleted file mode 100644
index 6407adb..0000000
--- a/SOURCES/0041-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 92a81ce8d96ea924310262663d86d4ed9c727490 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
-Date: Mon, 20 Dec 2021 14:57:39 +0100
-Subject: [PATCH] kernel-install: don't pull out KERNEL_IMAGE
-
-It's part of the pack directly passed to scripts on add and ignored on
-remove
-
-(cherry picked from commit af319a4b14bd05cd4c8460487f2c6d7a31b35640)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 21 ++++++++++-----------
- 1 file changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index 2e8f382d5f..097d6557f2 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -72,15 +72,14 @@ else
-     [ $# -ge 1 ] && shift
- fi
- 
--KERNEL_VERSION="$1"
--KERNEL_IMAGE="$2"
--[ $# -ge 2 ] && shift 2
--
--if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then
-+if [ $# -lt 1 ]; then
-     echo "Not enough arguments" >&2
-     exit 1
- fi
- 
-+KERNEL_VERSION="$1"
-+shift
-+
- if [ -r "/etc/kernel/install.conf" ]; then
-     . /etc/kernel/install.conf
- elif [ -r "/usr/lib/kernel/install.conf" ]; then
-@@ -147,13 +146,13 @@ IFS="
- 
- case "$COMMAND" in
-     add)
--        if [ -z "$KERNEL_IMAGE" ]; then
--            echo "Command 'add' requires an argument" >&2
-+        if [ $# -lt 1 ]; then
-+            echo "Command 'add' requires a kernel image" >&2
-             exit 1
-         fi
- 
--        if ! [ -f "$KERNEL_IMAGE" ]; then
--            echo "Kernel image argument $KERNEL_IMAGE not a file" >&2
-+        if ! [ -f "$1" ]; then
-+            echo "Kernel image argument $1 not a file" >&2
-             exit 1
-         fi
- 
-@@ -170,8 +169,8 @@ case "$COMMAND" in
-         fi
- 
-         for f in $PLUGINS; do
--            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*"
--            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@"
-+            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $*"
-+            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@"
-             err=$?
-             [ $err -eq $skip_remaining ] && break
-             ret=$(( ret + err ))
diff --git a/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch b/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch
new file mode 100644
index 0000000..a8558ed
--- /dev/null
+++ b/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch
@@ -0,0 +1,36 @@
+From b07519fd5241eacfdb735917eca4ccbf441b5a8a Mon Sep 17 00:00:00 2001
+From: Daan De Meyer <daan.j.demeyer@gmail.com>
+Date: Tue, 22 Feb 2022 11:06:00 +0000
+Subject: [PATCH] systemctl: Show how long a service ran for after it exited in
+ status output
+
+(cherry picked from commit 0802f62efc1d1c67d5be67223b529c93536cf2ed)
+
+Related: #2017035
+---
+ src/systemctl/systemctl-show.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
+index 37c898f313..9b23471990 100644
+--- a/src/systemctl/systemctl-show.c
++++ b/src/systemctl/systemctl-show.c
+@@ -433,6 +433,18 @@ static void print_status_info(
+                                FORMAT_TIMESTAMP_STYLE(until_timestamp, arg_timestamp_style),
+                                FORMAT_TIMESTAMP_RELATIVE(until_timestamp));
+                 }
++
++                if (!endswith(i->id, ".target") &&
++                        STRPTR_IN_SET(i->active_state, "inactive", "failed") &&
++                        timestamp_is_set(i->active_enter_timestamp) &&
++                        timestamp_is_set(i->active_exit_timestamp) &&
++                        i->active_exit_timestamp >= i->active_enter_timestamp) {
++
++                        usec_t duration;
++
++                        duration = i->active_exit_timestamp - i->active_enter_timestamp;
++                        printf("   Duration: %s\n", FORMAT_TIMESPAN(duration, MSEC_PER_SEC));
++                }
+         } else
+                 printf("\n");
+ 
diff --git a/SOURCES/0042-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch b/SOURCES/0042-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
deleted file mode 100644
index 8948786..0000000
--- a/SOURCES/0042-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 9e3e7a50f92ee2f315a22f412f33f60d1f100e5a Mon Sep 17 00:00:00 2001
-From: Adam Williamson <awilliam@redhat.com>
-Date: Wed, 5 Jan 2022 14:07:14 -0800
-Subject: [PATCH] kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT
-
-This restores the preference order from before 9e82a74. The code
-previous to that change 'preferred' /boot over /boot/efi; that
-commit changed it to check /boot/efi before checking /boot.
-Changing this precedence could (and did, for me) have unexpected
-effects - it seems safer to leave it how it was.
-
-Signed-off-by: Adam Williamson <awilliam@redhat.com>
-(cherry picked from commit a5307e173bf86d695fe85b8e15e91126e8618a14)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index 097d6557f2..e56483ef96 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -97,7 +97,7 @@ fi
- [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
- 
- [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
--    for pref in "/efi" "/boot/efi" "/boot"; do
-+    for pref in "/efi" "/boot" "/boot/efi" ; do
-         if [ -d "$pref/$suff" ]; then
-             BOOT_ROOT="$pref"
-             break 2
diff --git a/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch b/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch
new file mode 100644
index 0000000..a71e3db
--- /dev/null
+++ b/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch
@@ -0,0 +1,130 @@
+From 5f59cc1593eaa251161061fe9a4ac4afb1592e6e Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 21 Feb 2022 13:08:20 +0100
+Subject: [PATCH] time-util: introduce TIMESTAMP_UNIX
+
+Allow formatting timestamps as number of seconds since the Epoch for easier
+machine parsing.
+
+Fixes: #22567
+
+```
+$ systemctl show systemd-journald | grep Timestamp
+WatchdogTimestampMonotonic=0
+ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET
+ExecMainStartTimestampMonotonic=13030408
+ExecMainExitTimestampMonotonic=0
+StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET
+StateChangeTimestampMonotonic=13049273
+InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
+InactiveExitTimestampMonotonic=13030430
+ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
+ActiveEnterTimestampMonotonic=13049273
+ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
+ActiveExitTimestampMonotonic=12997236
+InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
+InactiveEnterTimestampMonotonic=13028890
+ConditionTimestamp=Sat 2021-12-11 15:25:57 CET
+ConditionTimestampMonotonic=13029539
+AssertTimestamp=Sat 2021-12-11 15:25:57 CET
+AssertTimestampMonotonic=13029540
+
+$ systemctl show --timestamp=unix systemd-journald | grep Timestamp
+WatchdogTimestampMonotonic=0
+ExecMainStartTimestamp=@1639232757
+ExecMainStartTimestampMonotonic=13030408
+ExecMainExitTimestampMonotonic=0
+StateChangeTimestamp=@1639232757
+StateChangeTimestampMonotonic=13049273
+InactiveExitTimestamp=@1639232757
+InactiveExitTimestampMonotonic=13030430
+ActiveEnterTimestamp=@1639232757
+ActiveEnterTimestampMonotonic=13049273
+ActiveExitTimestamp=@1639232757
+ActiveExitTimestampMonotonic=12997236
+InactiveEnterTimestamp=@1639232757
+InactiveEnterTimestampMonotonic=13028890
+ConditionTimestamp=@1639232757
+ConditionTimestampMonotonic=13029539
+AssertTimestamp=@1639232757
+AssertTimestampMonotonic=13029540
+```
+
+(cherry picked from commit ed4a5b434517eeebc508379476cf112704e7981c)
+
+Related: #2017035
+---
+ src/basic/time-util.c     | 11 +++++++++++
+ src/basic/time-util.h     |  1 +
+ src/test/test-time-util.c |  5 +++++
+ 3 files changed, 17 insertions(+)
+
+diff --git a/src/basic/time-util.c b/src/basic/time-util.c
+index b659d6905d..c0841af8f3 100644
+--- a/src/basic/time-util.c
++++ b/src/basic/time-util.c
+@@ -320,11 +320,13 @@ char *format_timestamp_style(
+         time_t sec;
+         size_t n;
+         bool utc = false, us = false;
++        int r;
+ 
+         assert(buf);
+ 
+         switch (style) {
+                 case TIMESTAMP_PRETTY:
++                case TIMESTAMP_UNIX:
+                         break;
+                 case TIMESTAMP_US:
+                         us = true;
+@@ -350,6 +352,14 @@ char *format_timestamp_style(
+         if (t <= 0 || t == USEC_INFINITY)
+                 return NULL; /* Timestamp is unset */
+ 
++        if (style == TIMESTAMP_UNIX) {
++                r = snprintf(buf, l, "@" USEC_FMT, t / USEC_PER_SEC);  /* round down µs → s */
++                if (r < 0 || (size_t) r >= l)
++                        return NULL; /* Doesn't fit */
++
++                return buf;
++        }
++
+         /* Let's not format times with years > 9999 */
+         if (t > USEC_TIMESTAMP_FORMATTABLE_MAX) {
+                 assert(l >= STRLEN("--- XXXX-XX-XX XX:XX:XX") + 1);
+@@ -1632,6 +1642,7 @@ static const char* const timestamp_style_table[_TIMESTAMP_STYLE_MAX] = {
+         [TIMESTAMP_US] = "us",
+         [TIMESTAMP_UTC] = "utc",
+         [TIMESTAMP_US_UTC] = "us+utc",
++        [TIMESTAMP_UNIX] = "unix",
+ };
+ 
+ /* Use the macro for enum → string to allow for aliases */
+diff --git a/src/basic/time-util.h b/src/basic/time-util.h
+index 895af88299..01a72026e3 100644
+--- a/src/basic/time-util.h
++++ b/src/basic/time-util.h
+@@ -34,6 +34,7 @@ typedef enum TimestampStyle {
+         TIMESTAMP_US,
+         TIMESTAMP_UTC,
+         TIMESTAMP_US_UTC,
++        TIMESTAMP_UNIX,
+         _TIMESTAMP_STYLE_MAX,
+         _TIMESTAMP_STYLE_INVALID = -EINVAL,
+ } TimestampStyle;
+diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
+index 554693834b..799d271a44 100644
+--- a/src/test/test-time-util.c
++++ b/src/test/test-time-util.c
+@@ -325,6 +325,11 @@ TEST(format_timestamp) {
+                 assert_se(parse_timestamp(buf, &y) >= 0);
+                 assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
+ 
++                assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UNIX));
++                log_debug("%s", buf);
++                assert_se(parse_timestamp(buf, &y) >= 0);
++                assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
++
+                 assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UTC));
+                 log_debug("%s", buf);
+                 assert_se(parse_timestamp(buf, &y) >= 0);
diff --git a/SOURCES/0043-kernel-install-also-remove-modules.builtin.alias.bin.patch b/SOURCES/0043-kernel-install-also-remove-modules.builtin.alias.bin.patch
deleted file mode 100644
index eda48c4..0000000
--- a/SOURCES/0043-kernel-install-also-remove-modules.builtin.alias.bin.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From e84e60f9fac9d6bae3dd91698c556faf4dec2ca9 Mon Sep 17 00:00:00 2001
-From: Yu Watanabe <watanabe.yu+github@gmail.com>
-Date: Sat, 15 Jan 2022 03:37:40 +0900
-Subject: [PATCH] kernel-install: also remove modules.builtin.alias.bin
-
-Fixes RHBZ#2016630.
-
-(cherry picked from commit 06006691b5c56b6123044179d934b3ed81c237ca)
-
-Related: #2065061
----
- src/kernel-install/50-depmod.install | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
-index aa1f6b8e0e..be414f39d1 100644
---- a/src/kernel-install/50-depmod.install
-+++ b/src/kernel-install/50-depmod.install
-@@ -33,6 +33,7 @@ case "$COMMAND" in
-             "/lib/modules/$KERNEL_VERSION/modules.alias" \
-             "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \
-             "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \
-+            "/lib/modules/$KERNEL_VERSION/modules.builtin.alias.bin" \
-             "/lib/modules/$KERNEL_VERSION/modules.dep" \
-             "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \
-             "/lib/modules/$KERNEL_VERSION/modules.devname" \
diff --git a/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch b/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch
new file mode 100644
index 0000000..fda8122
--- /dev/null
+++ b/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch
@@ -0,0 +1,49 @@
+From 17dfcbd7fe332e7559e168520a57b0241d688485 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 21 Feb 2022 13:14:18 +0100
+Subject: [PATCH] systemctl,man: update docs for `--timestamp=`
+
+(cherry picked from commit b58b4a9f379748fec667fb60606de945eaafadbe)
+
+Related: #2017035
+---
+ man/systemctl.xml         | 7 +++++++
+ src/systemctl/systemctl.c | 7 ++-----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 3b3d709ab3..f28579e05d 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -2305,6 +2305,13 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
+             </varlistentry>
+           </variablelist>
+ 
++          <variablelist>
++            <varlistentry>
++              <term><option>unix</option></term>
++              <listitem><para><literal>@seconds-since-the-epoch</literal></para></listitem>
++            </varlistentry>
++          </variablelist>
++
+           <variablelist>
+             <varlistentry>
+               <term><option>us</option></term>
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 9031e685ea..0489796a75 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -296,11 +296,8 @@ static int systemctl_help(void) {
+                "     --boot-loader-entry=NAME\n"
+                "                         Boot into a specific boot loader entry on next boot\n"
+                "     --plain             Print unit dependencies as a list instead of a tree\n"
+-               "     --timestamp=FORMAT  Change format of printed timestamps.\n"
+-               "                         'pretty' (default): 'Day YYYY-MM-DD HH:MM:SS TZ\n"
+-               "                         'us': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU TZ\n"
+-               "                         'utc': 'Day YYYY-MM-DD HH:MM:SS UTC\n"
+-               "                         'us+utc': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU UTC\n"
++               "     --timestamp=FORMAT  Change format of printed timestamps (pretty, unix,\n"
++               "                             us, utc, us+utc)\n"
+                "     --read-only         Create read-only bind mount\n"
+                "     --mkdir             Create directory before mounting, if missing\n"
+                "     --marked            Restart/reload previously marked units\n"
diff --git a/SOURCES/0044-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch b/SOURCES/0044-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
deleted file mode 100644
index ff22ad8..0000000
--- a/SOURCES/0044-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 57ff5d23530c509773d183dfbfe06e2cad2acb42 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Tue, 18 Jan 2022 17:40:13 +0100
-Subject: [PATCH] kernel-install: add new variable
- $KERNEL_INSTALL_INITRD_GENERATOR
-
-The idea is that when not set, we do whatever we did in the past. But
-with a new setting of initrd_generator=mkosi-initrd, mkosi-initrd will
-generate an initrd.
-
-(cherry picked from commit 5c1b257faf87cb4f93aee8866f45a8cb98230af9)
-
-Related: #2065061
----
- man/kernel-install.xml            | 6 +++++-
- src/kernel-install/install.conf   | 1 +
- src/kernel-install/kernel-install | 5 ++++-
- 3 files changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/man/kernel-install.xml b/man/kernel-install.xml
-index 83255bb932..bb76074d2e 100644
---- a/man/kernel-install.xml
-+++ b/man/kernel-install.xml
-@@ -171,11 +171,15 @@
-     <para><varname>KERNEL_INSTALL_BOOT_ROOT=</varname> is set for the plugins to the root directory (mount point, usually) of the hierarchy
-     where boot-loader entries, kernel images, and associated resources should be placed. Can be overridden by setting <varname>BOOT_ROOT=</varname>.</para>
- 
--    <para><varname>KERNEL_INSTALL_LAYOUT=bls|other|...</varname> specifies the installation layout.
-+    <para><varname>KERNEL_INSTALL_LAYOUT=bls|other|...</varname> is set for the plugins to specify the installation layout.
-     Defaults to <option>bls</option> if <filename>$BOOT/<replaceable>MACHINE-ID</replaceable></filename> exists, or <option>other</option> otherwise.
-     Additional layout names may be defined by convention. If a plugin uses a special layout,
-     it's encouraged to declare its own layout name and configure <varname>layout=</varname> in <filename>install.conf</filename> upon initial installation.</para>
- 
-+    <para><varname>KERNEL_INSTALL_INITRD_GENERATOR=...</varname> is set for plugins to select the initrd generator.
-+    This should be configured as <varname>initrd_generator=</varname> in <filename>install.conf</filename>.
-+    </para>
-+
-     <variablelist>
-       <varlistentry>
-         <term>bls</term>
-diff --git a/src/kernel-install/install.conf b/src/kernel-install/install.conf
-index e4802e6fae..43b6e7d792 100644
---- a/src/kernel-install/install.conf
-+++ b/src/kernel-install/install.conf
-@@ -8,3 +8,4 @@
- # See kernel-install(8) for details.
- 
- #layout=bls|other|...
-+#initrd_generator=dracut|...
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index e56483ef96..fe457c1070 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -80,6 +80,9 @@ fi
- KERNEL_VERSION="$1"
- shift
- 
-+layout=
-+initrd_generator=
-+
- if [ -r "/etc/kernel/install.conf" ]; then
-     . /etc/kernel/install.conf
- elif [ -r "/usr/lib/kernel/install.conf" ]; then
-@@ -123,12 +126,12 @@ if [ -z "$layout" ]; then
-     fi
- fi
- 
--
- ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
- 
- export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
- export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
- export KERNEL_INSTALL_LAYOUT="$layout"
-+export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
- 
- [ "$layout" = "bls" ]
- MAKE_ENTRY_DIR_ABS=$?
diff --git a/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch b/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch
new file mode 100644
index 0000000..4be9398
--- /dev/null
+++ b/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch
@@ -0,0 +1,69 @@
+From ab458e74eccf14550711ca024e9176fba7993abc Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 18 Feb 2022 23:09:18 +0100
+Subject: [PATCH] systemctl: make `--timestamp=` affect the `show` verb as well
+
+Currently the `--timestamp=` option has no effect on timestamps shown by
+`systemctl show`, let's fix that.
+
+Spotted in #22567.
+
+Before:
+```
+$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp=
+ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET
+StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET
+InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
+ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
+ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
+InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
+ConditionTimestamp=Sat 2021-12-11 15:25:57 CET
+AssertTimestamp=Sat 2021-12-11 15:25:57 CET
+```
+
+After:
+```
+$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp=
+ExecMainStartTimestamp=Sat 2021-12-11 14:25:57.177848 UTC
+StateChangeTimestamp=Sat 2021-12-11 14:25:57.196714 UTC
+InactiveExitTimestamp=Sat 2021-12-11 14:25:57.177871 UTC
+ActiveEnterTimestamp=Sat 2021-12-11 14:25:57.196714 UTC
+ActiveExitTimestamp=Sat 2021-12-11 14:25:57.144677 UTC
+InactiveEnterTimestamp=Sat 2021-12-11 14:25:57.176331 UTC
+ConditionTimestamp=Sat 2021-12-11 14:25:57.176980 UTC
+AssertTimestamp=Sat 2021-12-11 14:25:57.176980 UTC
+
+```
+
+(cherry picked from commit a59e5c625da5a6e0c46e493d55f2f4212e9457ca)
+
+Related: #2017035
+---
+ src/systemctl/systemctl-show.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
+index 9b23471990..7a6655da74 100644
+--- a/src/systemctl/systemctl-show.c
++++ b/src/systemctl/systemctl-show.c
+@@ -1001,6 +1001,20 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m
+                 }
+                 break;
+ 
++        case SD_BUS_TYPE_UINT64:
++                if (endswith(name, "Timestamp")) {
++                        uint64_t timestamp;
++
++                        r = sd_bus_message_read_basic(m, bus_type, &timestamp);
++                        if (r < 0)
++                                return r;
++
++                        bus_print_property_value(name, expected_value, flags, FORMAT_TIMESTAMP_STYLE(timestamp, arg_timestamp_style));
++
++                        return 1;
++                }
++                break;
++
+         case SD_BUS_TYPE_STRUCT:
+ 
+                 if (contents[0] == SD_BUS_TYPE_UINT32 && streq(name, "Job")) {
diff --git a/SOURCES/0045-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch b/SOURCES/0045-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
deleted file mode 100644
index c0d6a41..0000000
--- a/SOURCES/0045-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From a9dadfb00f799b15af9e1f994b22d0b8165f78a5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 19 Jan 2022 12:10:37 +0100
-Subject: [PATCH] kernel-install: k-i already creates $ENTRY_DIR_ABS, no need
- to do it again
-
-(cherry picked from commit a520d5dddb991cd713392d4de0e342e312547a2e)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 8 ++------
- 1 file changed, 2 insertions(+), 6 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index e588e72bf9..7b768457c1 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -78,12 +78,8 @@ else
- fi
- 
- if ! [ -d "$ENTRY_DIR_ABS" ]; then
--    if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
--        echo "+mkdir -v -p $ENTRY_DIR_ABS"
--        mkdir -v -p "$ENTRY_DIR_ABS"
--    else
--        mkdir -p "$ENTRY_DIR_ABS"
--    fi
-+    echo "Error: entry directory '$ENTRY_DIR_ABS' does not exist" >&2
-+    exit 1
- fi
- 
- install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
diff --git a/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch b/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch
new file mode 100644
index 0000000..6fc7971
--- /dev/null
+++ b/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch
@@ -0,0 +1,39 @@
+From fdd32f48af7993305f65989162dedd75a929966a Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Tue, 15 Feb 2022 01:13:10 +0000
+Subject: [PATCH] tests: allow running all the services with SYSTEMD_LOG_LEVEL
+
+It should make it easier to figure out what exactly services do there.
+For example, with SYSTEMD_LOG_LEVEL=debug userdbd (v249) prints
+```
+varlink-5: New incoming message: {"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{}}
+```
+before it crashes and systemd-resolved prints
+```
+varlink-21: New incoming message: {"method":"io.systemd.Resolve.ResolveAddress","parameters":{"address":[127,0,0,1],"flags":0,"ifindex":1000000,"family":0}}
+```
+and those messages are helpful (especially when scripts causing them
+aren't clever enough to keep track of random stuff they send to systemd
+:-))
+
+(cherry picked from commit bf6ef6b6a9156e5f52ee69ce0c529a246f103e54)
+
+Related: #2017035
+---
+ test/test-functions | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/test/test-functions b/test/test-functions
+index dcc893733c..a299f5ff1f 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1142,6 +1142,9 @@ install_systemd() {
+ 
+     # enable debug logging in PID1
+     echo LogLevel=debug >>"$initdir/etc/systemd/system.conf"
++    if [[ -n "$TEST_SYSTEMD_LOG_LEVEL" ]]; then
++        echo DefaultEnvironment=SYSTEMD_LOG_LEVEL="$TEST_SYSTEMD_LOG_LEVEL" >>"$initdir/etc/systemd/system.conf"
++    fi
+     # store coredumps in journal
+     echo Storage=journal >>"$initdir/etc/systemd/coredump.conf"
+     # Propagate SYSTEMD_UNIT_PATH to user systemd managers
diff --git a/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch b/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch
new file mode 100644
index 0000000..44cedde
--- /dev/null
+++ b/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch
@@ -0,0 +1,46 @@
+From 19d3bf238c41c756b391fc7e66e5217cde42a896 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 8 Feb 2022 11:52:17 +0100
+Subject: [PATCH] coredump: raise the coredump save size on 64bit systems to
+ 32G (and lower it to 1G on 32bit systems)
+
+Apparently 2G is too low for various real-life systems. But raising it
+universally above 2^32 sounds wrong to me, since that makes no sense on
+32bit systems, that we still support.
+
+Hence, let's raise the limit to 32G on 64bit systems, and *lower* it to
+1G on 32bit systems.
+
+32G is 4 orders of magnitude higher then the old settings. Let's hope
+that's enough for now. Should this not be enough we can raise it
+further.
+
+Fixes: #22076
+(cherry picked from commit e677041e7a6988f73de802db6e49d962d432944b)
+
+Related: #2017035
+---
+ src/coredump/coredump.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
+index 6a6e9765d4..fd156370b2 100644
+--- a/src/coredump/coredump.c
++++ b/src/coredump/coredump.c
+@@ -48,8 +48,14 @@
+ #include "uid-alloc-range.h"
+ #include "user-util.h"
+ 
+-/* The maximum size up to which we process coredumps */
+-#define PROCESS_SIZE_MAX ((uint64_t) (2LLU*1024LLU*1024LLU*1024LLU))
++/* The maximum size up to which we process coredumps. We use 1G on 32bit systems, and 32G on 64bit systems */
++#if __SIZEOF_POINTER__ == 4
++#define PROCESS_SIZE_MAX ((uint64_t) (1LLU*1024LLU*1024LLU*1024LLU))
++#elif __SIZEOF_POINTER__ == 8
++#define PROCESS_SIZE_MAX ((uint64_t) (32LLU*1024LLU*1024LLU*1024LLU))
++#else
++#error "Unexpected pointer size"
++#endif
+ 
+ /* The maximum size up to which we leave the coredump around on disk */
+ #define EXTERNAL_SIZE_MAX PROCESS_SIZE_MAX
diff --git a/SOURCES/0046-kernel-install-prefix-errors-with-Error-exit-immedia.patch b/SOURCES/0046-kernel-install-prefix-errors-with-Error-exit-immedia.patch
deleted file mode 100644
index 554b3dd..0000000
--- a/SOURCES/0046-kernel-install-prefix-errors-with-Error-exit-immedia.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-From 007b832500a0a7438999a5dade3e3c49ba07099c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 19 Jan 2022 12:15:16 +0100
-Subject: [PATCH] kernel-install: prefix errors with "Error:", exit immediately
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-kernel-install would continue after errors… We don't want this, as it
-makes the results totally unpredicatable. If we didn't install the kernel
-or didn't do some important part of the setup, let's just return an error
-and let the user deal with it.
-
-When looking at output, the error was often hard to distinguish, esp.
-with -v. Add "Error:" everywhere to make the output easier to parse.
-
-(cherry picked from commit 680cec6b4ddb356d7dd087b197718712cb5c1662)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 10 +++++-----
- src/kernel-install/kernel-install         | 12 ++++++------
- 2 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 7b768457c1..6a396910cb 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -83,27 +83,27 @@ if ! [ -d "$ENTRY_DIR_ABS" ]; then
- fi
- 
- install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
--    echo "Could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2
-+    echo "Error: could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2
-     exit 1
- }
- 
- shift "$INITRD_OPTIONS_SHIFT"
- for initrd; do
-     [ -f "$initrd" ] || {
--        echo "Initrd '$initrd' not a file." >&2
-+        echo "Error: initrd '$initrd' not a file." >&2
-         exit 1
-     }
- 
-     initrd_basename="${initrd##*/}"
-     [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
-     install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || {
--        echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
-+        echo "Error: could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
-         exit 1
-     }
- done
- 
- mkdir -p "${LOADER_ENTRY%/*}" || {
--    echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
-+    echo "Error: could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
-     exit 1
- }
- 
-@@ -121,7 +121,7 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
-     [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
-     :
- } >"$LOADER_ENTRY" || {
--    echo "Could not create loader entry '$LOADER_ENTRY'." >&2
-+    echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2
-     exit 1
- }
- exit 0
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index fe457c1070..a73a205d79 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -73,7 +73,7 @@ else
- fi
- 
- if [ $# -lt 1 ]; then
--    echo "Not enough arguments" >&2
-+    echo "Error: not enough arguments" >&2
-     exit 1
- fi
- 
-@@ -150,12 +150,12 @@ IFS="
- case "$COMMAND" in
-     add)
-         if [ $# -lt 1 ]; then
--            echo "Command 'add' requires a kernel image" >&2
-+            echo "Error: command 'add' requires a kernel image" >&2
-             exit 1
-         fi
- 
-         if ! [ -f "$1" ]; then
--            echo "Kernel image argument $1 not a file" >&2
-+            echo "Error: kernel image argument $1 not a file" >&2
-             exit 1
-         fi
- 
-@@ -165,9 +165,9 @@ case "$COMMAND" in
-             # to serve as the indication to use or to not use the BLS
-             if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
-                 echo "+mkdir -v -p $ENTRY_DIR_ABS"
--                mkdir -v -p "$ENTRY_DIR_ABS"
-+                mkdir -v -p "$ENTRY_DIR_ABS" || exit 1
-             else
--                mkdir -p "$ENTRY_DIR_ABS"
-+                mkdir -p "$ENTRY_DIR_ABS" || exit 1
-             fi
-         fi
- 
-@@ -196,7 +196,7 @@ case "$COMMAND" in
-         ;;
- 
-     *)
--        echo "Unknown command '$COMMAND'" >&2
-+        echo "Error: unknown command '$COMMAND'" >&2
-         exit 1
-         ;;
- esac
diff --git a/SOURCES/0047-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch b/SOURCES/0047-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
deleted file mode 100644
index 60544f3..0000000
--- a/SOURCES/0047-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From f91f3437fcf193f2c13657a20f93e91a2f9663cd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 19 Jan 2022 12:20:22 +0100
-Subject: [PATCH] kernel-install: add "$KERNEL_INSTALL_STAGING_AREA" directory
-
-The general approach of kernel-install was that each plugin would drop in some
-files into the entry directory. But this doesn't scale well, because if we have
-multiple initrd generators, or multiple initrds, each generator would need to
-recreate the logic to put the generated files in the right place.
-
-Also, effective cleanup is impossible if anything goes wrong on the way, so we
-could end up with unused files in $BOOT.
-
-So let's invert the process: plugins drop files into $KERNEL_INSTALL_STAGING_AREA,
-and at the end 90-loaderentry.install DTRT with those files.
-
-This allow new plugins like 50-mkosi-initrd.install to be significantly simpler.
-
-(cherry picked from commit 367165a4069ac0c04882a05a8a80f6afb1e42760)
-
-Related: #2065061
----
- man/kernel-install.xml                    |  4 ++++
- src/kernel-install/90-loaderentry.install | 13 ++++++++++---
- src/kernel-install/kernel-install         | 10 ++++++++++
- 3 files changed, 24 insertions(+), 3 deletions(-)
-
-diff --git a/man/kernel-install.xml b/man/kernel-install.xml
-index bb76074d2e..685617863e 100644
---- a/man/kernel-install.xml
-+++ b/man/kernel-install.xml
-@@ -180,6 +180,10 @@
-     This should be configured as <varname>initrd_generator=</varname> in <filename>install.conf</filename>.
-     </para>
- 
-+    <para><varname>KERNEL_INSTALL_STAGING_AREA=...</varname> is set for plugins to a path to a directory.
-+    Plugins may drop files in that directory, and they will be installed as part of the loader entry, based
-+    on the file name and extension.</para>
-+
-     <variablelist>
-       <varlistentry>
-         <term>bls</term>
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 6a396910cb..0888c260e2 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -18,6 +18,8 @@
- # You should have received a copy of the GNU Lesser General Public License
- # along with systemd; If not, see <http://www.gnu.org/licenses/>.
- 
-+shopt -s nullglob
-+
- COMMAND="$1"
- KERNEL_VERSION="$2"
- ENTRY_DIR_ABS="$3"
-@@ -88,7 +90,8 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
- }
- 
- shift "$INITRD_OPTIONS_SHIFT"
--for initrd; do
-+# All files listed as arguments, and staged files called "initrd*" are installed as initrds.
-+for initrd in "$@" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
-     [ -f "$initrd" ] || {
-         echo "Error: initrd '$initrd' not a file." >&2
-         exit 1
-@@ -114,11 +117,15 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
-     echo "machine-id $MACHINE_ID"
-     echo "options    $BOOT_OPTIONS"
-     echo "linux      $ENTRY_DIR/linux"
--    for initrd; do
-+
-+    have_initrd=
-+    for initrd in "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
-         echo "initrd     $ENTRY_DIR/${initrd##*/}"
-+        have_initrd=yes
-     done
-+
-     # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
--    [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
-+    [ -z "$have_initrd" ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
-     :
- } >"$LOADER_ENTRY" || {
-     echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index a73a205d79..8cfef3208d 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -128,10 +128,20 @@ fi
- 
- ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
- 
-+# Provide a directory where to store generated initrds
-+cleanup() {
-+    [ -n "$KERNEL_INSTALL_STAGING_AREA" ] && rm -rf "$KERNEL_INSTALL_STAGING_AREA"
-+}
-+
-+trap cleanup EXIT
-+
-+KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)"
-+
- export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
- export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
- export KERNEL_INSTALL_LAYOUT="$layout"
- export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
-+export KERNEL_INSTALL_STAGING_AREA
- 
- [ "$layout" = "bls" ]
- MAKE_ENTRY_DIR_ABS=$?
diff --git a/SOURCES/0047-repart-fix-sector-size-handling.patch b/SOURCES/0047-repart-fix-sector-size-handling.patch
new file mode 100644
index 0000000..361fae2
--- /dev/null
+++ b/SOURCES/0047-repart-fix-sector-size-handling.patch
@@ -0,0 +1,644 @@
+From 389cc9af2087aa5369ac6bf0124d14877d541966 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Fri, 4 Feb 2022 17:39:44 +0100
+Subject: [PATCH] repart: fix sector size handling
+
+This queries the sector size from libfdisk instead of assuming 512, and
+uses that when converting from bytes to the offset/size values libfdisk
+expects.
+
+This is an alternative to Tom Yan's #21823, but prefers using libfdisk's
+own ideas of the sector size instead of going directly to the backing
+device via ioctls. (libfdisk can after all also operate on regular
+files, where the sector size concept doesn't necessarily apply the same
+way.)
+
+This also makes the "grain" variable, i.e. how we'll align the
+partitions. Previously this was hardcoded to 4K, and that still will be
+the minimum grain we use, but should the sector size be larger than that
+we'll use the next multiple of the sector size instead.
+
+(cherry picked from commit 994b303123ebe6a140bf3e56c66aa66119ae7d95)
+
+Related: #2017035
+---
+ src/partition/repart.c | 212 +++++++++++++++++++++++++----------------
+ 1 file changed, 132 insertions(+), 80 deletions(-)
+
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index d08f47f2c4..0862a37a8d 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -195,6 +195,8 @@ struct Context {
+         uint64_t start, end, total;
+ 
+         struct fdisk_context *fdisk_context;
++        uint64_t sector_size;
++        uint64_t grain_size;
+ 
+         sd_id128_t seed;
+ };
+@@ -407,9 +409,12 @@ static bool context_drop_one_priority(Context *context) {
+         return true;
+ }
+ 
+-static uint64_t partition_min_size(const Partition *p) {
++static uint64_t partition_min_size(Context *context, const Partition *p) {
+         uint64_t sz;
+ 
++        assert(context);
++        assert(p);
++
+         /* Calculate the disk space we really need at minimum for this partition. If the partition already
+          * exists the current size is what we really need. If it doesn't exist yet refuse to allocate less
+          * than 4K.
+@@ -428,50 +433,60 @@ static uint64_t partition_min_size(const Partition *p) {
+                 uint64_t d = 0;
+ 
+                 if (p->encrypt != ENCRYPT_OFF)
+-                        d += round_up_size(LUKS2_METADATA_SIZE, 4096);
++                        d += round_up_size(LUKS2_METADATA_SIZE, context->grain_size);
+ 
+                 if (p->copy_blocks_size != UINT64_MAX)
+-                        d += round_up_size(p->copy_blocks_size, 4096);
++                        d += round_up_size(p->copy_blocks_size, context->grain_size);
+                 else if (p->format || p->encrypt != ENCRYPT_OFF) {
+                         uint64_t f;
+ 
+                         /* If we shall synthesize a file system, take minimal fs size into account (assumed to be 4K if not known) */
+-                        f = p->format ? minimal_size_by_fs_name(p->format) : UINT64_MAX;
+-                        d += f == UINT64_MAX ? 4096 : f;
++                        f = p->format ? round_up_size(minimal_size_by_fs_name(p->format), context->grain_size) : UINT64_MAX;
++                        d += f == UINT64_MAX ? context->grain_size : f;
+                 }
+ 
+                 if (d > sz)
+                         sz = d;
+         }
+ 
+-        return MAX(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, sz);
++        return MAX(round_up_size(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, context->grain_size), sz);
+ }
+ 
+-static uint64_t partition_max_size(const Partition *p) {
++static uint64_t partition_max_size(const Context *context, const Partition *p) {
++        uint64_t sm;
++
+         /* Calculate how large the partition may become at max. This is generally the configured maximum
+          * size, except when it already exists and is larger than that. In that case it's the existing size,
+          * since we never want to shrink partitions. */
+ 
++        assert(context);
++        assert(p);
++
+         if (PARTITION_IS_FOREIGN(p)) {
+                 /* Don't allow changing size of partitions not managed by us */
+                 assert(p->current_size != UINT64_MAX);
+                 return p->current_size;
+         }
+ 
++        sm = round_down_size(p->size_max, context->grain_size);
++
+         if (p->current_size != UINT64_MAX)
+-                return MAX(p->current_size, p->size_max);
++                return MAX(p->current_size, sm);
+ 
+-        return p->size_max;
++        return sm;
+ }
+ 
+-static uint64_t partition_min_size_with_padding(const Partition *p) {
++static uint64_t partition_min_size_with_padding(Context *context, const Partition *p) {
+         uint64_t sz;
+ 
+         /* Calculate the disk space we need for this partition plus any free space coming after it. This
+          * takes user configured padding into account as well as any additional whitespace needed to align
+          * the next partition to 4K again. */
+ 
+-        sz = partition_min_size(p);
++        assert(context);
++        assert(p);
++
++        sz = partition_min_size(context, p);
+ 
+         if (p->padding_min != UINT64_MAX)
+                 sz += p->padding_min;
+@@ -479,11 +494,11 @@ static uint64_t partition_min_size_with_padding(const Partition *p) {
+         if (PARTITION_EXISTS(p)) {
+                 /* If the partition wasn't aligned, add extra space so that any we might add will be aligned */
+                 assert(p->offset != UINT64_MAX);
+-                return round_up_size(p->offset + sz, 4096) - p->offset;
++                return round_up_size(p->offset + sz, context->grain_size) - p->offset;
+         }
+ 
+         /* If this is a new partition we'll place it aligned, hence we just need to round up the required size here */
+-        return round_up_size(sz, 4096);
++        return round_up_size(sz, context->grain_size);
+ }
+ 
+ static uint64_t free_area_available(const FreeArea *a) {
+@@ -495,9 +510,12 @@ static uint64_t free_area_available(const FreeArea *a) {
+         return a->size - a->allocated;
+ }
+ 
+-static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
++static uint64_t free_area_available_for_new_partitions(Context *context, const FreeArea *a) {
+         uint64_t avail;
+ 
++        assert(context);
++        assert(a);
++
+         /* Similar to free_area_available(), but takes into account that the required size and padding of the
+          * preceding partition is honoured. */
+ 
+@@ -505,16 +523,16 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
+         if (a->after) {
+                 uint64_t need, space_end, new_end;
+ 
+-                need = partition_min_size_with_padding(a->after);
++                need = partition_min_size_with_padding(context, a->after);
+ 
+                 assert(a->after->offset != UINT64_MAX);
+                 assert(a->after->current_size != UINT64_MAX);
+ 
+                 /* Calculate where the free area ends, based on the offset of the partition preceding it */
+-                space_end = round_up_size(a->after->offset + a->after->current_size, 4096) + avail;
++                space_end = round_up_size(a->after->offset + a->after->current_size, context->grain_size) + avail;
+ 
+                 /* Calculate where the partition would end when we give it as much as it needs */
+-                new_end = round_up_size(a->after->offset + need, 4096);
++                new_end = round_up_size(a->after->offset + need, context->grain_size);
+ 
+                 /* Calculate saturated difference of the two: that's how much we have free for other partitions */
+                 return LESS_BY(space_end, new_end);
+@@ -523,15 +541,18 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
+         return avail;
+ }
+ 
+-static int free_area_compare(FreeArea *const *a, FreeArea *const*b) {
+-        return CMP(free_area_available_for_new_partitions(*a),
+-                   free_area_available_for_new_partitions(*b));
++static int free_area_compare(FreeArea *const *a, FreeArea *const*b, Context *context) {
++        assert(context);
++
++        return CMP(free_area_available_for_new_partitions(context, *a),
++                   free_area_available_for_new_partitions(context, *b));
+ }
+ 
+-static uint64_t charge_size(uint64_t total, uint64_t amount) {
++static uint64_t charge_size(Context *context, uint64_t total, uint64_t amount) {
++        assert(context);
+         /* Subtract the specified amount from total, rounding up to multiple of 4K if there's room */
+         assert(amount <= total);
+-        return LESS_BY(total, round_up_size(amount, 4096));
++        return LESS_BY(total, round_up_size(amount, context->grain_size));
+ }
+ 
+ static uint64_t charge_weight(uint64_t total, uint64_t amount) {
+@@ -545,14 +566,14 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_
+         assert(context);
+ 
+         /* Sort free areas by size, putting smallest first */
+-        typesafe_qsort(context->free_areas, context->n_free_areas, free_area_compare);
++        typesafe_qsort_r(context->free_areas, context->n_free_areas, free_area_compare, context);
+ 
+         /* In any case return size of the largest free area (i.e. not the size of all free areas
+          * combined!) */
+         if (ret_largest_free_area)
+                 *ret_largest_free_area =
+                         context->n_free_areas == 0 ? 0 :
+-                        free_area_available_for_new_partitions(context->free_areas[context->n_free_areas-1]);
++                        free_area_available_for_new_partitions(context, context->free_areas[context->n_free_areas-1]);
+ 
+         /* A simple first-fit algorithm. We return true if we can fit the partitions in, otherwise false. */
+         LIST_FOREACH(partitions, p, context->partitions) {
+@@ -565,13 +586,13 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_
+                         continue;
+ 
+                 /* How much do we need to fit? */
+-                required = partition_min_size_with_padding(p);
+-                assert(required % 4096 == 0);
++                required = partition_min_size_with_padding(context, p);
++                assert(required % context->grain_size == 0);
+ 
+                 for (size_t i = 0; i < context->n_free_areas; i++) {
+                         a = context->free_areas[i];
+ 
+-                        if (free_area_available_for_new_partitions(a) >= required) {
++                        if (free_area_available_for_new_partitions(context, a) >= required) {
+                                 fits = true;
+                                 break;
+                         }
+@@ -683,8 +704,8 @@ static int context_grow_partitions_phase(
+                         if (r < 0)
+                                 return r;
+ 
+-                        rsz = partition_min_size(p);
+-                        xsz = partition_max_size(p);
++                        rsz = partition_min_size(context, p);
++                        xsz = partition_max_size(context, p);
+ 
+                         if (phase == PHASE_OVERCHARGE && rsz > share) {
+                                 /* This partition needs more than its calculated share. Let's assign
+@@ -712,13 +733,13 @@ static int context_grow_partitions_phase(
+                                         /* Never change of foreign partitions (i.e. those we don't manage) */
+                                         p->new_size = p->current_size;
+                                 else
+-                                        p->new_size = MAX(round_down_size(share, 4096), rsz);
++                                        p->new_size = MAX(round_down_size(share, context->grain_size), rsz);
+ 
+                                 charge = true;
+                         }
+ 
+                         if (charge) {
+-                                *span = charge_size(*span, p->new_size);
++                                *span = charge_size(context, *span, p->new_size);
+                                 *weight_sum = charge_weight(*weight_sum, p->weight);
+                         }
+ 
+@@ -742,7 +763,7 @@ static int context_grow_partitions_phase(
+                                 charge = try_again = true;
+                         } else if (phase == PHASE_DISTRIBUTE) {
+ 
+-                                p->new_padding = round_down_size(share, 4096);
++                                p->new_padding = round_down_size(share, context->grain_size);
+                                 if (p->padding_min != UINT64_MAX && p->new_padding < p->padding_min)
+                                         p->new_padding = p->padding_min;
+ 
+@@ -750,7 +771,7 @@ static int context_grow_partitions_phase(
+                         }
+ 
+                         if (charge) {
+-                                *span = charge_size(*span, p->new_padding);
++                                *span = charge_size(context, *span, p->new_padding);
+                                 *weight_sum = charge_weight(*weight_sum, p->padding_weight);
+                         }
+ 
+@@ -779,7 +800,7 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
+                 assert(a->after->offset != UINT64_MAX);
+                 assert(a->after->current_size != UINT64_MAX);
+ 
+-                span += round_up_size(a->after->offset + a->after->current_size, 4096) - a->after->offset;
++                span += round_up_size(a->after->offset + a->after->current_size, context->grain_size) - a->after->offset;
+         }
+ 
+         for (GrowPartitionPhase phase = 0; phase < _GROW_PARTITION_PHASE_MAX;) {
+@@ -799,13 +820,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
+                 assert(a->after->new_size != UINT64_MAX);
+ 
+                 /* Calculate new size and align (but ensure this doesn't shrink the size) */
+-                m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, 4096));
++                m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, context->grain_size));
+ 
+-                xsz = partition_max_size(a->after);
++                xsz = partition_max_size(context, a->after);
+                 if (xsz != UINT64_MAX && m > xsz)
+                         m = xsz;
+ 
+-                span = charge_size(span, m - a->after->new_size);
++                span = charge_size(context, span, m - a->after->new_size);
+                 a->after->new_size = m;
+         }
+ 
+@@ -824,13 +845,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
+                                 continue;
+ 
+                         assert(p->new_size != UINT64_MAX);
+-                        m = MAX(p->new_size, round_down_size(p->new_size + span, 4096));
++                        m = MAX(p->new_size, round_down_size(p->new_size + span, context->grain_size));
+ 
+-                        xsz = partition_max_size(p);
++                        xsz = partition_max_size(context, p);
+                         if (xsz != UINT64_MAX && m > xsz)
+                                 m = xsz;
+ 
+-                        span = charge_size(span, m - p->new_size);
++                        span = charge_size(context, span, m - p->new_size);
+                         p->new_size = m;
+ 
+                         if (span == 0)
+@@ -910,7 +931,7 @@ static void context_place_partitions(Context *context) {
+                 } else
+                         start = context->start;
+ 
+-                start = round_up_size(start, 4096);
++                start = round_up_size(start, context->grain_size);
+                 left = a->size;
+ 
+                 LIST_FOREACH(partitions, p, context->partitions) {
+@@ -1422,6 +1443,8 @@ static int determine_current_padding(
+                 struct fdisk_context *c,
+                 struct fdisk_table *t,
+                 struct fdisk_partition *p,
++                uint64_t secsz,
++                uint64_t grainsz,
+                 uint64_t *ret) {
+ 
+         size_t n_partitions;
+@@ -1435,8 +1458,8 @@ static int determine_current_padding(
+                 return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition has no end!");
+ 
+         offset = fdisk_partition_get_end(p);
+-        assert(offset < UINT64_MAX / 512);
+-        offset *= 512;
++        assert(offset < UINT64_MAX / secsz);
++        offset *= secsz;
+ 
+         n_partitions = fdisk_table_get_nents(t);
+         for (size_t i = 0; i < n_partitions; i++)  {
+@@ -1454,8 +1477,8 @@ static int determine_current_padding(
+                         continue;
+ 
+                 start = fdisk_partition_get_start(q);
+-                assert(start < UINT64_MAX / 512);
+-                start *= 512;
++                assert(start < UINT64_MAX / secsz);
++                start *= secsz;
+ 
+                 if (start >= offset && (next == UINT64_MAX || next > start))
+                         next = start;
+@@ -1467,16 +1490,16 @@ static int determine_current_padding(
+                 assert(next < UINT64_MAX);
+                 next++; /* The last LBA is one sector before the end */
+ 
+-                assert(next < UINT64_MAX / 512);
+-                next *= 512;
++                assert(next < UINT64_MAX / secsz);
++                next *= secsz;
+ 
+                 if (offset > next)
+                         return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition end beyond disk end.");
+         }
+ 
+         assert(next >= offset);
+-        offset = round_up_size(offset, 4096);
+-        next = round_down_size(next, 4096);
++        offset = round_up_size(offset, grainsz);
++        next = round_down_size(next, grainsz);
+ 
+         *ret = LESS_BY(next, offset); /* Saturated subtraction, rounding might have fucked things up */
+         return 0;
+@@ -1549,6 +1572,8 @@ static int context_load_partition_table(
+         bool from_scratch = false;
+         sd_id128_t disk_uuid;
+         size_t n_partitions;
++        unsigned long secsz;
++        uint64_t grainsz;
+         int r;
+ 
+         assert(context);
+@@ -1583,8 +1608,12 @@ static int context_load_partition_table(
+                 if (r < 0)
+                         return log_error_errno(errno, "Failed to stat block device '%s': %m", node);
+ 
+-                if (S_ISREG(st.st_mode) && st.st_size == 0)
++                if (S_ISREG(st.st_mode) && st.st_size == 0) {
++                        /* User the fallback values if we have no better idea */
++                        context->sector_size = 512;
++                        context->grain_size = 4096;
+                         return /* from_scratch = */ true;
++                }
+ 
+                 r = -EINVAL;
+         }
+@@ -1602,6 +1631,23 @@ static int context_load_partition_table(
+         if (flock(fdisk_get_devfd(c), arg_dry_run ? LOCK_SH : LOCK_EX) < 0)
+                 return log_error_errno(errno, "Failed to lock block device: %m");
+ 
++        /* The offsets/sizes libfdisk returns to us will be in multiple of the sector size of the
++         * device. This is typically 512, and sometimes 4096. Let's query libfdisk once for it, and then use
++         * it for all our needs. Note that the values we use ourselves always are in bytes though, thus mean
++         * the same thing universally. Also note that regardless what kind of sector size is in use we'll
++         * place partitions at multiples of 4K. */
++        secsz = fdisk_get_sector_size(c);
++
++        /* Insist on a power of two, and that it's a multiple of 512, i.e. the traditional sector size. */
++        if (secsz < 512 || secsz != 1UL << log2u64(secsz))
++                return log_error_errno(errno, "Sector size %lu is not a power of two larger than 512? Refusing.", secsz);
++
++        /* Use at least 4K, and ensure it's a multiple of the sector size, regardless if that is smaller or
++         * larger */
++        grainsz = secsz < 4096 ? 4096 : secsz;
++
++        log_debug("Sector size of device is %lu bytes. Using grain size of %" PRIu64 ".", secsz, grainsz);
++
+         switch (arg_empty) {
+ 
+         case EMPTY_REFUSE:
+@@ -1732,12 +1778,12 @@ static int context_load_partition_table(
+                 }
+ 
+                 sz = fdisk_partition_get_size(p);
+-                assert_se(sz <= UINT64_MAX/512);
+-                sz *= 512;
++                assert_se(sz <= UINT64_MAX/secsz);
++                sz *= secsz;
+ 
+                 start = fdisk_partition_get_start(p);
+-                assert_se(start <= UINT64_MAX/512);
+-                start *= 512;
++                assert_se(start <= UINT64_MAX/secsz);
++                start *= secsz;
+ 
+                 partno = fdisk_partition_get_partno(p);
+ 
+@@ -1762,7 +1808,7 @@ static int context_load_partition_table(
+                                 pp->current_partition = p;
+                                 fdisk_ref_partition(p);
+ 
+-                                r = determine_current_padding(c, t, p, &pp->current_padding);
++                                r = determine_current_padding(c, t, p, secsz, grainsz, &pp->current_padding);
+                                 if (r < 0)
+                                         return r;
+ 
+@@ -1795,7 +1841,7 @@ static int context_load_partition_table(
+                         np->current_partition = p;
+                         fdisk_ref_partition(p);
+ 
+-                        r = determine_current_padding(c, t, p, &np->current_padding);
++                        r = determine_current_padding(c, t, p, secsz, grainsz, &np->current_padding);
+                         if (r < 0)
+                                 return r;
+ 
+@@ -1812,26 +1858,26 @@ static int context_load_partition_table(
+ 
+ add_initial_free_area:
+         nsectors = fdisk_get_nsectors(c);
+-        assert(nsectors <= UINT64_MAX/512);
+-        nsectors *= 512;
++        assert(nsectors <= UINT64_MAX/secsz);
++        nsectors *= secsz;
+ 
+         first_lba = fdisk_get_first_lba(c);
+-        assert(first_lba <= UINT64_MAX/512);
+-        first_lba *= 512;
++        assert(first_lba <= UINT64_MAX/secsz);
++        first_lba *= secsz;
+ 
+         last_lba = fdisk_get_last_lba(c);
+         assert(last_lba < UINT64_MAX);
+         last_lba++;
+-        assert(last_lba <= UINT64_MAX/512);
+-        last_lba *= 512;
++        assert(last_lba <= UINT64_MAX/secsz);
++        last_lba *= secsz;
+ 
+         assert(last_lba >= first_lba);
+ 
+         if (left_boundary == UINT64_MAX) {
+                 /* No partitions at all? Then the whole disk is up for grabs. */
+ 
+-                first_lba = round_up_size(first_lba, 4096);
+-                last_lba = round_down_size(last_lba, 4096);
++                first_lba = round_up_size(first_lba, grainsz);
++                last_lba = round_down_size(last_lba, grainsz);
+ 
+                 if (last_lba > first_lba) {
+                         r = context_add_free_area(context, last_lba - first_lba, NULL);
+@@ -1842,9 +1888,9 @@ add_initial_free_area:
+                 /* Add space left of first partition */
+                 assert(left_boundary >= first_lba);
+ 
+-                first_lba = round_up_size(first_lba, 4096);
+-                left_boundary = round_down_size(left_boundary, 4096);
+-                last_lba = round_down_size(last_lba, 4096);
++                first_lba = round_up_size(first_lba, grainsz);
++                left_boundary = round_down_size(left_boundary, grainsz);
++                last_lba = round_down_size(last_lba, grainsz);
+ 
+                 if (left_boundary > first_lba) {
+                         r = context_add_free_area(context, left_boundary - first_lba, NULL);
+@@ -1856,6 +1902,8 @@ add_initial_free_area:
+         context->start = first_lba;
+         context->end = last_lba;
+         context->total = nsectors;
++        context->sector_size = secsz;
++        context->grain_size = grainsz;
+         context->fdisk_context = TAKE_PTR(c);
+ 
+         return from_scratch;
+@@ -2360,7 +2408,7 @@ static int context_discard_range(
+         if (S_ISBLK(st.st_mode)) {
+                 uint64_t range[2], end;
+ 
+-                range[0] = round_up_size(offset, 512);
++                range[0] = round_up_size(offset, context->sector_size);
+ 
+                 if (offset > UINT64_MAX - size)
+                         return -ERANGE;
+@@ -2369,7 +2417,7 @@ static int context_discard_range(
+                 if (end <= range[0])
+                         return 0;
+ 
+-                range[1] = round_down_size(end - range[0], 512);
++                range[1] = round_down_size(end - range[0], context->sector_size);
+                 if (range[1] <= 0)
+                         return 0;
+ 
+@@ -2519,6 +2567,7 @@ static int context_wipe_and_discard(Context *context, bool from_scratch) {
+ }
+ 
+ static int partition_encrypt(
++                Context *context,
+                 Partition *p,
+                 const char *node,
+                 struct crypt_device **ret_cd,
+@@ -2532,6 +2581,7 @@ static int partition_encrypt(
+         sd_id128_t uuid;
+         int r;
+ 
++        assert(context);
+         assert(p);
+         assert(p->encrypt != ENCRYPT_OFF);
+ 
+@@ -2579,7 +2629,7 @@ static int partition_encrypt(
+                          volume_key_size,
+                          &(struct crypt_params_luks2) {
+                                  .label = strempty(p->new_label),
+-                                 .sector_size = 512U,
++                                 .sector_size = context->sector_size,
+                          });
+         if (r < 0)
+                 return log_error_errno(r, "Failed to LUKS2 format future partition: %m");
+@@ -2735,7 +2785,7 @@ static int context_copy_blocks(Context *context) {
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to lock loopback device: %m");
+ 
+-                        r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
++                        r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to encrypt device: %m");
+ 
+@@ -2988,7 +3038,7 @@ static int context_mkfs(Context *context) {
+                         return log_error_errno(r, "Failed to lock loopback device: %m");
+ 
+                 if (p->encrypt != ENCRYPT_OFF) {
+-                        r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
++                        r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to encrypt device: %m");
+ 
+@@ -3307,13 +3357,13 @@ static int context_mangle_partitions(Context *context) {
+ 
+                         if (p->new_size != p->current_size) {
+                                 assert(p->new_size >= p->current_size);
+-                                assert(p->new_size % 512 == 0);
++                                assert(p->new_size % context->sector_size == 0);
+ 
+                                 r = fdisk_partition_size_explicit(p->current_partition, true);
+                                 if (r < 0)
+                                         return log_error_errno(r, "Failed to enable explicit sizing: %m");
+ 
+-                                r = fdisk_partition_set_size(p->current_partition, p->new_size / 512);
++                                r = fdisk_partition_set_size(p->current_partition, p->new_size / context->sector_size);
+                                 if (r < 0)
+                                         return log_error_errno(r, "Failed to grow partition: %m");
+ 
+@@ -3353,8 +3403,8 @@ static int context_mangle_partitions(Context *context) {
+                         _cleanup_(fdisk_unref_parttypep) struct fdisk_parttype *t = NULL;
+ 
+                         assert(!p->new_partition);
+-                        assert(p->offset % 512 == 0);
+-                        assert(p->new_size % 512 == 0);
++                        assert(p->offset % context->sector_size == 0);
++                        assert(p->new_size % context->sector_size == 0);
+                         assert(!sd_id128_is_null(p->new_uuid));
+                         assert(p->new_label);
+ 
+@@ -3378,11 +3428,11 @@ static int context_mangle_partitions(Context *context) {
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to enable explicit sizing: %m");
+ 
+-                        r = fdisk_partition_set_start(q, p->offset / 512);
++                        r = fdisk_partition_set_start(q, p->offset / context->sector_size);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to position partition: %m");
+ 
+-                        r = fdisk_partition_set_size(q, p->new_size / 512);
++                        r = fdisk_partition_set_size(q, p->new_size / context->sector_size);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to grow partition: %m");
+ 
+@@ -4746,18 +4796,20 @@ done:
+ }
+ 
+ static int determine_auto_size(Context *c) {
+-        uint64_t sum = round_up_size(GPT_METADATA_SIZE, 4096);
++        uint64_t sum;
+         Partition *p;
+ 
+         assert_se(c);
+ 
++        sum = round_up_size(GPT_METADATA_SIZE, 4096);
++
+         LIST_FOREACH(partitions, p, c->partitions) {
+                 uint64_t m;
+ 
+                 if (p->dropped)
+                         continue;
+ 
+-                m = partition_min_size_with_padding(p);
++                m = partition_min_size_with_padding(c, p);
+                 if (m > UINT64_MAX - sum)
+                         return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Image would grow too large, refusing.");
+ 
diff --git a/SOURCES/0048-kernel-install-add-missing-log-line.patch b/SOURCES/0048-kernel-install-add-missing-log-line.patch
deleted file mode 100644
index 75f1253..0000000
--- a/SOURCES/0048-kernel-install-add-missing-log-line.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 356f770adca34191fd5d49b89c526b7375314a2c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 19 Jan 2022 14:03:24 +0100
-Subject: [PATCH] kernel-install: add missing log line
-
-(cherry picked from commit 29f604131b2c0b82dca7d6ffaa5e6bc6a253620d)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 0888c260e2..3edefdefb4 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -40,6 +40,8 @@ fi
- 
- case "$COMMAND" in
-     remove)
-+        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
-+            echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf"
-         exec rm -f \
-             "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
-             "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
diff --git a/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch b/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch
new file mode 100644
index 0000000..5f06daf
--- /dev/null
+++ b/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch
@@ -0,0 +1,36 @@
+From 77cde7d38bf8cd3438a867a6330c314f4580e43b Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 2 Feb 2022 14:20:48 +0900
+Subject: [PATCH] mkdir: allow to create directory whose path contains symlink
+
+Fixes a regression caused by 3008a6f21c1c42efe852d69798a2fdd63fe657ec.
+
+Before the commit, when `mkdir_parents_internal()` is called from `mkdir_p()`,
+it uses `_mkdir()` as `flag` is zero. But after the commit, `mkdir_safe_internal()`
+is always used. Hence, if the path contains a symlink, it fails with -ENOTDIR.
+
+To fix the issue, this makes `mkdir_p()` calls `mkdir_parents_internal()` with
+MKDIR_FOLLOW_SYMLINK flag.
+
+Fixes #22334.
+
+(cherry picked from commit 5117059ee9f84ed2fd37801ec0b90473db475422)
+
+Related: #2017035
+---
+ src/basic/mkdir.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
+index 6e2b94d024..88782ab0d4 100644
+--- a/src/basic/mkdir.c
++++ b/src/basic/mkdir.c
+@@ -162,7 +162,7 @@ int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t ui
+ 
+         assert(_mkdirat != mkdirat);
+ 
+-        r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags, _mkdirat);
++        r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags | MKDIR_FOLLOW_SYMLINK, _mkdirat);
+         if (r < 0)
+                 return r;
+ 
diff --git a/SOURCES/0049-kernel-install-don-t-try-to-persist-used-machine-ID-.patch b/SOURCES/0049-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
deleted file mode 100644
index 7af37bc..0000000
--- a/SOURCES/0049-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From c5ec0be7b693e3ac05ea8438ca4ca2e9591db171 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 9 Feb 2022 13:59:36 +0100
-Subject: [PATCH] kernel-install: don't try to persist used machine ID locally
-
-This reworks the how machine ID used by the boot loader spec snippet
-generation logic. Instead of persisting it automatically to /etc/ we'll
-append it via systemd.machined_id= to the kernel command line, and thus
-persist it in the generated boot loader spec snippets instead. This has
-nice benefits:
-
-  1. We do not collide with read-only root
-  2. The machine ID remains stable across factory reset, so that we can
-     safely recognize the path in $BOOT we drop our kernel images in
-     again, i.e. kernel updates will work correctly and safely across
-     kernel factory resets.
-  3. Previously regular systems had different machine IDs while in
-     initrd and after booting into the host system. With this change
-     they will now have the same.
-
-This then drops implicit persisting of KERNEL_INSTALL_MACHINE_ID, as its
-unnecessary then. The field is still honoured though, for compat
-reasons.
-
-This also drops the "Default" fallback previously used, as it actually
-is without effect, the randomized ID generation already took precedence
-in all cases. This means $MACHNE_ID/KERNEL_INSTALL_MACHINE_ID are now
-guaranteed to look like a proper machine ID, which is useful for us,
-given you need it that way to be able to pass it to the
-systemd.machine_id= kernel command line option.
-
-(cherry picked from commit 11ce3ea2f2219ab9c0700bcf7f8ed4312d80e937)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install |  6 +++++-
- src/kernel-install/kernel-install         | 16 +++++++---------
- 2 files changed, 12 insertions(+), 10 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 3edefdefb4..046771169c 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -68,7 +68,11 @@ elif [ -r /usr/lib/kernel/cmdline ]; then
- else
-     BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
- fi
--BOOT_OPTIONS="${BOOT_OPTIONS% }"
-+
-+# Suffix with the machine ID we use, so that the machine ID remains stable,
-+# even during factory reset, in the initrd (where the system's machine ID is
-+# not directly accessible yet), and if the root file system is volatile.
-+BOOT_OPTIONS="${BOOT_OPTIONS% } systemd.machine_id=$MACHINE_ID"
- 
- if [ -r /etc/kernel/tries ]; then
-     read -r TRIES </etc/kernel/tries
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index 8cfef3208d..e94aa79bc6 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -89,15 +89,13 @@ elif [ -r "/usr/lib/kernel/install.conf" ]; then
-     . /usr/lib/kernel/install.conf
- fi
- 
--# Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine
--# ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate
--# a new machine ID in /etc/machine-info. If that fails, use "Default".
--[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
--[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]                && read -r MACHINE_ID </etc/machine-id
--[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ]   && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
--[ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info
--[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
--[ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
-+# If /etc/machine-id is initialized we'll use it, otherwise we'll use a freshly
-+# generated one. If the user configured an explicit machine ID to use in
-+# /etc/machine-info to use for our purpose, we'll use that instead (for
-+# compatibility).
-+[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
-+[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]   && read -r MACHINE_ID </etc/machine-id
-+[ -z "$MACHINE_ID" ] && MACHINE_ID="$(systemd-id128 new)"
- 
- [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
-     for pref in "/efi" "/boot" "/boot/efi" ; do
diff --git a/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch b/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch
new file mode 100644
index 0000000..3d899a4
--- /dev/null
+++ b/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch
@@ -0,0 +1,26 @@
+From 848b8dde6fe096b317abf0b4996f21c8fe6a39ce Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 2 Feb 2022 15:06:27 +0900
+Subject: [PATCH] mkdir: CHASE_NONEXISTENT cannot used in
+ chase_symlinks_and_stat()
+
+(cherry picked from commit e22916e61d1fdb7b46918b605ebf783d9017f9d8)
+
+Related: #2017035
+---
+ src/basic/mkdir.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
+index 88782ab0d4..51a0d74e87 100644
+--- a/src/basic/mkdir.c
++++ b/src/basic/mkdir.c
+@@ -42,7 +42,7 @@ int mkdir_safe_internal(
+         if ((flags & MKDIR_FOLLOW_SYMLINK) && S_ISLNK(st.st_mode)) {
+                 _cleanup_free_ char *p = NULL;
+ 
+-                r = chase_symlinks_and_stat(path, NULL, CHASE_NONEXISTENT, &p, &st, NULL);
++                r = chase_symlinks_and_stat(path, NULL, 0, &p, &st, NULL);
+                 if (r < 0)
+                         return r;
+                 if (r == 0)
diff --git a/SOURCES/0050-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch b/SOURCES/0050-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
deleted file mode 100644
index f80e799..0000000
--- a/SOURCES/0050-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From c68126eeb93cac03b3a674ab47604e8381a4e5e2 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 9 Feb 2022 14:29:19 +0100
-Subject: [PATCH] kernel-install: add a new $ENTRY_TOKEN variable for naming
- boot entries
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This cleans up naming of boot loader spec boot entries a bit (i.e. the
-naming of the .conf snippet files, and the directory in $BOOT where the
-kernel images and initrds are placed), and isolates it from the actual machine
-ID concept.
-
-Previously there was a sinlge concept for both things, because typically
-the entries are just named after the machine ID. However one could also
-use a different identifier, i.e. not a 128bit ID in which cases issues
-pop up everywhere. For example, the "machine-id" field in the generated
-snippets would not be a machine ID anymore, and the newly added
-systemd.machine_id= kernel parameter would possibly get passed invalid
-data.
-
-Hence clean this up:
-
-$MACHINE_ID → always a valid 128bit ID.
-
-$ENTRY_TOKEN → usually the $MACHINE_ID but can be any other string too.
-This is used to name the directory to put kernels/initrds in. It's also
-used for naming the *.conf snippets that implement the Boot Loader Type
-1 spec.
-
-(cherry picked from commit 3907044ffa568aedf076d0f9807489ec78f87502)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 11 ++++++-----
- src/kernel-install/kernel-install         | 21 +++++++++++++++++----
- 2 files changed, 23 insertions(+), 9 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 046771169c..46261a2c11 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -29,6 +29,7 @@ INITRD_OPTIONS_SHIFT=4
- [ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0
- 
- MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
-+ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN"
- BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
- 
- BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
-@@ -41,10 +42,10 @@ fi
- case "$COMMAND" in
-     remove)
-         [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
--            echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf"
-+            echo "Removing $BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION*.conf"
-         exec rm -f \
--            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
--            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
-+            "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" \
-+            "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+"*".conf"
-         ;;
-     add)
-         ;;
-@@ -80,9 +81,9 @@ if [ -r /etc/kernel/tries ]; then
-         echo "/etc/kernel/tries does not contain an integer." >&2
-         exit 1
-     fi
--    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf"
-+    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+$TRIES.conf"
- else
--    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
-+    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf"
- fi
- 
- if ! [ -d "$ENTRY_DIR_ABS" ]; then
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index e94aa79bc6..75a31c62d4 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -97,7 +97,19 @@ fi
- [ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]   && read -r MACHINE_ID </etc/machine-id
- [ -z "$MACHINE_ID" ] && MACHINE_ID="$(systemd-id128 new)"
- 
--[ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
-+# Now that we determined the machine ID to use, let's determine the "token" for
-+# the boot loader entry to generate. We use that for naming the directory below
-+# $BOOT where we want to place the kernel/initrd and related resources, as well
-+# for naming the .conf boot loader spec entry. Typically this is just the
-+# machine ID, but it can be anything else, too, if we are told so.
-+[ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN </etc/kernel/entry-token
-+[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
-+
-+# NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but
-+#     $ENTRY_TOKEN can be any string that fits into a VFAT filename, though
-+#     typically is just the machine ID.
-+
-+[ -z "$BOOT_ROOT" ] && for suff in "$ENTRY_TOKEN" "loader/entries"; do
-     for pref in "/efi" "/boot" "/boot/efi" ; do
-         if [ -d "$pref/$suff" ]; then
-             BOOT_ROOT="$pref"
-@@ -117,14 +129,14 @@ done
- 
- if [ -z "$layout" ]; then
-     # Administrative decision: if not present, some scripts generate into /boot.
--    if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then
-+    if [ -d "$BOOT_ROOT/$ENTRY_TOKEN" ]; then
-         layout="bls"
-     else
-         layout="other"
-     fi
- fi
- 
--ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
-+ENTRY_DIR_ABS="$BOOT_ROOT/$ENTRY_TOKEN/$KERNEL_VERSION"
- 
- # Provide a directory where to store generated initrds
- cleanup() {
-@@ -136,6 +148,7 @@ trap cleanup EXIT
- KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)"
- 
- export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
-+export KERNEL_INSTALL_ENTRY_TOKEN="$ENTRY_TOKEN"
- export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
- export KERNEL_INSTALL_LAYOUT="$layout"
- export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
-@@ -168,7 +181,7 @@ case "$COMMAND" in
-         fi
- 
-         if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
--            # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$MACHINE_ID
-+            # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$ENTRY_TOKEN
-             # to signal to 00-entry-directory to create $ENTRY_DIR_ABS
-             # to serve as the indication to use or to not use the BLS
-             if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
diff --git a/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch b/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch
new file mode 100644
index 0000000..59c3aef
--- /dev/null
+++ b/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch
@@ -0,0 +1,137 @@
+From 9cfc2fd3c58609252b3fd203af95bec1aab1b832 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 23 Dec 2021 12:55:40 +0100
+Subject: [PATCH] meson: move efi file lists closer to where they are used
+
+The goal is to have the detection of features and paths done first, and
+then the build target constructions second.
+
+(cherry picked from commit 65dcf9f9a0d877de0dc53558547462a7f1750c78)
+
+Related: #2017035
+---
+ src/boot/efi/meson.build | 104 +++++++++++++++++++--------------------
+ 1 file changed, 51 insertions(+), 53 deletions(-)
+
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index e10e51cf4e..1125c64ea3 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -99,59 +99,6 @@ if efi_lds == ''
+         subdir_done()
+ endif
+ 
+-efi_headers = files('''
+-        bcd.h
+-        console.h
+-        cpio.h
+-        devicetree.h
+-        disk.h
+-        drivers.h
+-        graphics.h
+-        linux.h
+-        measure.h
+-        missing_efi.h
+-        pe.h
+-        random-seed.h
+-        shim.h
+-        splash.h
+-        util.h
+-        xbootldr.h
+-'''.split())
+-
+-common_sources = '''
+-        assert.c
+-        devicetree.c
+-        disk.c
+-        graphics.c
+-        measure.c
+-        pe.c
+-        secure-boot.c
+-        util.c
+-'''.split()
+-
+-systemd_boot_sources = '''
+-        bcd.c
+-        boot.c
+-        console.c
+-        drivers.c
+-        random-seed.c
+-        shim.c
+-        xbootldr.c
+-'''.split()
+-
+-stub_sources = '''
+-        cpio.c
+-        initrd.c
+-        splash.c
+-        stub.c
+-'''.split()
+-
+-if efi_arch[1] in ['ia32', 'x86_64']
+-        stub_sources += 'linux_x86.c'
+-else
+-        stub_sources += 'linux.c'
+-endif
+-
+ conf.set10('HAVE_GNU_EFI', true)
+ conf.set_quoted('EFI_MACHINE_TYPE_NAME', efi_arch[0])
+ 
+@@ -332,6 +279,57 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[
+         efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
+ endif
+ 
++############################################################
++
++efi_headers = files(
++        'bcd.h',
++        'console.h',
++        'cpio.h',
++        'devicetree.h',
++        'disk.h',
++        'drivers.h',
++        'graphics.h',
++        'linux.h',
++        'measure.h',
++        'missing_efi.h',
++        'pe.h',
++        'random-seed.h',
++        'shim.h',
++        'splash.h',
++        'util.h',
++        'xbootldr.h')
++
++common_sources = [
++        'assert.c',
++        'devicetree.c',
++        'disk.c',
++        'graphics.c',
++        'measure.c',
++        'pe.c',
++        'secure-boot.c',
++        'util.c']
++
++systemd_boot_sources = [
++        'bcd.c',
++        'boot.c',
++        'console.c',
++        'drivers.c',
++        'random-seed.c',
++        'shim.c',
++        'xbootldr.c']
++
++stub_sources = [
++        'cpio.c',
++        'initrd.c',
++        'splash.c',
++        'stub.c']
++
++if efi_arch[1] in ['ia32', 'x86_64']
++        stub_sources += 'linux_x86.c'
++else
++        stub_sources += 'linux.c'
++endif
++
+ systemd_boot_objects = []
+ stub_objects = []
+ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
diff --git a/SOURCES/0051-kernel-install-only-generate-systemd.boot_id-in-kern.patch b/SOURCES/0051-kernel-install-only-generate-systemd.boot_id-in-kern.patch
deleted file mode 100644
index 0880c64..0000000
--- a/SOURCES/0051-kernel-install-only-generate-systemd.boot_id-in-kern.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 9ef3458dd6356d19a58b3a909a5976295a62a4d0 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Wed, 9 Feb 2022 14:44:48 +0100
-Subject: [PATCH] kernel-install: only generate systemd.boot_id= in kernel
- command line if used for naming the boot loader spec files/dirs
-
-Now that we can distinguish the naming of the boot loader spec
-dirs/files and the machine ID let's tweak the logic for suffixing the
-kernel cmdline with systemd.boot_id=: let's only do that when we
-actually need the boot ID for naming these dirs/files. If we don't,
-let's not bother.
-
-This should be beneficial for "golden" images that shall not carry any
-machine IDs at all, i.e acquire their identity only once the final
-userspace is actually reached.
-
-(cherry picked from commit 953b61004c37948dcd897265b56c1613bc73b9f9)
-
-Related: #2065061
----
- src/kernel-install/90-loaderentry.install | 18 +++++++++++++-----
- 1 file changed, 13 insertions(+), 5 deletions(-)
-
-diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
-index 46261a2c11..c1d69aa824 100644
---- a/src/kernel-install/90-loaderentry.install
-+++ b/src/kernel-install/90-loaderentry.install
-@@ -70,10 +70,15 @@ else
-     BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
- fi
- 
--# Suffix with the machine ID we use, so that the machine ID remains stable,
--# even during factory reset, in the initrd (where the system's machine ID is
--# not directly accessible yet), and if the root file system is volatile.
--BOOT_OPTIONS="${BOOT_OPTIONS% } systemd.machine_id=$MACHINE_ID"
-+BOOT_OPTIONS="${BOOT_OPTIONS% }"
-+
-+# If the boot entries are named after the machine ID, then suffix the kernel
-+# command line with the machine ID we use, so that the machine ID remains
-+# stable, even during factory reset, in the initrd (where the system's machine
-+# ID is not directly accessible yet), and if the root file system is volatile.
-+if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ]; then
-+    BOOT_OPTIONS="$BOOT_OPTIONS systemd.machine_id=$MACHINE_ID"
-+fi
- 
- if [ -r /etc/kernel/tries ]; then
-     read -r TRIES </etc/kernel/tries
-@@ -121,7 +126,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
- {
-     echo "title      $PRETTY_NAME"
-     echo "version    $KERNEL_VERSION"
--    echo "machine-id $MACHINE_ID"
-+    if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ]; then
-+        # See similar logic above for the systemd.machine_id= kernel command line option
-+        echo "machine-id $MACHINE_ID"
-+    fi
-     echo "options    $BOOT_OPTIONS"
-     echo "linux      $ENTRY_DIR/linux"
- 
diff --git a/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch b/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch
new file mode 100644
index 0000000..d448f5f
--- /dev/null
+++ b/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch
@@ -0,0 +1,77 @@
+From a6c93d3200c0fd0eeee3a725b428cee94108cf48 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 23 Dec 2021 13:05:01 +0100
+Subject: [PATCH] meson: move efi summary() section to src/boot/efi
+
+This way we can add the entries more naturally in the same place where
+they are defined.
+
+(cherry picked from commit 3f871f120520aa2d11218735b0741bacc0309b4d)
+
+Related: #2017035
+---
+ meson.build              | 16 ++++------------
+ src/boot/efi/meson.build |  9 +++++++++
+ 2 files changed, 13 insertions(+), 12 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index e07875a054..f040eeab99 100644
+--- a/meson.build
++++ b/meson.build
+@@ -43,6 +43,10 @@ endif
+ skip_deps = want_ossfuzz or want_libfuzzer
+ fuzzer_build = want_ossfuzz or want_libfuzzer
+ 
++# Create a title-less summary section early, so it ends up first in the output.
++# More items are added later after they have been detected.
++summary({'build mode' : get_option('mode')})
++
+ #####################################################################
+ 
+ # Try to install the git pre-commit hook
+@@ -3902,7 +3906,6 @@ alt_time_epoch = run_command('date', '-Is', '-u', '-d', '@@0@'.format(time_epoch
+                              check : true).stdout().strip()
+ 
+ summary({
+-        'build mode' :                      get_option('mode'),
+         'split /usr' :                      split_usr,
+         'split bin-sbin' :                  split_bin,
+         'prefix directory' :                prefixdir,
+@@ -3960,17 +3963,6 @@ summary({
+ # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
+ # LDFLAGS:  ${OUR_LDFLAGS} ${LDFLAGS}
+ 
+-if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_GNU_EFI') == 1
+-        summary({
+-                'EFI machine type' :                efi_arch[0],
+-                'EFI CC' :                          '@0@'.format(' '.join(efi_cc)),
+-                'EFI LD' :                          efi_ld,
+-                'EFI lds' :                         efi_lds,
+-                'EFI crt0' :                        efi_crt0,
+-                'EFI include directory' :           efi_incdir},
+-                section : 'Extensible Firmware Interface')
+-endif
+-
+ found = []
+ missing = []
+ 
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 1125c64ea3..dd318079fc 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -279,6 +279,15 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[
+         efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
+ endif
+ 
++summary({
++        'EFI machine type' :                efi_arch[0],
++        'EFI CC' :                          '@0@'.format(' '.join(efi_cc)),
++        'EFI LD' :                          efi_ld,
++        'EFI lds' :                         efi_lds,
++        'EFI crt0' :                        efi_crt0,
++        'EFI include directory' :           efi_incdir},
++        section : 'Extensible Firmware Interface')
++
+ ############################################################
+ 
+ efi_headers = files(
diff --git a/SOURCES/0052-kernel-install-search-harder-for-kernel-image-initrd.patch b/SOURCES/0052-kernel-install-search-harder-for-kernel-image-initrd.patch
deleted file mode 100644
index e5685e7..0000000
--- a/SOURCES/0052-kernel-install-search-harder-for-kernel-image-initrd.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From d044a59e1098c3497e76c3ebdef88036378e6c26 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 10 Feb 2022 14:27:22 +0100
-Subject: [PATCH] kernel-install: search harder for kernel image/initrd drop-in
- dir
-
-If not explicitly configured, let's search a bit harder for the
-ENTRY_TOKEN, and let's try the machine ID, the IMAGE_ID and ID fields of
-/etc/os-release and finally "Default", all below potential $XBOOTLDR.
-
-(cherry picked from commit 6637cf9db67237857279262d93ee0e39023c5b85)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 27 ++++++++++++++++++++++++---
- 1 file changed, 24 insertions(+), 3 deletions(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index 75a31c62d4..c42c40592a 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -103,29 +103,50 @@ fi
- # for naming the .conf boot loader spec entry. Typically this is just the
- # machine ID, but it can be anything else, too, if we are told so.
- [ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN </etc/kernel/entry-token
--[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
-+if [ -z "$ENTRY_TOKEN" ]; then
-+    # If not configured explicitly, then use a few candidates: the machine ID,
-+    # the IMAGE_ID= and ID= fields from /etc/os-release and finally the fixed
-+    # string "Default"
-+    ENTRY_TOKEN_SEARCH="$MACHINE_ID"
-+    [ -r /etc/os-release ] && . /etc/os-release
-+    [ -n "$IMAGE_ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $IMAGE_ID"
-+    [ -n "$ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $ID"
-+    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH Default"
-+else
-+    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN"
-+fi
- 
- # NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but
- #     $ENTRY_TOKEN can be any string that fits into a VFAT filename, though
- #     typically is just the machine ID.
- 
--[ -z "$BOOT_ROOT" ] && for suff in "$ENTRY_TOKEN" "loader/entries"; do
--    for pref in "/efi" "/boot" "/boot/efi" ; do
-+[ -z "$BOOT_ROOT" ] && for suff in $ENTRY_TOKEN_SEARCH; do
-+    for pref in "/efi" "/boot" "/boot/efi"; do
-         if [ -d "$pref/$suff" ]; then
-             BOOT_ROOT="$pref"
-+            ENTRY_TOKEN="$suff"
-             break 2
-         fi
-     done
- done
- 
-+[ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot" "/boot/efi"; do
-+    if [ -d "$pref/loader/entries" ]; then
-+        BOOT_ROOT="$pref"
-+        break
-+    fi
-+done
-+
- [ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot/efi"; do
-     if mountpoint -q "$pref"; then
-         BOOT_ROOT="$pref"
-         break
-     fi
- done
-+
- [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot"
- 
-+[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
- 
- if [ -z "$layout" ]; then
-     # Administrative decision: if not present, some scripts generate into /boot.
diff --git a/SOURCES/0052-meson-report-SBAT-settings.patch b/SOURCES/0052-meson-report-SBAT-settings.patch
new file mode 100644
index 0000000..c8e5584
--- /dev/null
+++ b/SOURCES/0052-meson-report-SBAT-settings.patch
@@ -0,0 +1,53 @@
+From 340f8e02cf4db0e6b3733bfcc14630b3ce8181a5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 23 Dec 2021 13:19:42 +0100
+Subject: [PATCH] meson: report SBAT settings
+
+(cherry picked from commit e4e44a0107645891e82a538100a7590eb59a516c)
+
+Related: #2017035
+---
+ src/boot/efi/meson.build | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index dd318079fc..e628068596 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -130,7 +130,6 @@ elif get_option('sbat-distro') != ''
+                 if (value == '' or value == 'auto') and not meson.is_cross_build()
+                         cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1])
+                         value = run_command(sh, '-c', cmd).stdout().strip()
+-                        message('@0@ (from @1@): @2@'.format(sbatvar[0], sbatvar[1], value))
+                 endif
+                 if value == ''
+                         error('Required @0@ option not set and autodetection failed'.format(sbatvar[0]))
+@@ -147,8 +146,11 @@ elif get_option('sbat-distro') != ''
+         pkgver = get_option('sbat-distro-version')
+         if pkgver == ''
+                 efi_conf.set('SBAT_DISTRO_VERSION', 'GIT_VERSION')
++                # This is determined during build, not configuration, so we can't display it yet.
++                sbat_distro_version_display = '(git version)'
+         else
+                 efi_conf.set_quoted('SBAT_DISTRO_VERSION', pkgver)
++                sbat_distro_version_display = pkgver
+         endif
+ endif
+ 
+@@ -288,6 +290,16 @@ summary({
+         'EFI include directory' :           efi_incdir},
+         section : 'Extensible Firmware Interface')
+ 
++if efi_conf.get('SBAT_DISTRO', '') != ''
++        summary({
++                'SBAT distro':              efi_conf.get('SBAT_DISTRO'),
++                'SBAT distro generation':   efi_conf.get('SBAT_DISTRO_GENERATION'),
++                'SBAT distro version':      sbat_distro_version_display,
++                'SBAT distro summary':      efi_conf.get('SBAT_DISTRO_SUMMARY'),
++                'SBAT distro URL':          efi_conf.get('SBAT_DISTRO_URL')},
++                section : 'Extensible Firmware Interface')
++endif
++
+ ############################################################
+ 
+ efi_headers = files(
diff --git a/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch b/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch
new file mode 100644
index 0000000..3e6a7d4
--- /dev/null
+++ b/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch
@@ -0,0 +1,79 @@
+From 2d3b47dcd5a4b356c481f89c483db3eb308fcab9 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Tue, 28 Dec 2021 13:10:39 +0100
+Subject: [PATCH] boot: Build BCD parser only on arches supported by Windows
+
+(cherry picked from commit 77fcf28cb88b302453b4c991a6571cb37f10634d)
+
+Related: #2017035
+---
+ src/boot/efi/boot.c      |  2 ++
+ src/boot/efi/meson.build | 21 ++++++++++++---------
+ 2 files changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
+index 0286914b8b..83358406f2 100644
+--- a/src/boot/efi/boot.c
++++ b/src/boot/efi/boot.c
+@@ -1941,6 +1941,7 @@ static void config_entry_add_osx(Config *config) {
+ }
+ 
+ static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir) {
++#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
+         _cleanup_freepool_ CHAR8 *bcd = NULL;
+         CHAR16 *title = NULL;
+         EFI_STATUS err;
+@@ -1961,6 +1962,7 @@ static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FIL
+         config_entry_add_loader_auto(config, device, root_dir, NULL,
+                                      L"auto-windows", 'w', title ?: L"Windows Boot Manager",
+                                      L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
++#endif
+ }
+ 
+ static void config_entry_add_linux(
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index e628068596..6a0c8da9ba 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -331,7 +331,6 @@ common_sources = [
+         'util.c']
+ 
+ systemd_boot_sources = [
+-        'bcd.c',
+         'boot.c',
+         'console.c',
+         'drivers.c',
+@@ -351,6 +350,18 @@ else
+         stub_sources += 'linux.c'
+ endif
+ 
++# BCD parser only makes sense on arches that Windows supports.
++if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
++        systemd_boot_sources += 'bcd.c'
++        tests += [
++                [['src/boot/efi/test-bcd.c'],
++                 [],
++                 [libzstd],
++                 [],
++                 'HAVE_ZSTD'],
++        ]
++endif
++
+ systemd_boot_objects = []
+ stub_objects = []
+ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
+@@ -408,14 +419,6 @@ endforeach
+ 
+ ############################################################
+ 
+-tests += [
+-        [['src/boot/efi/test-bcd.c'],
+-         [],
+-         [libzstd],
+-         [],
+-         'HAVE_ZSTD'],
+-]
+-
+ test_efi_disk_img = custom_target(
+         'test-efi-disk.img',
+         input : [efi_stubs[0][0], efi_stubs[1][1]],
diff --git a/SOURCES/0053-kernel-install-add-new-inspect-verb-showing-paths-an.patch b/SOURCES/0053-kernel-install-add-new-inspect-verb-showing-paths-an.patch
deleted file mode 100644
index e312060..0000000
--- a/SOURCES/0053-kernel-install-add-new-inspect-verb-showing-paths-an.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From ac730b1b14b29b4c9cfa4fb904da7ef508170327 Mon Sep 17 00:00:00 2001
-From: Lennart Poettering <lennart@poettering.net>
-Date: Thu, 10 Feb 2022 14:37:37 +0100
-Subject: [PATCH] kernel-install: add new "inspect" verb, showing paths and
- parameters we discovered
-
-(cherry picked from commit c73cf4184441d3cc37a5e2195938f07420ec38b7)
-
-Related: #2065061
----
- src/kernel-install/kernel-install | 29 +++++++++++++++++++++++------
- 1 file changed, 23 insertions(+), 6 deletions(-)
-
-diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index c42c40592a..b8099bd12c 100755
---- a/src/kernel-install/kernel-install
-+++ b/src/kernel-install/kernel-install
-@@ -25,6 +25,7 @@ usage()
-     echo "Usage:"
-     echo "  $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
-     echo "  $0 [OPTIONS...] remove KERNEL-VERSION"
-+    echo "  $0 [OPTIONS...] inspect"
-     echo "Options:"
-     echo "  -h, --help     Print this help"
-     echo "  -v, --verbose  Increase verbosity"
-@@ -72,13 +73,17 @@ else
-     [ $# -ge 1 ] && shift
- fi
- 
--if [ $# -lt 1 ]; then
--    echo "Error: not enough arguments" >&2
--    exit 1
--fi
-+if [ "$COMMAND" = "inspect" ]; then
-+    KERNEL_VERSION=""
-+else
-+    if [ $# -lt 1 ]; then
-+        echo "Error: not enough arguments" >&2
-+        exit 1
-+    fi
- 
--KERNEL_VERSION="$1"
--shift
-+    KERNEL_VERSION="$1"
-+    shift
-+fi
- 
- layout=
- initrd_generator=
-@@ -237,6 +242,18 @@ case "$COMMAND" in
-         fi
-         ;;
- 
-+    inspect)
-+        echo "KERNEL_INSTALL_MACHINE_ID: $KERNEL_INSTALL_MACHINE_ID"
-+        echo "KERNEL_INSTALL_ENTRY_TOKEN: $KERNEL_INSTALL_ENTRY_TOKEN"
-+        echo "KERNEL_INSTALL_BOOT_ROOT: $KERNEL_INSTALL_BOOT_ROOT"
-+        echo "KERNEL_INSTALL_LAYOUT: $KERNEL_INSTALL_LAYOUT"
-+        echo "KERNEL_INSTALL_INITRD_GENERATOR: $KERNEL_INSTALL_INITRD_GENERATOR"
-+        echo "ENTRY_DIR_ABS: $KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN/\$KERNEL_VERSION"
-+
-+        # Assert that ENTRY_DIR_ABS actually matches what we are printing here
-+        [ "${ENTRY_DIR_ABS%/*}" = "$KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN" ] || { echo "Assertion didn't pass." >&2; exit 1; }
-+
-+        ;;
-     *)
-         echo "Error: unknown command '$COMMAND'" >&2
-         exit 1
diff --git a/SOURCES/0054-bus-Use-OrderedSet-for-introspection.patch b/SOURCES/0054-bus-Use-OrderedSet-for-introspection.patch
deleted file mode 100644
index 682478f..0000000
--- a/SOURCES/0054-bus-Use-OrderedSet-for-introspection.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-From a62fe26e02c9852a59d84d3834fdbb39d7568f28 Mon Sep 17 00:00:00 2001
-From: Jan Janssen <medhefgo@web.de>
-Date: Wed, 19 Jan 2022 10:15:36 +0100
-Subject: [PATCH] bus: Use OrderedSet for introspection
-
-Otherwise, the generated xml files are not reproducible.
-
-(cherry picked from commit acac88340ace3cd631126eebb6d0390cd54e8231)
-
-Resolves: #2066325
----
- src/libsystemd/sd-bus/bus-introspect.c |  4 +--
- src/libsystemd/sd-bus/bus-introspect.h |  4 +--
- src/libsystemd/sd-bus/bus-objects.c    | 45 +++++++++++++-------------
- src/shared/bus-object.c                |  4 +--
- 4 files changed, 28 insertions(+), 29 deletions(-)
-
-diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c
-index b9ef6af631..eed0dae82f 100644
---- a/src/libsystemd/sd-bus/bus-introspect.c
-+++ b/src/libsystemd/sd-bus/bus-introspect.c
-@@ -110,7 +110,7 @@ static int set_interface_name(struct introspect *intro, const char *interface_na
-         return free_and_strdup(&intro->interface_name, interface_name);
- }
- 
--int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix) {
-+int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix) {
-         char *node;
- 
-         assert(i);
-@@ -118,7 +118,7 @@ int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefi
- 
-         assert_se(set_interface_name(i, NULL) >= 0);
- 
--        while ((node = set_steal_first(s))) {
-+        while ((node = ordered_set_steal_first(s))) {
-                 const char *e;
- 
-                 e = object_path_startswith(node, prefix);
-diff --git a/src/libsystemd/sd-bus/bus-introspect.h b/src/libsystemd/sd-bus/bus-introspect.h
-index 34f32a4cf9..19e3ef09e2 100644
---- a/src/libsystemd/sd-bus/bus-introspect.h
-+++ b/src/libsystemd/sd-bus/bus-introspect.h
-@@ -5,7 +5,7 @@
- 
- #include "sd-bus.h"
- 
--#include "set.h"
-+#include "ordered-set.h"
- 
- struct introspect {
-         FILE *f;
-@@ -17,7 +17,7 @@ struct introspect {
- 
- int introspect_begin(struct introspect *i, bool trusted);
- int introspect_write_default_interfaces(struct introspect *i, bool object_manager);
--int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix);
-+int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix);
- int introspect_write_interface(
-                 struct introspect *i,
-                 const char *interface_name,
-diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
-index bf69539062..40158a7326 100644
---- a/src/libsystemd/sd-bus/bus-objects.c
-+++ b/src/libsystemd/sd-bus/bus-objects.c
-@@ -9,7 +9,6 @@
- #include "bus-slot.h"
- #include "bus-type.h"
- #include "missing_capability.h"
--#include "set.h"
- #include "string-util.h"
- #include "strv.h"
- 
-@@ -99,7 +98,7 @@ static int add_enumerated_to_set(
-                 sd_bus *bus,
-                 const char *prefix,
-                 struct node_enumerator *first,
--                Set *s,
-+                OrderedSet *s,
-                 sd_bus_error *error) {
- 
-         struct node_enumerator *c;
-@@ -146,7 +145,7 @@ static int add_enumerated_to_set(
-                                 continue;
-                         }
- 
--                        r = set_consume(s, *k);
-+                        r = ordered_set_consume(s, *k);
-                         if (r == -EEXIST)
-                                 r = 0;
-                 }
-@@ -171,7 +170,7 @@ static int add_subtree_to_set(
-                 const char *prefix,
-                 struct node *n,
-                 unsigned flags,
--                Set *s,
-+                OrderedSet *s,
-                 sd_bus_error *error) {
- 
-         struct node *i;
-@@ -198,7 +197,7 @@ static int add_subtree_to_set(
-                 if (!t)
-                         return -ENOMEM;
- 
--                r = set_consume(s, t);
-+                r = ordered_set_consume(s, t);
-                 if (r < 0 && r != -EEXIST)
-                         return r;
- 
-@@ -220,10 +219,10 @@ static int get_child_nodes(
-                 const char *prefix,
-                 struct node *n,
-                 unsigned flags,
--                Set **_s,
-+                OrderedSet **_s,
-                 sd_bus_error *error) {
- 
--        Set *s = NULL;
-+        OrderedSet *s = NULL;
-         int r;
- 
-         assert(bus);
-@@ -231,13 +230,13 @@ static int get_child_nodes(
-         assert(n);
-         assert(_s);
- 
--        s = set_new(&string_hash_ops);
-+        s = ordered_set_new(&string_hash_ops);
-         if (!s)
-                 return -ENOMEM;
- 
-         r = add_subtree_to_set(bus, prefix, n, flags, s, error);
-         if (r < 0) {
--                set_free_free(s);
-+                ordered_set_free_free(s);
-                 return r;
-         }
- 
-@@ -937,7 +936,7 @@ int introspect_path(
-                 char **ret,
-                 sd_bus_error *error) {
- 
--        _cleanup_set_free_free_ Set *s = NULL;
-+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
-         _cleanup_(introspect_free) struct introspect intro = {};
-         struct node_vtable *c;
-         bool empty;
-@@ -963,7 +962,7 @@ int introspect_path(
-         if (r < 0)
-                 return r;
- 
--        empty = set_isempty(s);
-+        empty = ordered_set_isempty(s);
- 
-         LIST_FOREACH(vtables, c, n->vtables) {
-                 if (require_fallback && !c->is_fallback)
-@@ -1233,7 +1232,7 @@ static int process_get_managed_objects(
- 
-         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
--        _cleanup_set_free_free_ Set *s = NULL;
-+        _cleanup_ordered_set_free_free_ OrderedSet *s = NULL;
-         char *path;
-         int r;
- 
-@@ -1263,7 +1262,7 @@ static int process_get_managed_objects(
-         if (r < 0)
-                 return r;
- 
--        SET_FOREACH(path, s) {
-+        ORDERED_SET_FOREACH(path, s) {
-                 r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error);
-                 if (r < 0)
-                         return bus_maybe_reply_error(m, r, &error);
-@@ -2352,7 +2351,7 @@ _public_ int sd_bus_emit_properties_changed(
- static int object_added_append_all_prefix(
-                 sd_bus *bus,
-                 sd_bus_message *m,
--                Set *s,
-+                OrderedSet *s,
-                 const char *prefix,
-                 const char *path,
-                 bool require_fallback) {
-@@ -2392,10 +2391,10 @@ static int object_added_append_all_prefix(
-                          * skip it on any of its parents. The child vtables
-                          * always fully override any conflicting vtables of
-                          * any parent node. */
--                        if (set_get(s, c->interface))
-+                        if (ordered_set_get(s, c->interface))
-                                 continue;
- 
--                        r = set_put(s, c->interface);
-+                        r = ordered_set_put(s, c->interface);
-                         if (r < 0)
-                                 return r;
- 
-@@ -2441,7 +2440,7 @@ static int object_added_append_all_prefix(
- }
- 
- static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
--        _cleanup_set_free_ Set *s = NULL;
-+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
-         _cleanup_free_ char *prefix = NULL;
-         size_t pl;
-         int r;
-@@ -2465,7 +2464,7 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p
-          * a parent that were overwritten by a child.
-          */
- 
--        s = set_new(&string_hash_ops);
-+        s = ordered_set_new(&string_hash_ops);
-         if (!s)
-                 return -ENOMEM;
- 
-@@ -2572,7 +2571,7 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) {
- static int object_removed_append_all_prefix(
-                 sd_bus *bus,
-                 sd_bus_message *m,
--                Set *s,
-+                OrderedSet *s,
-                 const char *prefix,
-                 const char *path,
-                 bool require_fallback) {
-@@ -2605,7 +2604,7 @@ static int object_removed_append_all_prefix(
-                  * skip it on any of its parents. The child vtables
-                  * always fully override any conflicting vtables of
-                  * any parent node. */
--                if (set_get(s, c->interface))
-+                if (ordered_set_get(s, c->interface))
-                         continue;
- 
-                 r = node_vtable_get_userdata(bus, path, c, &u, &error);
-@@ -2616,7 +2615,7 @@ static int object_removed_append_all_prefix(
-                 if (r == 0)
-                         continue;
- 
--                r = set_put(s, c->interface);
-+                r = ordered_set_put(s, c->interface);
-                 if (r < 0)
-                         return r;
- 
-@@ -2631,7 +2630,7 @@ static int object_removed_append_all_prefix(
- }
- 
- static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
--        _cleanup_set_free_ Set *s = NULL;
-+        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
-         _cleanup_free_ char *prefix = NULL;
-         size_t pl;
-         int r;
-@@ -2642,7 +2641,7 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char
- 
-         /* see sd_bus_emit_object_added() for details */
- 
--        s = set_new(&string_hash_ops);
-+        s = ordered_set_new(&string_hash_ops);
-         if (!s)
-                 return -ENOMEM;
- 
-diff --git a/src/shared/bus-object.c b/src/shared/bus-object.c
-index f2e53913fb..4ed5215e3d 100644
---- a/src/shared/bus-object.c
-+++ b/src/shared/bus-object.c
-@@ -156,10 +156,10 @@ int bus_introspect_implementations(
-         if (impl != main_impl)
-                 bus_introspect_implementation(&intro, impl);
- 
--        _cleanup_set_free_ Set *nodes = NULL;
-+        _cleanup_ordered_set_free_ OrderedSet *nodes = NULL;
- 
-         for (size_t i = 0; impl->children && impl->children[i]; i++) {
--                r = set_put_strdup(&nodes, impl->children[i]->path);
-+                r = ordered_set_put_strdup(&nodes, impl->children[i]->path);
-                 if (r < 0)
-                         return log_oom();
-         }
diff --git a/SOURCES/0054-meson-Remove-efi-cc-option.patch b/SOURCES/0054-meson-Remove-efi-cc-option.patch
new file mode 100644
index 0000000..ffcf6ea
--- /dev/null
+++ b/SOURCES/0054-meson-Remove-efi-cc-option.patch
@@ -0,0 +1,96 @@
+From 38afe3074812ab355bc20a36d41871f1b4f4386b Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Wed, 29 Dec 2021 15:02:04 +0100
+Subject: [PATCH] meson: Remove efi-cc option
+
+Changing the efi compiler this way doesn't really work. The gnu-efi
+header checks as well as supported compiler flag checks use the
+regular cc that meson detects. Changing the compiler this way will
+end up with bad compiler flags. For the very same reason, this does
+not work with a cross-compiler without going through proper meson
+cross-compilation steps either.
+
+The proper way to build systemd-boot with a different compiler is to
+use a different build folder and then just use the proper ninja build
+target to only build the bootloader/stub.
+
+(cherry picked from commit 52adf0e91ef00d21a2e83f7669d0823667ce6b6c)
+
+Related: #2017035
+---
+ meson_options.txt        |  2 --
+ src/boot/efi/meson.build | 14 ++++----------
+ 2 files changed, 4 insertions(+), 12 deletions(-)
+
+diff --git a/meson_options.txt b/meson_options.txt
+index 401f0933d7..62cdeb4201 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -414,8 +414,6 @@ option('dbus', type : 'combo', choices : ['auto', 'true', 'false'],
+ 
+ option('gnu-efi', type : 'combo', choices : ['auto', 'true', 'false'],
+        description : 'gnu-efi support for sd-boot')
+-option('efi-cc', type : 'array',
+-       description : 'the compiler to use for EFI modules')
+ # Note that LLD does not support PE/COFF relocations
+ # https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html
+ option('efi-ld', type : 'combo', choices : ['auto', 'bfd', 'gold'],
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 6a0c8da9ba..11e6bf2dd0 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -44,10 +44,6 @@ if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64',
+ endif
+ 
+ objcopy = find_program('objcopy')
+-efi_cc = get_option('efi-cc')
+-if efi_cc.length() == 0
+-        efi_cc = cc.cmd_array()
+-endif
+ 
+ efi_ld = get_option('efi-ld')
+ if efi_ld == 'auto'
+@@ -62,7 +58,7 @@ efi_libdir = ''
+ foreach dir : [get_option('efi-libdir'),
+                '/usr/lib/gnuefi' / efi_arch[0],
+                run_command('realpath', '-e',
+-                        '/usr/lib' / run_command(efi_cc, '-print-multi-os-directory').stdout().strip()).stdout().strip()]
++                        '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory').stdout().strip()).stdout().strip()]
+         if dir != '' and fs.is_dir(dir)
+                 efi_libdir = dir
+                 break
+@@ -275,15 +271,13 @@ if run_command('grep', '-q', '__CTOR_LIST__', efi_lds).returncode() == 0
+         ]
+ endif
+ 
+-efi_cc_version = run_command(efi_cc, '--version').stdout().split('\n')[0]
+-if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[-1].to_int() <= 10
++if cc.get_id() == 'clang' and cc.version().split('.')[0].to_int() <= 10
+         # clang <= 10 doesn't pass -T to the linker and then even complains about it being unused
+         efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
+ endif
+ 
+ summary({
+         'EFI machine type' :                efi_arch[0],
+-        'EFI CC' :                          '@0@'.format(' '.join(efi_cc)),
+         'EFI LD' :                          efi_ld,
+         'EFI lds' :                         efi_lds,
+         'EFI crt0' :                        efi_crt0,
+@@ -368,7 +362,7 @@ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources
+         o_file = custom_target(file.split('/')[-1] + '.o',
+                                input : file,
+                                output : file.split('/')[-1] + '.o',
+-                               command : [efi_cc, '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
++                               command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
+                                depend_files : efi_headers + fundamental_headers)
+         if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file)
+                 systemd_boot_objects += o_file
+@@ -389,7 +383,7 @@ foreach tuple : [['systemd_boot.so', systemd_boot_efi_name, systemd_boot_objects
+                 tuple[0],
+                 input : tuple[2],
+                 output : tuple[0],
+-                command : [efi_cc, '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'],
++                command : [cc.cmd_array(), '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'],
+                 install : tuple[3],
+                 install_dir : bootlibdir)
+ 
diff --git a/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch b/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch
new file mode 100644
index 0000000..bd91bcc
--- /dev/null
+++ b/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch
@@ -0,0 +1,25 @@
+From b077524848816638fc7d0cf3e65c062da095626f Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Wed, 29 Dec 2021 15:13:35 +0100
+Subject: [PATCH] meson: Get objcopy location from compiler
+
+(cherry picked from commit 2f2b07226751827303a88f3a301f2d834f3fb97b)
+
+Related: #2017035
+---
+ src/boot/efi/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 11e6bf2dd0..144fbb0f43 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -43,7 +43,7 @@ if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64',
+         subdir_done()
+ endif
+ 
+-objcopy = find_program('objcopy')
++objcopy = run_command(cc.cmd_array(), '-print-prog-name=objcopy', check: true).stdout().strip()
+ 
+ efi_ld = get_option('efi-ld')
+ if efi_ld == 'auto'
diff --git a/SOURCES/0055-udev-net_id-avoid-slot-based-names-only-for-single-f.patch b/SOURCES/0055-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
deleted file mode 100644
index 0dcfda4..0000000
--- a/SOURCES/0055-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From aacd9b79ecd97007bad3706234ccc1b2ae84ca11 Mon Sep 17 00:00:00 2001
-From: Michal Sekletar <msekleta@redhat.com>
-Date: Wed, 23 Mar 2022 17:34:12 +0100
-Subject: [PATCH] udev/net_id: avoid slot based names only for single function
- devices
-
-If we have two or more devices that share the same slot but they are
-also multifunction then it is OK to use the slot information even if it
-is the same for all of them. Name conflict will be avoided because we
-will append function number and form names like, ens1f1, ens1f2...
-
-(cherry picked from commit 66425daf2c68793adf24a48a26d58add8662e83f)
-
-Resolves: #2070097
----
- man/systemd.net-naming-scheme.xml |  7 ++++++-
- src/shared/netif-naming-scheme.h  | 31 ++++++++++++++++---------------
- src/udev/udev-builtin-net_id.c    | 11 +++++++++--
- 3 files changed, 31 insertions(+), 18 deletions(-)
-
-diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
-index 942ef572ff..73d08b681d 100644
---- a/man/systemd.net-naming-scheme.xml
-+++ b/man/systemd.net-naming-scheme.xml
-@@ -406,7 +406,12 @@
-         <varlistentry>
-           <term><constant>rhel-9.0</constant></term>
- 
--          <listitem><para>Same as naming scheme <constant>v250</constant>.</para>
-+          <listitem><para>Since version <constant>v247</constant> we no longer set
-+          <varname>ID_NET_NAME_SLOT</varname> if we detect that a PCI device associated with a slot is a PCI
-+          bridge as that would create naming conflict when there are more child devices on that bridge. Now,
-+          this is relaxed and we will use slot information to generate the name based on it but only if
-+          the PCI device has multiple functions. This is safe because distinct function number is a part of
-+          the device name for multifunction devices.</para>
-           </listitem>
-         </varlistentry>
- 
-diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
-index f765db6ef2..5c86cb4545 100644
---- a/src/shared/netif-naming-scheme.h
-+++ b/src/shared/netif-naming-scheme.h
-@@ -22,20 +22,21 @@
-  * OS versions, but not fully stabilize them. */
- typedef enum NamingSchemeFlags {
-         /* First, the individual features */
--        NAMING_SR_IOV_V            = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
--        NAMING_NPAR_ARI            = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
--        NAMING_INFINIBAND          = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
--        NAMING_ZERO_ACPI_INDEX     = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
--        NAMING_ALLOW_RERENAMES     = 1 << 4, /* Allow re-renaming of devices, see #9006 */
--        NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
--        NAMING_NETDEVSIM           = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
--        NAMING_LABEL_NOPREFIX      = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
--        NAMING_NSPAWN_LONG_HASH    = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
--        NAMING_BRIDGE_NO_SLOT      = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
--        NAMING_SLOT_FUNCTION_ID    = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
--        NAMING_16BIT_INDEX         = 1 << 11, /* Allow full 16-bit for the onboard index */
--        NAMING_REPLACE_STRICTLY    = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
--        NAMING_XEN_VIF             = 1 << 13, /* GEnerate names for Xen netfront devices */
-+        NAMING_SR_IOV_V                  = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
-+        NAMING_NPAR_ARI                  = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
-+        NAMING_INFINIBAND                = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
-+        NAMING_ZERO_ACPI_INDEX           = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
-+        NAMING_ALLOW_RERENAMES           = 1 << 4, /* Allow re-renaming of devices, see #9006 */
-+        NAMING_STABLE_VIRTUAL_MACS       = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
-+        NAMING_NETDEVSIM                 = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
-+        NAMING_LABEL_NOPREFIX            = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
-+        NAMING_NSPAWN_LONG_HASH          = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
-+        NAMING_BRIDGE_NO_SLOT            = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
-+        NAMING_SLOT_FUNCTION_ID          = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
-+        NAMING_16BIT_INDEX               = 1 << 11, /* Allow full 16-bit for the onboard index */
-+        NAMING_REPLACE_STRICTLY          = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
-+        NAMING_XEN_VIF                   = 1 << 13, /* Generate names for Xen netfront devices */
-+        NAMING_BRIDGE_MULTIFUNCTION_SLOT = 1 << 14, /* Use PCI hotplug slot information associated with bridge, but only if PCI device is multifunction */
- 
-         /* And now the masks that combine the features above */
-         NAMING_V238 = 0,
-@@ -47,7 +48,7 @@ typedef enum NamingSchemeFlags {
-         NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT,
-         NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
-         NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF,
--        NAMING_RHEL_9_0 = NAMING_V250,
-+        NAMING_RHEL_9_0 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT,
- 
-         EXTRA_NET_NAMING_SCHEMES
- 
-diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
-index 65e003eb15..673ed7a7ca 100644
---- a/src/udev/udev-builtin-net_id.c
-+++ b/src/udev/udev-builtin-net_id.c
-@@ -451,8 +451,15 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) {
-                                  * devices that will try to claim the same index and that would create name
-                                  * collision. */
-                                 if (naming_scheme_has(NAMING_BRIDGE_NO_SLOT) && is_pci_bridge(hotplug_slot_dev)) {
--                                        log_device_debug(dev, "Not using slot information because the PCI device is a bridge.");
--                                        return 0;
-+                                        if (naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT) && !is_pci_multifunction(names->pcidev)) {
-+                                                log_device_debug(dev, "Not using slot information because the PCI device associated with the hotplug slot is a bridge and the PCI device has single function.");
-+                                                return 0;
-+                                        }
-+
-+                                        if (!naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT)) {
-+                                                log_device_debug(dev, "Not using slot information because the PCI device is a bridge.");
-+                                                return 0;
-+                                        }
-                                 }
- 
-                                 break;
diff --git a/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch b/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch
new file mode 100644
index 0000000..0ae6347
--- /dev/null
+++ b/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch
@@ -0,0 +1,123 @@
+From 3088f292855f4a525271906a5652985f01c5d7b2 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Fri, 7 Jan 2022 21:55:50 +0100
+Subject: [PATCH] meson: Use files() for source lists for boot and fundamental
+
+This fixes build reproducibility as otherwise the full path
+of the source files ends up in the output binary.
+
+(cherry picked from commit b3c5a7074cd434bc02c4b560afe933d3df24759e)
+
+Related: #2017035
+---
+ src/boot/efi/meson.build    | 29 +++++++++++++++++------------
+ src/fundamental/meson.build | 22 +++++++++-------------
+ 2 files changed, 26 insertions(+), 25 deletions(-)
+
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 144fbb0f43..4cc43dc00c 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -312,9 +312,10 @@ efi_headers = files(
+         'shim.h',
+         'splash.h',
+         'util.h',
+-        'xbootldr.h')
++        'xbootldr.h',
++)
+ 
+-common_sources = [
++common_sources = files(
+         'assert.c',
+         'devicetree.c',
+         'disk.c',
+@@ -322,31 +323,34 @@ common_sources = [
+         'measure.c',
+         'pe.c',
+         'secure-boot.c',
+-        'util.c']
++        'util.c',
++)
+ 
+-systemd_boot_sources = [
++systemd_boot_sources = files(
+         'boot.c',
+         'console.c',
+         'drivers.c',
+         'random-seed.c',
+         'shim.c',
+-        'xbootldr.c']
++        'xbootldr.c',
++)
+ 
+-stub_sources = [
++stub_sources = files(
+         'cpio.c',
+         'initrd.c',
+         'splash.c',
+-        'stub.c']
++        'stub.c',
++)
+ 
+ if efi_arch[1] in ['ia32', 'x86_64']
+-        stub_sources += 'linux_x86.c'
++        stub_sources += files('linux_x86.c')
+ else
+-        stub_sources += 'linux.c'
++        stub_sources += files('linux.c')
+ endif
+ 
+ # BCD parser only makes sense on arches that Windows supports.
+ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
+-        systemd_boot_sources += 'bcd.c'
++        systemd_boot_sources += files('bcd.c')
+         tests += [
+                 [['src/boot/efi/test-bcd.c'],
+                  [],
+@@ -359,9 +363,10 @@ endif
+ systemd_boot_objects = []
+ stub_objects = []
+ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
+-        o_file = custom_target(file.split('/')[-1] + '.o',
++        # FIXME: replace ''.format(file) with fs.name(file) when meson_version requirement is >= 0.59.0
++        o_file = custom_target('@0@.o'.format(file).split('/')[-1],
+                                input : file,
+-                               output : file.split('/')[-1] + '.o',
++                               output : '@0@.o'.format(file).split('/')[-1],
+                                command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
+                                depend_files : efi_headers + fundamental_headers)
+         if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file)
+diff --git a/src/fundamental/meson.build b/src/fundamental/meson.build
+index 287f0fe36a..f927788c3a 100644
+--- a/src/fundamental/meson.build
++++ b/src/fundamental/meson.build
+@@ -8,20 +8,16 @@ fundamental_headers = files(
+         'macro-fundamental.h',
+         'sha256.h',
+         'string-util-fundamental.h',
+-        'types-fundamental.h')
+-
+-sources = '''
+-        bootspec-fundamental.c
+-        efivars-fundamental.c
+-        string-util-fundamental.c
+-        sha256.c
+-'''.split()
++        'types-fundamental.h',
++)
+ 
+ # for sd-boot
+-fundamental_source_paths = []
+-foreach source : sources
+-        fundamental_source_paths += meson.current_source_dir() / source
+-endforeach
++fundamental_source_paths = files(
++        'bootspec-fundamental.c',
++        'efivars-fundamental.c',
++        'sha256.c',
++        'string-util-fundamental.c',
++)
+ 
+ # for libbasic
+-fundamental_sources = files(sources) + fundamental_headers
++fundamental_sources = fundamental_source_paths + fundamental_headers
diff --git a/SOURCES/0056-shutdown-get-only-active-md-arrays.patch b/SOURCES/0056-shutdown-get-only-active-md-arrays.patch
deleted file mode 100644
index 1cde47d..0000000
--- a/SOURCES/0056-shutdown-get-only-active-md-arrays.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 375a8c43cc683af6cc6c8c4be50e100ba0fa0b58 Mon Sep 17 00:00:00 2001
-From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
-Date: Tue, 29 Mar 2022 12:49:54 +0200
-Subject: [PATCH] shutdown: get only active md arrays.
-
-Current md_list_get() implementation filters all block devices, started from
-"md*". This is ambiguous because list could contain:
-- partitions created upon md device (mdXpY)
-- external metadata container- specific type of md array.
-
-For partitions there is no issue, because they aren't handle STOP_ARRAY
-ioctl sent later. It generates misleading errors only.
-
-Second case is more problematic because containers are not locked in kernel.
-They are stopped even if container member array is active. For that reason
-reboot or shutdown flow could be blocked because metadata manager cannot be
-restarted after switch root on shutdown.
-
-Add filters to remove partitions and containers from md_list. Partitions
-can be excluded by DEVTYPE. Containers are determined by MD_LEVEL
-property, we are excluding all with "container" value.
-
-Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
-(cherry picked from commit 3a3b022d2cc112803ea7b9beea98bbcad110368a)
-
-Resolves: #2087677
----
- src/shutdown/umount.c | 18 +++++++++++++++++-
- 1 file changed, 17 insertions(+), 1 deletion(-)
-
-diff --git a/src/shutdown/umount.c b/src/shutdown/umount.c
-index f5a2cb20c1..6b08d9de74 100644
---- a/src/shutdown/umount.c
-+++ b/src/shutdown/umount.c
-@@ -352,9 +352,14 @@ static int md_list_get(MountPoint **head) {
-         if (r < 0)
-                 return r;
- 
-+        /* Filter out partitions. */
-+        r = sd_device_enumerator_add_match_property(e, "DEVTYPE", "disk");
-+        if (r < 0)
-+                return r;
-+
-         FOREACH_DEVICE(e, d) {
-                 _cleanup_free_ char *p = NULL;
--                const char *dn;
-+                const char *dn, *md_level;
-                 MountPoint *m;
-                 dev_t devnum;
- 
-@@ -362,6 +367,17 @@ static int md_list_get(MountPoint **head) {
-                     sd_device_get_devname(d, &dn) < 0)
-                         continue;
- 
-+                r = sd_device_get_property_value(d, "MD_LEVEL", &md_level);
-+                if (r < 0) {
-+                        log_warning_errno(r, "Failed to get MD_LEVEL property for %s, ignoring: %m", dn);
-+                        continue;
-+                }
-+
-+                /* MD "containers" are a special type of MD devices, used for external metadata.
-+                 * Since it doesn't provide RAID functionality in itself we don't need to stop it. */
-+                if (streq(md_level, "container"))
-+                        continue;
-+
-                 p = strdup(dn);
-                 if (!p)
-                         return -ENOMEM;
diff --git a/SOURCES/0057-meson-Use-files-for-tests.patch b/SOURCES/0057-meson-Use-files-for-tests.patch
new file mode 100644
index 0000000..9607bcf
--- /dev/null
+++ b/SOURCES/0057-meson-Use-files-for-tests.patch
@@ -0,0 +1,1483 @@
+From 70cbab08c63909a671136ee9600f9818e404646c Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Tue, 11 Jan 2022 10:21:23 +0100
+Subject: [PATCH] meson: Use files() for tests
+
+Not having to provide the full path in the source tree is much
+nicer and the produced lists can also be used anywhere in the source
+tree.
+
+(cherry picked from commit e1eeebbb11ca0eca5dfd2ce32a928ee5174ea7ff)
+
+Related: #2017035
+---
+ meson.build                             |   3 +-
+ src/analyze/meson.build                 |   6 +-
+ src/boot/efi/meson.build                |   2 +-
+ src/busctl/meson.build                  |   6 +-
+ src/coredump/meson.build                |   6 +-
+ src/import/meson.build                  |   6 +-
+ src/journal/meson.build                 |  14 +-
+ src/libsystemd-network/meson.build      |  22 +-
+ src/libsystemd/meson.build              |  70 ++---
+ src/libudev/meson.build                 |   2 +-
+ src/locale/meson.build                  |   6 +-
+ src/login/meson.build                   |   6 +-
+ src/machine/meson.build                 |   2 +-
+ src/network/meson.build                 |  16 +-
+ src/nspawn/meson.build                  |   4 +-
+ src/oom/meson.build                     |   6 +-
+ src/resolve/meson.build                 |  16 +-
+ src/shutdown/meson.build                |   6 +-
+ src/test/meson.build                    | 386 ++++++++++++------------
+ src/timesync/meson.build                |   2 +-
+ src/tmpfiles/meson.build                |   6 +-
+ src/udev/meson.build                    |  16 +-
+ src/xdg-autostart-generator/meson.build |   6 +-
+ 23 files changed, 308 insertions(+), 307 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index f040eeab99..35ba29aecf 100644
+--- a/meson.build
++++ b/meson.build
+@@ -3566,7 +3566,8 @@ foreach tuple : tests
+         parallel = tuple.length() > 7 ? tuple[7] : true
+         timeout = 30
+ 
+-        name = sources[0].split('/')[-1].split('.')[0]
++        # FIXME: Use fs.stem() with meson >= 0.54.0
++        name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0]
+         if type.startswith('timeout=')
+                 timeout = type.split('=')[1].to_int()
+                 type = ''
+diff --git a/src/analyze/meson.build b/src/analyze/meson.build
+index 492b79069f..fbc4d7e20d 100644
+--- a/src/analyze/meson.build
++++ b/src/analyze/meson.build
+@@ -13,9 +13,9 @@ systemd_analyze_sources = files('''
+ '''.split())
+ 
+ tests += [
+-        [['src/analyze/test-verify.c',
+-          'src/analyze/analyze-verify.c',
+-          'src/analyze/analyze-verify.h'],
++        [files('test-verify.c',
++               'analyze-verify.c',
++               'analyze-verify.h'),
+          [libcore,
+           libshared],
+          [],
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 4cc43dc00c..16b34f0ac2 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -352,7 +352,7 @@ endif
+ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
+         systemd_boot_sources += files('bcd.c')
+         tests += [
+-                [['src/boot/efi/test-bcd.c'],
++                [files('test-bcd.c'),
+                  [],
+                  [libzstd],
+                  [],
+diff --git a/src/busctl/meson.build b/src/busctl/meson.build
+index f463436fab..295dc0926d 100644
+--- a/src/busctl/meson.build
++++ b/src/busctl/meson.build
+@@ -6,7 +6,7 @@ busctl_sources = files(
+         'busctl.c')
+ 
+ tests += [
+-        [['src/busctl/test-busctl-introspect.c',
+-          'src/busctl/busctl-introspect.c',
+-          'src/busctl/busctl-introspect.h']],
++        [files('test-busctl-introspect.c',
++               'busctl-introspect.c',
++               'busctl-introspect.h')],
+ ]
+diff --git a/src/coredump/meson.build b/src/coredump/meson.build
+index b832192c9f..49ea93965b 100644
+--- a/src/coredump/meson.build
++++ b/src/coredump/meson.build
+@@ -14,8 +14,8 @@ if conf.get('ENABLE_COREDUMP') == 1 and install_sysconfdir_samples
+ endif
+ 
+ tests += [
+-        [['src/coredump/test-coredump-vacuum.c',
+-          'src/coredump/coredump-vacuum.c',
+-          'src/coredump/coredump-vacuum.h'],
++        [files('test-coredump-vacuum.c',
++               'coredump-vacuum.c',
++               'coredump-vacuum.h'),
+          [], [], [], '', 'manual'],
+ ]
+diff --git a/src/import/meson.build b/src/import/meson.build
+index 23f0858817..7e923072a9 100644
+--- a/src/import/meson.build
++++ b/src/import/meson.build
+@@ -61,9 +61,9 @@ if conf.get('ENABLE_IMPORTD') == 1
+ endif
+ 
+ tests += [
+-        [['src/import/test-qcow2.c',
+-          'src/import/qcow2-util.c',
+-          'src/import/qcow2-util.h'],
++        [files('test-qcow2.c',
++               'qcow2-util.c',
++               'qcow2-util.h'),
+          [],
+          [libz],
+          [], 'HAVE_ZLIB', 'manual'],
+diff --git a/src/journal/meson.build b/src/journal/meson.build
+index 270592f2ac..b9a63d5e2f 100644
+--- a/src/journal/meson.build
++++ b/src/journal/meson.build
+@@ -79,7 +79,7 @@ endif
+ ############################################################
+ 
+ tests += [
+-        [['src/journal/test-journal-syslog.c'],
++        [files('test-journal-syslog.c'),
+          [libjournal_core,
+           libshared],
+          [threads,
+@@ -87,30 +87,30 @@ tests += [
+           liblz4,
+           libselinux]],
+ 
+-        [['src/journal/test-journal-config.c'],
++        [files('test-journal-config.c'),
+          [libjournal_core,
+           libshared],
+          [libxz,
+           liblz4,
+           libselinux]],
+ 
+-        [['src/journal/test-journal.c'],
++        [files('test-journal.c'),
+          [libjournal_core,
+           libshared]],
+ 
+-        [['src/journal/test-journal-stream.c'],
++        [files('test-journal-stream.c'),
+          [libjournal_core,
+           libshared]],
+ 
+-         [['src/journal/test-journal-flush.c'],
++         [files('test-journal-flush.c'),
+           [libjournal_core,
+            libshared]],
+ 
+-        [['src/journal/test-journal-verify.c'],
++        [files('test-journal-verify.c'),
+          [libjournal_core,
+           libshared]],
+ 
+-        [['src/journal/test-journal-interleaving.c'],
++        [files('test-journal-interleaving.c'),
+          [libjournal_core,
+           libshared]],
+ ]
+diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
+index a7838cdaa1..3923df48ea 100644
+--- a/src/libsystemd-network/meson.build
++++ b/src/libsystemd-network/meson.build
+@@ -57,49 +57,49 @@ libsystemd_network_includes = [includes, include_directories('.')]
+ ############################################################
+ 
+ tests += [
+-        [['src/libsystemd-network/test-dhcp-option.c'],
++        [files('test-dhcp-option.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-sd-dhcp-lease.c'],
++        [files('test-sd-dhcp-lease.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-dhcp-client.c'],
++        [files('test-dhcp-client.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-dhcp-server.c'],
++        [files('test-dhcp-server.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-ipv4ll.c'],
++        [files('test-ipv4ll.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-ipv4ll-manual.c'],
++        [files('test-ipv4ll-manual.c'),
+          [libshared,
+           libsystemd_network],
+          [], [], '', 'manual'],
+ 
+-        [['src/libsystemd-network/test-acd.c'],
++        [files('test-acd.c'),
+          [libshared,
+           libsystemd_network],
+          [], [], '', 'manual'],
+ 
+-        [['src/libsystemd-network/test-ndisc-rs.c'],
++        [files('test-ndisc-rs.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-ndisc-ra.c'],
++        [files('test-ndisc-ra.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-dhcp6-client.c'],
++        [files('test-dhcp6-client.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/test-lldp-rx.c'],
++        [files('test-lldp-rx.c'),
+          [libshared,
+           libsystemd_network]],
+ ]
+diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
+index 124393d3e6..42746e560f 100644
+--- a/src/libsystemd/meson.build
++++ b/src/libsystemd/meson.build
+@@ -190,43 +190,43 @@ custom_target(
+ ############################################################
+ 
+ tests += [
+-        [['src/libsystemd/sd-journal/test-journal-send.c']],
++        [files('sd-journal/test-journal-send.c')],
+ 
+-        [['src/libsystemd/sd-journal/test-journal-match.c']],
++        [files('sd-journal/test-journal-match.c')],
+ 
+-        [['src/libsystemd/sd-journal/test-journal-enum.c'],
++        [files('sd-journal/test-journal-enum.c'),
+          [], [], [], '', 'timeout=360'],
+ 
+-        [['src/libsystemd/sd-journal/test-journal-init.c']],
++        [files('sd-journal/test-journal-init.c')],
+ 
+-        [['src/libsystemd/sd-journal/test-mmap-cache.c']],
++        [files('sd-journal/test-mmap-cache.c')],
+ 
+-        [['src/libsystemd/sd-journal/test-catalog.c']],
++        [files('sd-journal/test-catalog.c')],
+ 
+-        [['src/libsystemd/sd-journal/test-compress.c'],
++        [files('sd-journal/test-compress.c'),
+          [],
+          [liblz4,
+           libzstd,
+           libxz]],
+ 
+-        [['src/libsystemd/sd-journal/test-compress-benchmark.c'],
++        [files('sd-journal/test-compress-benchmark.c'),
+          [],
+          [liblz4,
+           libzstd,
+           libxz],
+          [], '', 'timeout=90'],
+ 
+-        [['src/libsystemd/sd-journal/test-audit-type.c']],
++        [files('sd-journal/test-audit-type.c')],
+ ]
+ 
+ ############################################################
+ 
+ tests += [
+-        [['src/libsystemd/sd-bus/test-bus-address.c'],
++        [files('sd-bus/test-bus-address.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-marshal.c'],
++        [files('sd-bus/test-bus-marshal.c'),
+          [],
+          [threads,
+           libglib,
+@@ -234,82 +234,82 @@ tests += [
+           libgio,
+           libdbus]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-signature.c'],
++        [files('sd-bus/test-bus-signature.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-queue-ref-cycle.c'],
++        [files('sd-bus/test-bus-queue-ref-cycle.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-watch-bind.c'],
++        [files('sd-bus/test-bus-watch-bind.c'),
+          [],
+          [threads],
+          [], '', 'timeout=120'],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-chat.c'],
++        [files('sd-bus/test-bus-chat.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-cleanup.c'],
++        [files('sd-bus/test-bus-cleanup.c'),
+          [],
+          [threads,
+           libseccomp]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-track.c'],
++        [files('sd-bus/test-bus-track.c'),
+          [],
+          [libseccomp]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-server.c'],
++        [files('sd-bus/test-bus-server.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-objects.c'],
++        [files('sd-bus/test-bus-objects.c'),
+          [],
+          [threads]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-vtable.c',
+-          'src/libsystemd/sd-bus/test-vtable-data.h']],
++        [files('sd-bus/test-bus-vtable.c',
++               'sd-bus/test-vtable-data.h')],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-gvariant.c'],
++        [files('sd-bus/test-bus-gvariant.c'),
+          [],
+          [libglib,
+           libgobject,
+           libgio]],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-creds.c']],
++        [files('sd-bus/test-bus-creds.c')],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-match.c']],
++        [files('sd-bus/test-bus-match.c')],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-benchmark.c'],
++        [files('sd-bus/test-bus-benchmark.c'),
+          [],
+          [threads],
+          [], '', 'manual'],
+ 
+-        [['src/libsystemd/sd-bus/test-bus-introspect.c',
+-          'src/libsystemd/sd-bus/test-vtable-data.h']],
++        [files('sd-bus/test-bus-introspect.c',
++               'sd-bus/test-vtable-data.h')],
+ 
+-        [['src/libsystemd/sd-event/test-event.c']],
++        [files('sd-event/test-event.c')],
+ 
+-        [['src/libsystemd/sd-netlink/test-netlink.c']],
++        [files('sd-netlink/test-netlink.c')],
+ 
+-        [['src/libsystemd/sd-resolve/test-resolve.c'],
++        [files('sd-resolve/test-resolve.c'),
+          [],
+          [threads],
+          [], '', 'timeout=120'],
+ 
+-        [['src/libsystemd/sd-login/test-login.c']],
++        [files('sd-login/test-login.c')],
+ 
+-        [['src/libsystemd/sd-device/test-sd-device.c']],
++        [files('sd-device/test-sd-device.c')],
+ 
+-        [['src/libsystemd/sd-device/test-device-util.c']],
++        [files('sd-device/test-device-util.c')],
+ 
+-        [['src/libsystemd/sd-device/test-sd-device-monitor.c']],
++        [files('sd-device/test-sd-device-monitor.c')],
+ ]
+ 
+ if cxx_cmd != ''
+         tests += [
+-                [['src/libsystemd/sd-bus/test-bus-vtable-cc.cc']],
++                [files('sd-bus/test-bus-vtable-cc.cc')],
+         ]
+ endif
+ 
+diff --git a/src/libudev/meson.build b/src/libudev/meson.build
+index 77b31a9492..2d51ff7c58 100644
+--- a/src/libudev/meson.build
++++ b/src/libudev/meson.build
+@@ -45,7 +45,7 @@ custom_target(
+ ############################################################
+ 
+ tests += [
+-        [['src/libudev/test-libudev.c'],
++        [files('test-libudev.c'),
+          [libshared,
+           libudev_basic]],
+ ]
+diff --git a/src/locale/meson.build b/src/locale/meson.build
+index a2ff2a9873..0ccf71583d 100644
+--- a/src/locale/meson.build
++++ b/src/locale/meson.build
+@@ -30,7 +30,7 @@ if conf.get('ENABLE_LOCALED') == 1
+ endif
+ 
+ tests += [
+-        [['src/locale/test-keymap-util.c',
+-          'src/locale/keymap-util.c',
+-          'src/locale/keymap-util.h']],
++        [files('test-keymap-util.c',
++               'keymap-util.c',
++               'keymap-util.h')],
+ ]
+diff --git a/src/login/meson.build b/src/login/meson.build
+index a78c2bc2dd..92f491665c 100644
+--- a/src/login/meson.build
++++ b/src/login/meson.build
+@@ -101,12 +101,12 @@ endif
+ ############################################################
+ 
+ tests += [
+-        [['src/login/test-login-shared.c']],
++        [files('test-login-shared.c')],
+ 
+-        [['src/login/test-inhibit.c'],
++        [files('test-inhibit.c'),
+          [], [], [], '', 'manual'],
+ 
+-        [['src/login/test-login-tables.c'],
++        [files('test-login-tables.c'),
+          [liblogind_core,
+           libshared],
+          [threads]],
+diff --git a/src/machine/meson.build b/src/machine/meson.build
+index ef858a5988..87e4dde24c 100644
+--- a/src/machine/meson.build
++++ b/src/machine/meson.build
+@@ -37,7 +37,7 @@ if conf.get('ENABLE_MACHINED') == 1
+ endif
+ 
+ tests += [
+-        [['src/machine/test-machine-tables.c'],
++        [files('test-machine-tables.c'),
+          [libmachine_core,
+           libshared],
+          [threads]],
+diff --git a/src/network/meson.build b/src/network/meson.build
+index 5857439c5a..a598701e4f 100644
+--- a/src/network/meson.build
++++ b/src/network/meson.build
+@@ -277,37 +277,37 @@ fuzzers += [
+ ]
+ 
+ tests += [
+-        [['src/network/test-networkd-address.c'],
++        [files('test-networkd-address.c'),
+          [libnetworkd_core,
+           libsystemd_network],
+          [],
+          network_includes],
+ 
+-        [['src/network/test-networkd-conf.c'],
++        [files('test-networkd-conf.c'),
+          [libnetworkd_core,
+           libsystemd_network],
+          [],
+          network_includes],
+ 
+-        [['src/network/test-networkd-util.c'],
++        [files('test-networkd-util.c'),
+          [libnetworkd_core,
+           libsystemd_network],
+          [],
+          network_includes],
+ 
+-        [['src/network/test-network.c'],
++        [files('test-network.c'),
+          [libnetworkd_core,
+           libsystemd_network],
+          [threads],
+          network_includes],
+ 
+-        [['src/network/test-network-tables.c'],
++        [files('test-network-tables.c'),
+          [libnetworkd_core,
+           libsystemd_network],
+          [threads],
+          network_includes],
+ 
+-        [['src/network/generator/test-network-generator.c',
+-          'src/network/generator/network-generator.c',
+-          'src/network/generator/network-generator.h']],
++        [files('generator/test-network-generator.c',
++               'generator/network-generator.c',
++               'generator/network-generator.h')],
+ ]
+diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build
+index 11ac404e99..3c1a9c6182 100644
+--- a/src/nspawn/meson.build
++++ b/src/nspawn/meson.build
+@@ -53,12 +53,12 @@ systemd_nspawn_sources = files('nspawn.c')
+ ############################################################
+ 
+ tests += [
+-        [['src/nspawn/test-nspawn-tables.c'],
++        [files('test-nspawn-tables.c'),
+          [libnspawn_core,
+           libshared],
+          [libseccomp]],
+ 
+-        [['src/nspawn/test-patch-uid.c'],
++        [files('test-patch-uid.c'),
+          [libnspawn_core,
+           libshared],
+          [libacl],
+diff --git a/src/oom/meson.build b/src/oom/meson.build
+index 4e1c8543c8..da00cbf99e 100644
+--- a/src/oom/meson.build
++++ b/src/oom/meson.build
+@@ -28,7 +28,7 @@ if conf.get('ENABLE_OOMD') == 1
+ endif
+ 
+ tests += [
+-        [['src/oom/test-oomd-util.c',
+-          'src/oom/oomd-util.c',
+-          'src/oom/oomd-util.h']],
++        [files('test-oomd-util.c',
++               'oomd-util.c',
++               'oomd-util.h')],
+ ]
+diff --git a/src/resolve/meson.build b/src/resolve/meson.build
+index 2cdf24b1cb..4de50c3d8e 100644
+--- a/src/resolve/meson.build
++++ b/src/resolve/meson.build
+@@ -174,40 +174,40 @@ custom_target(
+ ############################################################
+ 
+ tests += [
+-        [['src/resolve/test-resolve-tables.c'],
++        [files('test-resolve-tables.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+           libm]],
+ 
+-        [['src/resolve/test-dns-packet.c'],
++        [files('test-dns-packet.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+           libm]],
+ 
+-        [['src/resolve/test-resolved-etc-hosts.c',
+-          'src/resolve/resolved-etc-hosts.c',
+-          'src/resolve/resolved-etc-hosts.h'],
++        [files('test-resolved-etc-hosts.c',
++               'resolved-etc-hosts.c',
++               'resolved-etc-hosts.h'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+           libm]],
+ 
+-        [['src/resolve/test-resolved-packet.c'],
++        [files('test-resolved-packet.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+           libm]],
+ 
+-        [['src/resolve/test-dnssec.c'],
++        [files('test-dnssec.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+           libm],
+          [], 'HAVE_OPENSSL_OR_GCRYPT'],
+ 
+-        [['src/resolve/test-dnssec-complex.c'],
++        [files('test-dnssec-complex.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+diff --git a/src/shutdown/meson.build b/src/shutdown/meson.build
+index e1348d95d4..fcc9f9f0ac 100644
+--- a/src/shutdown/meson.build
++++ b/src/shutdown/meson.build
+@@ -7,9 +7,9 @@ systemd_shutdown_sources = files('''
+ '''.split())
+ 
+ tests += [
+-        [['src/shutdown/test-umount.c',
+-          'src/shutdown/umount.c',
+-          'src/shutdown/umount.h'],
++        [files('test-umount.c',
++               'umount.c',
++               'umount.h'),
+          [],
+          [libmount]],
+ ]
+diff --git a/src/test/meson.build b/src/test/meson.build
+index 48001d17ec..9e224d69ce 100644
+--- a/src/test/meson.build
++++ b/src/test/meson.build
+@@ -41,11 +41,11 @@ test_dlopen_c = files('test-dlopen.c')
+ ############################################################
+ 
+ tests += [
+-        [['src/test/test-device-nodes.c']],
++        [files('test-device-nodes.c')],
+ 
+-        [['src/test/test-ether-addr-util.c']],
++        [files('test-ether-addr-util.c')],
+ 
+-        [['src/test/test-engine.c'],
++        [files('test-engine.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -56,21 +56,21 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-emergency-action.c'],
++        [files('test-emergency-action.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes],
+ 
+-        [['src/test/test-chown-rec.c'],
++        [files('test-chown-rec.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes],
+ 
+-        [['src/test/test-dlopen-so.c']],
++        [files('test-dlopen-so.c')],
+ 
+-        [['src/test/test-job-type.c'],
++        [files('test-job-type.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -81,7 +81,7 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-ns.c'],
++        [files('test-ns.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -92,7 +92,7 @@ tests += [
+           libblkid],
+          core_includes, '', 'manual'],
+ 
+-        [['src/test/test-loopback.c'],
++        [files('test-loopback.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -103,14 +103,14 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-dns-domain.c']],
++        [files('test-dns-domain.c')],
+ 
+-        [['src/test/test-boot-timestamps.c'],
++        [files('test-boot-timestamps.c'),
+          [], [], [], 'ENABLE_EFI'],
+ 
+-        [['src/test/test-unit-file.c']],
++        [files('test-unit-file.c')],
+ 
+-        [['src/test/test-unit-name.c'],
++        [files('test-unit-name.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -121,7 +121,7 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-load-fragment.c'],
++        [files('test-load-fragment.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -132,9 +132,9 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-serialize.c']],
++        [files('test-serialize.c')],
+ 
+-        [['src/test/test-unit-serialize.c'],
++        [files('test-unit-serialize.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -145,196 +145,196 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-utf8.c']],
++        [files('test-utf8.c')],
+ 
+-        [['src/test/test-kbd-util.c']],
++        [files('test-kbd-util.c')],
+ 
+-        [['src/test/test-blockdev-util.c']],
++        [files('test-blockdev-util.c')],
+ 
+-        [['src/test/test-dev-setup.c']],
++        [files('test-dev-setup.c')],
+ 
+-        [['src/test/test-capability.c'],
++        [files('test-capability.c'),
+          [],
+          [libcap]],
+ 
+-        [['src/test/test-async.c'],
++        [files('test-async.c'),
+          [], [], [], '', 'timeout=120'],
+ 
+-        [['src/test/test-locale-util.c']],
++        [files('test-locale-util.c')],
+ 
+-        [['src/test/test-copy.c']],
++        [files('test-copy.c')],
+ 
+-        [['src/test/test-recurse-dir.c']],
++        [files('test-recurse-dir.c')],
+ 
+-        [['src/test/test-data-fd-util.c']],
++        [files('test-data-fd-util.c')],
+ 
+-        [['src/test/test-static-destruct.c']],
++        [files('test-static-destruct.c')],
+ 
+-        [['src/test/test-sigbus.c']],
++        [files('test-sigbus.c')],
+ 
+-        [['src/test/test-condition.c']],
++        [files('test-condition.c')],
+ 
+-        [['src/test/test-fdset.c']],
++        [files('test-fdset.c')],
+ 
+-        [['src/test/test-fstab-util.c']],
++        [files('test-fstab-util.c')],
+ 
+-        [['src/test/test-random-util.c'],
++        [files('test-random-util.c'),
+          [],
+          [libm],
+          [], '', 'timeout=120'],
+ 
+-        [['src/test/test-format-table.c']],
++        [files('test-format-table.c')],
+ 
+-        [['src/test/test-format-util.c']],
++        [files('test-format-util.c')],
+ 
+-        [['src/test/test-ratelimit.c']],
++        [files('test-ratelimit.c')],
+ 
+-        [['src/test/test-util.c']],
++        [files('test-util.c')],
+ 
+-        [['src/test/test-macro.c']],
++        [files('test-macro.c')],
+ 
+-        [['src/test/test-json.c']],
++        [files('test-json.c')],
+ 
+-        [['src/test/test-modhex.c']],
++        [files('test-modhex.c')],
+ 
+-        [['src/test/test-libmount.c'],
++        [files('test-libmount.c'),
+          [],
+          [threads,
+           libmount]],
+ 
+-        [['src/test/test-mount-util.c']],
++        [files('test-mount-util.c')],
+ 
+-        [['src/test/test-mountpoint-util.c']],
++        [files('test-mountpoint-util.c')],
+ 
+-        [['src/test/test-exec-util.c']],
++        [files('test-exec-util.c')],
+ 
+-        [['src/test/test-hexdecoct.c']],
++        [files('test-hexdecoct.c')],
+ 
+-        [['src/test/test-alloc-util.c']],
++        [files('test-alloc-util.c')],
+ 
+-        [['src/test/test-xattr-util.c']],
++        [files('test-xattr-util.c')],
+ 
+-        [['src/test/test-io-util.c']],
++        [files('test-io-util.c')],
+ 
+-        [['src/test/test-glob-util.c']],
++        [files('test-glob-util.c')],
+ 
+-        [['src/test/test-fs-util.c']],
++        [files('test-fs-util.c')],
+ 
+-        [['src/test/test-install-file.c']],
++        [files('test-install-file.c')],
+ 
+-        [['src/test/test-umask-util.c']],
++        [files('test-umask-util.c')],
+ 
+-        [['src/test/test-proc-cmdline.c']],
++        [files('test-proc-cmdline.c')],
+ 
+-        [['src/test/test-fd-util.c'],
++        [files('test-fd-util.c'),
+          [],
+          [libseccomp]],
+ 
+-        [['src/test/test-web-util.c']],
++        [files('test-web-util.c')],
+ 
+-        [['src/test/test-cpu-set-util.c']],
++        [files('test-cpu-set-util.c')],
+ 
+-        [['src/test/test-stat-util.c']],
++        [files('test-stat-util.c')],
+ 
+-        [['src/test/test-os-util.c']],
++        [files('test-os-util.c')],
+ 
+-        [['src/test/test-libcrypt-util.c'],
++        [files('test-libcrypt-util.c'),
+          [], [libcrypt], [], '', 'timeout=120'],
+ 
+-        [['src/test/test-escape.c']],
++        [files('test-escape.c')],
+ 
+-        [['src/test/test-exit-status.c']],
++        [files('test-exit-status.c')],
+ 
+-        [['src/test/test-specifier.c']],
++        [files('test-specifier.c')],
+ 
+-        [['src/test/test-string-util.c']],
++        [files('test-string-util.c')],
+ 
+-        [['src/test/test-extract-word.c']],
++        [files('test-extract-word.c')],
+ 
+-        [['src/test/test-parse-argument.c']],
++        [files('test-parse-argument.c')],
+ 
+-        [['src/test/test-parse-socket-bind-item.c']],
++        [files('test-parse-socket-bind-item.c')],
+ 
+-        [['src/test/test-parse-util.c']],
++        [files('test-parse-util.c')],
+ 
+-        [['src/test/test-sysctl-util.c']],
++        [files('test-sysctl-util.c')],
+ 
+-        [['src/test/test-import-util.c']],
++        [files('test-import-util.c')],
+ 
+-        [['src/test/test-uid-alloc-range.c']],
++        [files('test-uid-alloc-range.c')],
+ 
+-        [['src/test/test-user-util.c']],
++        [files('test-user-util.c')],
+ 
+-        [['src/test/test-hostname-setup.c']],
++        [files('test-hostname-setup.c')],
+ 
+-        [['src/test/test-hostname-util.c']],
++        [files('test-hostname-util.c')],
+ 
+-        [['src/test/test-process-util.c']],
++        [files('test-process-util.c')],
+ 
+-        [['src/test/test-terminal-util.c']],
++        [files('test-terminal-util.c')],
+ 
+-        [['src/test/test-path-lookup.c']],
++        [files('test-path-lookup.c')],
+ 
+-        [['src/test/test-pretty-print.c']],
++        [files('test-pretty-print.c')],
+ 
+-        [['src/test/test-uid-range.c']],
++        [files('test-uid-range.c')],
+ 
+-        [['src/test/test-cap-list.c',
+-          generated_gperf_headers],
++        [files('test-cap-list.c') +
++         generated_gperf_headers,
+          [],
+          [libcap]],
+ 
+-        [['src/test/test-socket-util.c']],
++        [files('test-socket-util.c')],
+ 
+-        [['src/test/test-socket-netlink.c']],
++        [files('test-socket-netlink.c')],
+ 
+-        [['src/test/test-in-addr-util.c']],
++        [files('test-in-addr-util.c')],
+ 
+-        [['src/test/test-in-addr-prefix-util.c']],
++        [files('test-in-addr-prefix-util.c')],
+ 
+-        [['src/test/test-barrier.c']],
++        [files('test-barrier.c')],
+ 
+-        [['src/test/test-tmpfiles.c']],
++        [files('test-tmpfiles.c')],
+ 
+-        [['src/test/test-namespace.c'],
++        [files('test-namespace.c'),
+          [libcore,
+           libshared],
+          [threads,
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-verbs.c']],
++        [files('test-verbs.c')],
+ 
+-        [['src/test/test-install-root.c']],
++        [files('test-install-root.c')],
+ 
+-        [['src/test/test-acl-util.c'],
++        [files('test-acl-util.c'),
+          [], [], [], 'HAVE_ACL'],
+ 
+-        [['src/test/test-seccomp.c'],
++        [files('test-seccomp.c'),
+          [],
+          [libseccomp],
+          [], 'HAVE_SECCOMP'],
+ 
+-        [['src/test/test-rlimit-util.c']],
++        [files('test-rlimit-util.c')],
+ 
+-        [['src/test/test-ask-password-api.c'],
++        [files('test-ask-password-api.c'),
+          [], [], [], '', 'manual'],
+ 
+-        [['src/test/test-signal-util.c']],
++        [files('test-signal-util.c')],
+ 
+-        [['src/test/test-loop-block.c'],
++        [files('test-loop-block.c'),
+          [libcore,
+           libshared],
+          [threads,
+           libblkid],
+          core_includes, '', '', [], false],
+ 
+-        [['src/test/test-selinux.c']],
++        [files('test-selinux.c')],
+ 
+-        [['src/test/test-sizeof.c'],
++        [files('test-sizeof.c'),
+          [libbasic]],
+ 
+-        [['src/test/test-bpf-devices.c'],
++        [files('test-bpf-devices.c'),
+          [libcore,
+           libshared],
+          [libmount,
+@@ -345,7 +345,7 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-bpf-firewall.c'],
++        [files('test-bpf-firewall.c'),
+          [libcore,
+           libshared],
+          [libmount,
+@@ -356,13 +356,13 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-bpf-foreign-programs.c'],
++        [files('test-bpf-foreign-programs.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes],
+ 
+-        [['src/test/test-bpf-lsm.c'],
++        [files('test-bpf-lsm.c'),
+          [libcore,
+           libshared],
+          [libmount,
+@@ -373,7 +373,7 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-watch-pid.c'],
++        [files('test-watch-pid.c'),
+          [libcore,
+           libshared],
+          [libmount,
+@@ -384,32 +384,32 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-hashmap.c',
+-          'src/test/test-hashmap-plain.c',
+-          test_hashmap_ordered_c],
++        [files('test-hashmap.c',
++               'test-hashmap-plain.c') +
++         [test_hashmap_ordered_c],
+          [], [], [], '', 'timeout=180'],
+ 
+-        [['src/test/test-set.c']],
++        [files('test-set.c')],
+ 
+-        [['src/test/test-ordered-set.c']],
++        [files('test-ordered-set.c')],
+ 
+-        [['src/test/test-set-disable-mempool.c'],
++        [files('test-set-disable-mempool.c'),
+          [],
+          [threads]],
+ 
+-        [['src/test/test-hash-funcs.c']],
++        [files('test-hash-funcs.c')],
+ 
+-        [['src/test/test-bitmap.c']],
++        [files('test-bitmap.c')],
+ 
+-        [['src/test/test-xml.c']],
++        [files('test-xml.c')],
+ 
+-        [['src/test/test-list.c']],
++        [files('test-list.c')],
+ 
+-        [['src/test/test-procfs-util.c']],
++        [files('test-procfs-util.c')],
+ 
+-        [['src/test/test-unaligned.c']],
++        [files('test-unaligned.c')],
+ 
+-        [['src/test/test-tables.c'],
++        [files('test-tables.c'),
+          [libcore,
+           libjournal_core,
+           libudevd_core,
+@@ -422,70 +422,70 @@ tests += [
+           libblkid],
+          [core_includes, journal_includes, udev_includes]],
+ 
+-        [['src/test/test-prioq.c']],
++        [files('test-prioq.c')],
+ 
+-        [['src/test/test-fileio.c']],
++        [files('test-fileio.c')],
+ 
+-        [['src/test/test-time-util.c']],
++        [files('test-time-util.c')],
+ 
+-        [['src/test/test-clock.c']],
++        [files('test-clock.c')],
+ 
+-        [['src/test/test-tmpfile-util.c']],
++        [files('test-tmpfile-util.c')],
+ 
+-        [['src/test/test-architecture.c']],
++        [files('test-architecture.c')],
+ 
+-        [['src/test/test-gpt.c']],
++        [files('test-gpt.c')],
+ 
+-        [['src/test/test-log.c']],
++        [files('test-log.c')],
+ 
+-        [['src/test/test-ipcrm.c'],
++        [files('test-ipcrm.c'),
+          [], [], [], '', 'unsafe'],
+ 
+-        [['src/test/test-btrfs.c'],
++        [files('test-btrfs.c'),
+          [], [], [], '', 'manual'],
+ 
+-        [['src/test/test-firewall-util.c']],
++        [files('test-firewall-util.c')],
+ 
+-        [['src/test/test-net-naming-scheme.c']],
++        [files('test-net-naming-scheme.c')],
+ 
+-        [['src/test/test-netlink-manual.c'],
++        [files('test-netlink-manual.c'),
+          [],
+          [libkmod],
+          [], 'HAVE_KMOD', 'manual'],
+ 
+-        [['src/test/test-ellipsize.c']],
++        [files('test-ellipsize.c')],
+ 
+-        [['src/test/test-date.c']],
++        [files('test-date.c')],
+ 
+-        [['src/test/test-sleep.c']],
++        [files('test-sleep.c')],
+ 
+-        [['src/test/test-tpm2.c']],
++        [files('test-tpm2.c')],
+ 
+-        [['src/test/test-replace-var.c']],
++        [files('test-replace-var.c')],
+ 
+-        [['src/test/test-calendarspec.c']],
++        [files('test-calendarspec.c')],
+ 
+-        [['src/test/test-strip-tab-ansi.c']],
++        [files('test-strip-tab-ansi.c')],
+ 
+-        [['src/test/test-coredump-util.c']],
++        [files('test-coredump-util.c')],
+ 
+-        [['src/test/test-daemon.c']],
++        [files('test-daemon.c')],
+ 
+-        [['src/test/test-cgroup.c']],
++        [files('test-cgroup.c')],
+ 
+-        [['src/test/test-cgroup-cpu.c'],
++        [files('test-cgroup-cpu.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes],
+ 
+-        [['src/test/test-cgroup-unit-default.c'],
++        [files('test-cgroup-unit-default.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes],
+ 
+-        [['src/test/test-cgroup-mask.c'],
++        [files('test-cgroup-mask.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -496,30 +496,30 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-varlink.c'],
++        [files('test-varlink.c'),
+          [],
+          [threads]],
+ 
+-        [['src/test/test-cgroup-util.c']],
++        [files('test-cgroup-util.c')],
+ 
+-        [['src/test/test-cgroup-setup.c']],
++        [files('test-cgroup-setup.c')],
+ 
+-        [['src/test/test-env-file.c']],
++        [files('test-env-file.c')],
+ 
+-        [['src/test/test-env-util.c']],
++        [files('test-env-util.c')],
+ 
+-        [['src/test/test-strbuf.c']],
++        [files('test-strbuf.c')],
+ 
+-        [['src/test/test-strv.c']],
++        [files('test-strv.c')],
+ 
+-        [['src/test/test-path-util.c']],
++        [files('test-path-util.c')],
+ 
+-        [['src/test/test-rm-rf.c']],
++        [files('test-rm-rf.c')],
+ 
+-        [['src/test/test-chase-symlinks.c'],
++        [files('test-chase-symlinks.c'),
+          [], [], [], '', 'manual'],
+ 
+-        [['src/test/test-path.c'],
++        [files('test-path.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -530,7 +530,7 @@ tests += [
+           libblkid],
+          core_includes, '', 'timeout=120'],
+ 
+-        [['src/test/test-execute.c'],
++        [files('test-execute.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -541,20 +541,20 @@ tests += [
+           libblkid],
+          core_includes, '', 'timeout=360'],
+ 
+-        [['src/test/test-siphash24.c']],
++        [files('test-siphash24.c')],
+ 
+-        [['src/test/test-strxcpyx.c']],
++        [files('test-strxcpyx.c')],
+ 
+-        [['src/test/test-install.c'],
++        [files('test-install.c'),
+          [libcore,
+           libshared],
+          [],
+          core_includes, '', 'manual'],
+ 
+-        [['src/test/test-watchdog.c'],
++        [files('test-watchdog.c'),
+          [], [], [], '', 'unsafe'],
+ 
+-        [['src/test/test-sched-prio.c'],
++        [files('test-sched-prio.c'),
+          [libcore,
+           libshared],
+          [threads,
+@@ -565,25 +565,25 @@ tests += [
+           libblkid],
+          core_includes],
+ 
+-        [['src/test/test-conf-files.c']],
++        [files('test-conf-files.c')],
+ 
+-        [['src/test/test-conf-parser.c']],
++        [files('test-conf-parser.c')],
+ 
+-        [['src/test/test-af-list.c',
+-          generated_gperf_headers]],
++        [files('test-af-list.c') +
++         generated_gperf_headers],
+ 
+-        [['src/test/test-arphrd-util.c',
+-          generated_gperf_headers]],
++        [files('test-arphrd-util.c') +
++         generated_gperf_headers],
+ 
+-        [['src/test/test-errno-list.c',
+-          generated_gperf_headers]],
++        [files('test-errno-list.c') +
++         generated_gperf_headers],
+ 
+-        [['src/test/test-ip-protocol-list.c',
+-          shared_generated_gperf_headers]],
++        [files('test-ip-protocol-list.c') +
++         shared_generated_gperf_headers],
+ 
+-        [['src/test/test-journal-importer.c']],
++        [files('test-journal-importer.c')],
+ 
+-        [['src/test/test-udev.c'],
++        [files('test-udev.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+@@ -594,49 +594,49 @@ tests += [
+           libselinux],
+          udev_includes, '', 'manual'],
+ 
+-        [['src/test/test-udev-util.c']],
++        [files('test-udev-util.c')],
+ 
+-        [['src/test/test-id128.c']],
++        [files('test-id128.c')],
+ 
+-        [['src/test/test-cryptolib.c'],
++        [files('test-cryptolib.c'),
+          [libshared],
+          [lib_openssl_or_gcrypt],
+          [], 'HAVE_OPENSSL_OR_GCRYPT'],
+ 
+-        [['src/test/test-nss-hosts.c',
+-          'src/test/nss-test-util.c',
+-          'src/test/nss-test-util.h'],
++        [files('test-nss-hosts.c',
++               'nss-test-util.c',
++               'nss-test-util.h'),
+          [],
+          [libdl],
+          [], 'ENABLE_NSS', 'manual'],
+ 
+-        [['src/test/test-nss-users.c',
+-          'src/test/nss-test-util.c',
+-          'src/test/nss-test-util.h'],
++        [files('test-nss-users.c',
++               'nss-test-util.c',
++               'nss-test-util.h'),
+          [],
+          [libdl],
+          [], 'ENABLE_NSS', 'manual'],
+ 
+-        [['src/test/test-bus-util.c']],
++        [files('test-bus-util.c')],
+ 
+-        [['src/test/test-percent-util.c']],
++        [files('test-percent-util.c')],
+ 
+-        [['src/test/test-sd-hwdb.c']],
++        [files('test-sd-hwdb.c')],
+ 
+-        [['src/test/test-sd-path.c']],
++        [files('test-sd-path.c')],
+ 
+-        [['src/test/test-local-addresses.c']],
++        [files('test-local-addresses.c')],
+ 
+-        [['src/test/test-psi-util.c']],
++        [files('test-psi-util.c')],
+ 
+-        [['src/test/test-qrcode-util.c'],
++        [files('test-qrcode-util.c'),
+          [],
+          [libdl]],
+ 
+-        [['src/test/test-nscd-flush.c'],
++        [files('test-nscd-flush.c'),
+          [], [], [], 'ENABLE_NSCD', 'manual'],
+ 
+-        [['src/test/test-hmac.c']],
++        [files('test-hmac.c')],
+ ]
+ 
+ ############################################################
+@@ -644,23 +644,23 @@ tests += [
+ # define some tests here, because the link_with deps were not defined earlier
+ 
+ tests += [
+-        [['src/libsystemd/sd-bus/test-bus-error.c'],
++        [files('../libsystemd/sd-bus/test-bus-error.c'),
+          [libshared_static,
+           libsystemd_static]],
+ 
+-        [['src/libsystemd/sd-device/test-sd-device-thread.c'],
++        [files('../libsystemd/sd-device/test-sd-device-thread.c'),
+          [libsystemd],
+          [threads]],
+ 
+-        [['src/libudev/test-udev-device-thread.c'],
++        [files('../libudev/test-udev-device-thread.c'),
+          [libudev],
+          [threads]],
+ ]
+ 
+ tests += [
+-         [['src/test/test-socket-bind.c'],
+-          [libcore,
+-          libshared],
++        [files('test-socket-bind.c'),
++         [libcore,
++         libshared],
+          [libdl],
+          core_includes,
+          'BPF_FRAMEWORK'],
+diff --git a/src/timesync/meson.build b/src/timesync/meson.build
+index 83dd7c8f67..8ecfbfab82 100644
+--- a/src/timesync/meson.build
++++ b/src/timesync/meson.build
+@@ -55,7 +55,7 @@ endif
+ ############################################################
+ 
+ tests += [
+-        [['src/timesync/test-timesync.c'],
++        [files('test-timesync.c'),
+          [libtimesyncd_core,
+           libshared],
+          [libm]],
+diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build
+index c72b386cda..cfa3d370a7 100644
+--- a/src/tmpfiles/meson.build
++++ b/src/tmpfiles/meson.build
+@@ -6,7 +6,7 @@ systemd_tmpfiles_sources = files(
+         'offline-passwd.h')
+ 
+ tests += [
+-        [['src/tmpfiles/test-offline-passwd.c',
+-          'src/tmpfiles/offline-passwd.c',
+-          'src/tmpfiles/offline-passwd.h']],
++        [files('test-offline-passwd.c',
++               'offline-passwd.c',
++               'offline-passwd.h')],
+ ]
+diff --git a/src/udev/meson.build b/src/udev/meson.build
+index 29ac85da12..57fbf8c8fc 100644
+--- a/src/udev/meson.build
++++ b/src/udev/meson.build
+@@ -195,28 +195,28 @@ fuzzers += [
+ ]
+ 
+ tests += [
+-        [['src/udev/test-udev-event.c'],
++        [files('test-udev-event.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+           libacl]],
+ 
+-        [['src/udev/test-udev-node.c'],
++        [files('test-udev-node.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+           libacl]],
+ 
+-        [['src/udev/test-udev-builtin.c'],
++        [files('test-udev-builtin.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+           libacl]],
+ 
+-        [['src/udev/test-udev-netlink.c',
+-          'src/udev/udev-netlink.c',
+-          'src/udev/udev-netlink.h']],
++        [files('test-udev-netlink.c',
++               'udev-netlink.c',
++               'udev-netlink.h')],
+ 
+-        [['src/udev/fido_id/test-fido-id-desc.c',
+-          'src/udev/fido_id/fido_id_desc.c']],
++        [files('fido_id/test-fido-id-desc.c',
++               'fido_id/fido_id_desc.c')],
+ ]
+diff --git a/src/xdg-autostart-generator/meson.build b/src/xdg-autostart-generator/meson.build
+index aa722f7f3c..6418f57c40 100644
+--- a/src/xdg-autostart-generator/meson.build
++++ b/src/xdg-autostart-generator/meson.build
+@@ -6,9 +6,9 @@ systemd_xdg_autostart_generator_sources = files(
+         'xdg-autostart-service.h')
+ 
+ tests += [
+-        [['src/xdg-autostart-generator/test-xdg-autostart.c',
+-          'src/xdg-autostart-generator/xdg-autostart-service.c',
+-          'src/xdg-autostart-generator/xdg-autostart-service.h']],
++        [files('test-xdg-autostart.c',
++               'xdg-autostart-service.c',
++               'xdg-autostart-service.h')],
+ ]
+ 
+ fuzzers += [
diff --git a/SOURCES/0057-test-lvm-2.03.15-dropped-the-static-autoactivation.patch b/SOURCES/0057-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
deleted file mode 100644
index 8629b1c..0000000
--- a/SOURCES/0057-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From abf906d35843be10a9321a43062c8f9e411ccc1b Mon Sep 17 00:00:00 2001
-From: Frantisek Sumsal <frantisek@sumsal.cz>
-Date: Wed, 9 Feb 2022 22:35:03 +0100
-Subject: [PATCH] test: lvm 2.03.15 dropped the static autoactivation
-
-so install the respective generator only if we're running with older
-lvm versions.
-
-See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
-(cherry picked from commit d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4)
-
-Related: #2087677
----
- test/test-functions | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/test/test-functions b/test/test-functions
-index 4827b6bedf..dcc893733c 100644
---- a/test/test-functions
-+++ b/test/test-functions
-@@ -973,16 +973,19 @@ install_lvm() {
-     image_install lvm
-     image_install "${ROOTLIBDIR:?}"/system/lvm2-lvmpolld.{service,socket}
-     image_install "${ROOTLIBDIR:?}"/system/{blk-availability,lvm2-monitor}.service
--    image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
-     image_install -o "/lib/tmpfiles.d/lvm2.conf"
-     if get_bool "$LOOKS_LIKE_DEBIAN"; then
-         inst_rules 56-lvm.rules 69-lvm-metad.rules
-     else
-         # Support the new udev autoactivation introduced in lvm 2.03.14
-         # https://sourceware.org/git/?p=lvm2.git;a=commit;h=67722b312390cdab29c076c912e14bd739c5c0f6
-+        # Static autoactivation (via lvm2-activation-generator) was dropped
-+        # in lvm 2.03.15
-+        # https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
-         if [[ -f /lib/udev/rules.d/69-dm-lvm.rules ]]; then
-             inst_rules 11-dm-lvm.rules 69-dm-lvm.rules
-         else
-+            image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
-             image_install "${ROOTLIBDIR:?}"/system/lvm2-pvscan@.service
-             inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules
-         fi
diff --git a/SOURCES/0058-ci-limit-which-env-variables-we-pass-through-sudo.patch b/SOURCES/0058-ci-limit-which-env-variables-we-pass-through-sudo.patch
deleted file mode 100644
index 7eb728d..0000000
--- a/SOURCES/0058-ci-limit-which-env-variables-we-pass-through-sudo.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From b91a67f2fdd11710c67b4a965bcbecce2833c8d5 Mon Sep 17 00:00:00 2001
-From: Frantisek Sumsal <frantisek@sumsal.cz>
-Date: Wed, 13 Jul 2022 11:12:36 +0200
-Subject: [PATCH] ci: limit which env variables we pass through `sudo`
-
-to work around #23987.
-
-(cherry picked from commit d46e7c7cfd6c286a38298c067f16ac784c2a26f0)
-
-Related: #2087677
----
- .github/workflows/unit_tests.yml | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
-index 2afde5d59d..58b7b7cdb2 100644
---- a/.github/workflows/unit_tests.yml
-+++ b/.github/workflows/unit_tests.yml
-@@ -28,8 +28,14 @@ jobs:
-       - name: Repository checkout
-         uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
-       - name: Install build dependencies
--        run: sudo -E .github/workflows/unit_tests.sh SETUP
-+        run: |
-+          # Drop XDG_* stuff from /etc/environment, so we don't get the user
-+          # XDG_* variables when running under sudo
-+          sudo sed -i '/^XDG_/d' /etc/environment
-+          # Pass only specific env variables through sudo, to avoid having
-+          # the already existing XDG_* stuff on the "other side"
-+          sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh SETUP
-       - name: Build & test (${{ matrix.run_phase }}-${{ matrix.cryptolib }})
--        run: sudo -E .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }}
-+        run: sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }}
-         env:
-           CRYPTOLIB: ${{ matrix.cryptolib }}
diff --git a/SOURCES/0058-tests-add-fuzz-bcd.patch b/SOURCES/0058-tests-add-fuzz-bcd.patch
new file mode 100644
index 0000000..3669c13
--- /dev/null
+++ b/SOURCES/0058-tests-add-fuzz-bcd.patch
@@ -0,0 +1,95 @@
+From f06002981d2bd2a582d2252f7d509205bcc2a9ed Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Sun, 26 Dec 2021 23:26:56 +0000
+Subject: [PATCH] tests: add fuzz-bcd
+
+(cherry picked from commit 4b65fc8725fa169bf870eb022d7b346796977c21)
+
+Related: #2017035
+---
+ src/boot/efi/fuzz-bcd.c  | 26 ++++++++++++++++++++++++++
+ src/boot/efi/meson.build |  3 +++
+ tools/oss-fuzz.sh        | 16 ++++++++++++++++
+ 3 files changed, 45 insertions(+)
+ create mode 100644 src/boot/efi/fuzz-bcd.c
+
+diff --git a/src/boot/efi/fuzz-bcd.c b/src/boot/efi/fuzz-bcd.c
+new file mode 100644
+index 0000000000..e5ed6638a4
+--- /dev/null
++++ b/src/boot/efi/fuzz-bcd.c
+@@ -0,0 +1,26 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++
++#include "alloc-util.h"
++#include "fd-util.h"
++#include "fuzz.h"
++#include "utf8.h"
++
++#include "bcd.c"
++
++int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
++        _cleanup_free_ void *p = NULL;
++
++        /* This limit was borrowed from src/boot/efi/boot.c */
++        if (size > 100*1024)
++                return 0;
++
++        if (!getenv("SYSTEMD_LOG_LEVEL"))
++                log_set_max_level(LOG_CRIT);
++
++        p = memdup(data, size);
++        assert_se(p);
++
++        char16_t *title = get_bcd_title(p, size);
++        assert_se(!title || char16_strlen(title) >= 0);
++        return 0;
++}
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 16b34f0ac2..229771026d 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -358,6 +358,9 @@ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
+                  [],
+                  'HAVE_ZSTD'],
+         ]
++        fuzzers += [
++                [['src/boot/efi/fuzz-bcd.c']],
++        ]
+ endif
+ 
+ systemd_boot_objects = []
+diff --git a/tools/oss-fuzz.sh b/tools/oss-fuzz.sh
+index 8a19da665e..ae57fc25d5 100755
+--- a/tools/oss-fuzz.sh
++++ b/tools/oss-fuzz.sh
+@@ -36,6 +36,13 @@ else
+     apt-get install -y gperf m4 gettext python3-pip \
+         libcap-dev libmount-dev libkmod-dev \
+         pkg-config wget python3-jinja2
++
++    # gnu-efi is installed here to enable -Dgnu-efi behind which fuzz-bcd
++    # is hidden. It isn't linked against efi. It doesn't
++    # even include "efi.h" because "bcd.c" can work in "unit test" mode
++    # where it isn't necessary.
++    apt-get install -y gnu-efi zstd
++
+     pip3 install -r .github/workflows/requirements.txt --require-hashes
+ 
+     # https://github.com/google/oss-fuzz/issues/6868
+@@ -56,6 +63,15 @@ fi
+ 
+ ninja -v -C "$build" fuzzers
+ 
++# Compressed BCD files are kept in test/test-bcd so let's unpack them
++# and put them all in the seed corpus.
++bcd=$(mktemp -d)
++for i in test/test-bcd/*.zst; do
++     unzstd "$i" -o "$bcd/$(basename "${i%.zst}")";
++done
++zip -jqr "$OUT/fuzz-bcd_seed_corpus.zip" "$bcd"
++rm -rf "$bcd"
++
+ # The seed corpus is a separate flat archive for each fuzzer,
+ # with a fixed name ${fuzzer}_seed_corpus.zip.
+ for d in "$(dirname "$0")/../test/fuzz/fuzz-"*; do
diff --git a/SOURCES/0059-meson-Use-files-for-fuzzers.patch b/SOURCES/0059-meson-Use-files-for-fuzzers.patch
new file mode 100644
index 0000000..44a6669
--- /dev/null
+++ b/SOURCES/0059-meson-Use-files-for-fuzzers.patch
@@ -0,0 +1,335 @@
+From a21bc03df9504c7a9b0c8e0e894d94f226a7a038 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Tue, 11 Jan 2022 10:47:01 +0100
+Subject: [PATCH] meson: Use files() for fuzzers
+
+Not having to provide the full path in the source tree is much
+nicer and the produced lists can also be used anywhere in the source
+tree.
+
+(cherry picked from commit bbec46c817951225f1e535d3df95b82a114e502a)
+
+Related: #2017035
+---
+ meson.build                             |  3 ++-
+ src/boot/efi/meson.build                |  2 +-
+ src/core/meson.build                    |  2 +-
+ src/fuzz/meson.build                    | 20 ++++++++++----------
+ src/journal-remote/meson.build          |  2 +-
+ src/journal/meson.build                 | 24 ++++++++++++------------
+ src/libsystemd-network/meson.build      |  8 ++++----
+ src/libsystemd/meson.build              |  4 ++--
+ src/network/meson.build                 |  4 ++--
+ src/nspawn/meson.build                  |  4 ++--
+ src/resolve/meson.build                 |  2 +-
+ src/systemctl/meson.build               |  7 ++++---
+ src/udev/meson.build                    | 11 +++++------
+ src/xdg-autostart-generator/meson.build |  6 +++---
+ 14 files changed, 50 insertions(+), 49 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 35ba29aecf..fdf02b8110 100644
+--- a/meson.build
++++ b/meson.build
+@@ -3677,7 +3677,8 @@ foreach tuple : fuzzers
+                 sources += 'src/fuzz/fuzz-main.c'
+         endif
+ 
+-        name = sources[0].split('/')[-1].split('.')[0]
++        # FIXME: Use fs.stem() with meson >= 0.54.0
++        name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0]
+ 
+         exe = executable(
+                 name,
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 229771026d..3e948281f2 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -359,7 +359,7 @@ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
+                  'HAVE_ZSTD'],
+         ]
+         fuzzers += [
+-                [['src/boot/efi/fuzz-bcd.c']],
++                [files('fuzz-bcd.c')],
+         ]
+ endif
+ 
+diff --git a/src/core/meson.build b/src/core/meson.build
+index d229d46779..97ac431763 100644
+--- a/src/core/meson.build
++++ b/src/core/meson.build
+@@ -228,7 +228,7 @@ endif
+ ############################################################
+ 
+ fuzzers += [
+-        [['src/core/fuzz-unit-file.c'],
++        [files('fuzz-unit-file.c'),
+          [libcore,
+           libshared],
+          [libmount]],
+diff --git a/src/fuzz/meson.build b/src/fuzz/meson.build
+index 1ed1dd8251..d987f32b08 100644
+--- a/src/fuzz/meson.build
++++ b/src/fuzz/meson.build
+@@ -1,23 +1,23 @@
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+ 
+ fuzzers += [
+-        [['src/fuzz/fuzz-catalog.c']],
++        [files('fuzz-catalog.c')],
+ 
+-        [['src/fuzz/fuzz-json.c']],
++        [files('fuzz-json.c')],
+ 
+-        [['src/fuzz/fuzz-varlink.c']],
++        [files('fuzz-varlink.c')],
+ 
+-        [['src/fuzz/fuzz-udev-database.c']],
++        [files('fuzz-udev-database.c')],
+ 
+-        [['src/fuzz/fuzz-compress.c']],
++        [files('fuzz-compress.c')],
+ 
+-        [['src/fuzz/fuzz-bus-label.c']],
++        [files('fuzz-bus-label.c')],
+ 
+-        [['src/fuzz/fuzz-env-file.c']],
++        [files('fuzz-env-file.c')],
+ 
+-        [['src/fuzz/fuzz-hostname-setup.c']],
++        [files('fuzz-hostname-setup.c')],
+ 
+-        [['src/fuzz/fuzz-calendarspec.c']],
++        [files('fuzz-calendarspec.c')],
+ 
+-        [['src/fuzz/fuzz-time-util.c']],
++        [files('fuzz-time-util.c')],
+ ]
+diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build
+index 168d0ed6a3..1f3e0878ae 100644
+--- a/src/journal-remote/meson.build
++++ b/src/journal-remote/meson.build
+@@ -76,7 +76,7 @@ endif
+ ############################################################
+ 
+ fuzzers += [
+-        [['src/journal-remote/fuzz-journal-remote.c'],
++        [files('fuzz-journal-remote.c'),
+          [libsystemd_journal_remote,
+           libshared],
+          [],
+diff --git a/src/journal/meson.build b/src/journal/meson.build
+index b9a63d5e2f..21c4d2561c 100644
+--- a/src/journal/meson.build
++++ b/src/journal/meson.build
+@@ -116,38 +116,38 @@ tests += [
+ ]
+ 
+ fuzzers += [
+-        [['src/journal/fuzz-journald-audit.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-audit.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+ 
+-        [['src/journal/fuzz-journald-kmsg.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-kmsg.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+ 
+-        [['src/journal/fuzz-journald-native.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-native.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+ 
+-        [['src/journal/fuzz-journald-native-fd.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-native-fd.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+ 
+-        [['src/journal/fuzz-journald-stream.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-stream.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+ 
+-        [['src/journal/fuzz-journald-syslog.c',
+-          'src/journal/fuzz-journald.c'],
++        [files('fuzz-journald-syslog.c',
++               'fuzz-journald.c'),
+          [libjournal_core,
+           libshared],
+          [libselinux]],
+diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
+index 3923df48ea..6be409d8ad 100644
+--- a/src/libsystemd-network/meson.build
++++ b/src/libsystemd-network/meson.build
+@@ -105,19 +105,19 @@ tests += [
+ ]
+ 
+ fuzzers += [
+-        [['src/libsystemd-network/fuzz-dhcp6-client.c'],
++        [files('fuzz-dhcp6-client.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/fuzz-dhcp-server.c'],
++        [files('fuzz-dhcp-server.c'),
+          [libsystemd_network,
+           libshared]],
+ 
+-        [['src/libsystemd-network/fuzz-lldp-rx.c'],
++        [files('fuzz-lldp-rx.c'),
+          [libshared,
+           libsystemd_network]],
+ 
+-        [['src/libsystemd-network/fuzz-ndisc-rs.c'],
++        [files('fuzz-ndisc-rs.c'),
+          [libshared,
+           libsystemd_network]],
+ ]
+diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
+index 42746e560f..2e5255d479 100644
+--- a/src/libsystemd/meson.build
++++ b/src/libsystemd/meson.build
+@@ -316,7 +316,7 @@ endif
+ ############################################################
+ 
+ fuzzers += [
+-        [['src/libsystemd/sd-bus/fuzz-bus-message.c']],
++        [files('sd-bus/fuzz-bus-message.c')],
+ 
+-        [['src/libsystemd/sd-bus/fuzz-bus-match.c']],
++        [files('sd-bus/fuzz-bus-match.c')],
+ ]
+diff --git a/src/network/meson.build b/src/network/meson.build
+index a598701e4f..23743233fa 100644
+--- a/src/network/meson.build
++++ b/src/network/meson.build
+@@ -261,14 +261,14 @@ if conf.get('ENABLE_NETWORKD') == 1
+ endif
+ 
+ fuzzers += [
+-        [['src/network/fuzz-netdev-parser.c'],
++        [files('fuzz-netdev-parser.c'),
+          [libnetworkd_core,
+           libsystemd_network,
+           networkd_link_with],
+          [threads],
+          network_includes],
+ 
+-        [['src/network/fuzz-network-parser.c'],
++        [files('fuzz-network-parser.c'),
+          [libnetworkd_core,
+           libsystemd_network,
+           networkd_link_with],
+diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build
+index 3c1a9c6182..2934672e9a 100644
+--- a/src/nspawn/meson.build
++++ b/src/nspawn/meson.build
+@@ -66,12 +66,12 @@ tests += [
+ ]
+ 
+ fuzzers += [
+-        [['src/nspawn/fuzz-nspawn-settings.c'],
++        [files('fuzz-nspawn-settings.c'),
+          [libshared,
+           libnspawn_core],
+          [libseccomp]],
+ 
+-        [['src/nspawn/fuzz-nspawn-oci.c'],
++        [files('fuzz-nspawn-oci.c'),
+          [libshared,
+           libnspawn_core],
+          [libseccomp]],
+diff --git a/src/resolve/meson.build b/src/resolve/meson.build
+index 4de50c3d8e..1fee993d0a 100644
+--- a/src/resolve/meson.build
++++ b/src/resolve/meson.build
+@@ -216,7 +216,7 @@ tests += [
+ ]
+ 
+ fuzzers += [
+-        [['src/resolve/fuzz-dns-packet.c'],
++        [files('fuzz-dns-packet.c'),
+          [libsystemd_resolve_core,
+           libshared],
+          [lib_openssl_or_gcrypt,
+diff --git a/src/systemctl/meson.build b/src/systemctl/meson.build
+index 38bf33d49a..f0d405bb58 100644
+--- a/src/systemctl/meson.build
++++ b/src/systemctl/meson.build
+@@ -83,7 +83,8 @@ else
+ endif
+ 
+ fuzzers += [
+-        [['src/systemctl/fuzz-systemctl-parse-argv.c',
+-          systemctl_sources],
++        [files('fuzz-systemctl-parse-argv.c') +
++         systemctl_sources,
+          systemctl_link_with,
+-         [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']]]
++         [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']]
++]
+diff --git a/src/udev/meson.build b/src/udev/meson.build
+index 57fbf8c8fc..9fd0bcdd0e 100644
+--- a/src/udev/meson.build
++++ b/src/udev/meson.build
+@@ -174,24 +174,23 @@ if install_sysconfdir
+ endif
+ 
+ fuzzers += [
+-        [['src/udev/net/fuzz-link-parser.c',
+-          'src/fuzz/fuzz.h'],
++        [files('net/fuzz-link-parser.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+           libacl],
+          udev_includes],
+ 
+-        [['src/udev/fuzz-udev-rules.c'],
++        [files('fuzz-udev-rules.c'),
+          [libudevd_core,
+           libshared],
+          [threads,
+           libacl]],
+ 
+-        [['src/udev/fuzz-udev-rule-parse-value.c']],
++        [files('fuzz-udev-rule-parse-value.c')],
+ 
+-        [['src/udev/fido_id/fuzz-fido-id-desc.c',
+-          'src/udev/fido_id/fido_id_desc.c']],
++        [files('fido_id/fuzz-fido-id-desc.c',
++               'fido_id/fido_id_desc.c')],
+ ]
+ 
+ tests += [
+diff --git a/src/xdg-autostart-generator/meson.build b/src/xdg-autostart-generator/meson.build
+index 6418f57c40..cdce66b6fc 100644
+--- a/src/xdg-autostart-generator/meson.build
++++ b/src/xdg-autostart-generator/meson.build
+@@ -12,7 +12,7 @@ tests += [
+ ]
+ 
+ fuzzers += [
+-        [['src/xdg-autostart-generator/fuzz-xdg-desktop.c',
+-          'src/xdg-autostart-generator/xdg-autostart-service.c',
+-          'src/xdg-autostart-generator/xdg-autostart-service.h']],
++        [files('fuzz-xdg-desktop.c',
++               'xdg-autostart-service.c',
++               'xdg-autostart-service.h')],
+ ]
diff --git a/SOURCES/0059-shared-Fix-memory-leak-in-bus_append_execute_propert.patch b/SOURCES/0059-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
deleted file mode 100644
index 6d3c907..0000000
--- a/SOURCES/0059-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 98d9cc40b6c159af8b44c9b54c2bf1af56c43a3c Mon Sep 17 00:00:00 2001
-From: Daan De Meyer <daan.j.demeyer@gmail.com>
-Date: Mon, 9 May 2022 09:50:32 +0200
-Subject: [PATCH] shared: Fix memory leak in bus_append_execute_property()
-
-Fixes #23317
-
-(cherry picked from commit 2aaf6d407e8541985a15b7106abf6fbdfed0766a)
-
-Related: #2087677
----
- src/shared/bus-unit-util.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
-index dcce530c99..ef134bcee4 100644
---- a/src/shared/bus-unit-util.c
-+++ b/src/shared/bus-unit-util.c
-@@ -1952,7 +1952,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
-                         path_simplify(source);
- 
-                         if (isempty(destination)) {
--                                r = strv_extend(&sources, TAKE_PTR(source));
-+                                r = strv_consume(&sources, TAKE_PTR(source));
-                                 if (r < 0)
-                                         return bus_log_create_error(r);
-                         } else {
diff --git a/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch b/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch
new file mode 100644
index 0000000..6ba403f
--- /dev/null
+++ b/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch
@@ -0,0 +1,137 @@
+From 5a35f08026cad007f460170fe6a3e43bd51f60f9 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Tue, 11 Jan 2022 10:56:22 +0100
+Subject: [PATCH] meson: Add check argument to remaining run_command() calls
+
+(cherry picked from commit 68a06b3cdfe35ff08092e139033edb4a5189a439)
+
+Related: #2017035
+---
+ man/meson.build          |  2 +-
+ src/basic/meson.build    |  2 +-
+ src/boot/efi/meson.build | 11 +++++++----
+ src/test/meson.build     |  2 +-
+ test/fuzz/meson.build    |  7 ++++---
+ test/meson.build         |  8 +++++---
+ 6 files changed, 19 insertions(+), 13 deletions(-)
+
+diff --git a/man/meson.build b/man/meson.build
+index a06a601767..710b4ca008 100644
+--- a/man/meson.build
++++ b/man/meson.build
+@@ -105,7 +105,7 @@ endforeach
+ 
+ ############################################################
+ 
+-have_lxml = run_command(xml_helper_py).returncode() == 0
++have_lxml = run_command(xml_helper_py, check: false).returncode() == 0
+ if not have_lxml
+         message('python-lxml not available, not making man page indices')
+ endif
+diff --git a/src/basic/meson.build b/src/basic/meson.build
+index 229ac97c69..5a9e13d741 100644
+--- a/src/basic/meson.build
++++ b/src/basic/meson.build
+@@ -384,7 +384,7 @@ filesystem_includes = ['linux/magic.h',
+                        'linux/gfs2_ondisk.h']
+ 
+ check_filesystems = find_program('check-filesystems.sh')
+-r = run_command([check_filesystems, cpp, 'filesystems-gperf.gperf'] + filesystem_includes)
++r = run_command([check_filesystems, cpp, 'filesystems-gperf.gperf'] + filesystem_includes, check: false)
+ if r.returncode() != 0
+         error('found unknown filesystem(s) defined in kernel headers:\n\n' + r.stdout())
+         r.stdout()
+diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
+index 3e948281f2..fad92f09a1 100644
+--- a/src/boot/efi/meson.build
++++ b/src/boot/efi/meson.build
+@@ -57,8 +57,11 @@ endif
+ efi_libdir = ''
+ foreach dir : [get_option('efi-libdir'),
+                '/usr/lib/gnuefi' / efi_arch[0],
+-               run_command('realpath', '-e',
+-                        '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory').stdout().strip()).stdout().strip()]
++               run_command(
++                        'realpath', '-e',
++                        '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory', check: false).stdout().strip(),
++                        check: false
++               ).stdout().strip()]
+         if dir != '' and fs.is_dir(dir)
+                 efi_libdir = dir
+                 break
+@@ -125,7 +128,7 @@ elif get_option('sbat-distro') != ''
+                 value = get_option(sbatvar[0])
+                 if (value == '' or value == 'auto') and not meson.is_cross_build()
+                         cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1])
+-                        value = run_command(sh, '-c', cmd).stdout().strip()
++                        value = run_command(sh, '-c', cmd, check: true).stdout().strip()
+                 endif
+                 if value == ''
+                         error('Required @0@ option not set and autodetection failed'.format(sbatvar[0]))
+@@ -254,7 +257,7 @@ if efi_arch[1] == 'arm'
+         efi_ldflags += ['-Wl,--no-warn-mismatch']
+ endif
+ 
+-if run_command('grep', '-q', '__CTOR_LIST__', efi_lds).returncode() == 0
++if run_command('grep', '-q', '__CTOR_LIST__', efi_lds, check: false).returncode() == 0
+         # fedora has a patched gnu-efi that adds support for ELF constructors.
+         # If ld is called by gcc something about these symbols breaks, resulting
+         # in sd-boot freezing when gnu-efi runs the constructors. Force defining
+diff --git a/src/test/meson.build b/src/test/meson.build
+index 9e224d69ce..75f78e2e1a 100644
+--- a/src/test/meson.build
++++ b/src/test/meson.build
+@@ -11,7 +11,7 @@ test_hashmap_ordered_c = custom_target(
+ 
+ test_include_dir = include_directories('.')
+ 
+-path = run_command(sh, '-c', 'echo "$PATH"').stdout().strip()
++path = run_command(sh, '-c', 'echo "$PATH"', check: true).stdout().strip()
+ test_env = environment()
+ test_env.set('SYSTEMD_LANGUAGE_FALLBACK_MAP', language_fallback_map)
+ test_env.set('PATH', project_build_root + ':' + path)
+diff --git a/test/fuzz/meson.build b/test/fuzz/meson.build
+index 30e26b09cf..b4766de3eb 100644
+--- a/test/fuzz/meson.build
++++ b/test/fuzz/meson.build
+@@ -13,12 +13,13 @@ sanitize_address_undefined = custom_target(
+ 
+ sanitizers = [['address,undefined', sanitize_address_undefined]]
+ 
+-if git.found()
++if git.found() and fs.exists(project_source_root / '.git')
+         out = run_command(env, '-u', 'GIT_WORK_TREE',
+                           git, '--git-dir=@0@/.git'.format(project_source_root),
+-                          'ls-files', ':/test/fuzz/*/*')
++                          'ls-files', ':/test/fuzz/*/*',
++                          check: true)
+ else
+-        out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root))
++        out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root), check: true)
+ endif
+ 
+ fuzz_regression_tests = []
+diff --git a/test/meson.build b/test/meson.build
+index 04ae9ebc78..baf94703ea 100644
+--- a/test/meson.build
++++ b/test/meson.build
+@@ -182,14 +182,16 @@ endif
+ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
+         udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh')
+ 
+-        if git.found()
++        if git.found() and fs.exists(project_source_root / '.git')
+                 out = run_command(
+                         env, '-u', 'GIT_WORK_TREE',
+                         git, '--git-dir=@0@/.git'.format(project_source_root),
+-                        'ls-files', ':/test/dmidecode-dumps/*.bin')
++                        'ls-files', ':/test/dmidecode-dumps/*.bin',
++                        check: true)
+         else
+                 out = run_command(
+-                        sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root))
++                        sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root),
++                        check: true)
+         endif
+ 
+         foreach p : out.stdout().split()
diff --git a/SOURCES/0061-meson-Use-echo-to-list-files.patch b/SOURCES/0061-meson-Use-echo-to-list-files.patch
new file mode 100644
index 0000000..2e9b302
--- /dev/null
+++ b/SOURCES/0061-meson-Use-echo-to-list-files.patch
@@ -0,0 +1,43 @@
+From 5de4b00e4150080e68064fa1de003039a0901468 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Tue, 11 Jan 2022 11:27:27 +0100
+Subject: [PATCH] meson: Use echo to list files
+
+No need to invoke ls when we are just interested in file names.
+Also, the cd to source root makes the output identical to
+"git ls-files" (relative instead of absolute paths).
+
+(cherry picked from commit 3a469802f4d7b0a59fe1644cb53d34aee4e56bab)
+
+Related: #2017035
+---
+ test/fuzz/meson.build | 2 +-
+ test/meson.build      | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/test/fuzz/meson.build b/test/fuzz/meson.build
+index b4766de3eb..39730a615c 100644
+--- a/test/fuzz/meson.build
++++ b/test/fuzz/meson.build
+@@ -19,7 +19,7 @@ if git.found() and fs.exists(project_source_root / '.git')
+                           'ls-files', ':/test/fuzz/*/*',
+                           check: true)
+ else
+-        out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root), check: true)
++        out = run_command(sh, '-c', 'cd "@0@"; echo test/fuzz/*/*'.format(project_source_root), check: true)
+ endif
+ 
+ fuzz_regression_tests = []
+diff --git a/test/meson.build b/test/meson.build
+index baf94703ea..c5d8d6917b 100644
+--- a/test/meson.build
++++ b/test/meson.build
+@@ -190,7 +190,7 @@ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
+                         check: true)
+         else
+                 out = run_command(
+-                        sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root),
++                        sh, '-c', 'cd "@0@"; echo test/dmidecode-dumps/*.bin'.format(project_source_root),
+                         check: true)
+         endif
+ 
diff --git a/SOURCES/0062-test-add-a-test-for-mkdir_p.patch b/SOURCES/0062-test-add-a-test-for-mkdir_p.patch
new file mode 100644
index 0000000..40ebe72
--- /dev/null
+++ b/SOURCES/0062-test-add-a-test-for-mkdir_p.patch
@@ -0,0 +1,63 @@
+From 010c5dc6b7f18eba37f3df015b3e36b4f28bd559 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 2 Feb 2022 15:08:18 +0900
+Subject: [PATCH] test: add a test for mkdir_p()
+
+(cherry picked from commit 6f6b017b9bc69df3f3e308c36c95597002ce6e29)
+
+Related: #2017035
+---
+ src/test/meson.build  |  2 ++
+ src/test/test-mkdir.c | 30 ++++++++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+ create mode 100644 src/test/test-mkdir.c
+
+diff --git a/src/test/meson.build b/src/test/meson.build
+index 75f78e2e1a..14b7939b1f 100644
+--- a/src/test/meson.build
++++ b/src/test/meson.build
+@@ -193,6 +193,8 @@ tests += [
+ 
+         [files('test-macro.c')],
+ 
++        [files('test-mkdir.c')],
++
+         [files('test-json.c')],
+ 
+         [files('test-modhex.c')],
+diff --git a/src/test/test-mkdir.c b/src/test/test-mkdir.c
+new file mode 100644
+index 0000000000..c715d5f096
+--- /dev/null
++++ b/src/test/test-mkdir.c
+@@ -0,0 +1,30 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++
++#include <unistd.h>
++
++#include "mkdir.h"
++#include "path-util.h"
++#include "rm-rf.h"
++#include "tests.h"
++#include "tmpfile-util.h"
++
++TEST(mkdir_p) {
++        _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
++        _cleanup_free_ char *p = NULL;
++
++        assert_se(mkdtemp_malloc("/tmp/test-mkdir-XXXXXX", &tmp) >= 0);
++
++        assert_se(p = path_join(tmp, "run"));
++        assert_se(mkdir_p(p, 0755) >= 0);
++
++        p = mfree(p);
++        assert_se(p = path_join(tmp, "var/run"));
++        assert_se(mkdir_parents(p, 0755) >= 0);
++        assert_se(symlink("../run", p) >= 0);
++
++        p = mfree(p);
++        assert_se(p = path_join(tmp, "var/run/hoge/foo/baz"));
++        assert_se(mkdir_p(p, 0755) >= 0);
++}
++
++DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch b/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch
new file mode 100644
index 0000000..6671776
--- /dev/null
+++ b/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch
@@ -0,0 +1,32 @@
+From c134e85526f160ad4392edb333caadc5e425957d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Tue, 1 Feb 2022 12:06:21 +0100
+Subject: [PATCH] util: another set of CVE-2021-4034 assert()s
+
+It's a good idea that we validate argc/argv when we are supposed to
+store them away.
+
+(cherry picked from commit 007e03b284e8ffc0b92edb2122cd9d2d16f049ef)
+
+Related: #2017035
+---
+ src/basic/util.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/basic/util.h b/src/basic/util.h
+index 94804f28e3..68ae3b51e0 100644
+--- a/src/basic/util.h
++++ b/src/basic/util.h
+@@ -9,6 +9,12 @@ extern int saved_argc;
+ extern char **saved_argv;
+ 
+ static inline void save_argc_argv(int argc, char **argv) {
++
++        /* Protect against CVE-2021-4034 style attacks */
++        assert_se(argc > 0);
++        assert_se(argv);
++        assert_se(argv[0]);
++
+         saved_argc = argc;
+         saved_argv = argv;
+ }
diff --git a/SOURCES/0064-basic-update-CIFS-magic.patch b/SOURCES/0064-basic-update-CIFS-magic.patch
new file mode 100644
index 0000000..101c13e
--- /dev/null
+++ b/SOURCES/0064-basic-update-CIFS-magic.patch
@@ -0,0 +1,69 @@
+From 75b23fa0a4916a228b2b66e73044378931862a49 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sun, 30 Jan 2022 23:40:05 +0100
+Subject: [PATCH] basic: update CIFS magic
+
+Kernel commit dea2903719283c156b53741126228c4a1b40440f exposed (and
+renamed) CIFS_MAGIC_NUMBER as CIFS_SUPER_MAGIC along with
+SMB2_SUPER_MAGIC.
+
+This fixes the following build fail on current Fedora Rawhide:
+```
+../src/basic/meson.build:389:8: ERROR: Problem encountered: found unknown filesystem(s) defined in kernel headers:
+
+Filesystem found in kernel header but not in filesystems-gperf.gperf: CIFS_SUPER_MAGIC
+Filesystem found in kernel header but not in filesystems-gperf.gperf: SMB2_SUPER_MAGIC
+```
+
+(cherry picked from commit bbe53713455be38c0a587626439fd171f28c77fc)
+
+Related: #2017035
+---
+ src/basic/filesystems-gperf.gperf |  4 ++--
+ src/basic/missing_magic.h         | 11 ++++++++---
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/basic/filesystems-gperf.gperf b/src/basic/filesystems-gperf.gperf
+index 08c8c44510..e8c5357f91 100644
+--- a/src/basic/filesystems-gperf.gperf
++++ b/src/basic/filesystems-gperf.gperf
+@@ -40,7 +40,7 @@ ceph,            {CEPH_SUPER_MAGIC}
+ cgroup2,         {CGROUP2_SUPER_MAGIC}
+ # note that the cgroupfs magic got reassigned from cpuset
+ cgroup,          {CGROUP_SUPER_MAGIC}
+-cifs,            {CIFS_MAGIC_NUMBER}
++cifs,            {CIFS_SUPER_MAGIC, SMB2_SUPER_MAGIC}
+ coda,            {CODA_SUPER_MAGIC}
+ configfs,        {CONFIGFS_MAGIC}
+ cramfs,          {CRAMFS_MAGIC}
+@@ -109,7 +109,7 @@ selinuxfs,       {SELINUX_MAGIC}
+ shiftfs,         {SHIFTFS_MAGIC}
+ smackfs,         {SMACK_MAGIC}
+ # smb3 is an alias for cifs
+-smb3,            {CIFS_MAGIC_NUMBER}
++smb3,            {CIFS_SUPER_MAGIC}
+ # smbfs was removed from the kernel in 2010, the magic remains
+ smbfs,           {SMB_SUPER_MAGIC}
+ sockfs,          {SOCKFS_MAGIC}
+diff --git a/src/basic/missing_magic.h b/src/basic/missing_magic.h
+index 7d9320bb6d..c104fcfba3 100644
+--- a/src/basic/missing_magic.h
++++ b/src/basic/missing_magic.h
+@@ -38,9 +38,14 @@
+ #define XFS_SB_MAGIC 0x58465342
+ #endif
+ 
+-/* Not exposed yet. Defined at fs/cifs/cifsglob.h */
+-#ifndef CIFS_MAGIC_NUMBER
+-#define CIFS_MAGIC_NUMBER 0xFF534D42
++/* dea2903719283c156b53741126228c4a1b40440f (5.17) */
++#ifndef CIFS_SUPER_MAGIC
++#define CIFS_SUPER_MAGIC 0xFF534D42
++#endif
++
++/* dea2903719283c156b53741126228c4a1b40440f (5.17) */
++#ifndef SMB2_SUPER_MAGIC
++#define SMB2_SUPER_MAGIC 0xFE534D42
+ #endif
+ 
+ /* 257f871993474e2bde6c497b54022c362cf398e1 (4.5) */
diff --git a/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch b/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch
new file mode 100644
index 0000000..a89cfd2
--- /dev/null
+++ b/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch
@@ -0,0 +1,27 @@
+From 83845c85669084c4cd69fa8bfe60c57d36bb8713 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 28 Jan 2022 21:44:32 +0100
+Subject: [PATCH] shared: be extra paranoid and check if argc > 0
+
+and also if argv[0] is non-empty as a precaution for issues similar to
+CVE-2021-4034.
+
+(cherry picked from commit 1637e757070a61b12b26a2a4ef547330562dc77f)
+
+Related: #2017035
+---
+ src/shared/main-func.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/shared/main-func.h b/src/shared/main-func.h
+index 05cdffeec0..09103bace9 100644
+--- a/src/shared/main-func.h
++++ b/src/shared/main-func.h
+@@ -15,6 +15,7 @@
+ #define _DEFINE_MAIN_FUNCTION(intro, impl, ret)                         \
+         int main(int argc, char *argv[]) {                              \
+                 int r;                                                  \
++                assert(argc > 0 && !isempty(argv[0]));                  \
+                 save_argc_argv(argc, argv);                             \
+                 intro;                                                  \
+                 r = impl;                                               \
diff --git a/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch b/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch
new file mode 100644
index 0000000..830b64f
--- /dev/null
+++ b/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch
@@ -0,0 +1,27 @@
+From efe174ec51b9242101868e83f12cc1186fe1b71b Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 30 Jan 2022 17:54:55 +0900
+Subject: [PATCH] core: check if argc > 0 and argv[0] is set
+
+Follow-up for 1637e757070a61b12b26a2a4ef547330562dc77f.
+
+(cherry picked from commit cf3095ac2bbdba3db0d8f7fa7afcee8b8c136201)
+
+Related: #2017035
+---
+ src/core/main.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 7ea848ebeb..f315a44a08 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -2726,6 +2726,8 @@ int main(int argc, char *argv[]) {
+         Manager *m = NULL;
+         FDSet *fds = NULL;
+ 
++        assert(argc > 0 && !isempty(argv[0]));
++
+         /* SysV compatibility: redirect init → telinit */
+         redirect_telinit(argc, argv);
+ 
diff --git a/SOURCES/0067-core-check-argc-argv-uncoditionally.patch b/SOURCES/0067-core-check-argc-argv-uncoditionally.patch
new file mode 100644
index 0000000..070c1f1
--- /dev/null
+++ b/SOURCES/0067-core-check-argc-argv-uncoditionally.patch
@@ -0,0 +1,43 @@
+From 43622b6eed32aece624a293167a6d705c08b8d03 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sun, 30 Jan 2022 15:49:27 +0100
+Subject: [PATCH] core: check argc/argv uncoditionally
+
+as `assert()` might be dropped with `-DNDEBUG`.
+
+Follow-up to cf3095a and 1637e75.
+
+(cherry picked from commit 61b9769bda465f4832080e2a7a8285d247121d70)
+
+Related: #2017035
+---
+ src/core/main.c        | 2 +-
+ src/shared/main-func.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index f315a44a08..cb3131c12a 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -2726,7 +2726,7 @@ int main(int argc, char *argv[]) {
+         Manager *m = NULL;
+         FDSet *fds = NULL;
+ 
+-        assert(argc > 0 && !isempty(argv[0]));
++        assert_se(argc > 0 && !isempty(argv[0]));
+ 
+         /* SysV compatibility: redirect init → telinit */
+         redirect_telinit(argc, argv);
+diff --git a/src/shared/main-func.h b/src/shared/main-func.h
+index 09103bace9..81a5c1813c 100644
+--- a/src/shared/main-func.h
++++ b/src/shared/main-func.h
+@@ -15,7 +15,7 @@
+ #define _DEFINE_MAIN_FUNCTION(intro, impl, ret)                         \
+         int main(int argc, char *argv[]) {                              \
+                 int r;                                                  \
+-                assert(argc > 0 && !isempty(argv[0]));                  \
++                assert_se(argc > 0 && !isempty(argv[0]));               \
+                 save_argc_argv(argc, argv);                             \
+                 intro;                                                  \
+                 r = impl;                                               \
diff --git a/SOURCES/0068-test-temporary-workaround-for-21819.patch b/SOURCES/0068-test-temporary-workaround-for-21819.patch
new file mode 100644
index 0000000..bed8471
--- /dev/null
+++ b/SOURCES/0068-test-temporary-workaround-for-21819.patch
@@ -0,0 +1,48 @@
+From d924e5c3014a65e059fd414b90893d320e1784bd Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 27 Jan 2022 22:51:15 +0100
+Subject: [PATCH] test: temporary workaround for #21819
+
+Since the TEST-64-UDEV-STORAGE fails are quite frequent now and the root
+cause is yet to be discovered, let's add a kludge that attempts to retry
+the test up to two more times in case it fails, so we don't
+unnecessarily disturb CIs while the issue is being investigated.
+
+Revert this commit once #21819 is sorted out.
+
+(cherry picked from commit 95e35511bbdb7810c00c2e4a6cbda5b187192f74)
+
+Related: #2017035
+---
+ test/TEST-64-UDEV-STORAGE/test.sh | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh
+index 0f26eaafeb..f784e65984 100755
+--- a/test/TEST-64-UDEV-STORAGE/test.sh
++++ b/test/TEST-64-UDEV-STORAGE/test.sh
+@@ -119,7 +119,6 @@ test_run() {
+ 
+     # Execute each currently defined function starting with "testcase_"
+     for testcase in "${TESTCASES[@]}"; do
+-        _image_cleanup
+         echo "------ $testcase: BEGIN ------"
+         # Note for my future frustrated self: `fun && xxx` (as well as ||, if, while,
+         # until, etc.) _DISABLES_ the `set -e` behavior in _ALL_ nested function
+@@ -130,8 +129,14 @@ test_run() {
+         # So, be careful when adding clean up snippets in the testcase_*() functions -
+         # if the `test_run_one()` function isn't the last command, you have propagate
+         # the exit code correctly (e.g. `test_run_one() || return $?`, see below).
+-        ec=0
+-        "$testcase" "$test_id" || ec=$?
++
++        # FIXME: temporary workaround for intermittent fails in certain tests
++        # See: https://github.com/systemd/systemd/issues/21819
++        for ((_i = 0; _i < 3; _i++)); do
++            _image_cleanup
++            ec=0
++            "$testcase" "$test_id" && break || ec=$?
++        done
+         case $ec in
+             0)
+                 passed+=("$testcase")
diff --git a/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch b/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch
new file mode 100644
index 0000000..44bcc9e
--- /dev/null
+++ b/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch
@@ -0,0 +1,52 @@
+From fe4bd1d397af0fef644c401ca5a94e4c82316b4c Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 27 Jan 2022 22:50:58 +0100
+Subject: [PATCH] test: don't leak local variable to outer scopes
+
+(cherry picked from commit 888d0bc074c6d11593d28c6a876787ae864604ea)
+
+Related: #2017035
+---
+ test/TEST-64-UDEV-STORAGE/test.sh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh
+index f784e65984..c360c8b661 100755
+--- a/test/TEST-64-UDEV-STORAGE/test.sh
++++ b/test/TEST-64-UDEV-STORAGE/test.sh
+@@ -171,6 +171,7 @@ testcase_megasas2_basic() {
+         return 77
+     fi
+ 
++    local i
+     local qemu_opts=(
+         "-device megasas-gen2,id=scsi0"
+         "-device megasas-gen2,id=scsi1"
+@@ -197,6 +198,9 @@ testcase_nvme_basic() {
+         return 77
+     fi
+ 
++    local i
++    local qemu_opts=()
++
+     for i in {0..27}; do
+         qemu_opts+=(
+             "-device nvme,drive=nvme$i,serial=deadbeef$i,num_queues=8"
+@@ -220,7 +224,7 @@ testcase_virtio_scsi_identically_named_partitions() {
+     # and attach them to a virtio-scsi controller
+     local qemu_opts=("-device virtio-scsi-pci,id=scsi0,num_queues=4")
+     local diskpath="${TESTDIR:?}/namedpart0.img"
+-    local lodev qemu_timeout
++    local i lodev qemu_timeout
+ 
+     dd if=/dev/zero of="$diskpath" bs=1M count=18
+     lodev="$(losetup --show -f -P "$diskpath")"
+@@ -330,7 +334,7 @@ testcase_lvm_basic() {
+     fi
+ 
+     local qemu_opts=("-device ahci,id=ahci0")
+-    local diskpath
++    local diskpath i
+ 
+     # Attach 4 SATA disks to the VM (and set their model and serial fields
+     # to something predictable, so we can refer to them later)
diff --git a/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch b/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch
new file mode 100644
index 0000000..4c3045b
--- /dev/null
+++ b/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch
@@ -0,0 +1,208 @@
+From 03bf37877f1c7045724cba12d69e93c8c411646e Mon Sep 17 00:00:00 2001
+From: Anita Zhang <the.anitazha@gmail.com>
+Date: Wed, 26 Jan 2022 10:53:40 -0800
+Subject: [PATCH] tree-wide: don't use strjoina() on getenv() values
+
+Avoid doing stack allocations on environment variables.
+
+(cherry picked from commit 1d3b68f6e1538b6a86cbe3650d8b81df2877ef42)
+
+Related: #2017035
+---
+ src/basic/path-lookup.c  |  8 ++++++--
+ src/core/dbus.c          |  8 ++++++--
+ src/home/homed-home.c    | 10 +++++++---
+ src/home/homed-manager.c | 26 ++++++++++++++++++--------
+ src/run/run.c            |  7 +++++--
+ src/shared/pager.c       |  9 +++++++--
+ 6 files changed, 49 insertions(+), 19 deletions(-)
+
+diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
+index 6fb8c40e7a..921a30cef7 100644
+--- a/src/basic/path-lookup.c
++++ b/src/basic/path-lookup.c
+@@ -238,7 +238,7 @@ static int acquire_generator_dirs(
+                 char **generator_early,
+                 char **generator_late) {
+ 
+-        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL;
++        _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *p = NULL;
+         const char *prefix;
+ 
+         assert(generator);
+@@ -261,7 +261,11 @@ static int acquire_generator_dirs(
+                 if (!e)
+                         return -ENXIO;
+ 
+-                prefix = strjoina(e, "/systemd");
++                p = path_join(e, "/systemd");
++                if (!p)
++                        return -ENOMEM;
++
++                prefix = p;
+         }
+ 
+         x = path_join(prefix, "generator");
+diff --git a/src/core/dbus.c b/src/core/dbus.c
+index 2c5bda58f9..073675ceef 100644
+--- a/src/core/dbus.c
++++ b/src/core/dbus.c
+@@ -925,14 +925,18 @@ int bus_init_private(Manager *m) {
+ 
+                 r = sockaddr_un_set_path(&sa.un, "/run/systemd/private");
+         } else {
+-                const char *e, *joined;
++                _cleanup_free_ char *joined = NULL;
++                const char *e;
+ 
+                 e = secure_getenv("XDG_RUNTIME_DIR");
+                 if (!e)
+                         return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN),
+                                                "XDG_RUNTIME_DIR is not set, refusing.");
+ 
+-                joined = strjoina(e, "/systemd/private");
++                joined = path_join(e, "/systemd/private");
++                if (!joined)
++                        return log_oom();
++
+                 r = sockaddr_un_set_path(&sa.un, joined);
+         }
+         if (r < 0)
+diff --git a/src/home/homed-home.c b/src/home/homed-home.c
+index 470c7f07f6..1340cf30d3 100644
+--- a/src/home/homed-home.c
++++ b/src/home/homed-home.c
+@@ -1185,14 +1185,18 @@ static int home_start_work(Home *h, const char *verb, UserRecord *hr, UserRecord
+         if (r < 0)
+                 return r;
+         if (r == 0) {
++                _cleanup_free_ char *joined = NULL;
+                 const char *homework, *suffix, *unix_path;
+ 
+                 /* Child */
+ 
+                 suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
+-                if (suffix)
+-                        unix_path = strjoina("/run/systemd/home/notify.", suffix);
+-                else
++                if (suffix) {
++                        joined = strjoin("/run/systemd/home/notify.", suffix);
++                        if (!joined)
++                                return log_oom();
++                        unix_path = joined;
++                } else
+                         unix_path = "/run/systemd/home/notify";
+ 
+                 if (setenv("NOTIFY_SOCKET", unix_path, 1) < 0) {
+diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
+index 6c178b8a0e..c1ec555cac 100644
+--- a/src/home/homed-manager.c
++++ b/src/home/homed-manager.c
+@@ -936,6 +936,7 @@ int manager_enumerate_images(Manager *m) {
+ }
+ 
+ static int manager_connect_bus(Manager *m) {
++        _cleanup_free_ char *b = NULL;
+         const char *suffix, *busname;
+         int r;
+ 
+@@ -955,9 +956,12 @@ static int manager_connect_bus(Manager *m) {
+                 return r;
+ 
+         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
+-        if (suffix)
+-                busname = strjoina("org.freedesktop.home1.", suffix);
+-        else
++        if (suffix) {
++                b = strjoin("org.freedesktop.home1.", suffix);
++                if (!b)
++                        return log_oom();
++                busname = b;
++        } else
+                 busname = "org.freedesktop.home1";
+ 
+         r = sd_bus_request_name_async(m->bus, NULL, busname, 0, NULL, NULL);
+@@ -974,6 +978,7 @@ static int manager_connect_bus(Manager *m) {
+ }
+ 
+ static int manager_bind_varlink(Manager *m) {
++        _cleanup_free_ char *p = NULL;
+         const char *suffix, *socket_path;
+         int r;
+ 
+@@ -999,9 +1004,12 @@ static int manager_bind_varlink(Manager *m) {
+         /* To make things easier to debug, when working from a homed managed home directory, let's optionally
+          * use a different varlink socket name */
+         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
+-        if (suffix)
+-                socket_path = strjoina("/run/systemd/userdb/io.systemd.Home.", suffix);
+-        else
++        if (suffix) {
++                p = strjoin("/run/systemd/userdb/io.systemd.Home.", suffix);
++                if (!p)
++                        return log_oom();
++                socket_path = p;
++        } else
+                 socket_path = "/run/systemd/userdb/io.systemd.Home";
+ 
+         r = varlink_server_listen_address(m->varlink_server, socket_path, 0666);
+@@ -1159,9 +1167,11 @@ static int manager_listen_notify(Manager *m) {
+ 
+         suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX");
+         if (suffix) {
+-                const char *unix_path;
++                _cleanup_free_ char *unix_path = NULL;
+ 
+-                unix_path = strjoina("/run/systemd/home/notify.", suffix);
++                unix_path = strjoin("/run/systemd/home/notify.", suffix);
++                if (!unix_path)
++                        return log_oom();
+                 r = sockaddr_un_set_path(&sa.un, unix_path);
+                 if (r < 0)
+                         return log_error_errno(r, "Socket path %s does not fit in sockaddr_un: %m", unix_path);
+diff --git a/src/run/run.c b/src/run/run.c
+index ff24373847..e75b027542 100644
+--- a/src/run/run.c
++++ b/src/run/run.c
+@@ -794,9 +794,12 @@ static int transient_service_set_properties(sd_bus_message *m, const char *pty_p
+ 
+                 e = getenv("TERM");
+                 if (e) {
+-                        char *n;
++                        _cleanup_free_ char *n = NULL;
++
++                        n = strjoin("TERM=", e);
++                        if (!n)
++                                return log_oom();
+ 
+-                        n = strjoina("TERM=", e);
+                         r = sd_bus_message_append(m,
+                                                   "(sv)",
+                                                   "Environment", "as", 1, n);
+diff --git a/src/shared/pager.c b/src/shared/pager.c
+index f75ef62d2d..9426d3ef98 100644
+--- a/src/shared/pager.c
++++ b/src/shared/pager.c
+@@ -86,6 +86,7 @@ static int no_quit_on_interrupt(int exe_name_fd, const char *less_opts) {
+ void pager_open(PagerFlags flags) {
+         _cleanup_close_pair_ int fd[2] = { -1, -1 }, exe_name_pipe[2] = { -1, -1 };
+         _cleanup_strv_free_ char **pager_args = NULL;
++        _cleanup_free_ char *l = NULL;
+         const char *pager, *less_opts;
+         int r;
+ 
+@@ -131,8 +132,12 @@ void pager_open(PagerFlags flags) {
+         less_opts = getenv("SYSTEMD_LESS");
+         if (!less_opts)
+                 less_opts = "FRSXMK";
+-        if (flags & PAGER_JUMP_TO_END)
+-                less_opts = strjoina(less_opts, " +G");
++        if (flags & PAGER_JUMP_TO_END) {
++                l = strjoin(less_opts, " +G");
++                if (!l)
++                        return (void) log_oom();
++                less_opts = l;
++        }
+ 
+         /* We set SIGINT as PR_DEATHSIG signal here, to match the "K" parameter we set in $LESS, which enables SIGINT behaviour. */
+         r = safe_fork("(pager)", FORK_RESET_SIGNALS|FORK_DEATHSIG_SIGINT|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pager_pid);
diff --git a/SOURCES/0071-man-clarify-Environmentfile-format.patch b/SOURCES/0071-man-clarify-Environmentfile-format.patch
new file mode 100644
index 0000000..91dc2d5
--- /dev/null
+++ b/SOURCES/0071-man-clarify-Environmentfile-format.patch
@@ -0,0 +1,83 @@
+From 05ea18897aeafa1f2d47c5eae6c43bdd6ff71b9d Mon Sep 17 00:00:00 2001
+From: Yonathan Randolph <yonathan@gmail.com>
+Date: Sun, 26 Dec 2021 17:12:00 -0800
+Subject: [PATCH] man: clarify Environmentfile format
+
+Remove incorrect claim that C escapes (such as \t and \n) are recognized and that control characters are disallowed. Specify the allowed characters and escapes with single quotes, with double quotes, and without quotes.
+
+(cherry picked from commit 4bbcde8498eb59557ebddd7830efb47c0297ff4b)
+
+Related: #2017035
+---
+ man/systemd.exec.xml | 51 ++++++++++++++++++++++++++++----------------
+ 1 file changed, 33 insertions(+), 18 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index cd21d5b28d..69858d5e59 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -2485,18 +2485,39 @@ SystemCallErrorNumber=EPERM</programlisting>
+       <varlistentry>
+         <term><varname>EnvironmentFile=</varname></term>
+ 
+-        <listitem><para>Similar to <varname>Environment=</varname> but reads the environment variables from a text
+-        file. The text file should contain new-line-separated variable assignments.  Empty lines, lines without an
+-        <literal>=</literal> separator, or lines starting with ; or # will be ignored, which may be used for
+-        commenting. A line ending with a backslash will be concatenated with the following one, allowing multiline
+-        variable definitions. The parser strips leading and trailing whitespace from the values of assignments, unless
+-        you use double quotes (").</para>
+-
+-        <para><ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C escapes</ulink>
+-        are supported, but not
+-        <ulink url="https://en.wikipedia.org/wiki/Control_character#In_ASCII">most control characters</ulink>.
+-        <literal>\t</literal> and <literal>\n</literal> can be used to insert tabs and newlines within
+-        <varname>EnvironmentFile=</varname>.</para>
++        <listitem><para>Similar to <varname>Environment=</varname> but reads the environment variables from a text file.
++        The text file should contain newline-separated variable assignments.  Empty lines, lines without an
++        <literal>=</literal> separator, or lines starting with <literal>;</literal> or <literal>#</literal> will be
++        ignored, which may be used for commenting. The file must be UTF-8 encoded. Valid characters are <ulink
++        url="https://www.unicode.org/glossary/#unicode_scalar_value">unicode scalar values</ulink> other than <ulink
++        url="https://www.unicode.org/glossary/#noncharacter">noncharacters</ulink>, U+0000 NUL, and U+FEFF <ulink
++        url="https://www.unicode.org/glossary/#byte_order_mark">byte order mark</ulink>. Control codes other than NUL
++        are allowed.</para>
++
++        <para>In the file, an unquoted value after the <literal>=</literal> is parsed with the same backslash-escape
++        rules as <ulink
++        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_01">unquoted
++        text</ulink> in a POSIX shell, but unlike in a shell, interior whitespace is preserved and quotes after the
++        first non-whitespace character are preserved. Leading and trailing whitespace (space, tab, carriage return) is
++        discarded, but interior whitespace within the line is preserved verbatim. A line ending with a backslash will be
++        continued to the following one, with the newline itself discarded. A backslash
++        <literal>\</literal> followed by any character other than newline will preserve the following character, so that
++        <literal>\\</literal> will become the value <literal>\</literal>.</para>
++
++        <para>In the file, a <literal>'</literal>-quoted value after the <literal>=</literal> can span multiple lines
++        and contain any character verbatim other than single quote, like <ulink
++        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_02">single-quoted
++        text</ulink> in a POSIX shell. No backslash-escape sequences are recognized. Leading and trailing whitespace
++        outside of the single quotes is discarded.</para>
++
++        <para>In the file, a <literal>"</literal>-quoted value after the <literal>=</literal> can span multiple lines,
++        and the same escape sequences are recognized as in <ulink
++        url="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_03">double-quoted
++        text</ulink> of a POSIX shell. Backslash (<literal>\</literal>) followed by any of <literal>"\`$</literal> will
++        preserve that character. A backslash followed by newline is a line continuation, and the newline itself is
++        discarded. A backslash followed by any other character is ignored; both the backslash and the following
++        character are preserved verbatim. Leading and trailing whitespace outside of the double quotes is
++        discarded.</para>
+ 
+         <para>The argument passed should be an absolute filename or wildcard expression, optionally prefixed with
+         <literal>-</literal>, which indicates that if the file does not exist, it will not be read and no error or
+@@ -2529,12 +2550,6 @@ SystemCallErrorNumber=EPERM</programlisting>
+         <para>Variables set for invoked processes due to this setting are subject to being overridden by those
+         configured with <varname>Environment=</varname> or <varname>EnvironmentFile=</varname>.</para>
+ 
+-        <para><ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C escapes</ulink>
+-        are supported, but not
+-        <ulink url="https://en.wikipedia.org/wiki/Control_character#In_ASCII">most control characters</ulink>.
+-        <literal>\t</literal> and <literal>\n</literal> can be used to insert tabs and newlines within
+-        <varname>EnvironmentFile=</varname>.</para>
+-
+         <para>Example:
+         <programlisting>PassEnvironment=VAR1 VAR2 VAR3</programlisting>
+         passes three variables <literal>VAR1</literal>,
diff --git a/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch b/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch
new file mode 100644
index 0000000..c0ca80d
--- /dev/null
+++ b/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch
@@ -0,0 +1,88 @@
+From 01df4d485c8a6f3493a83a2a61572e9f2bccb649 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 09:39:55 +0100
+Subject: [PATCH] test-load-fragment: add a basic test for
+ config_parse_unit_env_file()
+
+(cherry picked from commit 3ef86964ed151aa2464701eef46d665adfd70895)
+
+Related: #2017035
+---
+ src/test/test-load-fragment.c | 64 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 64 insertions(+)
+
+diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
+index 1bd68c7e0a..fbe4744333 100644
+--- a/src/test/test-load-fragment.c
++++ b/src/test/test-load-fragment.c
+@@ -773,6 +773,70 @@ TEST(config_parse_pass_environ) {
+         assert_se(streq(passenv[0], "normal_name"));
+ }
+ 
++TEST(config_parse_unit_env_file) {
++        /* int config_parse_unit_env_file(
++                 const char *unit,
++                 const char *filename,
++                 unsigned line,
++                 const char *section,
++                 unsigned section_line,
++                 const char *lvalue,
++                 int ltype,
++                 const char *rvalue,
++                 void *data,
++                 void *userdata) */
++
++        _cleanup_(manager_freep) Manager *m = NULL;
++        Unit *u;
++        _cleanup_strv_free_ char **files = NULL;
++        int r;
++
++        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        if (manager_errno_skip_test(r)) {
++                log_notice_errno(r, "Skipping test: manager_new: %m");
++                return;
++        }
++
++        assert_se(r >= 0);
++        assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
++
++        assert_se(u = unit_new(m, sizeof(Service)));
++        assert_se(unit_add_name(u, "foobar.service") == 0);
++
++        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
++                                      "EnvironmentFile", 0, "not-absolute",
++                                       &files, u);
++        assert_se(r == 0);
++        assert_se(strv_length(files) == 0);
++
++        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
++                                      "EnvironmentFile", 0, "/absolute1",
++                                       &files, u);
++        assert_se(r == 0);
++        assert_se(strv_length(files) == 1);
++
++        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
++                                      "EnvironmentFile", 0, "/absolute2",
++                                       &files, u);
++        assert_se(r == 0);
++        assert_se(strv_length(files) == 2);
++        assert_se(streq(files[0], "/absolute1"));
++        assert_se(streq(files[1], "/absolute2"));
++
++        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
++                                       "EnvironmentFile", 0, "",
++                                       &files, u);
++        assert_se(r == 0);
++        assert_se(strv_isempty(files));
++
++        r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1,
++                                       "EnvironmentFile", 0, "/path/%n.conf",
++                                       &files, u);
++        assert_se(r == 0);
++        assert_se(strv_length(files) == 1);
++        assert_se(streq(files[0], "/path/foobar.service.conf"));
++}
++
+ TEST(unit_dump_config_items) {
+         unit_dump_config_items(stdout);
+ }
diff --git a/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch b/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch
new file mode 100644
index 0000000..bc2d6ae
--- /dev/null
+++ b/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch
@@ -0,0 +1,119 @@
+From 65aca6d552b69af81fe9588720194e0b86a160fb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 09:51:19 +0100
+Subject: [PATCH] core/execute: use _cleanup_ in
+ exec_context_load_environment()
+
+Also rename variables.
+
+(cherry picked from commit 398a5009169fdc0c4eb147692c0cd929b9fe4c84)
+
+Related: #2017035
+---
+ src/core/execute.c | 51 +++++++++++++++++++---------------------------
+ 1 file changed, 21 insertions(+), 30 deletions(-)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 16f346f339..2ab65e9cfe 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -5363,20 +5363,18 @@ static int exec_context_named_iofds(
+         return targets == 0 ? 0 : -ENOENT;
+ }
+ 
+-static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***l) {
+-        char **i, **r = NULL;
++static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) {
++        _cleanup_strv_free_ char **v = NULL;
++        char **i;
++        int r;
+ 
+         assert(c);
+-        assert(l);
++        assert(ret);
+ 
+         STRV_FOREACH(i, c->environment_files) {
+-                char *fn;
+-                int k;
+-                bool ignore = false;
+-                char **p;
+                 _cleanup_globfree_ glob_t pglob = {};
+-
+-                fn = *i;
++                bool ignore = false;
++                char *fn = *i;
+ 
+                 if (fn[0] == '-') {
+                         ignore = true;
+@@ -5386,33 +5384,30 @@ static int exec_context_load_environment(const Unit *unit, const ExecContext *c,
+                 if (!path_is_absolute(fn)) {
+                         if (ignore)
+                                 continue;
+-
+-                        strv_free(r);
+                         return -EINVAL;
+                 }
+ 
+                 /* Filename supports globbing, take all matching files */
+-                k = safe_glob(fn, 0, &pglob);
+-                if (k < 0) {
++                r = safe_glob(fn, 0, &pglob);
++                if (r < 0) {
+                         if (ignore)
+                                 continue;
+-
+-                        strv_free(r);
+-                        return k;
++                        return r;
+                 }
+ 
+                 /* When we don't match anything, -ENOENT should be returned */
+                 assert(pglob.gl_pathc > 0);
+ 
+                 for (unsigned n = 0; n < pglob.gl_pathc; n++) {
+-                        k = load_env_file(NULL, pglob.gl_pathv[n], &p);
+-                        if (k < 0) {
++                        _cleanup_strv_free_ char **p = NULL;
++
++                        r = load_env_file(NULL, pglob.gl_pathv[n], &p);
++                        if (r < 0) {
+                                 if (ignore)
+                                         continue;
+-
+-                                strv_free(r);
+-                                return k;
++                                return r;
+                         }
++
+                         /* Log invalid environment variables with filename */
+                         if (p) {
+                                 InvalidEnvInfo info = {
+@@ -5423,23 +5418,19 @@ static int exec_context_load_environment(const Unit *unit, const ExecContext *c,
+                                 p = strv_env_clean_with_callback(p, invalid_env, &info);
+                         }
+ 
+-                        if (!r)
+-                                r = p;
++                        if (!v)
++                                v = TAKE_PTR(p);
+                         else {
+-                                char **m;
+-
+-                                m = strv_env_merge(r, p);
+-                                strv_free(r);
+-                                strv_free(p);
++                                char **m = strv_env_merge(v, p);
+                                 if (!m)
+                                         return -ENOMEM;
+ 
+-                                r = m;
++                                strv_free_and_replace(v, m);
+                         }
+                 }
+         }
+ 
+-        *l = r;
++        *ret = TAKE_PTR(v);
+ 
+         return 0;
+ }
diff --git a/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch b/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch
new file mode 100644
index 0000000..6b1fdce
--- /dev/null
+++ b/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch
@@ -0,0 +1,118 @@
+From 402854a52a0a659fd914279eae17b4e065a9c294 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 10:15:50 +0100
+Subject: [PATCH] test-env-file: add tests for quoting in env files
+
+(cherry picked from commit e9e982a29d52834375e5fb553cecb45bc905cf91)
+
+Related: #2017035
+---
+ src/test/test-env-file.c | 68 +++++++++++++++++++++++++++++-----------
+ 1 file changed, 50 insertions(+), 18 deletions(-)
+
+diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c
+index 6cc2455c1f..7b132447bf 100644
+--- a/src/test/test-env-file.c
++++ b/src/test/test-env-file.c
+@@ -13,11 +13,11 @@
+         "a=a\n"                                 \
+         "b=b\\\n"                               \
+         "c\n"                                   \
+-        "d=d\\\n"                               \
+-        "e\\\n"                                 \
+-        "f\n"                                   \
++        "d= d\\\n"                              \
++        "e  \\\n"                               \
++        "f  \n"                                 \
+         "g=g\\ \n"                              \
+-        "h=h\n"                                 \
++        "h= ąęół\\ śćńźżµ \n"                   \
+         "i=i\\"
+ 
+ #define env_file_2                              \
+@@ -26,22 +26,34 @@
+ #define env_file_3 \
+         "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \
+         "#--nouser-config                                     \\\n" \
+-        "normal=line"
+-
+-#define env_file_4 \
+-       "# Generated\n" \
+-       "\n" \
+-       "HWMON_MODULES=\"coretemp f71882fg\"\n" \
+-       "\n" \
+-       "# For compatibility reasons\n" \
+-       "\n" \
+-       "MODULE_0=coretemp\n" \
+-       "MODULE_1=f71882fg"
++        "normal=line                                          \\\n" \
++        ";normal=ignored                                      \\\n" \
++        "normal_ignored                                       \\\n" \
++        "normal ignored                                       \\\n"
++
++#define env_file_4                              \
++        "# Generated\n"                         \
++        "\n"                                    \
++        "HWMON_MODULES=\"coretemp f71882fg\"\n" \
++        "\n"                                    \
++        "# For compatibility reasons\n"         \
++        "\n"                                    \
++        "MODULE_0=coretemp\n"                   \
++        "MODULE_1=f71882fg"
+ 
+ #define env_file_5                              \
+-        "a=\n"                                 \
++        "a=\n"                                  \
+         "b="
+ 
++#define env_file_6                              \
++        "a=\\ \\n \\t \\x \\y \\' \n"           \
++        "b= \\$'                  \n"           \
++        "c= ' \\n\\t\\$\\`\\\\\n"               \
++        "'   \n"                                \
++        "d= \" \\n\\t\\$\\`\\\\\n"              \
++        "\"   \n"
++
++
+ TEST(load_env_file_1) {
+         _cleanup_strv_free_ char **data = NULL;
+         int r;
+@@ -57,9 +69,9 @@ TEST(load_env_file_1) {
+         assert_se(r == 0);
+         assert_se(streq(data[0], "a=a"));
+         assert_se(streq(data[1], "b=bc"));
+-        assert_se(streq(data[2], "d=def"));
++        assert_se(streq(data[2], "d=de  f"));
+         assert_se(streq(data[3], "g=g "));
+-        assert_se(streq(data[4], "h=h"));
++        assert_se(streq(data[4], "h=ąęół śćńźżµ"));
+         assert_se(streq(data[5], "i=i"));
+         assert_se(data[6] == NULL);
+ }
+@@ -133,6 +145,26 @@ TEST(load_env_file_5) {
+         assert_se(data[2] == NULL);
+ }
+ 
++TEST(load_env_file_6) {
++        _cleanup_strv_free_ char **data = NULL;
++        int r;
++
++        _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
++        _cleanup_close_ int fd;
++
++        fd = mkostemp_safe(name);
++        assert_se(fd >= 0);
++        assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6));
++
++        r = load_env_file(NULL, name, &data);
++        assert_se(r == 0);
++        assert_se(streq(data[0], "a= n t x y '"));
++        assert_se(streq(data[1], "b=$'"));
++        assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n"));
++        assert_se(streq(data[3], "d= \\n\\t$`\\\n"));
++        assert_se(data[4] == NULL);
++}
++
+ TEST(write_and_load_env_file) {
+         const char *v;
+ 
diff --git a/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch b/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch
new file mode 100644
index 0000000..305ebd1
--- /dev/null
+++ b/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch
@@ -0,0 +1,275 @@
+From 4bc17b038971160f94321c7be9cd924b256d9ef8 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Tue, 15 Mar 2022 19:02:05 +0100
+Subject: [PATCH] core: shorten long unit names that are based on paths and
+ append path hash at the end
+
+Fixes #18077
+
+(cherry picked from commit 1d0727e76fd5e9a07cc9991ec9a10ea1d78a99c7)
+
+Resolves: #2083493
+---
+ src/basic/string-util.h   | 23 ++++++-----
+ src/basic/unit-name.c     | 86 ++++++++++++++++++++++++++++++++++++++-
+ src/basic/unit-name.h     |  3 ++
+ src/core/mount.c          |  3 ++
+ src/test/test-unit-name.c | 26 ++++++++++--
+ 5 files changed, 125 insertions(+), 16 deletions(-)
+
+diff --git a/src/basic/string-util.h b/src/basic/string-util.h
+index a1d88fbb95..ffb69e69cc 100644
+--- a/src/basic/string-util.h
++++ b/src/basic/string-util.h
+@@ -10,17 +10,18 @@
+ #include "string-util-fundamental.h"
+ 
+ /* What is interpreted as whitespace? */
+-#define WHITESPACE        " \t\n\r"
+-#define NEWLINE           "\n\r"
+-#define QUOTES            "\"\'"
+-#define COMMENTS          "#;"
+-#define GLOB_CHARS        "*?["
+-#define DIGITS            "0123456789"
+-#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
+-#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+-#define LETTERS           LOWERCASE_LETTERS UPPERCASE_LETTERS
+-#define ALPHANUMERICAL    LETTERS DIGITS
+-#define HEXDIGITS         DIGITS "abcdefABCDEF"
++#define WHITESPACE          " \t\n\r"
++#define NEWLINE             "\n\r"
++#define QUOTES              "\"\'"
++#define COMMENTS            "#;"
++#define GLOB_CHARS          "*?["
++#define DIGITS              "0123456789"
++#define LOWERCASE_LETTERS   "abcdefghijklmnopqrstuvwxyz"
++#define UPPERCASE_LETTERS   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
++#define LETTERS             LOWERCASE_LETTERS UPPERCASE_LETTERS
++#define ALPHANUMERICAL      LETTERS DIGITS
++#define HEXDIGITS           DIGITS "abcdefABCDEF"
++#define LOWERCASE_HEXDIGITS DIGITS "abcdef"
+ 
+ static inline char* strstr_ptr(const char *haystack, const char *needle) {
+         if (!haystack || !needle)
+diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
+index 671e30a53f..6cba8ba140 100644
+--- a/src/basic/unit-name.c
++++ b/src/basic/unit-name.c
+@@ -5,12 +5,17 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
++#include "sd-id128.h"
++
+ #include "alloc-util.h"
+ #include "glob-util.h"
+ #include "hexdecoct.h"
+ #include "memory-util.h"
+ #include "path-util.h"
++#include "random-util.h"
++#include "sparse-endian.h"
+ #include "special.h"
++#include "stdio-util.h"
+ #include "string-util.h"
+ #include "strv.h"
+ #include "unit-name.h"
+@@ -31,6 +36,9 @@
+         VALID_CHARS_WITH_AT                     \
+         "[]!-*?"
+ 
++#define LONG_UNIT_NAME_HASH_KEY SD_ID128_MAKE(ec,f2,37,fb,58,32,4a,32,84,9f,06,9b,0d,21,eb,9a)
++#define UNIT_NAME_HASH_LENGTH_CHARS 16
++
+ bool unit_name_is_valid(const char *n, UnitNameFlags flags) {
+         const char *e, *i, *at;
+ 
+@@ -507,6 +515,68 @@ int unit_name_template(const char *f, char **ret) {
+         return 0;
+ }
+ 
++bool unit_name_is_hashed(const char *name) {
++        char *s;
++
++        if (!unit_name_is_valid(name, UNIT_NAME_PLAIN))
++                return false;
++
++        assert_se(s = strrchr(name, '.'));
++
++        if (s - name < UNIT_NAME_HASH_LENGTH_CHARS + 1)
++                return false;
++
++        s -= UNIT_NAME_HASH_LENGTH_CHARS;
++        if (s[-1] != '_')
++                return false;
++
++        for (size_t i = 0; i < UNIT_NAME_HASH_LENGTH_CHARS; i++)
++                if (!strchr(LOWERCASE_HEXDIGITS, s[i]))
++                        return false;
++
++        return true;
++}
++
++int unit_name_hash_long(const char *name, char **ret) {
++        _cleanup_free_ char *n = NULL, *hash = NULL;
++        char *suffix;
++        le64_t h;
++        size_t len;
++
++        if (strlen(name) < UNIT_NAME_MAX)
++                return -EMSGSIZE;
++
++        suffix = strrchr(name, '.');
++        if (!suffix)
++                return -EINVAL;
++
++        if (unit_type_from_string(suffix+1) < 0)
++                return -EINVAL;
++
++        h = htole64(siphash24_string(name, LONG_UNIT_NAME_HASH_KEY.bytes));
++
++        hash = hexmem(&h, sizeof(h));
++        if (!hash)
++                return -ENOMEM;
++
++        assert_se(strlen(hash) == UNIT_NAME_HASH_LENGTH_CHARS);
++
++        len = UNIT_NAME_MAX - 1 - strlen(suffix+1) - UNIT_NAME_HASH_LENGTH_CHARS - 2;
++        assert(len > 0 && len < UNIT_NAME_MAX);
++
++        n = strndup(name, len);
++        if (!n)
++                return -ENOMEM;
++
++        if (!strextend(&n, "_", hash, suffix))
++                return -ENOMEM;
++        assert_se(unit_name_is_valid(n, UNIT_NAME_PLAIN));
++
++        *ret = TAKE_PTR(n);
++
++        return 0;
++}
++
+ int unit_name_from_path(const char *path, const char *suffix, char **ret) {
+         _cleanup_free_ char *p = NULL, *s = NULL;
+         int r;
+@@ -526,8 +596,17 @@ int unit_name_from_path(const char *path, const char *suffix, char **ret) {
+         if (!s)
+                 return -ENOMEM;
+ 
+-        if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */
+-                return -ENAMETOOLONG;
++        if (strlen(s) >= UNIT_NAME_MAX) {
++                _cleanup_free_ char *n = NULL;
++
++                log_debug("Unit name \"%s\" too long, falling back to hashed unit name.", s);
++
++                r = unit_name_hash_long(s, &n);
++                if (r < 0)
++                        return r;
++
++                free_and_replace(s, n);
++        }
+ 
+         /* Refuse if this for some other reason didn't result in a valid name */
+         if (!unit_name_is_valid(s, UNIT_NAME_PLAIN))
+@@ -581,6 +660,9 @@ int unit_name_to_path(const char *name, char **ret) {
+         if (r < 0)
+                 return r;
+ 
++        if (unit_name_is_hashed(name))
++                return -ENAMETOOLONG;
++
+         return unit_name_path_unescape(prefix, ret);
+ }
+ 
+diff --git a/src/basic/unit-name.h b/src/basic/unit-name.h
+index b62b3e034e..eaa701e9f6 100644
+--- a/src/basic/unit-name.h
++++ b/src/basic/unit-name.h
+@@ -44,6 +44,9 @@ int unit_name_replace_instance(const char *f, const char *i, char **ret);
+ 
+ int unit_name_template(const char *f, char **ret);
+ 
++int unit_name_hash_long(const char *name, char **ret);
++bool unit_name_is_hashed(const char *name);
++
+ int unit_name_from_path(const char *path, const char *suffix, char **ret);
+ int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret);
+ int unit_name_to_path(const char *name, char **ret);
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 4d407ca4e5..d63884e47e 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -622,6 +622,9 @@ static int mount_add_extras(Mount *m) {
+ 
+         if (!m->where) {
+                 r = unit_name_to_path(u->id, &m->where);
++                if (r == -ENAMETOOLONG)
++                        log_unit_error_errno(u, r, "Failed to derive mount point path from unit name, because unit name is hashed. "
++                                                   "Set \"Where=\" in the unit file explicitly.");
+                 if (r < 0)
+                         return r;
+         }
+diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
+index 8cd0e0b4a1..b6137333aa 100644
+--- a/src/test/test-unit-name.c
++++ b/src/test/test-unit-name.c
+@@ -106,6 +106,7 @@ TEST(unit_name_replace_instance) {
+ 
+ static void test_unit_name_from_path_one(const char *path, const char *suffix, const char *expected, int ret) {
+         _cleanup_free_ char *t = NULL;
++        int r;
+ 
+         assert_se(unit_name_from_path(path, suffix, &t) == ret);
+         puts(strna(t));
+@@ -113,12 +114,31 @@ static void test_unit_name_from_path_one(const char *path, const char *suffix, c
+ 
+         if (t) {
+                 _cleanup_free_ char *k = NULL;
+-                assert_se(unit_name_to_path(t, &k) == 0);
++
++                /* We don't support converting hashed unit names back to paths */
++                r = unit_name_to_path(t, &k);
++                if (r == -ENAMETOOLONG)
++                        return;
++                assert(r == 0);
++
+                 puts(strna(k));
+                 assert_se(path_equal(k, empty_to_root(path)));
+         }
+ }
+ 
++TEST(unit_name_is_hashed) {
++        assert_se(!unit_name_is_hashed(""));
++        assert_se(!unit_name_is_hashed("foo@bar.service"));
++        assert_se(!unit_name_is_hashed("foo@.service"));
++        assert_se(unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736D9ED33C2EC55.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!7736d9ed33c2ec55.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9gd33c2ec55.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@waldo.mount"));
++        assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@.mount"));
++}
++
+ TEST(unit_name_from_path) {
+         test_unit_name_from_path_one("/waldo", ".mount", "waldo.mount", 0);
+         test_unit_name_from_path_one("/waldo/quuix", ".mount", "waldo-quuix.mount", 0);
+@@ -128,7 +148,8 @@ TEST(unit_name_from_path) {
+         test_unit_name_from_path_one("///", ".mount", "-.mount", 0);
+         test_unit_name_from_path_one("/foo/../bar", ".mount", NULL, -EINVAL);
+         test_unit_name_from_path_one("/foo/./bar", ".mount", "foo-bar.mount", 0);
+-        test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -ENAMETOOLONG);
++        test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount",
++                                     "waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount", 0);
+ }
+ 
+ static void test_unit_name_from_path_instance_one(const char *pattern, const char *path, const char *suffix, const char *expected, int ret) {
+@@ -156,7 +177,6 @@ TEST(unit_name_from_path_instance) {
+         test_unit_name_from_path_instance_one("waldo", "..", ".mount", NULL, -EINVAL);
+         test_unit_name_from_path_instance_one("waldo", "/foo", ".waldi", NULL, -EINVAL);
+         test_unit_name_from_path_instance_one("wa--ldo", "/--", ".mount", "wa--ldo@\\x2d\\x2d.mount", 0);
+-        test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -ENAMETOOLONG);
+ }
+ 
+ static void test_unit_name_to_path_one(const char *unit, const char *path, int ret) {
diff --git a/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch b/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch
new file mode 100644
index 0000000..5a267c0
--- /dev/null
+++ b/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch
@@ -0,0 +1,42 @@
+From 1121def1f02c847df894611e171a1025f859fb3d Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 23 Mar 2022 13:35:44 +0100
+Subject: [PATCH] tests: add test case for long unit names
+
+(cherry picked from commit 2ef0101e0b2813e8c99fc8f137dbaa763ca16057)
+
+Related: #2083493
+---
+ test/units/testsuite-60.sh | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh
+index eb174f00ed..239d7b0d4c 100755
+--- a/test/units/testsuite-60.sh
++++ b/test/units/testsuite-60.sh
+@@ -8,6 +8,25 @@ systemd-analyze log-target journal
+ 
+ NUM_DIRS=20
+ 
++# make sure we can handle mounts at very long paths such that mount unit name must be hashed to fall within our unit name limit
++LONGPATH="$(printf "/$(printf "x%0.s" {1..255})%0.s" {1..7})"
++LONGMNT="$(systemd-escape --suffix=mount --path "$LONGPATH")"
++TS="$(date '+%H:%M:%S')"
++
++mkdir -p "$LONGPATH"
++mount -t tmpfs tmpfs "$LONGPATH"
++systemctl daemon-reload
++
++# check that unit is active(mounted)
++systemctl --no-pager show -p SubState --value "$LONGPATH" | grep -q mounted
++
++# check that relevant part of journal doesn't contain any errors related to unit
++[ "$(journalctl -b --since="$TS" --priority=err | grep -c "$LONGMNT")" = "0" ]
++
++# check that we can successfully stop the mount unit
++systemctl stop "$LONGPATH"
++rm -rf "$LONGPATH"
++
+ # mount/unmount enough times to trigger the /proc/self/mountinfo parsing rate limiting
+ 
+ for ((i = 0; i < NUM_DIRS; i++)); do
diff --git a/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch b/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch
new file mode 100644
index 0000000..8f2e825
--- /dev/null
+++ b/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch
@@ -0,0 +1,37 @@
+From 87e45d9c58c74ae7ba46f99a3f0e2db39cf345ff Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 24 Mar 2022 19:24:16 +0100
+Subject: [PATCH] tests: reflect that we can now handle devices with very long
+ sysfs paths
+
+(cherry picked from commit b26f4f0028e27b6ad46ef9af56aac7571caa3a25)
+
+Related: #2083493
+---
+ test/units/testsuite-64.sh | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh
+index dc8b263b10..218b2ee8d1 100755
+--- a/test/units/testsuite-64.sh
++++ b/test/units/testsuite-64.sh
+@@ -674,6 +674,7 @@ testcase_long_sysfs_path() {
+     echo "UUID=deadbeef-dead-dead-beef-222222222222 $mpoint ext4 defaults 0 0" >>/etc/fstab
+     systemctl daemon-reload
+     mount "$mpoint"
++    systemctl status "$mpoint"
+     test -e "$mpoint/test"
+     umount "$mpoint"
+ 
+@@ -684,9 +685,9 @@ testcase_long_sysfs_path() {
+     udevadm settle
+ 
+     logfile="$(mktemp)"
+-    journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name"
++    [[ "$(journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]]
+     # Make sure we don't unnecessarily spam the log
+-    journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service | tee "$logfile"
++    { journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service || :;} | tee "$logfile"
+     [[ "$(wc -l <"$logfile")" -lt 10 ]]
+ 
+     : >/etc/fstab
diff --git a/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch b/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch
new file mode 100644
index 0000000..e824455
--- /dev/null
+++ b/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch
@@ -0,0 +1,63 @@
+From c9fe9526f07ad24d29842fa853ee458b68660896 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 22 Apr 2022 18:03:14 +0200
+Subject: [PATCH] test: extend the "hashed" unit names coverage a bit
+
+Follow-up to #22759.
+
+(cherry picked from commit 98f8c316389177169c6599e67010ebb1789a6b26)
+
+Related: #2083493
+---
+ test/units/testsuite-64.sh | 19 ++++++++++++++++---
+ 1 file changed, 16 insertions(+), 3 deletions(-)
+
+diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh
+index 218b2ee8d1..5f9aeee261 100755
+--- a/test/units/testsuite-64.sh
++++ b/test/units/testsuite-64.sh
+@@ -646,7 +646,7 @@ testcase_iscsi_lvm() {
+ }
+ 
+ testcase_long_sysfs_path() {
+-    local link logfile mpoint
++    local cursor link logfile mpoint
+     local expected_symlinks=(
+         "/dev/disk/by-label/data_vol"
+         "/dev/disk/by-label/swap_vol"
+@@ -657,6 +657,12 @@ testcase_long_sysfs_path() {
+         "/dev/disk/by-uuid/deadbeef-dead-dead-beef-222222222222"
+     )
+ 
++    # Create a cursor file to skip messages generated by udevd in initrd, as it
++    # might not be the same up-to-date version as we currently run (hence generating
++    # messages we check for later and making the test fail)
++    cursor="$(mktemp)"
++    journalctl --cursor-file="${cursor:?}" -n0 -q
++
+     # Make sure the test device is connected and show its "wonderful" path
+     stat /sys/block/vda
+     readlink -f /sys/block/vda/dev
+@@ -685,13 +691,20 @@ testcase_long_sysfs_path() {
+     udevadm settle
+ 
+     logfile="$(mktemp)"
+-    [[ "$(journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]]
++    # Check state of affairs after https://github.com/systemd/systemd/pull/22759
++    # Note: can't use `--cursor-file` here, since we don't want to update the cursor
++    #       after using it
++    [[ "$(journalctl --after-cursor="$(<"$cursor")" -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]]
++    [[ "$(journalctl --after-cursor="$(<"$cursor")" -q --no-pager -o short-monotonic --grep "Unit name .*vda.?\.device\" too long, falling back to hashed unit name" | wc -l)" -gt 0 ]]
++    # Check if the respective "hashed" units exist and are active (plugged)
++    systemctl status --no-pager "$(readlink -f /sys/block/vda/vda1)"
++    systemctl status --no-pager "$(readlink -f /sys/block/vda/vda2)"
+     # Make sure we don't unnecessarily spam the log
+     { journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service || :;} | tee "$logfile"
+     [[ "$(wc -l <"$logfile")" -lt 10 ]]
+ 
+     : >/etc/fstab
+-    rm -fr "${logfile:?}" "${mpoint:?}"
++    rm -fr "${cursor:?}" "${logfile:?}" "${mpoint:?}"
+ }
+ 
+ : >/failed
diff --git a/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch b/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch
new file mode 100644
index 0000000..a00c8c4
--- /dev/null
+++ b/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch
@@ -0,0 +1,29 @@
+From 17f516c0714e05d3dea7f168304286658aead870 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 17 Mar 2022 12:35:35 +0100
+Subject: [PATCH] Revert "kernel-install: also remove
+ modules.builtin.alias.bin"
+
+This reverts commit fdcb1bf67371615f12c4b11283f2bd6a25bda019.
+
+Related: #2065061
+
+[msekleta: this revert is done in order to make backporting easier,
+patch will be reapplied later.]
+---
+ src/kernel-install/50-depmod.install | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
+index fd00c43632..2fd959865f 100644
+--- a/src/kernel-install/50-depmod.install
++++ b/src/kernel-install/50-depmod.install
+@@ -36,7 +36,7 @@ case "$COMMAND" in
+     remove)
+         [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+             echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
+-        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin{,.alias}.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
++        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
+         ;;
+     *)
+         exit 0
diff --git a/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch b/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
new file mode 100644
index 0000000..95429ea
--- /dev/null
+++ b/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
@@ -0,0 +1,29 @@
+From 3fae5c22831288c075e371e67ecc91968ab60d63 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 17 Mar 2022 12:37:57 +0100
+Subject: [PATCH] Revert "kernel-install: prefer /boot over /boot/efi for
+ $BOOT_ROOT"
+
+This reverts commit d0e98b7a1211412dccfcf4dcd2cc0772ac70b304.
+
+Related: #2065061
+
+[msekleta: this revert is done in order to make backporting easier,
+patch will be reapplied later.]
+---
+ src/kernel-install/kernel-install | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index d85852532b..b358b03b2f 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -108,7 +108,7 @@ fi
+ [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
+ 
+ [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
+-    for pref in "/efi" "/boot" "/boot/efi" ; do
++    for pref in "/efi" "/boot/efi" "/boot"; do
+         if [ -d "$pref/$suff" ]; then
+             BOOT_ROOT="$pref"
+             break 2
diff --git a/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch b/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch
new file mode 100644
index 0000000..952e1f0
--- /dev/null
+++ b/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch
@@ -0,0 +1,60 @@
+From d90268728f268f4e5291d29bc2b899137cd7ddf5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Thu, 16 Dec 2021 14:35:17 +0100
+Subject: [PATCH] kernel-install: 50-depmod: port to /bin/sh
+
+(cherry picked from commit b3ceb3d9fff69b33b8665a0137f5177f72c45cc0)
+
+Related: #2065061
+---
+ src/kernel-install/50-depmod.install | 28 +++++++++++++++-------------
+ 1 file changed, 15 insertions(+), 13 deletions(-)
+
+diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
+index 2fd959865f..aa1f6b8e0e 100644
+--- a/src/kernel-install/50-depmod.install
++++ b/src/kernel-install/50-depmod.install
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env bash
++#!/bin/sh
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+@@ -20,23 +20,25 @@
+ 
+ COMMAND="$1"
+ KERNEL_VERSION="$2"
+-ENTRY_DIR_ABS="$3"
+-KERNEL_IMAGE="$4"
+-INITRD_OPTIONS_START="5"
+-
+-[[ $KERNEL_VERSION ]] || exit 1
+ 
+ case "$COMMAND" in
+     add)
+-        [[ -d "/lib/modules/${KERNEL_VERSION}/kernel" ]] || exit 0
+-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-            echo "Running depmod -a ${KERNEL_VERSION}"
+-        exec depmod -a "${KERNEL_VERSION}"
++        [ -d "/lib/modules/$KERNEL_VERSION/kernel" ] || exit 0
++        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+depmod -a $KERNEL_VERSION"
++        exec depmod -a "$KERNEL_VERSION"
+         ;;
+     remove)
+-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-            echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
+-        exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}}
++        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Removing /lib/modules/$KERNEL_VERSION/modules.dep and associated files"
++        exec rm -f \
++            "/lib/modules/$KERNEL_VERSION/modules.alias" \
++            "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \
++            "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \
++            "/lib/modules/$KERNEL_VERSION/modules.dep" \
++            "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \
++            "/lib/modules/$KERNEL_VERSION/modules.devname" \
++            "/lib/modules/$KERNEL_VERSION/modules.softdep" \
++            "/lib/modules/$KERNEL_VERSION/modules.symbols" \
++            "/lib/modules/$KERNEL_VERSION/modules.symbols.bin"
+         ;;
+     *)
+         exit 0
diff --git a/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch b/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch
new file mode 100644
index 0000000..5502981
--- /dev/null
+++ b/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch
@@ -0,0 +1,181 @@
+From 7b05dc8184e1a459d0a073dfe569560681525980 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Thu, 16 Dec 2021 14:35:33 +0100
+Subject: [PATCH] kernel-install: 90-loaderentry: port to /bin/sh
+
+Also, forward the rm -f exit code on removal instead of swallowing it
+
+(cherry picked from commit 662f45e3ea9f6e933234b81bec532d584bda6ead)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 110 +++++++++-------------
+ 1 file changed, 45 insertions(+), 65 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 044eced3f0..35324e69a9 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env bash
++#!/bin/sh
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+@@ -22,68 +22,53 @@ COMMAND="$1"
+ KERNEL_VERSION="$2"
+ ENTRY_DIR_ABS="$3"
+ KERNEL_IMAGE="$4"
+-INITRD_OPTIONS_START="5"
++INITRD_OPTIONS_SHIFT=4
+ 
+-if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
+-    exit 0
+-fi
+-
+-if [ "$KERNEL_INSTALL_LAYOUT" != "bls" ]; then
+-    exit 0
+-fi
++[ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0
+ 
+ MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+ BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
+ 
+ BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
+-if [[ "$BOOT_MNT" == '/' ]]; then
++if [ "$BOOT_MNT" = '/' ]; then
+     ENTRY_DIR="$ENTRY_DIR_ABS"
+ else
+     ENTRY_DIR="${ENTRY_DIR_ABS#$BOOT_MNT}"
+ fi
+ 
+-if [[ $COMMAND == remove ]]; then
+-    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
+-    rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
+-    exit 0
+-fi
+-
+-if ! [[ $COMMAND == add ]]; then
+-    exit 1
+-fi
+-
+-if ! [[ $KERNEL_IMAGE ]]; then
+-    exit 1
+-fi
++case "$COMMAND" in
++    remove)
++        exec rm -f \
++            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
++            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
++        ;;
++    add)
++        ;;
++    *)
++        exit 1
++        ;;
++esac
+ 
+-if [[ -f /etc/os-release ]]; then
++if [ -r /etc/os-release ]; then
+     . /etc/os-release
+-elif [[ -f /usr/lib/os-release ]]; then
++elif [ -r /usr/lib/os-release ]; then
+     . /usr/lib/os-release
+ fi
+ 
+-if ! [[ $PRETTY_NAME ]]; then
+-    PRETTY_NAME="Linux $KERNEL_VERSION"
+-fi
++[ -n "$PRETTY_NAME" ] || PRETTY_NAME="Linux $KERNEL_VERSION"
+ 
+-if [[ -f /etc/kernel/cmdline ]]; then
+-    read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
+-elif [[ -f /usr/lib/kernel/cmdline ]]; then
+-    read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
++if [ -r /etc/kernel/cmdline ]; then
++    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </etc/kernel/cmdline)"
++elif [ -r /usr/lib/kernel/cmdline ]; then
++    BOOT_OPTIONS="$(tr -s "$IFS" ' ' </usr/lib/kernel/cmdline)"
+ else
+-    declare -a BOOT_OPTIONS
+-
+-    read -r -d '' -a line < /proc/cmdline
+-    for i in "${line[@]}"; do
+-        [[ "${i#initrd=*}" != "$i" ]] && continue
+-        [[ "${i#BOOT_IMAGE=*}" != "$i" ]] && continue
+-        BOOT_OPTIONS+=("$i")
+-    done
++    BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
+ fi
++BOOT_OPTIONS="${BOOT_OPTIONS% }"
+ 
+-if [[ -f /etc/kernel/tries ]]; then
++if [ -r /etc/kernel/tries ]; then
+     read -r TRIES </etc/kernel/tries
+-    if ! [[ "$TRIES" =~ ^[0-9]+$ ]] ; then
++    if ! echo "$TRIES" | grep -q '^[0-9][0-9]*$'; then
+         echo "/etc/kernel/tries does not contain an integer." >&2
+         exit 1
+     fi
+@@ -106,43 +91,38 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
+     exit 1
+ }
+ 
+-INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" )
+-
+-for initrd in "${INITRD_OPTIONS[@]}"; do
+-    if [[ -f "${initrd}" ]]; then
+-        initrd_basename="$(basename ${initrd})"
+-        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-            echo "Installing $ENTRY_DIR_ABS/${initrd_basename}"
+-        install -g root -o root -m 0644 "${initrd}" "$ENTRY_DIR_ABS/${initrd_basename}" || {
+-            echo "Could not copy '${initrd}' to '$ENTRY_DIR_ABS/${initrd_basename}'." >&2
+-            exit 1
+-        }
+-    fi
+-done
++shift "$INITRD_OPTIONS_SHIFT"
++for initrd; do
++    [ -f "$initrd" ] || continue
+ 
+-# If no initrd option is supplied, fall back to "initrd" which is
+-# the name used by dracut when generating it in its kernel-install hook
+-[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd )
++    initrd_basename="${initrd##*/}"
++    [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
++    install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || {
++        echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
++        exit 1
++    }
++done
+ 
+ mkdir -p "${LOADER_ENTRY%/*}" || {
+     echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
+     exit 1
+ }
+ 
+-[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-    echo "Creating $LOADER_ENTRY"
++# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
++[ $# -eq 0 ] && set -- "initrd"
++
++[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY"
+ {
+     echo "title      $PRETTY_NAME"
+     echo "version    $KERNEL_VERSION"
+     echo "machine-id $MACHINE_ID"
+-    echo "options    ${BOOT_OPTIONS[*]}"
++    echo "options    $BOOT_OPTIONS"
+     echo "linux      $ENTRY_DIR/linux"
+-    for initrd in "${INITRD_OPTIONS[@]}"; do
+-        [[ -f $ENTRY_DIR_ABS/$(basename ${initrd}) ]] && \
+-            echo "initrd     $ENTRY_DIR/$(basename ${initrd})"
++    for initrd; do
++        [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd     $ENTRY_DIR/${initrd##*/}"
+     done
+     :
+-} > "$LOADER_ENTRY" || {
++} >"$LOADER_ENTRY" || {
+     echo "Could not create loader entry '$LOADER_ENTRY'." >&2
+     exit 1
+ }
diff --git a/SOURCES/0083-kernel-install-fix-shellcheck.patch b/SOURCES/0083-kernel-install-fix-shellcheck.patch
new file mode 100644
index 0000000..89094a2
--- /dev/null
+++ b/SOURCES/0083-kernel-install-fix-shellcheck.patch
@@ -0,0 +1,82 @@
+From 52f6eedb3bb4dc7a57fea6a8991b9058dedc8edc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Thu, 16 Dec 2021 14:37:53 +0100
+Subject: [PATCH] kernel-install: fix shellcheck
+
+(cherry picked from commit 0bb1cb1fce5ebf307501dec1679e37f0c0157be9)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index b358b03b2f..f6da0cf7a8 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -26,8 +26,8 @@ usage()
+     echo "  $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
+     echo "  $0 [OPTIONS...] remove KERNEL-VERSION"
+     echo "Options:"
+-    echo "  -h,--help     Print this help"
+-    echo "  -v,--verbose  Increase verbosity"
++    echo "  -h, --help     Print this help"
++    echo "  -v, --verbose  Increase verbosity"
+ }
+ 
+ dropindirs_sort()
+@@ -58,15 +58,15 @@ dropindirs_sort()
+ 
+ export LC_COLLATE=C
+ 
+-for i in "$@"; do
+-    if [ "$i" == "--help" -o "$i" == "-h" ]; then
++for i; do
++    if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then
+         usage
+         exit 0
+     fi
+ done
+ 
+ KERNEL_INSTALL_VERBOSE=0
+-if [ "$1" == "--verbose" -o "$1" == "-v" ]; then
++if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then
+     shift
+     KERNEL_INSTALL_VERBOSE=1
+ fi
+@@ -185,13 +185,13 @@ case $COMMAND in
+         for f in "${PLUGINS[@]}"; do
+             if [[ -x $f ]]; then
+                 [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[@]}"
++                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}"
+                 "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
+                 x=$?
+-                if [[ $x == $SKIP_REMAINING ]]; then
++                if [ $x -eq "$SKIP_REMAINING" ]; then
+                     break
+                 fi
+-                ((ret+=$x))
++                ((ret+=x))
+             fi
+         done
+         ;;
+@@ -203,10 +203,10 @@ case $COMMAND in
+                     echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
+                 "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
+                 x=$?
+-                if [[ $x == $SKIP_REMAINING ]]; then
++                if [ $x -eq "$SKIP_REMAINING" ]; then
+                     break
+                 fi
+-                ((ret+=$x))
++                ((ret+=x))
+             fi
+         done
+ 
+@@ -222,4 +222,4 @@ case $COMMAND in
+         ;;
+ esac
+ 
+-exit $ret
++exit "$ret"
diff --git a/SOURCES/0084-kernel-install-port-to-bin-sh.patch b/SOURCES/0084-kernel-install-port-to-bin-sh.patch
new file mode 100644
index 0000000..db473f9
--- /dev/null
+++ b/SOURCES/0084-kernel-install-port-to-bin-sh.patch
@@ -0,0 +1,205 @@
+From 1f9eec4ab2a8a2213fec66194c537086e8242a0d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Thu, 16 Dec 2021 15:06:06 +0100
+Subject: [PATCH] kernel-install: port to /bin/sh
+
+(cherry picked from commit 76b1274a5cb54acaa4a0f0c2e570d751f9067c06)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 109 ++++++++++++------------------
+ 1 file changed, 43 insertions(+), 66 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index f6da0cf7a8..2e8f382d5f 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env bash
++#!/bin/sh
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+@@ -18,7 +18,7 @@
+ # You should have received a copy of the GNU Lesser General Public License
+ # along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ 
+-SKIP_REMAINING=77
++skip_remaining=77
+ 
+ usage()
+ {
+@@ -32,24 +32,17 @@ usage()
+ 
+ dropindirs_sort()
+ {
+-    local suffix=$1; shift
+-    local -a files
+-    local f d i
+-
+-    readarray -t files <<<"$(
+-        for d in "$@"; do
+-            for i in "$d/"*"$suffix"; do
+-                if [[ -e "$i" ]]; then
+-                    echo "${i##*/}"
+-                fi
+-            done
+-        done | sort -Vu
+-    )"
+-
+-    for f in "${files[@]}"; do
+-        for d in "$@"; do
+-            if [[ -e "$d/$f" ]]; then
+-                echo "$d/$f"
++    suffix="$1"
++    shift
++
++    for d; do
++        for i in "$d/"*"$suffix"; do
++            [ -e "$i" ] && echo "${i##*/}"
++        done
++    done | sort -Vu | while read -r f; do
++        for d; do
++            if [ -e "$d/$f" ]; then
++                [ -x "$d/$f" ] && echo "$d/$f"
+                 continue 2
+             fi
+         done
+@@ -65,27 +58,25 @@ for i; do
+     fi
+ done
+ 
+-KERNEL_INSTALL_VERBOSE=0
++export KERNEL_INSTALL_VERBOSE=0
+ if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then
+     shift
+     KERNEL_INSTALL_VERBOSE=1
+ fi
+-export KERNEL_INSTALL_VERBOSE
+ 
+-if [[ "${0##*/}" == 'installkernel' ]]; then
+-    COMMAND='add'
+-    # make install doesn't pass any parameter wrt initrd handling
+-    INITRD_OPTIONS=()
++if [ "${0##*/}" = "installkernel" ]; then
++    COMMAND=add
++    # make install doesn't pass any initrds
+ else
+     COMMAND="$1"
+-    shift
+-    INITRD_OPTIONS=( "${@:3}" )
++    [ $# -ge 1 ] && shift
+ fi
+ 
+ KERNEL_VERSION="$1"
+ KERNEL_IMAGE="$2"
++[ $# -ge 2 ] && shift 2
+ 
+-if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
++if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then
+     echo "Not enough arguments" >&2
+     exit 1
+ fi
+@@ -99,12 +90,11 @@ fi
+ # Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine
+ # ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate
+ # a new machine ID in /etc/machine-info. If that fails, use "Default".
+-
+-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && read -r MACHINE_ID </etc/machine-id
+-[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ] && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]                && read -r MACHINE_ID </etc/machine-id
++[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ]   && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
+ [ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info
+-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+ [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
+ 
+ [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
+@@ -125,11 +115,6 @@ done
+ [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot"
+ 
+ 
+-ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
+-
+-export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
+-export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
+-
+ if [ -z "$layout" ]; then
+     # Administrative decision: if not present, some scripts generate into /boot.
+     if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then
+@@ -152,21 +137,23 @@ MAKE_ENTRY_DIR_ABS=$?
+ 
+ ret=0
+ 
+-readarray -t PLUGINS <<<"$(
++PLUGINS="$(
+     dropindirs_sort ".install" \
+         "/etc/kernel/install.d" \
+         "/usr/lib/kernel/install.d"
+ )"
++IFS="
++"
+ 
+-case $COMMAND in
++case "$COMMAND" in
+     add)
+-        if [[ ! "$KERNEL_IMAGE" ]]; then
++        if [ -z "$KERNEL_IMAGE" ]; then
+             echo "Command 'add' requires an argument" >&2
+             exit 1
+         fi
+ 
+-        if [[ ! -f "$KERNEL_IMAGE" ]]; then
+-            echo "Kernel image argument ${KERNEL_IMAGE} not a file" >&2
++        if ! [ -f "$KERNEL_IMAGE" ]; then
++            echo "Kernel image argument $KERNEL_IMAGE not a file" >&2
+             exit 1
+         fi
+ 
+@@ -182,32 +169,22 @@ case $COMMAND in
+             fi
+         fi
+ 
+-        for f in "${PLUGINS[@]}"; do
+-            if [[ -x $f ]]; then
+-                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-                    echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}"
+-                "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
+-                x=$?
+-                if [ $x -eq "$SKIP_REMAINING" ]; then
+-                    break
+-                fi
+-                ((ret+=x))
+-            fi
++        for f in $PLUGINS; do
++            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*"
++            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@"
++            err=$?
++            [ $err -eq $skip_remaining ] && break
++            ret=$(( ret + err ))
+         done
+         ;;
+ 
+     remove)
+-        for f in "${PLUGINS[@]}"; do
+-            if [[ -x $f ]]; then
+-                [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-                    echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
+-                "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
+-                x=$?
+-                if [ $x -eq "$SKIP_REMAINING" ]; then
+-                    break
+-                fi
+-                ((ret+=x))
+-            fi
++        for f in $PLUGINS; do
++            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS"
++            "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS"
++            err=$?
++            [ $err -eq $skip_remaining ] && break
++            ret=$(( ret + err ))
+         done
+ 
+         if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
diff --git a/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch b/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
new file mode 100644
index 0000000..95d70d4
--- /dev/null
+++ b/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
@@ -0,0 +1,51 @@
+From bc1c914ebdec526151964c1aa3c2aeea0d4e2680 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Fri, 17 Dec 2021 19:51:12 +0100
+Subject: [PATCH] kernel-install: 90-loaderentry: error out on nonexistent
+ initrds instead of swallowing them quietly
+
+(cherry picked from commit 742561efbe938c45936f2e4f5d81b3ff6b352882)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 35324e69a9..e588e72bf9 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -93,7 +93,10 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
+ 
+ shift "$INITRD_OPTIONS_SHIFT"
+ for initrd; do
+-    [ -f "$initrd" ] || continue
++    [ -f "$initrd" ] || {
++        echo "Initrd '$initrd' not a file." >&2
++        exit 1
++    }
+ 
+     initrd_basename="${initrd##*/}"
+     [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
+@@ -108,9 +111,6 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
+     exit 1
+ }
+ 
+-# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
+-[ $# -eq 0 ] && set -- "initrd"
+-
+ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY"
+ {
+     echo "title      $PRETTY_NAME"
+@@ -119,8 +119,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
+     echo "options    $BOOT_OPTIONS"
+     echo "linux      $ENTRY_DIR/linux"
+     for initrd; do
+-        [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd     $ENTRY_DIR/${initrd##*/}"
++        echo "initrd     $ENTRY_DIR/${initrd##*/}"
+     done
++    # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
++    [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
+     :
+ } >"$LOADER_ENTRY" || {
+     echo "Could not create loader entry '$LOADER_ENTRY'." >&2
diff --git a/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch b/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
new file mode 100644
index 0000000..1913f15
--- /dev/null
+++ b/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
@@ -0,0 +1,68 @@
+From 8a52c3a1797084956ddcd2acfb65a4023a4f0655 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
+Date: Mon, 20 Dec 2021 14:57:39 +0100
+Subject: [PATCH] kernel-install: don't pull out KERNEL_IMAGE
+
+It's part of the pack directly passed to scripts on add and ignored on
+remove
+
+(cherry picked from commit af319a4b14bd05cd4c8460487f2c6d7a31b35640)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 2e8f382d5f..097d6557f2 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -72,15 +72,14 @@ else
+     [ $# -ge 1 ] && shift
+ fi
+ 
+-KERNEL_VERSION="$1"
+-KERNEL_IMAGE="$2"
+-[ $# -ge 2 ] && shift 2
+-
+-if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then
++if [ $# -lt 1 ]; then
+     echo "Not enough arguments" >&2
+     exit 1
+ fi
+ 
++KERNEL_VERSION="$1"
++shift
++
+ if [ -r "/etc/kernel/install.conf" ]; then
+     . /etc/kernel/install.conf
+ elif [ -r "/usr/lib/kernel/install.conf" ]; then
+@@ -147,13 +146,13 @@ IFS="
+ 
+ case "$COMMAND" in
+     add)
+-        if [ -z "$KERNEL_IMAGE" ]; then
+-            echo "Command 'add' requires an argument" >&2
++        if [ $# -lt 1 ]; then
++            echo "Command 'add' requires a kernel image" >&2
+             exit 1
+         fi
+ 
+-        if ! [ -f "$KERNEL_IMAGE" ]; then
+-            echo "Kernel image argument $KERNEL_IMAGE not a file" >&2
++        if ! [ -f "$1" ]; then
++            echo "Kernel image argument $1 not a file" >&2
+             exit 1
+         fi
+ 
+@@ -170,8 +169,8 @@ case "$COMMAND" in
+         fi
+ 
+         for f in $PLUGINS; do
+-            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*"
+-            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@"
++            [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $*"
++            "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@"
+             err=$?
+             [ $err -eq $skip_remaining ] && break
+             ret=$(( ret + err ))
diff --git a/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch b/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
new file mode 100644
index 0000000..5da86e6
--- /dev/null
+++ b/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
@@ -0,0 +1,32 @@
+From 8bcb1df836fccb5ddb6fb071b022bfd490f94e11 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam@redhat.com>
+Date: Wed, 5 Jan 2022 14:07:14 -0800
+Subject: [PATCH] kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT
+
+This restores the preference order from before 9e82a74. The code
+previous to that change 'preferred' /boot over /boot/efi; that
+commit changed it to check /boot/efi before checking /boot.
+Changing this precedence could (and did, for me) have unexpected
+effects - it seems safer to leave it how it was.
+
+Signed-off-by: Adam Williamson <awilliam@redhat.com>
+(cherry picked from commit a5307e173bf86d695fe85b8e15e91126e8618a14)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 097d6557f2..e56483ef96 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -97,7 +97,7 @@ fi
+ [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
+ 
+ [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
+-    for pref in "/efi" "/boot/efi" "/boot"; do
++    for pref in "/efi" "/boot" "/boot/efi" ; do
+         if [ -d "$pref/$suff" ]; then
+             BOOT_ROOT="$pref"
+             break 2
diff --git a/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch b/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch
new file mode 100644
index 0000000..ba2f56a
--- /dev/null
+++ b/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch
@@ -0,0 +1,26 @@
+From 491f0e55e1f1095b1d52d45e5753d5f1ea621231 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sat, 15 Jan 2022 03:37:40 +0900
+Subject: [PATCH] kernel-install: also remove modules.builtin.alias.bin
+
+Fixes RHBZ#2016630.
+
+(cherry picked from commit 06006691b5c56b6123044179d934b3ed81c237ca)
+
+Related: #2065061
+---
+ src/kernel-install/50-depmod.install | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
+index aa1f6b8e0e..be414f39d1 100644
+--- a/src/kernel-install/50-depmod.install
++++ b/src/kernel-install/50-depmod.install
+@@ -33,6 +33,7 @@ case "$COMMAND" in
+             "/lib/modules/$KERNEL_VERSION/modules.alias" \
+             "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \
+             "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \
++            "/lib/modules/$KERNEL_VERSION/modules.builtin.alias.bin" \
+             "/lib/modules/$KERNEL_VERSION/modules.dep" \
+             "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \
+             "/lib/modules/$KERNEL_VERSION/modules.devname" \
diff --git a/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch b/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
new file mode 100644
index 0000000..120a52e
--- /dev/null
+++ b/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
@@ -0,0 +1,77 @@
+From 931ae9749924a396a78044f8b1536085ff574ae6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 18 Jan 2022 17:40:13 +0100
+Subject: [PATCH] kernel-install: add new variable
+ $KERNEL_INSTALL_INITRD_GENERATOR
+
+The idea is that when not set, we do whatever we did in the past. But
+with a new setting of initrd_generator=mkosi-initrd, mkosi-initrd will
+generate an initrd.
+
+(cherry picked from commit 5c1b257faf87cb4f93aee8866f45a8cb98230af9)
+
+Related: #2065061
+---
+ man/kernel-install.xml            | 6 +++++-
+ src/kernel-install/install.conf   | 1 +
+ src/kernel-install/kernel-install | 5 ++++-
+ 3 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/man/kernel-install.xml b/man/kernel-install.xml
+index 83255bb932..bb76074d2e 100644
+--- a/man/kernel-install.xml
++++ b/man/kernel-install.xml
+@@ -171,11 +171,15 @@
+     <para><varname>KERNEL_INSTALL_BOOT_ROOT=</varname> is set for the plugins to the root directory (mount point, usually) of the hierarchy
+     where boot-loader entries, kernel images, and associated resources should be placed. Can be overridden by setting <varname>BOOT_ROOT=</varname>.</para>
+ 
+-    <para><varname>KERNEL_INSTALL_LAYOUT=bls|other|...</varname> specifies the installation layout.
++    <para><varname>KERNEL_INSTALL_LAYOUT=bls|other|...</varname> is set for the plugins to specify the installation layout.
+     Defaults to <option>bls</option> if <filename>$BOOT/<replaceable>MACHINE-ID</replaceable></filename> exists, or <option>other</option> otherwise.
+     Additional layout names may be defined by convention. If a plugin uses a special layout,
+     it's encouraged to declare its own layout name and configure <varname>layout=</varname> in <filename>install.conf</filename> upon initial installation.</para>
+ 
++    <para><varname>KERNEL_INSTALL_INITRD_GENERATOR=...</varname> is set for plugins to select the initrd generator.
++    This should be configured as <varname>initrd_generator=</varname> in <filename>install.conf</filename>.
++    </para>
++
+     <variablelist>
+       <varlistentry>
+         <term>bls</term>
+diff --git a/src/kernel-install/install.conf b/src/kernel-install/install.conf
+index e4802e6fae..43b6e7d792 100644
+--- a/src/kernel-install/install.conf
++++ b/src/kernel-install/install.conf
+@@ -8,3 +8,4 @@
+ # See kernel-install(8) for details.
+ 
+ #layout=bls|other|...
++#initrd_generator=dracut|...
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index e56483ef96..fe457c1070 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -80,6 +80,9 @@ fi
+ KERNEL_VERSION="$1"
+ shift
+ 
++layout=
++initrd_generator=
++
+ if [ -r "/etc/kernel/install.conf" ]; then
+     . /etc/kernel/install.conf
+ elif [ -r "/usr/lib/kernel/install.conf" ]; then
+@@ -123,12 +126,12 @@ if [ -z "$layout" ]; then
+     fi
+ fi
+ 
+-
+ ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
+ 
+ export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
+ export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
+ export KERNEL_INSTALL_LAYOUT="$layout"
++export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
+ 
+ [ "$layout" = "bls" ]
+ MAKE_ENTRY_DIR_ABS=$?
diff --git a/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch b/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
new file mode 100644
index 0000000..071ac07
--- /dev/null
+++ b/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
@@ -0,0 +1,32 @@
+From 27b017353a06a22d42dc8bbabbaf602200730719 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 12:10:37 +0100
+Subject: [PATCH] kernel-install: k-i already creates $ENTRY_DIR_ABS, no need
+ to do it again
+
+(cherry picked from commit a520d5dddb991cd713392d4de0e342e312547a2e)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index e588e72bf9..7b768457c1 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -78,12 +78,8 @@ else
+ fi
+ 
+ if ! [ -d "$ENTRY_DIR_ABS" ]; then
+-    if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
+-        echo "+mkdir -v -p $ENTRY_DIR_ABS"
+-        mkdir -v -p "$ENTRY_DIR_ABS"
+-    else
+-        mkdir -p "$ENTRY_DIR_ABS"
+-    fi
++    echo "Error: entry directory '$ENTRY_DIR_ABS' does not exist" >&2
++    exit 1
+ fi
+ 
+ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
diff --git a/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch b/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch
new file mode 100644
index 0000000..0bd51bb
--- /dev/null
+++ b/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch
@@ -0,0 +1,118 @@
+From 7e5ff353f8b35352f6c36233841754154b4f453b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 12:15:16 +0100
+Subject: [PATCH] kernel-install: prefix errors with "Error:", exit immediately
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+kernel-install would continue after errors… We don't want this, as it
+makes the results totally unpredicatable. If we didn't install the kernel
+or didn't do some important part of the setup, let's just return an error
+and let the user deal with it.
+
+When looking at output, the error was often hard to distinguish, esp.
+with -v. Add "Error:" everywhere to make the output easier to parse.
+
+(cherry picked from commit 680cec6b4ddb356d7dd087b197718712cb5c1662)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 10 +++++-----
+ src/kernel-install/kernel-install         | 12 ++++++------
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 7b768457c1..6a396910cb 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -83,27 +83,27 @@ if ! [ -d "$ENTRY_DIR_ABS" ]; then
+ fi
+ 
+ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
+-    echo "Could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2
++    echo "Error: could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2
+     exit 1
+ }
+ 
+ shift "$INITRD_OPTIONS_SHIFT"
+ for initrd; do
+     [ -f "$initrd" ] || {
+-        echo "Initrd '$initrd' not a file." >&2
++        echo "Error: initrd '$initrd' not a file." >&2
+         exit 1
+     }
+ 
+     initrd_basename="${initrd##*/}"
+     [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename"
+     install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || {
+-        echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
++        echo "Error: could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2
+         exit 1
+     }
+ done
+ 
+ mkdir -p "${LOADER_ENTRY%/*}" || {
+-    echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
++    echo "Error: could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
+     exit 1
+ }
+ 
+@@ -121,7 +121,7 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
+     [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
+     :
+ } >"$LOADER_ENTRY" || {
+-    echo "Could not create loader entry '$LOADER_ENTRY'." >&2
++    echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2
+     exit 1
+ }
+ exit 0
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index fe457c1070..a73a205d79 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -73,7 +73,7 @@ else
+ fi
+ 
+ if [ $# -lt 1 ]; then
+-    echo "Not enough arguments" >&2
++    echo "Error: not enough arguments" >&2
+     exit 1
+ fi
+ 
+@@ -150,12 +150,12 @@ IFS="
+ case "$COMMAND" in
+     add)
+         if [ $# -lt 1 ]; then
+-            echo "Command 'add' requires a kernel image" >&2
++            echo "Error: command 'add' requires a kernel image" >&2
+             exit 1
+         fi
+ 
+         if ! [ -f "$1" ]; then
+-            echo "Kernel image argument $1 not a file" >&2
++            echo "Error: kernel image argument $1 not a file" >&2
+             exit 1
+         fi
+ 
+@@ -165,9 +165,9 @@ case "$COMMAND" in
+             # to serve as the indication to use or to not use the BLS
+             if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
+                 echo "+mkdir -v -p $ENTRY_DIR_ABS"
+-                mkdir -v -p "$ENTRY_DIR_ABS"
++                mkdir -v -p "$ENTRY_DIR_ABS" || exit 1
+             else
+-                mkdir -p "$ENTRY_DIR_ABS"
++                mkdir -p "$ENTRY_DIR_ABS" || exit 1
+             fi
+         fi
+ 
+@@ -196,7 +196,7 @@ case "$COMMAND" in
+         ;;
+ 
+     *)
+-        echo "Unknown command '$COMMAND'" >&2
++        echo "Error: unknown command '$COMMAND'" >&2
+         exit 1
+         ;;
+ esac
diff --git a/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch b/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
new file mode 100644
index 0000000..8913774
--- /dev/null
+++ b/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
@@ -0,0 +1,108 @@
+From 0f4ea4aee6e404dfbd6e3c4bbfb4f805e4e257f6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 12:20:22 +0100
+Subject: [PATCH] kernel-install: add "$KERNEL_INSTALL_STAGING_AREA" directory
+
+The general approach of kernel-install was that each plugin would drop in some
+files into the entry directory. But this doesn't scale well, because if we have
+multiple initrd generators, or multiple initrds, each generator would need to
+recreate the logic to put the generated files in the right place.
+
+Also, effective cleanup is impossible if anything goes wrong on the way, so we
+could end up with unused files in $BOOT.
+
+So let's invert the process: plugins drop files into $KERNEL_INSTALL_STAGING_AREA,
+and at the end 90-loaderentry.install DTRT with those files.
+
+This allow new plugins like 50-mkosi-initrd.install to be significantly simpler.
+
+(cherry picked from commit 367165a4069ac0c04882a05a8a80f6afb1e42760)
+
+Related: #2065061
+---
+ man/kernel-install.xml                    |  4 ++++
+ src/kernel-install/90-loaderentry.install | 13 ++++++++++---
+ src/kernel-install/kernel-install         | 10 ++++++++++
+ 3 files changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/man/kernel-install.xml b/man/kernel-install.xml
+index bb76074d2e..685617863e 100644
+--- a/man/kernel-install.xml
++++ b/man/kernel-install.xml
+@@ -180,6 +180,10 @@
+     This should be configured as <varname>initrd_generator=</varname> in <filename>install.conf</filename>.
+     </para>
+ 
++    <para><varname>KERNEL_INSTALL_STAGING_AREA=...</varname> is set for plugins to a path to a directory.
++    Plugins may drop files in that directory, and they will be installed as part of the loader entry, based
++    on the file name and extension.</para>
++
+     <variablelist>
+       <varlistentry>
+         <term>bls</term>
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 6a396910cb..0888c260e2 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -18,6 +18,8 @@
+ # You should have received a copy of the GNU Lesser General Public License
+ # along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ 
++shopt -s nullglob
++
+ COMMAND="$1"
+ KERNEL_VERSION="$2"
+ ENTRY_DIR_ABS="$3"
+@@ -88,7 +90,8 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || {
+ }
+ 
+ shift "$INITRD_OPTIONS_SHIFT"
+-for initrd; do
++# All files listed as arguments, and staged files called "initrd*" are installed as initrds.
++for initrd in "$@" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
+     [ -f "$initrd" ] || {
+         echo "Error: initrd '$initrd' not a file." >&2
+         exit 1
+@@ -114,11 +117,15 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
+     echo "machine-id $MACHINE_ID"
+     echo "options    $BOOT_OPTIONS"
+     echo "linux      $ENTRY_DIR/linux"
+-    for initrd; do
++
++    have_initrd=
++    for initrd in "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
+         echo "initrd     $ENTRY_DIR/${initrd##*/}"
++        have_initrd=yes
+     done
++
+     # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied
+-    [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
++    [ -z "$have_initrd" ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd     $ENTRY_DIR/initrd"
+     :
+ } >"$LOADER_ENTRY" || {
+     echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index a73a205d79..8cfef3208d 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -128,10 +128,20 @@ fi
+ 
+ ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
+ 
++# Provide a directory where to store generated initrds
++cleanup() {
++    [ -n "$KERNEL_INSTALL_STAGING_AREA" ] && rm -rf "$KERNEL_INSTALL_STAGING_AREA"
++}
++
++trap cleanup EXIT
++
++KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)"
++
+ export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
+ export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
+ export KERNEL_INSTALL_LAYOUT="$layout"
+ export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
++export KERNEL_INSTALL_STAGING_AREA
+ 
+ [ "$layout" = "bls" ]
+ MAKE_ENTRY_DIR_ABS=$?
diff --git a/SOURCES/0093-kernel-install-add-missing-log-line.patch b/SOURCES/0093-kernel-install-add-missing-log-line.patch
new file mode 100644
index 0000000..da10435
--- /dev/null
+++ b/SOURCES/0093-kernel-install-add-missing-log-line.patch
@@ -0,0 +1,25 @@
+From 9f36dbd7cb7ca1f2e77ea6c1a3129988f346b287 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 19 Jan 2022 14:03:24 +0100
+Subject: [PATCH] kernel-install: add missing log line
+
+(cherry picked from commit 29f604131b2c0b82dca7d6ffaa5e6bc6a253620d)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 0888c260e2..3edefdefb4 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -40,6 +40,8 @@ fi
+ 
+ case "$COMMAND" in
+     remove)
++        [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
++            echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf"
+         exec rm -f \
+             "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
+             "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
diff --git a/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch b/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
new file mode 100644
index 0000000..c13105e
--- /dev/null
+++ b/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
@@ -0,0 +1,83 @@
+From 7738d7793bc83421536f9962c794633006613725 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 9 Feb 2022 13:59:36 +0100
+Subject: [PATCH] kernel-install: don't try to persist used machine ID locally
+
+This reworks the how machine ID used by the boot loader spec snippet
+generation logic. Instead of persisting it automatically to /etc/ we'll
+append it via systemd.machined_id= to the kernel command line, and thus
+persist it in the generated boot loader spec snippets instead. This has
+nice benefits:
+
+  1. We do not collide with read-only root
+  2. The machine ID remains stable across factory reset, so that we can
+     safely recognize the path in $BOOT we drop our kernel images in
+     again, i.e. kernel updates will work correctly and safely across
+     kernel factory resets.
+  3. Previously regular systems had different machine IDs while in
+     initrd and after booting into the host system. With this change
+     they will now have the same.
+
+This then drops implicit persisting of KERNEL_INSTALL_MACHINE_ID, as its
+unnecessary then. The field is still honoured though, for compat
+reasons.
+
+This also drops the "Default" fallback previously used, as it actually
+is without effect, the randomized ID generation already took precedence
+in all cases. This means $MACHNE_ID/KERNEL_INSTALL_MACHINE_ID are now
+guaranteed to look like a proper machine ID, which is useful for us,
+given you need it that way to be able to pass it to the
+systemd.machine_id= kernel command line option.
+
+(cherry picked from commit 11ce3ea2f2219ab9c0700bcf7f8ed4312d80e937)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install |  6 +++++-
+ src/kernel-install/kernel-install         | 16 +++++++---------
+ 2 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 3edefdefb4..046771169c 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -68,7 +68,11 @@ elif [ -r /usr/lib/kernel/cmdline ]; then
+ else
+     BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
+ fi
+-BOOT_OPTIONS="${BOOT_OPTIONS% }"
++
++# Suffix with the machine ID we use, so that the machine ID remains stable,
++# even during factory reset, in the initrd (where the system's machine ID is
++# not directly accessible yet), and if the root file system is volatile.
++BOOT_OPTIONS="${BOOT_OPTIONS% } systemd.machine_id=$MACHINE_ID"
+ 
+ if [ -r /etc/kernel/tries ]; then
+     read -r TRIES </etc/kernel/tries
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 8cfef3208d..e94aa79bc6 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -89,15 +89,13 @@ elif [ -r "/usr/lib/kernel/install.conf" ]; then
+     . /usr/lib/kernel/install.conf
+ fi
+ 
+-# Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine
+-# ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate
+-# a new machine ID in /etc/machine-info. If that fails, use "Default".
+-[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+-[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]                && read -r MACHINE_ID </etc/machine-id
+-[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ]   && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
+-[ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info
+-[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ]              && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+-[ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
++# If /etc/machine-id is initialized we'll use it, otherwise we'll use a freshly
++# generated one. If the user configured an explicit machine ID to use in
++# /etc/machine-info to use for our purpose, we'll use that instead (for
++# compatibility).
++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]   && read -r MACHINE_ID </etc/machine-id
++[ -z "$MACHINE_ID" ] && MACHINE_ID="$(systemd-id128 new)"
+ 
+ [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
+     for pref in "/efi" "/boot" "/boot/efi" ; do
diff --git a/SOURCES/0095-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch b/SOURCES/0095-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
new file mode 100644
index 0000000..90f0121
--- /dev/null
+++ b/SOURCES/0095-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
@@ -0,0 +1,136 @@
+From 455b9b9dd4d462db7482f67d8e730b25e75b1505 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 9 Feb 2022 14:29:19 +0100
+Subject: [PATCH] kernel-install: add a new $ENTRY_TOKEN variable for naming
+ boot entries
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This cleans up naming of boot loader spec boot entries a bit (i.e. the
+naming of the .conf snippet files, and the directory in $BOOT where the
+kernel images and initrds are placed), and isolates it from the actual machine
+ID concept.
+
+Previously there was a sinlge concept for both things, because typically
+the entries are just named after the machine ID. However one could also
+use a different identifier, i.e. not a 128bit ID in which cases issues
+pop up everywhere. For example, the "machine-id" field in the generated
+snippets would not be a machine ID anymore, and the newly added
+systemd.machine_id= kernel parameter would possibly get passed invalid
+data.
+
+Hence clean this up:
+
+$MACHINE_ID → always a valid 128bit ID.
+
+$ENTRY_TOKEN → usually the $MACHINE_ID but can be any other string too.
+This is used to name the directory to put kernels/initrds in. It's also
+used for naming the *.conf snippets that implement the Boot Loader Type
+1 spec.
+
+(cherry picked from commit 3907044ffa568aedf076d0f9807489ec78f87502)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 11 ++++++-----
+ src/kernel-install/kernel-install         | 21 +++++++++++++++++----
+ 2 files changed, 23 insertions(+), 9 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 046771169c..46261a2c11 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -29,6 +29,7 @@ INITRD_OPTIONS_SHIFT=4
+ [ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0
+ 
+ MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
++ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN"
+ BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
+ 
+ BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
+@@ -41,10 +42,10 @@ fi
+ case "$COMMAND" in
+     remove)
+         [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+-            echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf"
++            echo "Removing $BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION*.conf"
+         exec rm -f \
+-            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \
+-            "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf"
++            "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" \
++            "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+"*".conf"
+         ;;
+     add)
+         ;;
+@@ -80,9 +81,9 @@ if [ -r /etc/kernel/tries ]; then
+         echo "/etc/kernel/tries does not contain an integer." >&2
+         exit 1
+     fi
+-    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf"
++    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+$TRIES.conf"
+ else
+-    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
++    LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf"
+ fi
+ 
+ if ! [ -d "$ENTRY_DIR_ABS" ]; then
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index e94aa79bc6..75a31c62d4 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -97,7 +97,19 @@ fi
+ [ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ]   && read -r MACHINE_ID </etc/machine-id
+ [ -z "$MACHINE_ID" ] && MACHINE_ID="$(systemd-id128 new)"
+ 
+-[ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
++# Now that we determined the machine ID to use, let's determine the "token" for
++# the boot loader entry to generate. We use that for naming the directory below
++# $BOOT where we want to place the kernel/initrd and related resources, as well
++# for naming the .conf boot loader spec entry. Typically this is just the
++# machine ID, but it can be anything else, too, if we are told so.
++[ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN </etc/kernel/entry-token
++[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
++
++# NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but
++#     $ENTRY_TOKEN can be any string that fits into a VFAT filename, though
++#     typically is just the machine ID.
++
++[ -z "$BOOT_ROOT" ] && for suff in "$ENTRY_TOKEN" "loader/entries"; do
+     for pref in "/efi" "/boot" "/boot/efi" ; do
+         if [ -d "$pref/$suff" ]; then
+             BOOT_ROOT="$pref"
+@@ -117,14 +129,14 @@ done
+ 
+ if [ -z "$layout" ]; then
+     # Administrative decision: if not present, some scripts generate into /boot.
+-    if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then
++    if [ -d "$BOOT_ROOT/$ENTRY_TOKEN" ]; then
+         layout="bls"
+     else
+         layout="other"
+     fi
+ fi
+ 
+-ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
++ENTRY_DIR_ABS="$BOOT_ROOT/$ENTRY_TOKEN/$KERNEL_VERSION"
+ 
+ # Provide a directory where to store generated initrds
+ cleanup() {
+@@ -136,6 +148,7 @@ trap cleanup EXIT
+ KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)"
+ 
+ export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
++export KERNEL_INSTALL_ENTRY_TOKEN="$ENTRY_TOKEN"
+ export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
+ export KERNEL_INSTALL_LAYOUT="$layout"
+ export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator"
+@@ -168,7 +181,7 @@ case "$COMMAND" in
+         fi
+ 
+         if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then
+-            # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$MACHINE_ID
++            # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$ENTRY_TOKEN
+             # to signal to 00-entry-directory to create $ENTRY_DIR_ABS
+             # to serve as the indication to use or to not use the BLS
+             if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
diff --git a/SOURCES/0096-kernel-install-only-generate-systemd.boot_id-in-kern.patch b/SOURCES/0096-kernel-install-only-generate-systemd.boot_id-in-kern.patch
new file mode 100644
index 0000000..ddb3264
--- /dev/null
+++ b/SOURCES/0096-kernel-install-only-generate-systemd.boot_id-in-kern.patch
@@ -0,0 +1,59 @@
+From 5eb855bddaf8270e7274132ded0e36325d8ffbbe Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 9 Feb 2022 14:44:48 +0100
+Subject: [PATCH] kernel-install: only generate systemd.boot_id= in kernel
+ command line if used for naming the boot loader spec files/dirs
+
+Now that we can distinguish the naming of the boot loader spec
+dirs/files and the machine ID let's tweak the logic for suffixing the
+kernel cmdline with systemd.boot_id=: let's only do that when we
+actually need the boot ID for naming these dirs/files. If we don't,
+let's not bother.
+
+This should be beneficial for "golden" images that shall not carry any
+machine IDs at all, i.e acquire their identity only once the final
+userspace is actually reached.
+
+(cherry picked from commit 953b61004c37948dcd897265b56c1613bc73b9f9)
+
+Related: #2065061
+---
+ src/kernel-install/90-loaderentry.install | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
+index 46261a2c11..c1d69aa824 100644
+--- a/src/kernel-install/90-loaderentry.install
++++ b/src/kernel-install/90-loaderentry.install
+@@ -70,10 +70,15 @@ else
+     BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
+ fi
+ 
+-# Suffix with the machine ID we use, so that the machine ID remains stable,
+-# even during factory reset, in the initrd (where the system's machine ID is
+-# not directly accessible yet), and if the root file system is volatile.
+-BOOT_OPTIONS="${BOOT_OPTIONS% } systemd.machine_id=$MACHINE_ID"
++BOOT_OPTIONS="${BOOT_OPTIONS% }"
++
++# If the boot entries are named after the machine ID, then suffix the kernel
++# command line with the machine ID we use, so that the machine ID remains
++# stable, even during factory reset, in the initrd (where the system's machine
++# ID is not directly accessible yet), and if the root file system is volatile.
++if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ]; then
++    BOOT_OPTIONS="$BOOT_OPTIONS systemd.machine_id=$MACHINE_ID"
++fi
+ 
+ if [ -r /etc/kernel/tries ]; then
+     read -r TRIES </etc/kernel/tries
+@@ -121,7 +126,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
+ {
+     echo "title      $PRETTY_NAME"
+     echo "version    $KERNEL_VERSION"
+-    echo "machine-id $MACHINE_ID"
++    if [ "$ENTRY_TOKEN" = "$MACHINE_ID" ]; then
++        # See similar logic above for the systemd.machine_id= kernel command line option
++        echo "machine-id $MACHINE_ID"
++    fi
+     echo "options    $BOOT_OPTIONS"
+     echo "linux      $ENTRY_DIR/linux"
+ 
diff --git a/SOURCES/0097-kernel-install-search-harder-for-kernel-image-initrd.patch b/SOURCES/0097-kernel-install-search-harder-for-kernel-image-initrd.patch
new file mode 100644
index 0000000..933401c
--- /dev/null
+++ b/SOURCES/0097-kernel-install-search-harder-for-kernel-image-initrd.patch
@@ -0,0 +1,75 @@
+From a774b3d6c43863b632f211aa21e61cb48e2ee736 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 10 Feb 2022 14:27:22 +0100
+Subject: [PATCH] kernel-install: search harder for kernel image/initrd drop-in
+ dir
+
+If not explicitly configured, let's search a bit harder for the
+ENTRY_TOKEN, and let's try the machine ID, the IMAGE_ID and ID fields of
+/etc/os-release and finally "Default", all below potential $XBOOTLDR.
+
+(cherry picked from commit 6637cf9db67237857279262d93ee0e39023c5b85)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 27 ++++++++++++++++++++++++---
+ 1 file changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 75a31c62d4..c42c40592a 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -103,29 +103,50 @@ fi
+ # for naming the .conf boot loader spec entry. Typically this is just the
+ # machine ID, but it can be anything else, too, if we are told so.
+ [ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN </etc/kernel/entry-token
+-[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
++if [ -z "$ENTRY_TOKEN" ]; then
++    # If not configured explicitly, then use a few candidates: the machine ID,
++    # the IMAGE_ID= and ID= fields from /etc/os-release and finally the fixed
++    # string "Default"
++    ENTRY_TOKEN_SEARCH="$MACHINE_ID"
++    [ -r /etc/os-release ] && . /etc/os-release
++    [ -n "$IMAGE_ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $IMAGE_ID"
++    [ -n "$ID" ] && ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH $ID"
++    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN_SEARCH Default"
++else
++    ENTRY_TOKEN_SEARCH="$ENTRY_TOKEN"
++fi
+ 
+ # NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but
+ #     $ENTRY_TOKEN can be any string that fits into a VFAT filename, though
+ #     typically is just the machine ID.
+ 
+-[ -z "$BOOT_ROOT" ] && for suff in "$ENTRY_TOKEN" "loader/entries"; do
+-    for pref in "/efi" "/boot" "/boot/efi" ; do
++[ -z "$BOOT_ROOT" ] && for suff in $ENTRY_TOKEN_SEARCH; do
++    for pref in "/efi" "/boot" "/boot/efi"; do
+         if [ -d "$pref/$suff" ]; then
+             BOOT_ROOT="$pref"
++            ENTRY_TOKEN="$suff"
+             break 2
+         fi
+     done
+ done
+ 
++[ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot" "/boot/efi"; do
++    if [ -d "$pref/loader/entries" ]; then
++        BOOT_ROOT="$pref"
++        break
++    fi
++done
++
+ [ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot/efi"; do
+     if mountpoint -q "$pref"; then
+         BOOT_ROOT="$pref"
+         break
+     fi
+ done
++
+ [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot"
+ 
++[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID"
+ 
+ if [ -z "$layout" ]; then
+     # Administrative decision: if not present, some scripts generate into /boot.
diff --git a/SOURCES/0098-kernel-install-add-new-inspect-verb-showing-paths-an.patch b/SOURCES/0098-kernel-install-add-new-inspect-verb-showing-paths-an.patch
new file mode 100644
index 0000000..bfc88d7
--- /dev/null
+++ b/SOURCES/0098-kernel-install-add-new-inspect-verb-showing-paths-an.patch
@@ -0,0 +1,68 @@
+From 8742d040aa5ef5e784c903d0c3efacba7d69ade2 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 10 Feb 2022 14:37:37 +0100
+Subject: [PATCH] kernel-install: add new "inspect" verb, showing paths and
+ parameters we discovered
+
+(cherry picked from commit c73cf4184441d3cc37a5e2195938f07420ec38b7)
+
+Related: #2065061
+---
+ src/kernel-install/kernel-install | 29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index c42c40592a..b8099bd12c 100755
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -25,6 +25,7 @@ usage()
+     echo "Usage:"
+     echo "  $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
+     echo "  $0 [OPTIONS...] remove KERNEL-VERSION"
++    echo "  $0 [OPTIONS...] inspect"
+     echo "Options:"
+     echo "  -h, --help     Print this help"
+     echo "  -v, --verbose  Increase verbosity"
+@@ -72,13 +73,17 @@ else
+     [ $# -ge 1 ] && shift
+ fi
+ 
+-if [ $# -lt 1 ]; then
+-    echo "Error: not enough arguments" >&2
+-    exit 1
+-fi
++if [ "$COMMAND" = "inspect" ]; then
++    KERNEL_VERSION=""
++else
++    if [ $# -lt 1 ]; then
++        echo "Error: not enough arguments" >&2
++        exit 1
++    fi
+ 
+-KERNEL_VERSION="$1"
+-shift
++    KERNEL_VERSION="$1"
++    shift
++fi
+ 
+ layout=
+ initrd_generator=
+@@ -237,6 +242,18 @@ case "$COMMAND" in
+         fi
+         ;;
+ 
++    inspect)
++        echo "KERNEL_INSTALL_MACHINE_ID: $KERNEL_INSTALL_MACHINE_ID"
++        echo "KERNEL_INSTALL_ENTRY_TOKEN: $KERNEL_INSTALL_ENTRY_TOKEN"
++        echo "KERNEL_INSTALL_BOOT_ROOT: $KERNEL_INSTALL_BOOT_ROOT"
++        echo "KERNEL_INSTALL_LAYOUT: $KERNEL_INSTALL_LAYOUT"
++        echo "KERNEL_INSTALL_INITRD_GENERATOR: $KERNEL_INSTALL_INITRD_GENERATOR"
++        echo "ENTRY_DIR_ABS: $KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN/\$KERNEL_VERSION"
++
++        # Assert that ENTRY_DIR_ABS actually matches what we are printing here
++        [ "${ENTRY_DIR_ABS%/*}" = "$KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN" ] || { echo "Assertion didn't pass." >&2; exit 1; }
++
++        ;;
+     *)
+         echo "Error: unknown command '$COMMAND'" >&2
+         exit 1
diff --git a/SOURCES/0099-ci-Mergify-configuration-update.patch b/SOURCES/0099-ci-Mergify-configuration-update.patch
new file mode 100644
index 0000000..992cdf9
--- /dev/null
+++ b/SOURCES/0099-ci-Mergify-configuration-update.patch
@@ -0,0 +1,97 @@
+From caf80cd558222a08687e8db95e3e1fcad0d69946 Mon Sep 17 00:00:00 2001
+From: Jan Macku <jamacku@redhat.com>
+Date: Mon, 30 May 2022 15:19:16 +0200
+Subject: [PATCH] ci(Mergify): configuration update
+
+Add rules for `needs-ci` label management
+
+RHEL-only
+
+Related: #2087652
+---
+ .mergify.yml | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 76 insertions(+)
+ create mode 100644 .mergify.yml
+
+diff --git a/.mergify.yml b/.mergify.yml
+new file mode 100644
+index 0000000000..c06e0fb1be
+--- /dev/null
++++ b/.mergify.yml
+@@ -0,0 +1,76 @@
++# doc: https://docs.mergify.com
++---
++
++pull_request_rules:
++  - name: Add `needs-ci` label on CI fail
++    conditions:
++      - or:
++        # Build test
++        - -check-success=build (gcc, 10, bfd)
++        - -check-success=build (gcc, 11, gold)
++        - -check-success=build (clang, 11, bfd)
++        - -check-success=build (clang, 12, gold)
++        - -check-success=build (clang, 13, lld)
++        # Unit tests
++        - -check-success=build (GCC, auto)
++        - -check-success=build (GCC_ASAN_UBSAN, auto)
++        - -check-success=build (CLANG, auto)
++        - -check-success=build (CLANG_ASAN_UBSAN, auto)
++        - -check-success=build (GCC, openssl)
++        - -check-success=build (CLANG, gcrypt)
++        # CentOS CI
++        - -check-success=CentOS CI (CentOS Stream 9)
++        - -check-success=CentOS CI (CentOS Stream 9 + sanitizers)
++        # LGTM
++        - and:
++          - "-check-success=LGTM analysis: JavaScript"
++          - "-check-neutral=LGTM analysis: JavaScript"
++        - and:
++          - "-check-success=LGTM analysis: Python"
++          - "-check-neutral=LGTM analysis: Python"
++        - and:    
++          - "-check-success=LGTM analysis: C/C++"
++          - "-check-neutral=LGTM analysis: Python"
++      # Packit
++      - -check-success=rpm-build:centos-stream-9-aarch64
++      - -check-success=rpm-build:centos-stream-9-x86_64
++    actions:
++      label:
++        add:
++          - needs-ci
++          
++  - name: Remove `needs-ci` label on CI success
++    conditions:
++      # Build test
++      - check-success=build (gcc, 10, bfd)
++      - check-success=build (gcc, 11, gold)
++      - check-success=build (clang, 11, bfd)
++      - check-success=build (clang, 12, gold)
++      - check-success=build (clang, 13, lld)
++      # Unit tests
++      - check-success=build (GCC, auto)
++      - check-success=build (GCC_ASAN_UBSAN, auto)
++      - check-success=build (CLANG, auto)
++      - check-success=build (CLANG_ASAN_UBSAN, auto)
++      - check-success=build (GCC, openssl)
++      - check-success=build (CLANG, gcrypt)
++      # CentOS CI
++      - check-success=CentOS CI (CentOS Stream 9)
++      - check-success=CentOS CI (CentOS Stream 9 + sanitizers)
++      # LGTM
++      - or:
++        - "check-success=LGTM analysis: JavaScript"
++        - "check-neutral=LGTM analysis: JavaScript"
++      - or:
++        - "check-success=LGTM analysis: Python"
++        - "check-neutral=LGTM analysis: Python"
++      - or:    
++        - "check-success=LGTM analysis: C/C++"
++        - "check-neutral=LGTM analysis: Python"
++      # Packit
++      - check-success=rpm-build:centos-stream-9-aarch64
++      - check-success=rpm-build:centos-stream-9-x86_64
++    actions:
++      label:
++        remove:
++          - needs-ci  
diff --git a/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch b/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch
new file mode 100644
index 0000000..b907dea
--- /dev/null
+++ b/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch
@@ -0,0 +1,34 @@
+From 14b8f663049a902aac962f9a522595df9db6b6bc Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Mon, 6 Jun 2022 15:39:22 +0200
+Subject: [PATCH] ci(Mergify): fix copy&paste bug
+
+RHEL-only
+
+Related: #2087652
+---
+ .mergify.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/.mergify.yml b/.mergify.yml
+index c06e0fb1be..b7852b201c 100644
+--- a/.mergify.yml
++++ b/.mergify.yml
+@@ -30,7 +30,7 @@ pull_request_rules:
+           - "-check-neutral=LGTM analysis: Python"
+         - and:    
+           - "-check-success=LGTM analysis: C/C++"
+-          - "-check-neutral=LGTM analysis: Python"
++          - "-check-neutral=LGTM analysis: C/C++"
+       # Packit
+       - -check-success=rpm-build:centos-stream-9-aarch64
+       - -check-success=rpm-build:centos-stream-9-x86_64
+@@ -66,7 +66,7 @@ pull_request_rules:
+         - "check-neutral=LGTM analysis: Python"
+       - or:    
+         - "check-success=LGTM analysis: C/C++"
+-        - "check-neutral=LGTM analysis: Python"
++        - "check-neutral=LGTM analysis: C/C++"
+       # Packit
+       - check-success=rpm-build:centos-stream-9-aarch64
+       - check-success=rpm-build:centos-stream-9-x86_64
diff --git a/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch b/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
new file mode 100644
index 0000000..9b8fcce
--- /dev/null
+++ b/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
@@ -0,0 +1,26 @@
+From 18b0bc42dc097af6147324deef100c41dedfa755 Mon Sep 17 00:00:00 2001
+From: Daan De Meyer <daan.j.demeyer@gmail.com>
+Date: Mon, 9 May 2022 09:50:32 +0200
+Subject: [PATCH] shared: Fix memory leak in bus_append_execute_property()
+
+Fixes #23317
+
+(cherry picked from commit 2aaf6d407e8541985a15b7106abf6fbdfed0766a)
+Related: #2087652
+---
+ src/shared/bus-unit-util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
+index dcce530c99..ef134bcee4 100644
+--- a/src/shared/bus-unit-util.c
++++ b/src/shared/bus-unit-util.c
+@@ -1952,7 +1952,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
+                         path_simplify(source);
+ 
+                         if (isempty(destination)) {
+-                                r = strv_extend(&sources, TAKE_PTR(source));
++                                r = strv_consume(&sources, TAKE_PTR(source));
+                                 if (r < 0)
+                                         return bus_log_create_error(r);
+                         } else {
diff --git a/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch b/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch
new file mode 100644
index 0000000..b6f91c3
--- /dev/null
+++ b/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch
@@ -0,0 +1,187 @@
+From 0235f9ea3d221aba513f4b6215418bf554e02791 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Mon, 3 Jan 2022 12:31:07 +0000
+Subject: [PATCH] fuzz: no longer skip empty files
+
+Empty files and empty strings seem to have triggered various
+issues in the past so it seems they shouldn't be ignore by the
+fuzzers just because fmemopen can't handle them.
+
+Prompted by https://github.com/systemd/systemd/pull/21939#issuecomment-1003113669
+
+(cherry picked from commit 5df66d7d68006615abb4c4d3b1ebad545af4dd72)
+Related: #2087652
+---
+ src/core/fuzz-unit-file.c         | 6 +-----
+ src/fuzz/fuzz-env-file.c          | 5 ++---
+ src/fuzz/fuzz-hostname-setup.c    | 6 +-----
+ src/fuzz/fuzz-json.c              | 6 +-----
+ src/fuzz/fuzz.h                   | 9 +++++++++
+ src/nspawn/fuzz-nspawn-oci.c      | 6 +-----
+ src/nspawn/fuzz-nspawn-settings.c | 6 +-----
+ 7 files changed, 16 insertions(+), 28 deletions(-)
+
+diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c
+index aef29f4cf7..780dd3988d 100644
+--- a/src/core/fuzz-unit-file.c
++++ b/src/core/fuzz-unit-file.c
+@@ -2,7 +2,6 @@
+ 
+ #include "conf-parser.h"
+ #include "fd-util.h"
+-#include "fileio.h"
+ #include "fuzz.h"
+ #include "install.h"
+ #include "load-fragment.h"
+@@ -22,10 +21,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         const char *name;
+         long offset;
+ 
+-        if (size == 0)
+-                return 0;
+-
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         if (read_line(f, LINE_MAX, &p) < 0)
+diff --git a/src/fuzz/fuzz-env-file.c b/src/fuzz/fuzz-env-file.c
+index e0dac260b0..3b3e625608 100644
+--- a/src/fuzz/fuzz-env-file.c
++++ b/src/fuzz/fuzz-env-file.c
+@@ -4,7 +4,6 @@
+ 
+ #include "alloc-util.h"
+ #include "env-file.h"
+-#include "fileio.h"
+ #include "fd-util.h"
+ #include "fuzz.h"
+ #include "strv.h"
+@@ -13,10 +12,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_strv_free_ char **rl = NULL, **rlp =  NULL;
+ 
+-        if (size == 0 || size > 65535)
++        if (size > 65535)
+                 return 0;
+ 
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         /* We don't want to fill the logs with messages about parse errors.
+diff --git a/src/fuzz/fuzz-hostname-setup.c b/src/fuzz/fuzz-hostname-setup.c
+index b8d36da54a..d7c23eef12 100644
+--- a/src/fuzz/fuzz-hostname-setup.c
++++ b/src/fuzz/fuzz-hostname-setup.c
+@@ -2,7 +2,6 @@
+ 
+ #include "alloc-util.h"
+ #include "fd-util.h"
+-#include "fileio.h"
+ #include "fuzz.h"
+ #include "hostname-setup.h"
+ 
+@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_free_ char *ret = NULL;
+ 
+-        if (size == 0)
+-                return 0;
+-
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         /* We don't want to fill the logs with messages about parse errors.
+diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c
+index f9a0e818c4..ad7460c6fd 100644
+--- a/src/fuzz/fuzz-json.c
++++ b/src/fuzz/fuzz-json.c
+@@ -1,7 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
+-#include "fileio.h"
+ #include "fd-util.h"
+ #include "fuzz.h"
+ #include "json.h"
+@@ -12,10 +11,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         _cleanup_fclose_ FILE *f = NULL, *g = NULL;
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+ 
+-        if (size == 0)
+-                return 0;
+-
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0)
+diff --git a/src/fuzz/fuzz.h b/src/fuzz/fuzz.h
+index 579b0eed73..d7cbb0bb16 100644
+--- a/src/fuzz/fuzz.h
++++ b/src/fuzz/fuzz.h
+@@ -4,5 +4,14 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ 
++#include "fileio.h"
++
+ /* The entry point into the fuzzer */
+ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
++
++static inline FILE* data_to_file(const uint8_t *data, size_t size) {
++        if (size == 0)
++                return fopen("/dev/null", "re");
++        else
++                return fmemopen_unlocked((char*) data, size, "re");
++}
+diff --git a/src/nspawn/fuzz-nspawn-oci.c b/src/nspawn/fuzz-nspawn-oci.c
+index cfebf65c00..91f2a81dfc 100644
+--- a/src/nspawn/fuzz-nspawn-oci.c
++++ b/src/nspawn/fuzz-nspawn-oci.c
+@@ -2,7 +2,6 @@
+ 
+ #include "alloc-util.h"
+ #include "fd-util.h"
+-#include "fileio.h"
+ #include "fuzz.h"
+ #include "nspawn-oci.h"
+ 
+@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_(settings_freep) Settings *s = NULL;
+ 
+-        if (size == 0)
+-                return 0;
+-
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         /* We don't want to fill the logs with messages about parse errors.
+diff --git a/src/nspawn/fuzz-nspawn-settings.c b/src/nspawn/fuzz-nspawn-settings.c
+index bd98ed26e8..6b91e1506e 100644
+--- a/src/nspawn/fuzz-nspawn-settings.c
++++ b/src/nspawn/fuzz-nspawn-settings.c
+@@ -2,7 +2,6 @@
+ 
+ #include "alloc-util.h"
+ #include "fd-util.h"
+-#include "fileio.h"
+ #include "fuzz.h"
+ #include "nspawn-settings.h"
+ 
+@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_(settings_freep) Settings *s = NULL;
+ 
+-        if (size == 0)
+-                return 0;
+-
+-        f = fmemopen_unlocked((char*) data, size, "re");
++        f = data_to_file(data, size);
+         assert_se(f);
+ 
+         /* We don't want to fill the logs with messages about parse errors.
diff --git a/SOURCES/0103-networkctl-open-the-bus-just-once.patch b/SOURCES/0103-networkctl-open-the-bus-just-once.patch
new file mode 100644
index 0000000..d36d4d0
--- /dev/null
+++ b/SOURCES/0103-networkctl-open-the-bus-just-once.patch
@@ -0,0 +1,276 @@
+From 3852f94de9582dc1acb44844579873cd0e2f3162 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 11 Jan 2022 15:12:42 +0100
+Subject: [PATCH] networkctl: open the bus just once
+
+We'd connect to the bus twice: the first time to check networkd namespace,
+and then the second time to do the deed we were asked to do. It's nicer
+to open the bus just once, for efficience and also to avoid the open call
+in all functions.
+
+An ASSERT_PTR helper is added:
+- sd_bus *bus = userdata;
+  ...
+- assert(bus);
++ sd_bus *bus = ASSERT_PTR(userdata);
+  ...
+
+It can be used in other place too, but I'm leaving that for a later
+refactoring.
+
+(cherry picked from commit d821e40ca96d2b14216f7a18e4512364bfb83628)
+Related: #2087652
+---
+ src/fundamental/macro-fundamental.h |  8 ++++
+ src/network/networkctl.c            | 74 ++++++++++-------------------
+ 2 files changed, 33 insertions(+), 49 deletions(-)
+
+diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h
+index f87839d47b..d597c743bb 100644
+--- a/src/fundamental/macro-fundamental.h
++++ b/src/fundamental/macro-fundamental.h
+@@ -66,6 +66,14 @@
+         #define free(a) FreePool(a)
+ #endif
+ 
++/* This passes the argument through after (if asserts are enabled) checking that it is not null. */
++#define ASSERT_PTR(expr)                        \
++        ({                                      \
++                typeof(expr) _expr_ = (expr);   \
++                assert(_expr_);                 \
++                _expr_;                         \
++        })
++
+ #if defined(static_assert)
+ #define assert_cc(expr)                                                 \
+         static_assert(expr, #expr)
+diff --git a/src/network/networkctl.c b/src/network/networkctl.c
+index 68dd4b185c..c35f851bdb 100644
+--- a/src/network/networkctl.c
++++ b/src/network/networkctl.c
+@@ -79,17 +79,12 @@ static bool arg_full = false;
+ static unsigned arg_lines = 10;
+ static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
+ 
+-static int get_description(JsonVariant **ret) {
++static int get_description(sd_bus *bus, JsonVariant **ret) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         const char *text = NULL;
+         int r;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         r = bus_call_method(bus, bus_network_mgr, "Describe", &error, &reply, NULL);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to get description: %s", bus_error_message(&error, r));
+@@ -105,11 +100,11 @@ static int get_description(JsonVariant **ret) {
+         return 0;
+ }
+ 
+-static int dump_manager_description(void) {
++static int dump_manager_description(sd_bus *bus) {
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+         int r;
+ 
+-        r = get_description(&v);
++        r = get_description(bus, &v);
+         if (r < 0)
+                 return r;
+ 
+@@ -117,14 +112,14 @@ static int dump_manager_description(void) {
+         return 0;
+ }
+ 
+-static int dump_link_description(char **patterns) {
++static int dump_link_description(sd_bus *bus, char **patterns) {
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+         _cleanup_free_ bool *matched_patterns = NULL;
+         JsonVariant *i;
+         size_t c = 0;
+         int r;
+ 
+-        r = get_description(&v);
++        r = get_description(bus, &v);
+         if (r < 0)
+                 return r;
+ 
+@@ -790,6 +785,7 @@ static int acquire_link_info(sd_bus *bus, sd_netlink *rtnl, char **patterns, Lin
+ }
+ 
+ static int list_links(int argc, char *argv[], void *userdata) {
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
+         _cleanup_(table_unrefp) Table *table = NULL;
+@@ -798,9 +794,9 @@ static int list_links(int argc, char *argv[], void *userdata) {
+ 
+         if (arg_json_format_flags != JSON_FORMAT_OFF) {
+                 if (arg_all || argc <= 1)
+-                        return dump_manager_description();
++                        return dump_manager_description(bus);
+                 else
+-                        return dump_link_description(strv_skip(argv, 1));
++                        return dump_link_description(bus, strv_skip(argv, 1));
+         }
+ 
+         r = sd_netlink_open(&rtnl);
+@@ -2383,7 +2379,7 @@ static int system_status(sd_netlink *rtnl, sd_hwdb *hwdb) {
+ }
+ 
+ static int link_status(int argc, char *argv[], void *userdata) {
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
+         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
+@@ -2391,17 +2387,13 @@ static int link_status(int argc, char *argv[], void *userdata) {
+ 
+         if (arg_json_format_flags != JSON_FORMAT_OFF) {
+                 if (arg_all || argc <= 1)
+-                        return dump_manager_description();
++                        return dump_manager_description(bus);
+                 else
+-                        return dump_link_description(strv_skip(argv, 1));
++                        return dump_link_description(bus, strv_skip(argv, 1));
+         }
+ 
+         pager_open(arg_pager_flags);
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         r = sd_netlink_open(&rtnl);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to connect to netlink: %m");
+@@ -2738,14 +2730,10 @@ static int link_renew_one(sd_bus *bus, int index, const char *name) {
+ }
+ 
+ static int link_renew(int argc, char *argv[], void *userdata) {
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         int index, k = 0, r;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         for (int i = 1; i < argc; i++) {
+                 index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]);
+                 if (index < 0)
+@@ -2772,14 +2760,10 @@ static int link_force_renew_one(sd_bus *bus, int index, const char *name) {
+ }
+ 
+ static int link_force_renew(int argc, char *argv[], void *userdata) {
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         int k = 0, r;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         for (int i = 1; i < argc; i++) {
+                 int index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]);
+                 if (index < 0)
+@@ -2794,14 +2778,10 @@ static int link_force_renew(int argc, char *argv[], void *userdata) {
+ }
+ 
+ static int verb_reload(int argc, char *argv[], void *userdata) {
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         r = bus_call_method(bus, bus_network_mgr, "Reload", &error, NULL, NULL);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to reload network settings: %m");
+@@ -2810,17 +2790,13 @@ static int verb_reload(int argc, char *argv[], void *userdata) {
+ }
+ 
+ static int verb_reconfigure(int argc, char *argv[], void *userdata) {
++        sd_bus *bus = ASSERT_PTR(userdata);
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         _cleanup_set_free_ Set *indexes = NULL;
+         int index, r;
+         void *p;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         indexes = set_new(NULL);
+         if (!indexes)
+                 return log_oom();
+@@ -2968,7 +2944,7 @@ static int parse_argv(int argc, char *argv[]) {
+         return 1;
+ }
+ 
+-static int networkctl_main(int argc, char *argv[]) {
++static int networkctl_main(sd_bus *bus, int argc, char *argv[]) {
+         static const Verb verbs[] = {
+                 { "list",        VERB_ANY, VERB_ANY, VERB_DEFAULT, list_links          },
+                 { "status",      VERB_ANY, VERB_ANY, 0,            link_status         },
+@@ -2984,20 +2960,15 @@ static int networkctl_main(int argc, char *argv[]) {
+                 {}
+         };
+ 
+-        return dispatch_verb(argc, argv, verbs, NULL);
++        return dispatch_verb(argc, argv, verbs, bus);
+ }
+ 
+-static int check_netns_match(void) {
++static int check_netns_match(sd_bus *bus) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         struct stat st;
+         uint64_t id;
+         int r;
+ 
+-        r = sd_bus_open_system(&bus);
+-        if (r < 0)
+-                return log_error_errno(r, "Failed to connect system bus: %m");
+-
+         r = sd_bus_get_property_trivial(
+                         bus,
+                         "org.freedesktop.network1",
+@@ -3035,6 +3006,7 @@ static void warn_networkd_missing(void) {
+ }
+ 
+ static int run(int argc, char* argv[]) {
++        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r;
+ 
+         log_setup();
+@@ -3043,13 +3015,17 @@ static int run(int argc, char* argv[]) {
+         if (r <= 0)
+                 return r;
+ 
+-        r = check_netns_match();
++        r = sd_bus_open_system(&bus);
++        if (r < 0)
++                return log_error_errno(r, "Failed to connect system bus: %m");
++
++        r = check_netns_match(bus);
+         if (r < 0)
+                 return r;
+ 
+         warn_networkd_missing();
+ 
+-        return networkctl_main(argc, argv);
++        return networkctl_main(bus, argc, argv);
+ }
+ 
+ DEFINE_MAIN_FUNCTION(run);
diff --git a/SOURCES/0104-json-align-table.patch b/SOURCES/0104-json-align-table.patch
new file mode 100644
index 0000000..d058681
--- /dev/null
+++ b/SOURCES/0104-json-align-table.patch
@@ -0,0 +1,55 @@
+From ee588179205de7c1584bd45bd22ec59028f11405 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 10:24:36 +0200
+Subject: [PATCH] json: align table
+
+(cherry picked from commit 9674b089cfb1f75653579e83735e049ddcbbed7e)
+Related: #2087652
+---
+ src/shared/json.c | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index dff95eda26..6375b87a0b 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -4754,7 +4754,6 @@ bool json_variant_is_sorted(JsonVariant *v) {
+ }
+ 
+ int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) {
+-
+         if (!json_variant_is_string(v))
+                 return -EINVAL;
+ 
+@@ -4762,7 +4761,6 @@ int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) {
+ }
+ 
+ int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
+-
+         if (!json_variant_is_string(v))
+                 return -EINVAL;
+ 
+@@ -4770,15 +4768,15 @@ int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
+ }
+ 
+ static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = {
+-        [JSON_VARIANT_STRING] = "string",
+-        [JSON_VARIANT_INTEGER] = "integer",
++        [JSON_VARIANT_STRING]   = "string",
++        [JSON_VARIANT_INTEGER]  = "integer",
+         [JSON_VARIANT_UNSIGNED] = "unsigned",
+-        [JSON_VARIANT_REAL] = "real",
+-        [JSON_VARIANT_NUMBER] = "number",
+-        [JSON_VARIANT_BOOLEAN] = "boolean",
+-        [JSON_VARIANT_ARRAY] = "array",
+-        [JSON_VARIANT_OBJECT] = "object",
+-        [JSON_VARIANT_NULL] = "null",
++        [JSON_VARIANT_REAL]     = "real",
++        [JSON_VARIANT_NUMBER]   = "number",
++        [JSON_VARIANT_BOOLEAN]  = "boolean",
++        [JSON_VARIANT_ARRAY]    = "array",
++        [JSON_VARIANT_OBJECT]   = "object",
++        [JSON_VARIANT_NULL]     = "null",
+ };
+ 
+ DEFINE_STRING_TABLE_LOOKUP(json_variant_type, JsonVariantType);
diff --git a/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch b/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch
new file mode 100644
index 0000000..c3e3f22
--- /dev/null
+++ b/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch
@@ -0,0 +1,60 @@
+From 3087505025b78b80951ab3a5f496eb255f1a9a21 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 10:41:36 +0200
+Subject: [PATCH] fuzz-json: optionally allow logging and output
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Similarly to other fuzzers… this makes development easier.
+
+(cherry picked from commit 9ad955ce40e244a52984c68ae2a6b151d918b4a8)
+Related: #2087652
+---
+ src/fuzz/fuzz-json.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c
+index ad7460c6fd..648a6d441d 100644
+--- a/src/fuzz/fuzz-json.c
++++ b/src/fuzz/fuzz-json.c
+@@ -1,6 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
++#include "env-util.h"
+ #include "fd-util.h"
+ #include "fuzz.h"
+ #include "json.h"
+@@ -10,18 +11,26 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         size_t out_size;
+         _cleanup_fclose_ FILE *f = NULL, *g = NULL;
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
++        int r;
++
++        /* Disable most logging if not running standalone */
++        if (!getenv("SYSTEMD_LOG_LEVEL"))
++                log_set_max_level(LOG_CRIT);
+ 
+         f = data_to_file(data, size);
+         assert_se(f);
+ 
+-        if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0)
++        r = json_parse_file(f, NULL, 0, &v, NULL, NULL);
++        if (r < 0) {
++                log_debug_errno(r, "failed to parse input: %m");
+                 return 0;
++        }
+ 
+-        g = open_memstream_unlocked(&out, &out_size);
+-        assert_se(g);
++        if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
++                assert_se(g = open_memstream_unlocked(&out, &out_size));
+ 
+-        json_variant_dump(v, 0, g, NULL);
+-        json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g, NULL);
++        json_variant_dump(v, 0, g ?: stdout, NULL);
++        json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL);
+ 
+         return 0;
+ }
diff --git a/SOURCES/0106-shared-json-reduce-scope-of-variables.patch b/SOURCES/0106-shared-json-reduce-scope-of-variables.patch
new file mode 100644
index 0000000..f9f2214
--- /dev/null
+++ b/SOURCES/0106-shared-json-reduce-scope-of-variables.patch
@@ -0,0 +1,435 @@
+From 272d6e85877bb436709ed54c02d3b68101e0438d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 11:01:32 +0200
+Subject: [PATCH] shared/json: reduce scope of variables
+
+(cherry picked from commit a4669764f7329d1e8a3d364db519500355cea5f0)
+Related: #2087652
+---
+ src/shared/json.c | 133 +++++++++++++++++++---------------------------
+ 1 file changed, 54 insertions(+), 79 deletions(-)
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index 6375b87a0b..d35874f8e3 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -574,9 +574,6 @@ int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n) {
+ }
+ 
+ int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) {
+-        JsonVariant *v;
+-        size_t i;
+-
+         assert_return(ret, -EINVAL);
+         if (n == 0) {
+                 *ret = JSON_VARIANT_MAGIC_EMPTY_ARRAY;
+@@ -584,7 +581,7 @@ int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) {
+         }
+         assert_return(p, -EINVAL);
+ 
+-        v = new(JsonVariant, n + 1);
++        JsonVariant *v = new(JsonVariant, n + 1);
+         if (!v)
+                 return -ENOMEM;
+ 
+@@ -595,7 +592,7 @@ int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) {
+                 .depth = 1,
+         };
+ 
+-        for (i = 0; i < n; i++) {
++        for (size_t i = 0; i < n; i++) {
+                 JsonVariant *w = v + 1 + i;
+ 
+                 *w = (JsonVariant) {
+@@ -790,12 +787,9 @@ static void json_variant_free_inner(JsonVariant *v, bool force_sensitive) {
+                 return;
+         }
+ 
+-        if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT)) {
+-                size_t i;
+-
+-                for (i = 0; i < v->n_elements; i++)
++        if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT))
++                for (size_t i = 0; i < v->n_elements; i++)
+                         json_variant_free_inner(v + 1 + i, sensitive);
+-        }
+ 
+         if (sensitive)
+                 explicit_bzero_safe(v, json_variant_size(v));
+@@ -839,11 +833,9 @@ JsonVariant *json_variant_unref(JsonVariant *v) {
+ }
+ 
+ void json_variant_unref_many(JsonVariant **array, size_t n) {
+-        size_t i;
+-
+         assert(array || n == 0);
+ 
+-        for (i = 0; i < n; i++)
++        for (size_t i = 0; i < n; i++)
+                 json_variant_unref(array[i]);
+ }
+ 
+@@ -1218,8 +1210,6 @@ mismatch:
+ }
+ 
+ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVariant **ret_key) {
+-        size_t i;
+-
+         if (!v)
+                 goto not_found;
+         if (!key)
+@@ -1241,6 +1231,7 @@ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVaria
+                 while (b > a) {
+                         JsonVariant *p;
+                         const char *f;
++                        size_t i;
+                         int c;
+ 
+                         i = (a + b) / 2;
+@@ -1264,7 +1255,7 @@ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVaria
+         }
+ 
+         /* The variant is not sorted, hence search for the field linearly */
+-        for (i = 0; i < v->n_elements; i += 2) {
++        for (size_t i = 0; i < v->n_elements; i += 2) {
+                 JsonVariant *p;
+ 
+                 p = json_variant_dereference(v + 1 + i);
+@@ -1335,34 +1326,28 @@ bool json_variant_equal(JsonVariant *a, JsonVariant *b) {
+                 return true;
+ 
+         case JSON_VARIANT_ARRAY: {
+-                size_t i, n;
+-
+-                n = json_variant_elements(a);
++                size_t n = json_variant_elements(a);
+                 if (n != json_variant_elements(b))
+                         return false;
+ 
+-                for (i = 0; i < n; i++) {
++                for (size_t i = 0; i < n; i++)
+                         if (!json_variant_equal(json_variant_by_index(a, i), json_variant_by_index(b, i)))
+                                 return false;
+-                }
+ 
+                 return true;
+         }
+ 
+         case JSON_VARIANT_OBJECT: {
+-                size_t i, n;
+-
+-                n = json_variant_elements(a);
++                size_t n = json_variant_elements(a);
+                 if (n != json_variant_elements(b))
+                         return false;
+ 
+                 /* Iterate through all keys in 'a' */
+-                for (i = 0; i < n; i += 2) {
++                for (size_t i = 0; i < n; i += 2) {
+                         bool found = false;
+-                        size_t j;
+ 
+                         /* Match them against all keys in 'b' */
+-                        for (j = 0; j < n; j += 2) {
++                        for (size_t j = 0; j < n; j += 2) {
+                                 JsonVariant *key_b;
+ 
+                                 key_b = json_variant_by_index(b, j);
+@@ -1470,16 +1455,14 @@ static int print_source(FILE *f, JsonVariant *v, JsonFormatFlags flags, bool whi
+                 DECIMAL_STR_MAX(unsigned) -1;
+ 
+         if (whitespace) {
+-                size_t i, n;
+-
+-                n = 1 + (v->source ? strlen(v->source->name) : 0) +
+-                        ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) +
+-                        (v->line > 0 ? w : 0) +
+-                        (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) +
+-                        (v->column > 0 ? k : 0) +
+-                        2;
+-
+-                for (i = 0; i < n; i++)
++                size_t n = 1 + (v->source ? strlen(v->source->name) : 0) +
++                               ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) +
++                               (v->line > 0 ? w : 0) +
++                               (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) +
++                               (v->column > 0 ? k : 0) +
++                               2;
++
++                for (size_t i = 0; i < n; i++)
+                         fputc(' ', f);
+         } else {
+                 fputc('[', f);
+@@ -1631,10 +1614,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha
+                 break;
+ 
+         case JSON_VARIANT_ARRAY: {
+-                size_t i, n;
+-
+-                n = json_variant_elements(v);
+-
++                size_t n = json_variant_elements(v);
+                 if (n == 0)
+                         fputs("[]", f);
+                 else {
+@@ -1653,7 +1633,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha
+                                 fputc('[', f);
+                         }
+ 
+-                        for (i = 0; i < n; i++) {
++                        for (size_t i = 0; i < n; i++) {
+                                 JsonVariant *e;
+ 
+                                 assert_se(e = json_variant_by_index(v, i));
+@@ -1687,10 +1667,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha
+         }
+ 
+         case JSON_VARIANT_OBJECT: {
+-                size_t i, n;
+-
+-                n = json_variant_elements(v);
+-
++                size_t n = json_variant_elements(v);
+                 if (n == 0)
+                         fputs("{}", f);
+                 else {
+@@ -1709,7 +1686,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha
+                                 fputc('{', f);
+                         }
+ 
+-                        for (i = 0; i < n; i += 2) {
++                        for (size_t i = 0; i < n; i += 2) {
+                                 JsonVariant *e;
+ 
+                                 e = json_variant_by_index(v, i);
+@@ -1826,7 +1803,7 @@ void json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const cha
+ int json_variant_filter(JsonVariant **v, char **to_remove) {
+         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+         _cleanup_free_ JsonVariant **array = NULL;
+-        size_t i, n = 0, k = 0;
++        size_t n = 0, k = 0;
+         int r;
+ 
+         assert(v);
+@@ -1839,7 +1816,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) {
+         if (strv_isempty(to_remove))
+                 return 0;
+ 
+-        for (i = 0; i < json_variant_elements(*v); i += 2) {
++        for (size_t i = 0; i < json_variant_elements(*v); i += 2) {
+                 JsonVariant *p;
+ 
+                 p = json_variant_by_index(*v, i);
+@@ -1881,7 +1858,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) {
+ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *value) {
+         _cleanup_(json_variant_unrefp) JsonVariant *field_variant = NULL, *w = NULL;
+         _cleanup_free_ JsonVariant **array = NULL;
+-        size_t i, k = 0;
++        size_t k = 0;
+         int r;
+ 
+         assert(v);
+@@ -1896,7 +1873,7 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu
+                 if (!json_variant_is_object(*v))
+                         return -EINVAL;
+ 
+-                for (i = 0; i < json_variant_elements(*v); i += 2) {
++                for (size_t i = 0; i < json_variant_elements(*v); i += 2) {
+                         JsonVariant *p;
+ 
+                         p = json_variant_by_index(*v, i);
+@@ -2007,7 +1984,7 @@ int json_variant_set_field_strv(JsonVariant **v, const char *field, char **l) {
+ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+         _cleanup_free_ JsonVariant **array = NULL;
+-        size_t v_elements, m_elements, i, k;
++        size_t v_elements, m_elements, k;
+         bool v_blank, m_blank;
+         int r;
+ 
+@@ -2040,7 +2017,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+                 return -ENOMEM;
+ 
+         k = 0;
+-        for (i = 0; i < v_elements; i += 2) {
++        for (size_t i = 0; i < v_elements; i += 2) {
+                 JsonVariant *u;
+ 
+                 u = json_variant_by_index(*v, i);
+@@ -2054,7 +2031,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+                 array[k++] = json_variant_by_index(*v, i + 1);
+         }
+ 
+-        for (i = 0; i < m_elements; i++)
++        for (size_t i = 0; i < m_elements; i++)
+                 array[k++] = json_variant_by_index(m, i);
+ 
+         r = json_variant_new_object(&w, array, k);
+@@ -2089,19 +2066,17 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) {
+         if (blank)
+                 r = json_variant_new_array(&nv, (JsonVariant*[]) { element }, 1);
+         else {
+-                _cleanup_free_ JsonVariant **array = NULL;
+-                size_t i;
+-
+-                array = new(JsonVariant*, json_variant_elements(*v) + 1);
++                _cleanup_free_ JsonVariant **array = new(JsonVariant*, json_variant_elements(*v) + 1);
+                 if (!array)
+                         return -ENOMEM;
+ 
+-                for (i = 0; i < json_variant_elements(*v); i++)
++                size_t size = json_variant_elements(*v);
++                for (size_t i = 0; i < size; i++)
+                         array[i] = json_variant_by_index(*v, i);
+ 
+-                array[i] = element;
++                array[size] = element;
+ 
+-                r = json_variant_new_array(&nv, array, i + 1);
++                r = json_variant_new_array(&nv, array, size + 1);
+         }
+         if (r < 0)
+                 return r;
+@@ -2116,7 +2091,6 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) {
+ 
+ int json_variant_strv(JsonVariant *v, char ***ret) {
+         char **l = NULL;
+-        size_t n, i;
+         bool sensitive;
+         int r;
+ 
+@@ -2136,12 +2110,12 @@ int json_variant_strv(JsonVariant *v, char ***ret) {
+ 
+         sensitive = v->sensitive;
+ 
+-        n = json_variant_elements(v);
++        size_t n = json_variant_elements(v);
+         l = new(char*, n+1);
+         if (!l)
+                 return -ENOMEM;
+ 
+-        for (i = 0; i < n; i++) {
++        for (size_t i = 0; i < n; i++) {
+                 JsonVariant *e;
+ 
+                 assert_se(e = json_variant_by_index(v, i));
+@@ -2160,7 +2134,7 @@ int json_variant_strv(JsonVariant *v, char ***ret) {
+                 }
+         }
+ 
+-        l[i] = NULL;
++        l[n] = NULL;
+         *ret = TAKE_PTR(l);
+ 
+         return 0;
+@@ -2847,7 +2821,7 @@ static int json_parse_internal(
+                 unsigned *column,
+                 bool continue_end) {
+ 
+-        size_t n_stack = 1, i;
++        size_t n_stack = 1;
+         unsigned line_buffer = 0, column_buffer = 0;
+         void *tokenizer_state = NULL;
+         JsonStack *stack = NULL;
+@@ -3186,7 +3160,7 @@ done:
+         r = 0;
+ 
+ finish:
+-        for (i = 0; i < n_stack; i++)
++        for (size_t i = 0; i < n_stack; i++)
+                 json_stack_release(stack + i);
+ 
+         free(stack);
+@@ -3229,7 +3203,7 @@ int json_parse_file_at(FILE *f, int dir_fd, const char *path, JsonParseFlags fla
+ 
+ int json_buildv(JsonVariant **ret, va_list ap) {
+         JsonStack *stack = NULL;
+-        size_t n_stack = 1, i;
++        size_t n_stack = 1;
+         int r;
+ 
+         assert_return(ret, -EINVAL);
+@@ -4147,7 +4121,7 @@ done:
+         r = 0;
+ 
+ finish:
+-        for (i = 0; i < n_stack; i++)
++        for (size_t i = 0; i < n_stack; i++)
+                 json_stack_release(stack + i);
+ 
+         free(stack);
+@@ -4231,8 +4205,7 @@ int json_log_internal(
+ }
+ 
+ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata) {
+-        const JsonDispatch *p;
+-        size_t i, n, m;
++        size_t m;
+         int r, done = 0;
+         bool *found;
+ 
+@@ -4245,14 +4218,16 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
+                 return -EINVAL;
+         }
+ 
+-        for (p = table, m = 0; p->name; p++)
++        m = 0;
++        for (const JsonDispatch *p = table; p->name; p++)
+                 m++;
+ 
+         found = newa0(bool, m);
+ 
+-        n = json_variant_elements(v);
+-        for (i = 0; i < n; i += 2) {
++        size_t n = json_variant_elements(v);
++        for (size_t i = 0; i < n; i += 2) {
+                 JsonVariant *key, *value;
++                const JsonDispatch *p;
+ 
+                 assert_se(key = json_variant_by_index(v, i));
+                 assert_se(value = json_variant_by_index(v, i+1));
+@@ -4326,7 +4301,7 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
+                 }
+         }
+ 
+-        for (p = table; p->name; p++) {
++        for (const JsonDispatch *p = table; p->name; p++) {
+                 JsonDispatchFlags merged_flags = p->flags | flags;
+ 
+                 if ((merged_flags & JSON_MANDATORY) && !found[p-table]) {
+@@ -4621,7 +4596,7 @@ static int json_cmp_strings(const void *x, const void *y) {
+ int json_variant_sort(JsonVariant **v) {
+         _cleanup_free_ JsonVariant **a = NULL;
+         JsonVariant *n = NULL;
+-        size_t i, m;
++        size_t m;
+         int r;
+ 
+         assert(v);
+@@ -4639,7 +4614,7 @@ int json_variant_sort(JsonVariant **v) {
+         if (!a)
+                 return -ENOMEM;
+ 
+-        for (i = 0; i < m; i++)
++        for (size_t i = 0; i < m; i++)
+                 a[i] = json_variant_by_index(*v, i);
+ 
+         qsort(a, m/2, sizeof(JsonVariant*)*2, json_cmp_strings);
+@@ -4662,7 +4637,7 @@ int json_variant_sort(JsonVariant **v) {
+ int json_variant_normalize(JsonVariant **v) {
+         _cleanup_free_ JsonVariant **a = NULL;
+         JsonVariant *n = NULL;
+-        size_t i, j, m;
++        size_t i, m;
+         int r;
+ 
+         assert(v);
+@@ -4714,7 +4689,7 @@ int json_variant_normalize(JsonVariant **v) {
+         r = 1;
+ 
+ finish:
+-        for (j = 0; j < i; j++)
++        for (size_t j = 0; j < i; j++)
+                 json_variant_unref(a[j]);
+ 
+         return r;
diff --git a/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch b/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch
new file mode 100644
index 0000000..10a1b24
--- /dev/null
+++ b/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch
@@ -0,0 +1,97 @@
+From 495eb07a2d8aa7f19b775b4508466fecb1b3ce50 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 11:07:06 +0200
+Subject: [PATCH] fuzz-json: also do sorting and normalizing and other easy
+ calls
+
+(cherry picked from commit a2c5735dd80e19d2d525f9be322395530096cbe2)
+Related: #2087652
+---
+ src/fuzz/fuzz-json.c | 75 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 75 insertions(+)
+
+diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c
+index 648a6d441d..995a0265ba 100644
+--- a/src/fuzz/fuzz-json.c
++++ b/src/fuzz/fuzz-json.c
+@@ -32,5 +32,80 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         json_variant_dump(v, 0, g ?: stdout, NULL);
+         json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL);
+ 
++        bool sorted = json_variant_is_sorted(v);
++        log_debug("json_variant_is_sorted: %s", yes_no(sorted));
++
++        r = json_variant_sort(&v);
++        log_debug_errno(r, "json_variant_sort: %d/%m", r);
++
++        sorted = json_variant_is_sorted(v);
++        log_debug("json_variant_is_sorted: %s", yes_no(sorted));
++        assert_se(r < 0 || sorted);
++
++        bool normalized = json_variant_is_normalized(v);
++        log_debug("json_variant_is_normalized: %s", yes_no(normalized));
++
++        r = json_variant_normalize(&v);
++        log_debug_errno(r, "json_variant_normalize: %d/%m", r);
++
++        normalized = json_variant_is_normalized(v);
++        log_debug("json_variant_is_normalized: %s", yes_no(normalized));
++        assert_se(r < 0 || normalized);
++
++        double real = json_variant_real(v);
++        log_debug("json_variant_real: %lf", real);
++
++        bool negative = json_variant_is_negative(v);
++        log_debug("json_variant_is_negative: %s", yes_no(negative));
++
++        bool blank = json_variant_is_blank_object(v);
++        log_debug("json_variant_is_blank_object: %s", yes_no(blank));
++
++        blank = json_variant_is_blank_array(v);
++        log_debug("json_variant_is_blank_array: %s", yes_no(blank));
++
++        size_t elements = json_variant_elements(v);
++        log_debug("json_variant_elements: %zu", elements);
++
++        for (size_t i = 0; i <= elements + 2; i++)
++                (void) json_variant_by_index(v, i);
++
++        assert_se(json_variant_equal(v, v));
++        assert_se(!json_variant_equal(v, NULL));
++        assert_se(!json_variant_equal(NULL, v));
++
++        bool sensitive = json_variant_is_sensitive(v);
++        log_debug("json_variant_is_sensitive: %s", yes_no(sensitive));
++
++        json_variant_sensitive(v);
++
++        sensitive = json_variant_is_sensitive(v);
++        log_debug("json_variant_is_sensitive: %s", yes_no(sensitive));
++
++        const char *source;
++        unsigned line, column;
++        assert_se(json_variant_get_source(v, &source, &line, &column) == 0);
++        log_debug("json_variant_get_source: %s:%u:%u", source ?: "-", line, column);
++
++        r = json_variant_set_field_string(&v, "a", "string-a");
++        log_debug_errno(r, "json_set_field_string: %d/%m", r);
++
++        r = json_variant_set_field_integer(&v, "b", -12345);
++        log_debug_errno(r, "json_set_field_integer: %d/%m", r);
++
++        r = json_variant_set_field_unsigned(&v, "c", 12345);
++        log_debug_errno(r, "json_set_field_unsigned: %d/%m", r);
++
++        r = json_variant_set_field_boolean(&v, "d", false);
++        log_debug_errno(r, "json_set_field_boolean: %d/%m", r);
++
++        r = json_variant_set_field_strv(&v, "e", STRV_MAKE("e-1", "e-2", "e-3"));
++        log_debug_errno(r, "json_set_field_strv: %d/%m", r);
++
++        r = json_variant_filter(&v, STRV_MAKE("a", "b", "c", "d", "e"));
++        log_debug_errno(r, "json_variant_filter: %d/%m", r);
++
++        // TODO: json_variant_merge(&v, …);
++        // TODO: json_variant_append_array(&v, …);
+         return 0;
+ }
diff --git a/SOURCES/0108-shared-json-wrap-long-comments.patch b/SOURCES/0108-shared-json-wrap-long-comments.patch
new file mode 100644
index 0000000..7e1a8d0
--- /dev/null
+++ b/SOURCES/0108-shared-json-wrap-long-comments.patch
@@ -0,0 +1,106 @@
+From eb01fd30cb625e90d5620b3ca31ca6474e1b0ac0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 13:37:35 +0200
+Subject: [PATCH] shared/json: wrap long comments
+
+(cherry picked from commit bac06497feda9eb8c485243f2e05a7f7c112616c)
+Related: #2087652
+---
+ src/shared/json.c | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index d35874f8e3..ea1291e21b 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -273,8 +273,8 @@ static JsonVariant *json_variant_formalize(JsonVariant *v) {
+ 
+ static JsonVariant *json_variant_conservative_formalize(JsonVariant *v) {
+ 
+-        /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location attached to
+-         * it, in order not to lose context */
++        /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location
++         * attached to it, in order not to lose context */
+ 
+         if (!v)
+                 return NULL;
+@@ -546,7 +546,7 @@ int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n) {
+ 
+         for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
+                 JsonVariant *w = v + 1 + v->n_elements,
+-                        *c = array[v->n_elements];
++                            *c = array[v->n_elements];
+                 uint16_t d;
+ 
+                 d = json_variant_depth(c);
+@@ -690,7 +690,7 @@ int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n) {
+ 
+         for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
+                 JsonVariant *w = v + 1 + v->n_elements,
+-                        *c = array[v->n_elements];
++                            *c = array[v->n_elements];
+                 uint16_t d;
+ 
+                 if ((v->n_elements & 1) == 0) {
+@@ -731,7 +731,6 @@ int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n) {
+ }
+ 
+ static size_t json_variant_size(JsonVariant* v) {
+-
+         if (!json_variant_is_regular(v))
+                 return 0;
+ 
+@@ -2253,8 +2252,9 @@ static int json_variant_set_source(JsonVariant **v, JsonSource *source, unsigned
+ 
+         assert(v);
+ 
+-        /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole referencer of
+-         * the object. If not, allocates a new object, possibly a surrogate for the original one */
++        /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole
++         * referencer of the object. If not, allocates a new object, possibly a surrogate for the original
++         * one */
+ 
+         if (!*v)
+                 return 0;
+@@ -3731,10 +3731,10 @@ int json_buildv(JsonVariant **ret, va_list ap) {
+ 
+                         stack[n_stack++] = (JsonStack) {
+                                 .expect = EXPECT_OBJECT_KEY,
+-                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* if we shall suppress the
+-                                                                                           * new object, then we should
+-                                                                                           * also suppress all object
+-                                                                                           * members */
++                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* If we shall suppress the
++                                                                                        * new object, then we should
++                                                                                        * also suppress all object
++                                                                                        * members. */
+                         };
+ 
+                         break;
+@@ -4102,9 +4102,9 @@ int json_buildv(JsonVariant **ret, va_list ap) {
+                                 current->elements[current->n_elements++] = TAKE_PTR(add_more);
+                 }
+ 
+-                /* If we are supposed to suppress items, let's subtract how many items where generated from that
+-                 * counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number of elements
+-                 * on this stack level */
++                /* If we are supposed to suppress items, let's subtract how many items where generated from
++                 * that counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number
++                 * of elements on this stack level */
+                 if (current->n_suppress != SIZE_MAX) {
+                         if (current->n_suppress <= n_subtract) /* Saturated */
+                                 current->n_suppress = 0;
+@@ -4696,10 +4696,9 @@ finish:
+ }
+ 
+ bool json_variant_is_normalized(JsonVariant *v) {
+-
+-        /* For now, let's consider anything containing numbers not expressible as integers as
+-         * non-normalized. That's because we cannot sensibly compare them due to accuracy issues, nor even
+-         * store them if they are too large. */
++        /* For now, let's consider anything containing numbers not expressible as integers as non-normalized.
++         * That's because we cannot sensibly compare them due to accuracy issues, nor even store them if they
++         * are too large. */
+         if (json_variant_is_real(v) && !json_variant_is_integer(v) && !json_variant_is_unsigned(v))
+                 return false;
+ 
diff --git a/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch b/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch
new file mode 100644
index 0000000..a1caeab
--- /dev/null
+++ b/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch
@@ -0,0 +1,42 @@
+From 0c5992cdb85ac6d9d14b95e77f03797600e87667 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 14:28:36 +0200
+Subject: [PATCH] shared/json: fix memory leak on failed normalization
+
+We need to increase the counter immediately after taking the ref,
+otherwise we may not unref it properly if we fail before incrementing.
+
+(cherry picked from commit 7e4be6a5845f983a299932d4ccb2c4349cf8dd52)
+Related: #2087652
+---
+ src/shared/json.c                       | 5 +++--
+ test/fuzz/fuzz-json/leak-normalize-fail | 1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+ create mode 100644 test/fuzz/fuzz-json/leak-normalize-fail
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index ea1291e21b..fe05657dad 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -4655,10 +4655,11 @@ int json_variant_normalize(JsonVariant **v) {
+         if (!a)
+                 return -ENOMEM;
+ 
+-        for (i = 0; i < m; i++) {
++        for (i = 0; i < m; ) {
+                 a[i] = json_variant_ref(json_variant_by_index(*v, i));
++                i++;
+ 
+-                r = json_variant_normalize(a + i);
++                r = json_variant_normalize(&a[i-1]);
+                 if (r < 0)
+                         goto finish;
+         }
+diff --git a/test/fuzz/fuzz-json/leak-normalize-fail b/test/fuzz/fuzz-json/leak-normalize-fail
+new file mode 100644
+index 0000000000..b247ccd199
+--- /dev/null
++++ b/test/fuzz/fuzz-json/leak-normalize-fail
+@@ -0,0 +1 @@
++[7E73]
+\ No newline at end of file
diff --git a/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch b/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch
new file mode 100644
index 0000000..843a505
--- /dev/null
+++ b/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch
@@ -0,0 +1,141 @@
+From fb195ccc27d1643d4152ee874144c36c0104c56d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 15:10:36 +0200
+Subject: [PATCH] shared/json: add helper to ref first, unref second
+
+This normally wouldn't happen, but if some of those places were called
+with lhs and rhs being the same object, we could unref the last ref first,
+and then try to take the ref again. It's easier to be safe, and with the
+helper we save some lines too.
+
+(cherry picked from commit ce913e0ec4c97651c7c1509b72fb81ee61d80c6a)
+Related: #2087652
+---
+ src/shared/json.c | 36 ++++++++++--------------------------
+ src/shared/json.h |  8 ++++++++
+ 2 files changed, 18 insertions(+), 26 deletions(-)
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index fe05657dad..bb2363fd98 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -1847,9 +1847,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) {
+                 return r;
+ 
+         json_variant_propagate_sensitive(*v, w);
+-
+-        json_variant_unref(*v);
+-        *v = TAKE_PTR(w);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ 
+         return (int) n;
+ }
+@@ -1918,9 +1916,7 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu
+                 return r;
+ 
+         json_variant_propagate_sensitive(*v, w);
+-
+-        json_variant_unref(*v);
+-        *v = TAKE_PTR(w);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ 
+         return 1;
+ }
+@@ -2001,8 +1997,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+                 return 0; /* nothing to do */
+ 
+         if (v_blank) {
+-                json_variant_unref(*v);
+-                *v = json_variant_ref(m);
++                JSON_VARIANT_REPLACE(*v, json_variant_ref(m));
+                 return 1;
+         }
+ 
+@@ -2039,9 +2034,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+ 
+         json_variant_propagate_sensitive(*v, w);
+         json_variant_propagate_sensitive(m, w);
+-
+-        json_variant_unref(*v);
+-        *v = TAKE_PTR(w);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ 
+         return 1;
+ }
+@@ -2081,9 +2074,7 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) {
+                 return r;
+ 
+         json_variant_propagate_sensitive(*v, nv);
+-
+-        json_variant_unref(*v);
+-        *v = TAKE_PTR(nv);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(nv));
+ 
+         return 0;
+ }
+@@ -2297,8 +2288,7 @@ static int json_variant_set_source(JsonVariant **v, JsonSource *source, unsigned
+         w->line = line;
+         w->column = column;
+ 
+-        json_variant_unref(*v);
+-        *v = w;
++        JSON_VARIANT_REPLACE(*v, w);
+ 
+         return 1;
+ }
+@@ -4499,14 +4489,10 @@ int json_dispatch_strv(const char *name, JsonVariant *variant, JsonDispatchFlags
+ }
+ 
+ int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+-        JsonVariant **p = userdata;
+-
++        JsonVariant **p = ASSERT_PTR(userdata);
+         assert(variant);
+-        assert(p);
+-
+-        json_variant_unref(*p);
+-        *p = json_variant_ref(variant);
+ 
++        JSON_VARIANT_REPLACE(*p, json_variant_ref(variant));
+         return 0;
+ }
+ 
+@@ -4628,8 +4614,7 @@ int json_variant_sort(JsonVariant **v) {
+         if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
+                 return -ENOTUNIQ;
+ 
+-        json_variant_unref(*v);
+-        *v = n;
++        JSON_VARIANT_REPLACE(*v, n);
+ 
+         return 1;
+ }
+@@ -4684,8 +4669,7 @@ int json_variant_normalize(JsonVariant **v) {
+                 goto finish;
+         }
+ 
+-        json_variant_unref(*v);
+-        *v = n;
++        JSON_VARIANT_REPLACE(*v, n);
+ 
+         r = 1;
+ 
+diff --git a/src/shared/json.h b/src/shared/json.h
+index 8760354b66..dd73c1e497 100644
+--- a/src/shared/json.h
++++ b/src/shared/json.h
+@@ -82,6 +82,14 @@ JsonVariant *json_variant_ref(JsonVariant *v);
+ JsonVariant *json_variant_unref(JsonVariant *v);
+ void json_variant_unref_many(JsonVariant **array, size_t n);
+ 
++#define JSON_VARIANT_REPLACE(v, q)        \
++        do {                              \
++                typeof(v)* _v = &(v);     \
++                typeof(q) _q = (q);       \
++                json_variant_unref(*_v);  \
++                *_v = _q;                 \
++        } while(0)
++
+ DEFINE_TRIVIAL_CLEANUP_FUNC(JsonVariant *, json_variant_unref);
+ 
+ const char *json_variant_string(JsonVariant *v);
diff --git a/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch b/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch
new file mode 100644
index 0000000..4abdc43
--- /dev/null
+++ b/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch
@@ -0,0 +1,28 @@
+From 965a99f34a185bb3b3aa5ac0e9e5d5eb05d0fac0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 15:11:20 +0200
+Subject: [PATCH] basic/alloc-util: remove unnecessary parens
+
+Those symbols are not macros anymore, so we can drop parens.
+
+(cherry picked from commit 96d651a22bf62e63080e489cb45e82bead11aa5d)
+Related: #2087652
+---
+ src/basic/alloc-util.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h
+index 65d5175619..f57bcbdbcd 100644
+--- a/src/basic/alloc-util.h
++++ b/src/basic/alloc-util.h
+@@ -54,8 +54,8 @@ typedef void (*free_func_t)(void *p);
+                 typeof(a)* _a = &(a);           \
+                 typeof(b)* _b = &(b);           \
+                 free(*_a);                      \
+-                (*_a) = (*_b);                  \
+-                (*_b) = NULL;                   \
++                *_a = *_b;                      \
++                *_b = NULL;                     \
+                 0;                              \
+         })
+ 
diff --git a/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch b/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch
new file mode 100644
index 0000000..7f8627e
--- /dev/null
+++ b/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch
@@ -0,0 +1,32 @@
+From 03795a6ae06088bc434906f3ef7222acfbdbe8cb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 9 May 2022 15:14:33 +0200
+Subject: [PATCH] fuzz-json: also try self-merge operations
+
+This might even work ;)
+
+(cherry picked from commit dbd27c6d2830aeb7173933d1f4a9a07457e4092d)
+Related: #2087652
+---
+ src/fuzz/fuzz-json.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c
+index 995a0265ba..c393fcf394 100644
+--- a/src/fuzz/fuzz-json.c
++++ b/src/fuzz/fuzz-json.c
+@@ -105,7 +105,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         r = json_variant_filter(&v, STRV_MAKE("a", "b", "c", "d", "e"));
+         log_debug_errno(r, "json_variant_filter: %d/%m", r);
+ 
+-        // TODO: json_variant_merge(&v, …);
+-        // TODO: json_variant_append_array(&v, …);
++        /* I assume we can merge v with itself… */
++        r = json_variant_merge(&v, v);
++        log_debug_errno(r, "json_variant_merge: %d/%m", r);
++
++        r = json_variant_append_array(&v, v);
++        log_debug_errno(r, "json_variant_append_array: %d/%m", r);
++
+         return 0;
+ }
diff --git a/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch b/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch
new file mode 100644
index 0000000..df1a30e
--- /dev/null
+++ b/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch
@@ -0,0 +1,43 @@
+From 6e0d847273e6ef6ee1011fb1c8b6689e64a94276 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 10 May 2022 09:05:43 +0200
+Subject: [PATCH] shared/json: fix another memleak in normalization
+
+(cherry picked from commit 3b6ce05537cd3544a15073f920347cabd7a39450)
+Related: #2087652
+---
+ src/shared/json.c                         | 4 ++--
+ test/fuzz/fuzz-json/leak-normalize-object | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+ create mode 100644 test/fuzz/fuzz-json/leak-normalize-object
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index bb2363fd98..06ef556233 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -4621,7 +4621,7 @@ int json_variant_sort(JsonVariant **v) {
+ 
+ int json_variant_normalize(JsonVariant **v) {
+         _cleanup_free_ JsonVariant **a = NULL;
+-        JsonVariant *n = NULL;
++        _cleanup_(json_variant_unrefp) JsonVariant *n = NULL;
+         size_t i, m;
+         int r;
+ 
+@@ -4669,7 +4669,7 @@ int json_variant_normalize(JsonVariant **v) {
+                 goto finish;
+         }
+ 
+-        JSON_VARIANT_REPLACE(*v, n);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
+ 
+         r = 1;
+ 
+diff --git a/test/fuzz/fuzz-json/leak-normalize-object b/test/fuzz/fuzz-json/leak-normalize-object
+new file mode 100644
+index 0000000000..0a8caa426c
+--- /dev/null
++++ b/test/fuzz/fuzz-json/leak-normalize-object
+@@ -0,0 +1 @@
++[7,7,7,7,{"":7,"":7,"^t":7,"-":7},2777,7,7,7,3]
+\ No newline at end of file
diff --git a/SOURCES/0114-shared-json-fix-memleak-in-sort.patch b/SOURCES/0114-shared-json-fix-memleak-in-sort.patch
new file mode 100644
index 0000000..e8f0602
--- /dev/null
+++ b/SOURCES/0114-shared-json-fix-memleak-in-sort.patch
@@ -0,0 +1,43 @@
+From 51bbb027e93637f5821215ebb067454ad6620190 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 10 May 2022 10:51:43 +0200
+Subject: [PATCH] shared/json: fix memleak in sort
+
+(cherry picked from commit 99b1145aae682ddd7554c7e3ac5ebf778e88f87d)
+Related: #2087652
+---
+ src/shared/json.c             | 4 ++--
+ test/fuzz/fuzz-json/leak-sort | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+ create mode 100644 test/fuzz/fuzz-json/leak-sort
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index 06ef556233..6d23bdf4f9 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -4581,7 +4581,7 @@ static int json_cmp_strings(const void *x, const void *y) {
+ 
+ int json_variant_sort(JsonVariant **v) {
+         _cleanup_free_ JsonVariant **a = NULL;
+-        JsonVariant *n = NULL;
++        _cleanup_(json_variant_unrefp) JsonVariant *n = NULL;
+         size_t m;
+         int r;
+ 
+@@ -4614,7 +4614,7 @@ int json_variant_sort(JsonVariant **v) {
+         if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
+                 return -ENOTUNIQ;
+ 
+-        JSON_VARIANT_REPLACE(*v, n);
++        JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
+ 
+         return 1;
+ }
+diff --git a/test/fuzz/fuzz-json/leak-sort b/test/fuzz/fuzz-json/leak-sort
+new file mode 100644
+index 0000000000..f8446dbdc7
+--- /dev/null
++++ b/test/fuzz/fuzz-json/leak-sort
+@@ -0,0 +1 @@
++{"":2,"":6,"-":7}
+\ No newline at end of file
diff --git a/SOURCES/0115-execute-fix-resource-leak.patch b/SOURCES/0115-execute-fix-resource-leak.patch
new file mode 100644
index 0000000..194c836
--- /dev/null
+++ b/SOURCES/0115-execute-fix-resource-leak.patch
@@ -0,0 +1,26 @@
+From 08b6aa9dfbe9476ad71b48edd0f4454511d9ac19 Mon Sep 17 00:00:00 2001
+From: Shreenidhi Shedi <sshedi@vmware.com>
+Date: Sat, 4 Jun 2022 15:24:08 +0530
+Subject: [PATCH] execute: fix resource leak
+
+CID#1431998
+
+(cherry picked from commit 41abd7f6dfe09ccc78cdbdcdec3bdcc10be40faf)
+Related: #2087652
+---
+ src/core/execute.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 2ab65e9cfe..8a1d070e26 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -3331,7 +3331,7 @@ static int apply_mount_namespace(
+         /* Symlinks for exec dirs are set up after other mounts, before they are made read-only. */
+         r = compile_symlinks(context, params, &symlinks);
+         if (r < 0)
+-                return r;
++                goto finalize;
+ 
+         needs_sandboxing = (params->flags & EXEC_APPLY_SANDBOXING) && !(command_flags & EXEC_COMMAND_FULLY_PRIVILEGED);
+         if (needs_sandboxing) {
diff --git a/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch b/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch
new file mode 100644
index 0000000..e97f951
--- /dev/null
+++ b/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch
@@ -0,0 +1,31 @@
+From ae27d5b4be42cd98b3db299d161a2e3ea77eb604 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Wed, 11 May 2022 22:32:32 +0000
+Subject: [PATCH] tests: ignore dbus-broker-launcher
+
+There are memory leaks there https://github.com/bus1/dbus-broker/issues/289
+and it crashes from time to time
+https://github.com/matusmarhefka/dfuzzer/issues/20#issuecomment-1114097840
+so let's just skip it by analogy with dbus-daemon to avoid
+reports that have nothing to do with systemd itself.
+
+It's kind of a part of https://github.com/systemd/systemd/pull/22547
+
+(cherry picked from commit d0880faa5dda495c7c77425697b82a94b4e68bf6)
+Related: #2087652
+---
+ test/test-functions | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/test-functions b/test/test-functions
+index a299f5ff1f..7c37d05610 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1328,6 +1328,7 @@ check_asan_reports() {
+                  BEGIN {
+                      %services_to_ignore = (
+                          "dbus-daemon" => undef,
++                         "dbus-broker-launch" => undef,
+                      );
+                  }
+                  print $2 if /\s(\S*)\[(\d+)\]:\s*SUMMARY:\s+\w+Sanitizer/ && !exists $services_to_ignore{$1}'
diff --git a/SOURCES/0117-core-timer-fix-memleak.patch b/SOURCES/0117-core-timer-fix-memleak.patch
new file mode 100644
index 0000000..3e58e63
--- /dev/null
+++ b/SOURCES/0117-core-timer-fix-memleak.patch
@@ -0,0 +1,59 @@
+From d35c27e44abcde252abddf369762dee8da309903 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 10 May 2022 14:09:24 +0900
+Subject: [PATCH] core/timer: fix memleak
+
+Fixes #23326.
+
+(cherry picked from commit d3ab7b8078944db28bc621f43dd942a3c878fffb)
+Related: #2087652
+---
+ src/core/timer.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/core/timer.c b/src/core/timer.c
+index a13b864741..0dc49dd46b 100644
+--- a/src/core/timer.c
++++ b/src/core/timer.c
+@@ -135,6 +135,7 @@ static int timer_add_trigger_dependencies(Timer *t) {
+ }
+ 
+ static int timer_setup_persistent(Timer *t) {
++        _cleanup_free_ char *stamp_path = NULL;
+         int r;
+ 
+         assert(t);
+@@ -148,13 +149,13 @@ static int timer_setup_persistent(Timer *t) {
+                 if (r < 0)
+                         return r;
+ 
+-                t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
++                stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
+         } else {
+                 const char *e;
+ 
+                 e = getenv("XDG_DATA_HOME");
+                 if (e)
+-                        t->stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
++                        stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
+                 else {
+ 
+                         _cleanup_free_ char *h = NULL;
+@@ -163,14 +164,14 @@ static int timer_setup_persistent(Timer *t) {
+                         if (r < 0)
+                                 return log_unit_error_errno(UNIT(t), r, "Failed to determine home directory: %m");
+ 
+-                        t->stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
++                        stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
+                 }
+         }
+ 
+-        if (!t->stamp_path)
++        if (!stamp_path)
+                 return log_oom();
+ 
+-        return 0;
++        return free_and_replace(t->stamp_path, stamp_path);
+ }
+ 
+ static uint64_t timer_get_fixed_delay_hash(Timer *t) {
diff --git a/SOURCES/0118-timedatectl-fix-a-memory-leak.patch b/SOURCES/0118-timedatectl-fix-a-memory-leak.patch
new file mode 100644
index 0000000..68e40de
--- /dev/null
+++ b/SOURCES/0118-timedatectl-fix-a-memory-leak.patch
@@ -0,0 +1,44 @@
+From 9c166afe17888b08d1e269cfd83a31838d601534 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Wed, 4 May 2022 11:35:19 +0000
+Subject: [PATCH] timedatectl: fix a memory leak
+
+```
+timedatectl list-timezones --no-pager
+...
+==164329==ERROR: LeakSanitizer: detected memory leaks
+
+Direct leak of 8192 byte(s) in 1 object(s) allocated from:
+    #0 0x7fe8a74b6f8c in reallocarray (/lib64/libasan.so.6+0xaef8c)
+    #1 0x7fe8a63485dc in strv_push ../src/basic/strv.c:419
+    #2 0x7fe8a6349419 in strv_consume ../src/basic/strv.c:490
+    #3 0x7fe8a634958d in strv_extend ../src/basic/strv.c:542
+    #4 0x7fe8a643d787 in bus_message_read_strv_extend ../src/libsystemd/sd-bus/bus-message.c:5606
+    #5 0x7fe8a643db9d in sd_bus_message_read_strv ../src/libsystemd/sd-bus/bus-message.c:5628
+    #6 0x4085fb in list_timezones ../src/timedate/timedatectl.c:314
+    #7 0x7fe8a61ef3e1 in dispatch_verb ../src/shared/verbs.c:103
+    #8 0x410f91 in timedatectl_main ../src/timedate/timedatectl.c:1025
+    #9 0x41111c in run ../src/timedate/timedatectl.c:1043
+    #10 0x411242 in main ../src/timedate/timedatectl.c:1046
+    #11 0x7fe8a489df1f in __libc_start_call_main (/lib64/libc.so.6+0x40f1f)
+```
+
+(cherry picked from commit a2e37d52312806b1847800df2358e61276cda052)
+Related: #2087652
+---
+ src/timedate/timedatectl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
+index 75ca6195da..31909064cf 100644
+--- a/src/timedate/timedatectl.c
++++ b/src/timedate/timedatectl.c
+@@ -304,7 +304,7 @@ static int list_timezones(int argc, char **argv, void *userdata) {
+         sd_bus *bus = userdata;
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+         int r;
+-        char** zones;
++        _cleanup_strv_free_ char **zones = NULL;
+ 
+         r = bus_call_method(bus, bus_timedate, "ListTimezones", &error, &reply, NULL);
+         if (r < 0)
diff --git a/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch b/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch
new file mode 100644
index 0000000..bd57db6
--- /dev/null
+++ b/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch
@@ -0,0 +1,42 @@
+From 12274971840068b3effb7a933d62f1b5fe8009e1 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 22 Feb 2022 21:46:41 +0900
+Subject: [PATCH] test: fix file descriptor leak in test-psi-util
+
+Fixes an issue reported in #22576.
+
+(cherry picked from commit be99883e131ef422f8278ec1d099520996a78bb0)
+Related: #2087652
+---
+ src/test/test-psi-util.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/test/test-psi-util.c b/src/test/test-psi-util.c
+index ed465b807e..111671c5a9 100644
+--- a/src/test/test-psi-util.c
++++ b/src/test/test-psi-util.c
+@@ -1,20 +1,23 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
++#include "fd-util.h"
+ #include "fileio.h"
+ #include "fs-util.h"
+ #include "parse-util.h"
+ #include "psi-util.h"
+ #include "tests.h"
++#include "tmpfile-util.h"
+ 
+ TEST(read_mem_pressure) {
+         _cleanup_(unlink_tempfilep) char path[] = "/tmp/pressurereadtestXXXXXX";
++        _cleanup_close_ int fd = -1;
+         ResourcePressure rp;
+ 
+         if (geteuid() != 0)
+                 return (void) log_tests_skipped("not root");
+ 
+-        assert_se(mkstemp(path));
++        assert_se((fd = mkostemp_safe(path)) >= 0);
+ 
+         assert_se(read_resource_pressure("/verylikelynonexistentpath", PRESSURE_TYPE_SOME, &rp) < 0);
+         assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0);
diff --git a/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch b/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch
new file mode 100644
index 0000000..d670657
--- /dev/null
+++ b/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch
@@ -0,0 +1,36 @@
+From 936e8cd5aff044832c98e5a6a97c9f057f44b476 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 22 Feb 2022 21:44:58 +0900
+Subject: [PATCH] test: fix file descriptor leak in test-tmpfiles.c
+
+Also fixes a typo in assertion.
+
+Fixes an issure reported in #22576.
+
+(cherry picked from commit 1da5325d19dee654326e5fa2f61262e5e0a40fff)
+Related: #2087652
+---
+ src/test/test-tmpfiles.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/test/test-tmpfiles.c b/src/test/test-tmpfiles.c
+index 99243eb77a..f26701767f 100644
+--- a/src/test/test-tmpfiles.c
++++ b/src/test/test-tmpfiles.c
+@@ -35,7 +35,7 @@ TEST(tmpfiles) {
+         assert_se(endswith(ans, " (deleted)"));
+ 
+         fd2 = mkostemp_safe(pattern);
+-        assert_se(fd >= 0);
++        assert_se(fd2 >= 0);
+         assert_se(unlink(pattern) == 0);
+ 
+         assert_se(asprintf(&cmd2, "ls -l /proc/"PID_FMT"/fd/%d", getpid_cached(), fd2) > 0);
+@@ -47,6 +47,7 @@ TEST(tmpfiles) {
+         pattern = strjoina(p, "/tmpfiles-test");
+         assert_se(tempfn_random(pattern, NULL, &d) >= 0);
+ 
++        fd = safe_close(fd);
+         fd = open_tmpfile_linkable(d, O_RDWR|O_CLOEXEC, &tmp);
+         assert_se(fd >= 0);
+         assert_se(write(fd, "foobar\n", 7) == 7);
diff --git a/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch b/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch
new file mode 100644
index 0000000..8f2a2be
--- /dev/null
+++ b/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch
@@ -0,0 +1,46 @@
+From 3ca37c58cb3ff022e029b28539fd2e3b208802fd Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 22 Feb 2022 21:42:22 +0900
+Subject: [PATCH] test: fix file descriptor leak in test-fs-util
+
+Fixes an issue reported in #22576.
+
+(cherry picked from commit 19962747ca86a25e7102c536380bb2e9d7cfee9a)
+Related: #2087652
+---
+ src/test/test-fs-util.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
+index 602ce75f98..f53a3ebf59 100644
+--- a/src/test/test-fs-util.c
++++ b/src/test/test-fs-util.c
+@@ -29,10 +29,11 @@ static const char *arg_test_dir = NULL;
+ 
+ TEST(chase_symlinks) {
+         _cleanup_free_ char *result = NULL;
++        _cleanup_close_ int pfd = -1;
+         char *temp;
+         const char *top, *p, *pslash, *q, *qslash;
+         struct stat st;
+-        int r, pfd;
++        int r;
+ 
+         temp = strjoina(arg_test_dir ?: "/tmp", "/test-chase.XXXXXX");
+         assert_se(mkdtemp(temp));
+@@ -318,6 +319,7 @@ TEST(chase_symlinks) {
+         assert_se(fstat(pfd, &st) >= 0);
+         assert_se(S_ISLNK(st.st_mode));
+         result = mfree(result);
++        pfd = safe_close(pfd);
+ 
+         /* s1 -> s2 -> nonexistent */
+         q = strjoina(temp, "/s1");
+@@ -331,6 +333,7 @@ TEST(chase_symlinks) {
+         assert_se(fstat(pfd, &st) >= 0);
+         assert_se(S_ISLNK(st.st_mode));
+         result = mfree(result);
++        pfd = safe_close(pfd);
+ 
+         /* Test CHASE_STEP */
+ 
diff --git a/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch b/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch
new file mode 100644
index 0000000..7b8ce4a
--- /dev/null
+++ b/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch
@@ -0,0 +1,48 @@
+From 9e37cb1855c8fc1667f7e404376070952c015788 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 22 Feb 2022 21:38:15 +0900
+Subject: [PATCH] test: fix file descriptor leak in test-oomd-util
+
+Fixes an issue reported in #22576.
+
+(cherry picked from commit 282696ce52471f5e3c963b9d98dbc89fba3a1fba)
+Related: #2087652
+---
+ src/oom/test-oomd-util.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/oom/test-oomd-util.c b/src/oom/test-oomd-util.c
+index 265e77c0a2..0252ceecd7 100644
+--- a/src/oom/test-oomd-util.c
++++ b/src/oom/test-oomd-util.c
+@@ -5,6 +5,7 @@
+ #include "alloc-util.h"
+ #include "cgroup-setup.h"
+ #include "cgroup-util.h"
++#include "fd-util.h"
+ #include "fileio.h"
+ #include "fs-util.h"
+ #include "oomd-util.h"
+@@ -13,6 +14,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "tests.h"
++#include "tmpfile-util.h"
+ 
+ static int fork_and_sleep(unsigned sleep_min) {
+         usec_t n, timeout, ts;
+@@ -244,12 +246,13 @@ static void test_oomd_update_cgroup_contexts_between_hashmaps(void) {
+ 
+ static void test_oomd_system_context_acquire(void) {
+         _cleanup_(unlink_tempfilep) char path[] = "/oomdgetsysctxtestXXXXXX";
++        _cleanup_close_ int fd = -1;
+         OomdSystemContext ctx;
+ 
+         if (geteuid() != 0)
+                 return (void) log_tests_skipped("not root");
+ 
+-        assert_se(mkstemp(path));
++        assert_se((fd = mkostemp_safe(path)) >= 0);
+ 
+         assert_se(oomd_system_context_acquire("/verylikelynonexistentpath", &ctx) == -ENOENT);
+ 
diff --git a/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch b/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch
new file mode 100644
index 0000000..58b7423
--- /dev/null
+++ b/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch
@@ -0,0 +1,34 @@
+From d947339b49eb7935ce282e808a7e75a6098d088a Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 22 Feb 2022 21:11:51 +0900
+Subject: [PATCH] test: fix file descriptor leak in test-catalog
+
+Fixes an issue reported in #22576.
+
+(cherry picked from commit 62d4b3b36e9aba9e605ba042a75c374155b6e18b)
+Related: #2087652
+---
+ src/libsystemd/sd-journal/test-catalog.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-journal/test-catalog.c b/src/libsystemd/sd-journal/test-catalog.c
+index 316c3b1634..ad06221175 100644
+--- a/src/libsystemd/sd-journal/test-catalog.c
++++ b/src/libsystemd/sd-journal/test-catalog.c
+@@ -196,6 +196,7 @@ static void test_catalog_file_lang(void) {
+ 
+ int main(int argc, char *argv[]) {
+         _cleanup_(unlink_tempfilep) char database[] = "/tmp/test-catalog.XXXXXX";
++        _cleanup_close_ int fd = -1;
+         _cleanup_free_ char *text = NULL;
+         int r;
+ 
+@@ -218,7 +219,7 @@ int main(int argc, char *argv[]) {
+         test_catalog_import_merge();
+         test_catalog_import_merge_no_body();
+ 
+-        assert_se(mkostemp_safe(database) >= 0);
++        assert_se((fd = mkostemp_safe(database)) >= 0);
+ 
+         test_catalog_update(database);
+ 
diff --git a/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch b/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch
new file mode 100644
index 0000000..8464645
--- /dev/null
+++ b/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch
@@ -0,0 +1,49 @@
+From 4197469aa26e8e3e61c859341002e37bde751ada Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 16 Feb 2022 20:29:14 +0100
+Subject: [PATCH] test: make masking of supplementary services configurable
+
+(cherry picked from commit 508a7f04b345878dcd8365ff0ded5f87b18d75fa)
+
+Related: #2087652
+---
+ test/TEST-01-BASIC/test.sh | 1 +
+ test/test-functions        | 6 +++---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
+index a790cd78ac..cc6d0651c1 100755
+--- a/test/TEST-01-BASIC/test.sh
++++ b/test/TEST-01-BASIC/test.sh
+@@ -6,6 +6,7 @@ TEST_DESCRIPTION="Basic systemd setup"
+ IMAGE_NAME="basic"
+ RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes}
+ TEST_REQUIRE_INSTALL_TESTS=0
++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0
+ 
+ # shellcheck source=test/test-functions
+ . "${TEST_BASE_DIR:?}/test-functions"
+diff --git a/test/test-functions b/test/test-functions
+index 7c37d05610..44f465c914 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -40,6 +40,7 @@ IMAGE_NAME=${IMAGE_NAME:-default}
+ STRIP_BINARIES="${STRIP_BINARIES:-yes}"
+ TEST_REQUIRE_INSTALL_TESTS="${TEST_REQUIRE_INSTALL_TESTS:-1}"
+ TEST_PARALLELIZE="${TEST_PARALLELIZE:-0}"
++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED="${TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED:-1}"
+ LOOPDEV=
+ 
+ # Simple wrapper to unify boolean checks.
+@@ -2787,9 +2788,8 @@ test_setup() {
+         fi
+ 
+         mount_initdir
+-        # We want to test all services in TEST-01-BASIC, but mask them in
+-        # all other tests
+-        if [[ "${TESTID:?}" != "01" ]]; then
++
++        if get_bool "${TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED}"; then
+             dinfo "Masking supporting services"
+             mask_supporting_services
+         fi
diff --git a/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch b/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch
new file mode 100644
index 0000000..1c63c5a
--- /dev/null
+++ b/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch
@@ -0,0 +1,186 @@
+From 25338c37915521876c84bca196de50d73c3c17ea Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 13 Dec 2021 20:50:28 +0100
+Subject: [PATCH] test: fuzz our dbus interfaces with dfuzzer
+
+(cherry picked from commit 354b3364aa63620a0f732bb8a6fe9332a4f550e4)
+
+Related: #2087652
+---
+ test/TEST-21-DFUZZER/Makefile   |  1 +
+ test/TEST-21-DFUZZER/test.sh    | 24 +++++++++
+ test/test-functions             |  1 +
+ test/units/testsuite-21.service | 10 ++++
+ test/units/testsuite-21.sh      | 94 +++++++++++++++++++++++++++++++++
+ 5 files changed, 130 insertions(+)
+ create mode 120000 test/TEST-21-DFUZZER/Makefile
+ create mode 100755 test/TEST-21-DFUZZER/test.sh
+ create mode 100644 test/units/testsuite-21.service
+ create mode 100755 test/units/testsuite-21.sh
+
+diff --git a/test/TEST-21-DFUZZER/Makefile b/test/TEST-21-DFUZZER/Makefile
+new file mode 120000
+index 0000000000..e9f93b1104
+--- /dev/null
++++ b/test/TEST-21-DFUZZER/Makefile
+@@ -0,0 +1 @@
++../TEST-01-BASIC/Makefile
+\ No newline at end of file
+diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh
+new file mode 100755
+index 0000000000..ecc04e368c
+--- /dev/null
++++ b/test/TEST-21-DFUZZER/test.sh
+@@ -0,0 +1,24 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="Fuzz our D-Bus interfaces with dfuzzer"
++TEST_NO_NSPAWN=1
++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0
++QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}"
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++command -v dfuzzer >/dev/null || exit 0
++
++test_append_files() {
++    local workspace="${1:?}"
++
++    image_install dfuzzer /etc/dfuzzer.conf
++
++    # Enable all systemd-related services, including the D-Bus ones
++    "$SYSTEMCTL" --root="${workspace:?}" preset-all
++}
++
++do_test "$@"
+diff --git a/test/test-functions b/test/test-functions
+index 44f465c914..079a7249e4 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -99,6 +99,7 @@ SYSTEMD_JOURNAL_REMOTE="${SYSTEMD_JOURNAL_REMOTE:-$(command -v "$BUILD_DIR/syste
+ SYSTEMD="${SYSTEMD:-$(command -v "$BUILD_DIR/systemd" || command -v "$ROOTLIBDIR/systemd")}"
+ SYSTEMD_NSPAWN="${SYSTEMD_NSPAWN:-$(command -v "$BUILD_DIR/systemd-nspawn" || command -v systemd-nspawn)}"
+ JOURNALCTL="${JOURNALCTL:-$(command -v "$BUILD_DIR/journalctl" || command -v journalctl)}"
++SYSTEMCTL="${SYSTEMCTL:-$(command -v "$BUILD_DIR/systemctl" || command -v systemctl)}"
+ 
+ TESTFILE="${BASH_SOURCE[1]}"
+ if [ -z "$TESTFILE" ]; then
+diff --git a/test/units/testsuite-21.service b/test/units/testsuite-21.service
+new file mode 100644
+index 0000000000..a5f77d07b4
+--- /dev/null
++++ b/test/units/testsuite-21.service
+@@ -0,0 +1,10 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=Fuzz our D-Bus interfaces with dfuzzer
++After=dbus.service multi-user.target
++Wants=dbus.service multi-user.target
++
++[Service]
++ExecStartPre=rm -f /failed /skipped /testok
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
++Type=oneshot
+diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh
+new file mode 100755
+index 0000000000..43b5fb6f22
+--- /dev/null
++++ b/test/units/testsuite-21.sh
+@@ -0,0 +1,94 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -eux
++set -o pipefail
++
++# Save the end.service state before we start fuzzing, as it might get changed
++# on the fly by one of the fuzzers
++systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT_EXIT=0
++
++at_exit() {
++    # "Safety net" - check for any coredumps which might have not caused dfuzzer
++    # to stop & return an error (we need to do this now before truncating the
++    # journal)
++    # TODO: check fo ASan/UBSan errors
++    local found_cd=0
++    while read -r exe; do
++        coredumctl info "$exe"
++        found_cd=1
++    done < <(coredumpctl -F COREDUMP_EXE | sort -u)
++    [[ $found_cd -eq 0 ]] || exit 1
++
++    # We have to call the end.service explicitly even if it's specified on
++    # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls
++    # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service
++    # from the queue
++    [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && systemctl start --job-mode=flush end.service
++}
++
++trap at_exit EXIT
++
++systemctl log-level info
++
++# TODO
++#   * check for possibly newly introduced buses?
++BUS_LIST=(
++    org.freedesktop.home1
++    org.freedesktop.hostname1
++    org.freedesktop.import1
++    org.freedesktop.locale1
++    org.freedesktop.login1
++    org.freedesktop.machine1
++    org.freedesktop.network1
++    org.freedesktop.portable1
++    org.freedesktop.resolve1
++    org.freedesktop.systemd1
++    org.freedesktop.timedate1
++    org.freedesktop.timesync1
++)
++
++# systemd-oomd requires PSI
++if tail -n +1 /proc/pressure/{cpu,io,memory}; then
++    BUS_LIST+=(org.freedesktop.oom1)
++fi
++
++SESSION_BUS_LIST=(
++    org.freedesktop.systemd1
++)
++
++# Maximum payload size generated by dfuzzer (in bytes) - default: 50K
++PAYLOAD_MAX=50000
++# Tweak the maximum payload size if we're running under sanitizers, since
++# with larger payloads we start hitting reply timeouts
++if [[ -v ASAN_OPTIONS || -v UBSAN_OPTIONS ]]; then
++    PAYLOAD_MAX=10000 # 10K
++fi
++
++# Overmount /var/lib/machines with a size-limited tmpfs, as fuzzing
++# the org.freedesktop.machine1 stuff makes quite a mess
++mount -t tmpfs -o size=50M tmpfs /var/lib/machines
++
++# Fuzz both the system and the session buses (where applicable)
++for bus in "${BUS_LIST[@]}"; do
++    echo "Bus: $bus (system)"
++    systemd-run --pipe --wait \
++                -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus"
++
++    # Let's reload the systemd daemon to test (de)serialization as well
++    systemctl daemon-reload
++done
++
++umount /var/lib/machines
++
++for bus in "${SESSION_BUS_LIST[@]}"; do
++    echo "Bus: $bus (session)"
++    systemd-run --machine 'testuser@.host' --user --pipe --wait \
++                -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus"
++
++    # Let's reload the systemd user daemon to test (de)serialization as well
++    systemctl --machine 'testuser@.host' --user daemon-reload
++done
++
++echo OK >/testok
++
++exit 0
diff --git a/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch b/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch
new file mode 100644
index 0000000..90ee4f4
--- /dev/null
+++ b/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch
@@ -0,0 +1,31 @@
+From 8f848593293b69f293734e07ec975ee76a3e6df5 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sun, 19 Jun 2022 10:39:12 +0200
+Subject: [PATCH] test: skip TEST-21-DFUZZER without ASan
+
+as the test is quite time consuming and it yields more useful reports
+when the target app is built with sanitizers.
+
+(cherry picked from commit d768243a95c33e73afe9a7e487acf329884e03c1)
+
+Related: #2087652
+---
+ test/TEST-21-DFUZZER/test.sh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh
+index ecc04e368c..42e37c8a9c 100755
+--- a/test/TEST-21-DFUZZER/test.sh
++++ b/test/TEST-21-DFUZZER/test.sh
+@@ -12,6 +12,11 @@ QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}"
+ 
+ command -v dfuzzer >/dev/null || exit 0
+ 
++if ! get_bool "$IS_BUILT_WITH_ASAN"; then
++    echo "systemd is built without ASan, skipping..."
++    exit 0
++fi
++
+ test_append_files() {
+     local workspace="${1:?}"
+ 
diff --git a/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch b/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch
new file mode 100644
index 0000000..eaebcb5
--- /dev/null
+++ b/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch
@@ -0,0 +1,41 @@
+From fc6e005962167c26b9ef6cdd9e3476abeeb47313 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 9 May 2022 23:43:40 +0200
+Subject: [PATCH] core: annotate Reexecute() as NoReply
+
+So we're able to tell from the introspection data that the method
+doesn't reply.
+
+(cherry picked from commit 624f685fe8ff1a90370e02faf60d0292a8e01f26)
+
+Related: #2087652
+---
+ man/org.freedesktop.systemd1.xml | 1 +
+ src/core/dbus-manager.c          | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml
+index bd69a00b57..e1abb7f389 100644
+--- a/man/org.freedesktop.systemd1.xml
++++ b/man/org.freedesktop.systemd1.xml
+@@ -169,6 +169,7 @@ node /org/freedesktop/systemd1 {
+       Dump(out s output);
+       DumpByFileDescriptor(out h fd);
+       Reload();
++      @org.freedesktop.DBus.Method.NoReply("true")
+       Reexecute();
+       @org.freedesktop.systemd1.Privileged("true")
+       Exit();
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 9b64a8074d..1a3098ceb1 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -3105,7 +3105,7 @@ const sd_bus_vtable bus_manager_vtable[] = {
+                       NULL,
+                       NULL,
+                       method_reexecute,
+-                      SD_BUS_VTABLE_UNPRIVILEGED),
++                      SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_METHOD_NO_REPLY),
+         SD_BUS_METHOD("Exit",
+                       NULL,
+                       NULL,
diff --git a/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch b/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch
new file mode 100644
index 0000000..60da622
--- /dev/null
+++ b/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch
@@ -0,0 +1,28 @@
+From e162696827d97449e6395fc017fe6865aa6f1ad1 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 21 Jun 2022 10:01:30 +0200
+Subject: [PATCH] test: always force a new image for dfuzzer
+
+Otherwise we might end up with an image containing broken service
+symlinks and other things, which break certain parts of the test.
+
+(cherry picked from commit 5dffa6b032168305213e4fb0d72fb02363acfd65)
+
+Related: #2087652
+---
+ test/TEST-21-DFUZZER/test.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh
+index 42e37c8a9c..7669e4e0ad 100755
+--- a/test/TEST-21-DFUZZER/test.sh
++++ b/test/TEST-21-DFUZZER/test.sh
+@@ -6,6 +6,8 @@ TEST_DESCRIPTION="Fuzz our D-Bus interfaces with dfuzzer"
+ TEST_NO_NSPAWN=1
+ TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0
+ QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}"
++IMAGE_NAME=dfuzzer
++TEST_FORCE_NEWIMAGE=1
+ 
+ # shellcheck source=test/test-functions
+ . "${TEST_BASE_DIR:?}/test-functions"
diff --git a/SOURCES/0129-test-make-dfuzzer-less-verbose.patch b/SOURCES/0129-test-make-dfuzzer-less-verbose.patch
new file mode 100644
index 0000000..be24139
--- /dev/null
+++ b/SOURCES/0129-test-make-dfuzzer-less-verbose.patch
@@ -0,0 +1,38 @@
+From 0e72d8a8bbed61ffa3cbf2637f1b29ade7af45be Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 21 Jun 2022 10:04:03 +0200
+Subject: [PATCH] test: make dfuzzer less verbose
+
+Otherwise it oversaturates the journal, which in some cases can't keep
+up with the load of messages (due to the performance penalty caused by
+sanitizers), and gets killed by a watchdog.
+
+(cherry picked from commit d3eb4159c9577f0a9ee776d34fcec7ad913d88a5)
+
+Related: #2087652
+---
+ test/units/testsuite-21.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh
+index 43b5fb6f22..604bf145ca 100755
+--- a/test/units/testsuite-21.sh
++++ b/test/units/testsuite-21.sh
+@@ -72,7 +72,7 @@ mount -t tmpfs -o size=50M tmpfs /var/lib/machines
+ for bus in "${BUS_LIST[@]}"; do
+     echo "Bus: $bus (system)"
+     systemd-run --pipe --wait \
+-                -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus"
++                -- dfuzzer -b "$PAYLOAD_MAX" -n "$bus"
+ 
+     # Let's reload the systemd daemon to test (de)serialization as well
+     systemctl daemon-reload
+@@ -83,7 +83,7 @@ umount /var/lib/machines
+ for bus in "${SESSION_BUS_LIST[@]}"; do
+     echo "Bus: $bus (session)"
+     systemd-run --machine 'testuser@.host' --user --pipe --wait \
+-                -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus"
++                -- dfuzzer -b "$PAYLOAD_MAX" -n "$bus"
+ 
+     # Let's reload the systemd user daemon to test (de)serialization as well
+     systemctl --machine 'testuser@.host' --user daemon-reload
diff --git a/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch b/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch
new file mode 100644
index 0000000..013bbff
--- /dev/null
+++ b/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch
@@ -0,0 +1,37 @@
+From e5291b4fb0d9adfc9da510f4acc7330d57e3e415 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 21 Jun 2022 10:13:48 +0200
+Subject: [PATCH] test: drop the at_exit() coredump check
+
+since we don't truncate the journal anymore.
+
+(cherry picked from commit 5309b56505dfccf9111cb5fe6461047725429e79)
+
+Related: #2087652
+---
+ test/units/testsuite-21.sh | 12 +-----------
+ 1 file changed, 1 insertion(+), 11 deletions(-)
+
+diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh
+index 604bf145ca..053d571a90 100755
+--- a/test/units/testsuite-21.sh
++++ b/test/units/testsuite-21.sh
+@@ -8,17 +8,7 @@ set -o pipefail
+ systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT_EXIT=0
+ 
+ at_exit() {
+-    # "Safety net" - check for any coredumps which might have not caused dfuzzer
+-    # to stop & return an error (we need to do this now before truncating the
+-    # journal)
+-    # TODO: check fo ASan/UBSan errors
+-    local found_cd=0
+-    while read -r exe; do
+-        coredumctl info "$exe"
+-        found_cd=1
+-    done < <(coredumpctl -F COREDUMP_EXE | sort -u)
+-    [[ $found_cd -eq 0 ]] || exit 1
+-
++    set +e
+     # We have to call the end.service explicitly even if it's specified on
+     # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls
+     # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service
diff --git a/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch b/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch
new file mode 100644
index 0000000..f4ec02a
--- /dev/null
+++ b/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch
@@ -0,0 +1,54 @@
+From a0464b064c46f9a63fd3f8d6f2d8560c7e5d32d3 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 21 Jun 2022 10:20:12 +0200
+Subject: [PATCH] test: make the shutdown routine a bit more "robust"
+
+Replace the call to the `end.service` with `systemctl poweroff`, since
+it seems to cause issues no matter what `--job-mode=` is used:
+
+```
+[  129.070993] testsuite-21.sh[380]: ++ systemctl start --job-mode=flush end.service
+[  129.154985] testsuite-21.sh[912]: Failed to start end.service: Transaction for end.service/start is destructive (sysinit.target has 'stop' job queued, but 'start' is included in transaction).
+[  129.159636] testsuite-21.sh[912]: See system logs and 'systemctl status end.service' for details.
+```
+
+Also, add a "safety net" which bypasses the manager and does the
+poweroff directly, since sometimes the D-Bus call performed by
+`systemctl` might timeout (as the manager might be still processing data
+from the fuzzing):
+
+```
+[  115.776778] sh[894]: + systemctl poweroff --no-block
+[  166.164242] testsuite-21.sh[893]: Failed to start transient service unit: Connection timed out
+[  166.269289] sh[894]: Call to PowerOff failed: Connection timed out
+```
+
+(cherry picked from commit 56e8ee55d58e38d47992ca6b5b6466fdb5be4781)
+
+Related: #2087652
+---
+ test/units/testsuite-21.sh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh
+index 053d571a90..e9bf18603a 100755
+--- a/test/units/testsuite-21.sh
++++ b/test/units/testsuite-21.sh
+@@ -9,11 +9,15 @@ systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT
+ 
+ at_exit() {
+     set +e
+-    # We have to call the end.service explicitly even if it's specified on
++    # We have to call the end.service/poweroff explicitly even if it's specified on
+     # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls
+     # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service
+     # from the queue
+-    [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && systemctl start --job-mode=flush end.service
++    if [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && ! systemctl poweroff; then
++        # PID1 is down let's try to save the journal
++        journalctl --sync || : # journal can be down as well so let's ignore exit codes here
++        systemctl -ff poweroff # sync() and reboot(RB_POWER_OFF)
++    fi
+ }
+ 
+ trap at_exit EXIT
diff --git a/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch b/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch
new file mode 100644
index 0000000..868ae1e
--- /dev/null
+++ b/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch
@@ -0,0 +1,167 @@
+From 910711b21c5fe4f26ad20a4d86e1acfb2a0afbdb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 4 May 2022 08:24:06 +0200
+Subject: [PATCH] tree-wide: drop manually-crafted message for missing
+ variables
+
+Bash will generate a very nice message for us:
+/tmp/ff.sh: line 1: SOMEVAR: parameter null or not set
+
+Let's save some keystrokes by not replacing this with our own inferior
+messages.
+
+(cherry picked from commit d7ff52403902900b61f644f87b5222822fd4a69b)
+
+Related: #2087652
+---
+ test/TEST-36-NUMAPOLICY/test.sh |  2 +-
+ test/hwdb-test.sh               |  2 +-
+ test/test-rpm-macros.sh         |  2 +-
+ test/units/testsuite-15.sh      |  4 ++--
+ test/units/testsuite-36.sh      | 14 +++++++-------
+ test/units/testsuite-46.sh      |  2 +-
+ tools/check-directives.sh       |  4 ++--
+ 7 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh
+index 0eaaee9608..5f38bf1009 100755
+--- a/test/TEST-36-NUMAPOLICY/test.sh
++++ b/test/TEST-36-NUMAPOLICY/test.sh
+@@ -9,7 +9,7 @@ TEST_NO_NSPAWN=1
+ . "${TEST_BASE_DIR:?}/test-functions"
+ 
+ if qemu_min_version "5.2.0"; then
+-    QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?QEMU_MEM is unset} -numa node,memdev=mem0,nodeid=0"
++    QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?} -numa node,memdev=mem0,nodeid=0"
+ else
+     QEMU_OPTIONS="-numa node,nodeid=0"
+ fi
+diff --git a/test/hwdb-test.sh b/test/hwdb-test.sh
+index 0551f26a2d..29183e6829 100755
+--- a/test/hwdb-test.sh
++++ b/test/hwdb-test.sh
+@@ -11,7 +11,7 @@ set -e
+ 
+ export SYSTEMD_LOG_LEVEL=info
+ ROOTDIR="$(dirname "$(dirname "$(readlink -f "$0")")")"
+-SYSTEMD_HWDB="${1:?missing argument}"
++SYSTEMD_HWDB="${1:?}"
+ 
+ if [ ! -x "$SYSTEMD_HWDB" ]; then
+     echo "$SYSTEMD_HWDB is not executable" >&2
+diff --git a/test/test-rpm-macros.sh b/test/test-rpm-macros.sh
+index 5843b72346..c7107dec3e 100755
+--- a/test/test-rpm-macros.sh
++++ b/test/test-rpm-macros.sh
+@@ -6,7 +6,7 @@
+ # rpmspec utility is required (so this test will work with RPM 4 but won't work with RPM 5).
+ set -eu
+ 
+-BUILD_DIR="${1:?Missing argument: build directory}"
++BUILD_DIR="${1:?}"
+ RPM_MACROS_FILE="${BUILD_DIR:?}/src/rpm/macros.systemd"
+ 
+ if ! command -v rpm >/dev/null || ! command -v rpmspec >/dev/null; then
+diff --git a/test/units/testsuite-15.sh b/test/units/testsuite-15.sh
+index 0446e71c38..f847adac74 100755
+--- a/test/units/testsuite-15.sh
++++ b/test/units/testsuite-15.sh
+@@ -4,7 +4,7 @@ set -eux
+ set -o pipefail
+ 
+ _clear_service () {
+-    local SERVICE_NAME="${1:?_clear_service: missing argument}"
++    local SERVICE_NAME="${1:?}"
+     systemctl stop "$SERVICE_NAME.service" 2>/dev/null || :
+     rm -f  /{etc,run,usr/lib}/systemd/system/"$SERVICE_NAME".service
+     rm -fr /{etc,run,usr/lib}/systemd/system/"$SERVICE_NAME".service.d
+@@ -25,7 +25,7 @@ clear_services () {
+ }
+ 
+ create_service () {
+-    local SERVICE_NAME="${1:?create_service: missing argument}"
++    local SERVICE_NAME="${1:?}"
+     clear_services "$SERVICE_NAME"
+ 
+     cat >/etc/systemd/system/"$SERVICE_NAME".service <<EOF
+diff --git a/test/units/testsuite-36.sh b/test/units/testsuite-36.sh
+index b6c00c4845..cc4deffdbd 100755
+--- a/test/units/testsuite-36.sh
++++ b/test/units/testsuite-36.sh
+@@ -72,7 +72,7 @@ checkNUMA() {
+ writePID1NUMAPolicy() {
+     cat >"$confDir/numa.conf" <<EOF
+ [Manager]
+-NUMAPolicy=${1:?missing argument: NUMAPolicy}
++NUMAPolicy=${1:?}
+ NUMAMask=${2:-""}
+ EOF
+ }
+@@ -85,7 +85,7 @@ writeTestUnit() {
+ writeTestUnitNUMAPolicy() {
+     cat >"$testUnitNUMAConf" <<EOF
+ [Service]
+-NUMAPolicy=${1:?missing argument: NUMAPolicy}
++NUMAPolicy=${1:?}
+ NUMAMask=${2:-""}
+ EOF
+     systemctl daemon-reload
+@@ -106,25 +106,25 @@ pid1ReloadWithJournal() {
+ 
+ pid1StartUnitWithStrace() {
+     startStrace '-f'
+-    systemctl start "${1:?missing unit name}"
++    systemctl start "${1:?}"
+     sleep $sleepAfterStart
+     stopStrace
+ }
+ 
+ pid1StartUnitWithJournal() {
+     startJournalctl
+-    systemctl start "${1:?missing unit name}"
++    systemctl start "${1:?}"
+     sleep $sleepAfterStart
+     stopJournalctl
+ }
+ 
+ pid1StopUnit() {
+-    systemctl stop "${1:?missing unit name}"
++    systemctl stop "${1:?}"
+ }
+ 
+ systemctlCheckNUMAProperties() {
+-    local UNIT_NAME="${1:?missing unit name}"
+-    local NUMA_POLICY="${2:?missing NUMAPolicy}"
++    local UNIT_NAME="${1:?}"
++    local NUMA_POLICY="${2:?}"
+     local NUMA_MASK="${3:-""}"
+     local LOGFILE
+ 
+diff --git a/test/units/testsuite-46.sh b/test/units/testsuite-46.sh
+index c3e57cec95..61ee921151 100755
+--- a/test/units/testsuite-46.sh
++++ b/test/units/testsuite-46.sh
+@@ -15,7 +15,7 @@ inspect() {
+     # avoid unexpected fails. To see the full outputs of both homectl &
+     # userdbctl (for debugging purposes) drop the fields just before the
+     # comparison.
+-    local USERNAME="${1:?missing argument}"
++    local USERNAME="${1:?}"
+     homectl inspect "$USERNAME" | tee /tmp/a
+     userdbctl user "$USERNAME" | tee /tmp/b
+ 
+diff --git a/tools/check-directives.sh b/tools/check-directives.sh
+index 0661da4d3b..af846c4d73 100755
+--- a/tools/check-directives.sh
++++ b/tools/check-directives.sh
+@@ -3,8 +3,8 @@
+ set -eu
+ set -o pipefail
+ 
+-SOURCE_ROOT="${1:?Missing argument: project source root}"
+-BUILD_ROOT="${2:?Missing argument: project build root}"
++SOURCE_ROOT="${1:?}"
++BUILD_ROOT="${2:?}"
+ 
+ command -v gawk &>/dev/null || exit 77
+ 
diff --git a/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch b/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch
new file mode 100644
index 0000000..8f4ab69
--- /dev/null
+++ b/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch
@@ -0,0 +1,56 @@
+From 3e31fc66a206c272e7f73581c5ca752b4439fec3 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 21 Jun 2022 12:09:35 +0200
+Subject: [PATCH] test: allow overriding $QEMU_MEM when running w/ ASan
+
+(cherry picked from commit dc350e78fe66ae8698574202b2e30e5d650219ec)
+
+Related: #2087652
+---
+ test/TEST-36-NUMAPOLICY/test.sh | 2 +-
+ test/test-functions             | 5 ++---
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh
+index 5f38bf1009..7909b1dce3 100755
+--- a/test/TEST-36-NUMAPOLICY/test.sh
++++ b/test/TEST-36-NUMAPOLICY/test.sh
+@@ -9,7 +9,7 @@ TEST_NO_NSPAWN=1
+ . "${TEST_BASE_DIR:?}/test-functions"
+ 
+ if qemu_min_version "5.2.0"; then
+-    QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?} -numa node,memdev=mem0,nodeid=0"
++    QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:-512M} -numa node,memdev=mem0,nodeid=0"
+ else
+     QEMU_OPTIONS="-numa node,nodeid=0"
+ fi
+diff --git a/test/test-functions b/test/test-functions
+index 079a7249e4..98efd047d7 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -30,7 +30,6 @@ TIMED_OUT=  # will be 1 after run_* if *_TIMEOUT is set and test timed out
+ [[ "$LOOKS_LIKE_SUSE" ]] && FSTYPE="${FSTYPE:-btrfs}" || FSTYPE="${FSTYPE:-ext4}"
+ UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}"
+ EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}"
+-QEMU_MEM="${QEMU_MEM:-512M}"
+ # Note that defining a different IMAGE_NAME in a test setup script will only result
+ # in default.img being copied and renamed. It can then be extended by defining
+ # a test_append_files() function. The $1 parameter will be the root directory.
+@@ -255,7 +254,7 @@ if get_bool "$IS_BUILT_WITH_ASAN"; then
+     STRIP_BINARIES=no
+     SKIP_INITRD="${SKIP_INITRD:-yes}"
+     PATH_TO_INIT=$ROOTLIBDIR/systemd-under-asan
+-    QEMU_MEM="2048M"
++    QEMU_MEM="${QEMU_MEM:-2G}"
+     QEMU_SMP="${QEMU_SMP:-4}"
+ 
+     # We need to correctly distinguish between gcc's and clang's ASan DSOs.
+@@ -444,7 +443,7 @@ run_qemu() {
+     qemu_options+=(
+         -smp "$QEMU_SMP"
+         -net none
+-        -m "$QEMU_MEM"
++        -m "${QEMU_MEM:-512M}"
+         -nographic
+         -kernel "$KERNEL_BIN"
+         -drive "format=raw,cache=unsafe,file=$image"
diff --git a/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch b/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch
new file mode 100644
index 0000000..fbe3762
--- /dev/null
+++ b/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch
@@ -0,0 +1,39 @@
+From a2c46d33809334614f93964b1707b01cbe2e05a5 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 22 Jun 2022 11:09:58 +0200
+Subject: [PATCH] test: don't test buses we don't ship
+
+rhel-only
+
+Related: #2087652
+---
+ test/units/testsuite-21.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh
+index e9bf18603a..bb2b754f35 100755
+--- a/test/units/testsuite-21.sh
++++ b/test/units/testsuite-21.sh
+@@ -27,18 +27,18 @@ systemctl log-level info
+ # TODO
+ #   * check for possibly newly introduced buses?
+ BUS_LIST=(
+-    org.freedesktop.home1
++#    org.freedesktop.home1
+     org.freedesktop.hostname1
+     org.freedesktop.import1
+     org.freedesktop.locale1
+     org.freedesktop.login1
+     org.freedesktop.machine1
+-    org.freedesktop.network1
+-    org.freedesktop.portable1
++#    org.freedesktop.network1
++#    org.freedesktop.portable1
+     org.freedesktop.resolve1
+     org.freedesktop.systemd1
+     org.freedesktop.timedate1
+-    org.freedesktop.timesync1
++#    org.freedesktop.timesync1
+ )
+ 
+ # systemd-oomd requires PSI
diff --git a/SOURCES/0135-shutdown-get-only-active-md-arrays.patch b/SOURCES/0135-shutdown-get-only-active-md-arrays.patch
new file mode 100644
index 0000000..93e24b5
--- /dev/null
+++ b/SOURCES/0135-shutdown-get-only-active-md-arrays.patch
@@ -0,0 +1,68 @@
+From 00ee9938c9c2333dc445b44e475974a3d3e37c10 Mon Sep 17 00:00:00 2001
+From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
+Date: Tue, 29 Mar 2022 12:49:54 +0200
+Subject: [PATCH] shutdown: get only active md arrays.
+
+Current md_list_get() implementation filters all block devices, started from
+"md*". This is ambiguous because list could contain:
+- partitions created upon md device (mdXpY)
+- external metadata container- specific type of md array.
+
+For partitions there is no issue, because they aren't handle STOP_ARRAY
+ioctl sent later. It generates misleading errors only.
+
+Second case is more problematic because containers are not locked in kernel.
+They are stopped even if container member array is active. For that reason
+reboot or shutdown flow could be blocked because metadata manager cannot be
+restarted after switch root on shutdown.
+
+Add filters to remove partitions and containers from md_list. Partitions
+can be excluded by DEVTYPE. Containers are determined by MD_LEVEL
+property, we are excluding all with "container" value.
+
+Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
+(cherry picked from commit 3a3b022d2cc112803ea7b9beea98bbcad110368a)
+
+Resolves: #2047682
+---
+ src/shutdown/umount.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/src/shutdown/umount.c b/src/shutdown/umount.c
+index f5a2cb20c1..6b08d9de74 100644
+--- a/src/shutdown/umount.c
++++ b/src/shutdown/umount.c
+@@ -352,9 +352,14 @@ static int md_list_get(MountPoint **head) {
+         if (r < 0)
+                 return r;
+ 
++        /* Filter out partitions. */
++        r = sd_device_enumerator_add_match_property(e, "DEVTYPE", "disk");
++        if (r < 0)
++                return r;
++
+         FOREACH_DEVICE(e, d) {
+                 _cleanup_free_ char *p = NULL;
+-                const char *dn;
++                const char *dn, *md_level;
+                 MountPoint *m;
+                 dev_t devnum;
+ 
+@@ -362,6 +367,17 @@ static int md_list_get(MountPoint **head) {
+                     sd_device_get_devname(d, &dn) < 0)
+                         continue;
+ 
++                r = sd_device_get_property_value(d, "MD_LEVEL", &md_level);
++                if (r < 0) {
++                        log_warning_errno(r, "Failed to get MD_LEVEL property for %s, ignoring: %m", dn);
++                        continue;
++                }
++
++                /* MD "containers" are a special type of MD devices, used for external metadata.
++                 * Since it doesn't provide RAID functionality in itself we don't need to stop it. */
++                if (streq(md_level, "container"))
++                        continue;
++
+                 p = strdup(dn);
+                 if (!p)
+                         return -ENOMEM;
diff --git a/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch b/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch
new file mode 100644
index 0000000..8625af6
--- /dev/null
+++ b/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch
@@ -0,0 +1,276 @@
+From 52af91cfd0eece566cb2b6877e622b16289525a4 Mon Sep 17 00:00:00 2001
+From: Jan Janssen <medhefgo@web.de>
+Date: Wed, 19 Jan 2022 10:15:36 +0100
+Subject: [PATCH] bus: Use OrderedSet for introspection
+
+Otherwise, the generated xml files are not reproducible.
+
+(cherry picked from commit acac88340ace3cd631126eebb6d0390cd54e8231)
+
+Resolves: #2068131
+---
+ src/libsystemd/sd-bus/bus-introspect.c |  4 +--
+ src/libsystemd/sd-bus/bus-introspect.h |  4 +--
+ src/libsystemd/sd-bus/bus-objects.c    | 45 +++++++++++++-------------
+ src/shared/bus-object.c                |  4 +--
+ 4 files changed, 28 insertions(+), 29 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c
+index b9ef6af631..eed0dae82f 100644
+--- a/src/libsystemd/sd-bus/bus-introspect.c
++++ b/src/libsystemd/sd-bus/bus-introspect.c
+@@ -110,7 +110,7 @@ static int set_interface_name(struct introspect *intro, const char *interface_na
+         return free_and_strdup(&intro->interface_name, interface_name);
+ }
+ 
+-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix) {
++int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix) {
+         char *node;
+ 
+         assert(i);
+@@ -118,7 +118,7 @@ int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefi
+ 
+         assert_se(set_interface_name(i, NULL) >= 0);
+ 
+-        while ((node = set_steal_first(s))) {
++        while ((node = ordered_set_steal_first(s))) {
+                 const char *e;
+ 
+                 e = object_path_startswith(node, prefix);
+diff --git a/src/libsystemd/sd-bus/bus-introspect.h b/src/libsystemd/sd-bus/bus-introspect.h
+index 34f32a4cf9..19e3ef09e2 100644
+--- a/src/libsystemd/sd-bus/bus-introspect.h
++++ b/src/libsystemd/sd-bus/bus-introspect.h
+@@ -5,7 +5,7 @@
+ 
+ #include "sd-bus.h"
+ 
+-#include "set.h"
++#include "ordered-set.h"
+ 
+ struct introspect {
+         FILE *f;
+@@ -17,7 +17,7 @@ struct introspect {
+ 
+ int introspect_begin(struct introspect *i, bool trusted);
+ int introspect_write_default_interfaces(struct introspect *i, bool object_manager);
+-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix);
++int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix);
+ int introspect_write_interface(
+                 struct introspect *i,
+                 const char *interface_name,
+diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
+index bf69539062..40158a7326 100644
+--- a/src/libsystemd/sd-bus/bus-objects.c
++++ b/src/libsystemd/sd-bus/bus-objects.c
+@@ -9,7 +9,6 @@
+ #include "bus-slot.h"
+ #include "bus-type.h"
+ #include "missing_capability.h"
+-#include "set.h"
+ #include "string-util.h"
+ #include "strv.h"
+ 
+@@ -99,7 +98,7 @@ static int add_enumerated_to_set(
+                 sd_bus *bus,
+                 const char *prefix,
+                 struct node_enumerator *first,
+-                Set *s,
++                OrderedSet *s,
+                 sd_bus_error *error) {
+ 
+         struct node_enumerator *c;
+@@ -146,7 +145,7 @@ static int add_enumerated_to_set(
+                                 continue;
+                         }
+ 
+-                        r = set_consume(s, *k);
++                        r = ordered_set_consume(s, *k);
+                         if (r == -EEXIST)
+                                 r = 0;
+                 }
+@@ -171,7 +170,7 @@ static int add_subtree_to_set(
+                 const char *prefix,
+                 struct node *n,
+                 unsigned flags,
+-                Set *s,
++                OrderedSet *s,
+                 sd_bus_error *error) {
+ 
+         struct node *i;
+@@ -198,7 +197,7 @@ static int add_subtree_to_set(
+                 if (!t)
+                         return -ENOMEM;
+ 
+-                r = set_consume(s, t);
++                r = ordered_set_consume(s, t);
+                 if (r < 0 && r != -EEXIST)
+                         return r;
+ 
+@@ -220,10 +219,10 @@ static int get_child_nodes(
+                 const char *prefix,
+                 struct node *n,
+                 unsigned flags,
+-                Set **_s,
++                OrderedSet **_s,
+                 sd_bus_error *error) {
+ 
+-        Set *s = NULL;
++        OrderedSet *s = NULL;
+         int r;
+ 
+         assert(bus);
+@@ -231,13 +230,13 @@ static int get_child_nodes(
+         assert(n);
+         assert(_s);
+ 
+-        s = set_new(&string_hash_ops);
++        s = ordered_set_new(&string_hash_ops);
+         if (!s)
+                 return -ENOMEM;
+ 
+         r = add_subtree_to_set(bus, prefix, n, flags, s, error);
+         if (r < 0) {
+-                set_free_free(s);
++                ordered_set_free_free(s);
+                 return r;
+         }
+ 
+@@ -937,7 +936,7 @@ int introspect_path(
+                 char **ret,
+                 sd_bus_error *error) {
+ 
+-        _cleanup_set_free_free_ Set *s = NULL;
++        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
+         _cleanup_(introspect_free) struct introspect intro = {};
+         struct node_vtable *c;
+         bool empty;
+@@ -963,7 +962,7 @@ int introspect_path(
+         if (r < 0)
+                 return r;
+ 
+-        empty = set_isempty(s);
++        empty = ordered_set_isempty(s);
+ 
+         LIST_FOREACH(vtables, c, n->vtables) {
+                 if (require_fallback && !c->is_fallback)
+@@ -1233,7 +1232,7 @@ static int process_get_managed_objects(
+ 
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+-        _cleanup_set_free_free_ Set *s = NULL;
++        _cleanup_ordered_set_free_free_ OrderedSet *s = NULL;
+         char *path;
+         int r;
+ 
+@@ -1263,7 +1262,7 @@ static int process_get_managed_objects(
+         if (r < 0)
+                 return r;
+ 
+-        SET_FOREACH(path, s) {
++        ORDERED_SET_FOREACH(path, s) {
+                 r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error);
+                 if (r < 0)
+                         return bus_maybe_reply_error(m, r, &error);
+@@ -2352,7 +2351,7 @@ _public_ int sd_bus_emit_properties_changed(
+ static int object_added_append_all_prefix(
+                 sd_bus *bus,
+                 sd_bus_message *m,
+-                Set *s,
++                OrderedSet *s,
+                 const char *prefix,
+                 const char *path,
+                 bool require_fallback) {
+@@ -2392,10 +2391,10 @@ static int object_added_append_all_prefix(
+                          * skip it on any of its parents. The child vtables
+                          * always fully override any conflicting vtables of
+                          * any parent node. */
+-                        if (set_get(s, c->interface))
++                        if (ordered_set_get(s, c->interface))
+                                 continue;
+ 
+-                        r = set_put(s, c->interface);
++                        r = ordered_set_put(s, c->interface);
+                         if (r < 0)
+                                 return r;
+ 
+@@ -2441,7 +2440,7 @@ static int object_added_append_all_prefix(
+ }
+ 
+ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
+-        _cleanup_set_free_ Set *s = NULL;
++        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
+         _cleanup_free_ char *prefix = NULL;
+         size_t pl;
+         int r;
+@@ -2465,7 +2464,7 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p
+          * a parent that were overwritten by a child.
+          */
+ 
+-        s = set_new(&string_hash_ops);
++        s = ordered_set_new(&string_hash_ops);
+         if (!s)
+                 return -ENOMEM;
+ 
+@@ -2572,7 +2571,7 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) {
+ static int object_removed_append_all_prefix(
+                 sd_bus *bus,
+                 sd_bus_message *m,
+-                Set *s,
++                OrderedSet *s,
+                 const char *prefix,
+                 const char *path,
+                 bool require_fallback) {
+@@ -2605,7 +2604,7 @@ static int object_removed_append_all_prefix(
+                  * skip it on any of its parents. The child vtables
+                  * always fully override any conflicting vtables of
+                  * any parent node. */
+-                if (set_get(s, c->interface))
++                if (ordered_set_get(s, c->interface))
+                         continue;
+ 
+                 r = node_vtable_get_userdata(bus, path, c, &u, &error);
+@@ -2616,7 +2615,7 @@ static int object_removed_append_all_prefix(
+                 if (r == 0)
+                         continue;
+ 
+-                r = set_put(s, c->interface);
++                r = ordered_set_put(s, c->interface);
+                 if (r < 0)
+                         return r;
+ 
+@@ -2631,7 +2630,7 @@ static int object_removed_append_all_prefix(
+ }
+ 
+ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path) {
+-        _cleanup_set_free_ Set *s = NULL;
++        _cleanup_ordered_set_free_ OrderedSet *s = NULL;
+         _cleanup_free_ char *prefix = NULL;
+         size_t pl;
+         int r;
+@@ -2642,7 +2641,7 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char
+ 
+         /* see sd_bus_emit_object_added() for details */
+ 
+-        s = set_new(&string_hash_ops);
++        s = ordered_set_new(&string_hash_ops);
+         if (!s)
+                 return -ENOMEM;
+ 
+diff --git a/src/shared/bus-object.c b/src/shared/bus-object.c
+index f2e53913fb..4ed5215e3d 100644
+--- a/src/shared/bus-object.c
++++ b/src/shared/bus-object.c
+@@ -156,10 +156,10 @@ int bus_introspect_implementations(
+         if (impl != main_impl)
+                 bus_introspect_implementation(&intro, impl);
+ 
+-        _cleanup_set_free_ Set *nodes = NULL;
++        _cleanup_ordered_set_free_ OrderedSet *nodes = NULL;
+ 
+         for (size_t i = 0; impl->children && impl->children[i]; i++) {
+-                r = set_put_strdup(&nodes, impl->children[i]->path);
++                r = ordered_set_put_strdup(&nodes, impl->children[i]->path);
+                 if (r < 0)
+                         return log_oom();
+         }
diff --git a/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch b/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch
new file mode 100644
index 0000000..97de43e
--- /dev/null
+++ b/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch
@@ -0,0 +1,160 @@
+From 5cfd162864213c5247d97ea31cfacce98b1caefc Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Fri, 10 Jun 2022 15:07:01 +0200
+Subject: [PATCH] logind-session-dbus: allow to set display name via dbus
+
+Currently, the only way to set display name of a graphical session is to
+pass it to CreateSession(). But modern display managers like gdm start
+the display server as part of the user session, which means that the
+display name isn't known yet when the session is being created. Hence,
+let's make it possible to set it later.
+
+(cherry picked from commit 4885d7490b23e08d8444e5a68927ce9ce8727e5a)
+
+Resolves: #2100340
+---
+ man/org.freedesktop.login1.xml        |  8 ++++++++
+ src/login/logind-session-dbus.c       | 29 +++++++++++++++++++++++++++
+ src/login/logind-session.c            | 20 ++++++++++++++++++
+ src/login/logind-session.h            |  1 +
+ src/login/org.freedesktop.login1.conf |  4 ++++
+ 5 files changed, 62 insertions(+)
+
+diff --git a/man/org.freedesktop.login1.xml b/man/org.freedesktop.login1.xml
+index d25287b18b..c11324ee3b 100644
+--- a/man/org.freedesktop.login1.xml
++++ b/man/org.freedesktop.login1.xml
+@@ -1045,6 +1045,7 @@ node /org/freedesktop/login1/session/1 {
+       TakeControl(in  b force);
+       ReleaseControl();
+       SetType(in  s type);
++      SetDisplay(in  s display);
+       TakeDevice(in  u major,
+                  in  u minor,
+                  out h fd,
+@@ -1142,6 +1143,8 @@ node /org/freedesktop/login1/session/1 {
+ 
+     <variablelist class="dbus-method" generated="True" extra-ref="SetType()"/>
+ 
++    <variablelist class="dbus-method" generated="True" extra-ref="SetDisplay()"/>
++
+     <variablelist class="dbus-method" generated="True" extra-ref="TakeDevice()"/>
+ 
+     <variablelist class="dbus-method" generated="True" extra-ref="ReleaseDevice()"/>
+@@ -1238,6 +1241,11 @@ node /org/freedesktop/login1/session/1 {
+       connection. This should help prevent a session from entering an inconsistent state, for example if the
+       controller crashes. The only argument <varname>type</varname> is the new session type.</para>
+ 
++      <para><function>SetDisplay()</function> allows the display name of the graphical session to be changed. This is
++      useful if the display server is started as part of the session. It can only be called by session's current
++      controller. If <function>TakeControl()</function> has not been called, this method will fail. The only argument
++      <varname>display</varname> is the new display name.</para>
++
+       <para><function>TakeDevice()</function> allows a session controller to get a file descriptor for a
+       specific device. Pass in the major and minor numbers of the character device and
+       <filename>systemd-logind</filename> will return a file descriptor for the device. Only a limited set of
+diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
+index ff4cd0a631..5480d7b2f4 100644
+--- a/src/login/logind-session-dbus.c
++++ b/src/login/logind-session-dbus.c
+@@ -413,6 +413,30 @@ static int method_set_type(sd_bus_message *message, void *userdata, sd_bus_error
+         return sd_bus_reply_method_return(message, NULL);
+ }
+ 
++static int method_set_display(sd_bus_message *message, void *userdata, sd_bus_error *error) {
++        Session *s = ASSERT_PTR(userdata);
++        const char *display;
++        int r;
++
++        assert(message);
++
++        r = sd_bus_message_read(message, "s", &display);
++        if (r < 0)
++                return r;
++
++        if (!session_is_controller(s, sd_bus_message_get_sender(message)))
++                return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You must be in control of this session to set display");
++
++        if (!SESSION_TYPE_IS_GRAPHICAL(s->type))
++                return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Setting display is only supported for graphical sessions");
++
++        r = session_set_display(s, display);
++        if (r < 0)
++                return r;
++
++        return sd_bus_reply_method_return(message, NULL);
++}
++
+ static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+         Session *s = userdata;
+         uint32_t major, minor;
+@@ -901,6 +925,11 @@ static const sd_bus_vtable session_vtable[] = {
+                                 SD_BUS_NO_RESULT,
+                                 method_set_type,
+                                 SD_BUS_VTABLE_UNPRIVILEGED),
++        SD_BUS_METHOD_WITH_ARGS("SetDisplay",
++                                SD_BUS_ARGS("s", display),
++                                SD_BUS_NO_RESULT,
++                                method_set_display,
++                                SD_BUS_VTABLE_UNPRIVILEGED),
+         SD_BUS_METHOD_WITH_ARGS("TakeDevice",
+                                 SD_BUS_ARGS("u", major, "u", minor),
+                                 SD_BUS_RESULT("h", fd, "b", inactive),
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index ab98a5055d..a052596e57 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -1044,6 +1044,26 @@ void session_set_type(Session *s, SessionType t) {
+         session_send_changed(s, "Type", NULL);
+ }
+ 
++int session_set_display(Session *s, const char *display) {
++        int r;
++
++        assert(s);
++        assert(display);
++
++        if (streq(s->display, display))
++                return 0;
++
++        r = free_and_strdup(&s->display, display);
++        if (r < 0)
++                return r;
++
++        session_save(s);
++
++        session_send_changed(s, "Display", NULL);
++
++        return 1;
++}
++
+ static int session_dispatch_fifo(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
+         Session *s = userdata;
+ 
+diff --git a/src/login/logind-session.h b/src/login/logind-session.h
+index 5c35071dc5..6b6ac2d573 100644
+--- a/src/login/logind-session.h
++++ b/src/login/logind-session.h
+@@ -137,6 +137,7 @@ int session_set_idle_hint(Session *s, bool b);
+ int session_get_locked_hint(Session *s);
+ void session_set_locked_hint(Session *s, bool b);
+ void session_set_type(Session *s, SessionType t);
++int session_set_display(Session *s, const char *display);
+ int session_create_fifo(Session *s);
+ int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error);
+ int session_stop(Session *s, bool force);
+diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf
+index 95d2ef0f06..6113b64aa7 100644
+--- a/src/login/org.freedesktop.login1.conf
++++ b/src/login/org.freedesktop.login1.conf
+@@ -346,6 +346,10 @@
+                        send_interface="org.freedesktop.login1.User"
+                        send_member="Kill"/>
+ 
++                <allow send_destination="org.freedesktop.login1"
++                       send_interface="org.freedesktop.login1.Session"
++                       send_member="SetDisplay"/>
++
+                 <allow receive_sender="org.freedesktop.login1"/>
+         </policy>
+ 
diff --git a/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch b/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch
new file mode 100644
index 0000000..3d1f9cd
--- /dev/null
+++ b/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch
@@ -0,0 +1,35 @@
+From 433d2036ecf211e9a7c85d57e4c91d8723f80cbb Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 13 Jul 2022 11:12:36 +0200
+Subject: [PATCH] ci: limit which env variables we pass through `sudo`
+
+to work around #23987.
+
+(cherry picked from commit d46e7c7cfd6c286a38298c067f16ac784c2a26f0)
+
+Related: #2087652
+---
+ .github/workflows/unit_tests.yml | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
+index 2afde5d59d..58b7b7cdb2 100644
+--- a/.github/workflows/unit_tests.yml
++++ b/.github/workflows/unit_tests.yml
+@@ -28,8 +28,14 @@ jobs:
+       - name: Repository checkout
+         uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
+       - name: Install build dependencies
+-        run: sudo -E .github/workflows/unit_tests.sh SETUP
++        run: |
++          # Drop XDG_* stuff from /etc/environment, so we don't get the user
++          # XDG_* variables when running under sudo
++          sudo sed -i '/^XDG_/d' /etc/environment
++          # Pass only specific env variables through sudo, to avoid having
++          # the already existing XDG_* stuff on the "other side"
++          sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh SETUP
+       - name: Build & test (${{ matrix.run_phase }}-${{ matrix.cryptolib }})
+-        run: sudo -E .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }}
++        run: sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }}
+         env:
+           CRYPTOLIB: ${{ matrix.cryptolib }}
diff --git a/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch b/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch
new file mode 100644
index 0000000..246526b
--- /dev/null
+++ b/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch
@@ -0,0 +1,104 @@
+From 09eeda8d25f0f45d2c545c05fd8ae84404c83d83 Mon Sep 17 00:00:00 2001
+From: Jan Macku <jamacku@redhat.com>
+Date: Tue, 19 Jul 2022 12:29:28 +0200
+Subject: [PATCH] ci(Mergify): Add `ci-waived` logic
+
+RHEL-only
+
+Related: #2087652
+---
+ .mergify.yml | 66 ++++++++++++++++++++++++++++------------------------
+ 1 file changed, 35 insertions(+), 31 deletions(-)
+
+diff --git a/.mergify.yml b/.mergify.yml
+index b7852b201c..be25e52c76 100644
+--- a/.mergify.yml
++++ b/.mergify.yml
+@@ -4,6 +4,7 @@
+ pull_request_rules:
+   - name: Add `needs-ci` label on CI fail
+     conditions:
++      - label!=ci-waived
+       - or:
+         # Build test
+         - -check-success=build (gcc, 10, bfd)
+@@ -31,9 +32,9 @@ pull_request_rules:
+         - and:    
+           - "-check-success=LGTM analysis: C/C++"
+           - "-check-neutral=LGTM analysis: C/C++"
+-      # Packit
+-      - -check-success=rpm-build:centos-stream-9-aarch64
+-      - -check-success=rpm-build:centos-stream-9-x86_64
++        # Packit
++        - -check-success=rpm-build:centos-stream-9-aarch64
++        - -check-success=rpm-build:centos-stream-9-x86_64
+     actions:
+       label:
+         add:
+@@ -41,35 +42,38 @@ pull_request_rules:
+           
+   - name: Remove `needs-ci` label on CI success
+     conditions:
+-      # Build test
+-      - check-success=build (gcc, 10, bfd)
+-      - check-success=build (gcc, 11, gold)
+-      - check-success=build (clang, 11, bfd)
+-      - check-success=build (clang, 12, gold)
+-      - check-success=build (clang, 13, lld)
+-      # Unit tests
+-      - check-success=build (GCC, auto)
+-      - check-success=build (GCC_ASAN_UBSAN, auto)
+-      - check-success=build (CLANG, auto)
+-      - check-success=build (CLANG_ASAN_UBSAN, auto)
+-      - check-success=build (GCC, openssl)
+-      - check-success=build (CLANG, gcrypt)
+-      # CentOS CI
+-      - check-success=CentOS CI (CentOS Stream 9)
+-      - check-success=CentOS CI (CentOS Stream 9 + sanitizers)
+-      # LGTM
+       - or:
+-        - "check-success=LGTM analysis: JavaScript"
+-        - "check-neutral=LGTM analysis: JavaScript"
+-      - or:
+-        - "check-success=LGTM analysis: Python"
+-        - "check-neutral=LGTM analysis: Python"
+-      - or:    
+-        - "check-success=LGTM analysis: C/C++"
+-        - "check-neutral=LGTM analysis: C/C++"
+-      # Packit
+-      - check-success=rpm-build:centos-stream-9-aarch64
+-      - check-success=rpm-build:centos-stream-9-x86_64
++        - label=ci-waived
++        - and:
++          # Build test
++          - check-success=build (gcc, 10, bfd)
++          - check-success=build (gcc, 11, gold)
++          - check-success=build (clang, 11, bfd)
++          - check-success=build (clang, 12, gold)
++          - check-success=build (clang, 13, lld)
++          # Unit tests
++          - check-success=build (GCC, auto)
++          - check-success=build (GCC_ASAN_UBSAN, auto)
++          - check-success=build (CLANG, auto)
++          - check-success=build (CLANG_ASAN_UBSAN, auto)
++          - check-success=build (GCC, openssl)
++          - check-success=build (CLANG, gcrypt)
++          # CentOS CI
++          - check-success=CentOS CI (CentOS Stream 9)
++          - check-success=CentOS CI (CentOS Stream 9 + sanitizers)
++          # LGTM
++          - or:
++            - "check-success=LGTM analysis: JavaScript"
++            - "check-neutral=LGTM analysis: JavaScript"
++          - or:
++            - "check-success=LGTM analysis: Python"
++            - "check-neutral=LGTM analysis: Python"
++          - or:    
++            - "check-success=LGTM analysis: C/C++"
++            - "check-neutral=LGTM analysis: C/C++"
++          # Packit
++          - check-success=rpm-build:centos-stream-9-aarch64
++          - check-success=rpm-build:centos-stream-9-x86_64
+     actions:
+       label:
+         remove:
diff --git a/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch b/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch
new file mode 100644
index 0000000..8f3042a
--- /dev/null
+++ b/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch
@@ -0,0 +1,36 @@
+From 46118fd04a49b25bc0c686b07d1b26309ab4e395 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 06:46:25 +0900
+Subject: [PATCH] json: use unsigned for refernce counter
+
+For other places, we use unsigned for reference counter.
+
+(cherry picked from commit 6dd18b34cf53ab663140f43f8814904c71cc29f7)
+
+Related: #2087652
+---
+ src/shared/json.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/json.c b/src/shared/json.c
+index 6d23bdf4f9..bcc109abc2 100644
+--- a/src/shared/json.c
++++ b/src/shared/json.c
+@@ -41,7 +41,7 @@ assert_cc(DEPTH_MAX <= UINT16_MAX);
+ 
+ typedef struct JsonSource {
+         /* When we parse from a file or similar, encodes the filename, to indicate the source of a json variant */
+-        size_t n_ref;
++        unsigned n_ref;
+         unsigned max_line;
+         unsigned max_column;
+         char name[];
+@@ -53,7 +53,7 @@ struct JsonVariant {
+                 /* We either maintain a reference counter for this variant itself, or we are embedded into an
+                  * array/object, in which case only that surrounding object is ref-counted. (If 'embedded' is false,
+                  * see below.) */
+-                size_t n_ref;
++                unsigned n_ref;
+ 
+                 /* If this JsonVariant is part of an array/object, then this field points to the surrounding
+                  * JSON_VARIANT_ARRAY/JSON_VARIANT_OBJECT object. (If 'embedded' is true, see below.) */
diff --git a/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch b/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch
new file mode 100644
index 0000000..4c7e15f
--- /dev/null
+++ b/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch
@@ -0,0 +1,31 @@
+From eb7eca006b5f290481720dc4d7fcdba88d8613cb Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 06:54:50 +0900
+Subject: [PATCH] macro: check over flow in reference counter
+
+(cherry picked from commit c8431e9e35a904673cf659fd238cb63b3c3896fc)
+
+Related: #2087652
+---
+ src/basic/macro.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/macro.h b/src/basic/macro.h
+index aa04039e80..e7dc83ddc5 100644
+--- a/src/basic/macro.h
++++ b/src/basic/macro.h
+@@ -387,8 +387,12 @@ static inline int __coverity_check_and_return__(int condition) {
+                 if (!p)                                         \
+                         return NULL;                            \
+                                                                 \
+-                assert(p->n_ref > 0);                           \
+-                p->n_ref++;                                     \
++                /* For type check. */                           \
++                unsigned *q = &p->n_ref;                        \
++                assert(*q > 0);                                 \
++                assert(*q < UINT_MAX);                          \
++                                                                \
++                (*q)++;                                         \
+                 return p;                                       \
+         }
+ 
diff --git a/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch b/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch
new file mode 100644
index 0000000..13b37c1
--- /dev/null
+++ b/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch
@@ -0,0 +1,34 @@
+From 4dcd6089addae3ef6b6c82e36b30b178a4261249 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:05:07 +0900
+Subject: [PATCH] sd-bus: fix reference counter to be incremented
+
+Fixes #23097.
+
+(cherry picked from commit b21f237d996c8c18991a68e1204f060d07dc4745)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/bus-track.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
+index bc36673b83..891fd0c899 100644
+--- a/src/libsystemd/sd-bus/bus-track.c
++++ b/src/libsystemd/sd-bus/bus-track.c
+@@ -191,12 +191,12 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
+         i = hashmap_get(track->names, name);
+         if (i) {
+                 if (track->recursive) {
+-                        unsigned k = track->n_ref + 1;
++                        unsigned k = i->n_ref + 1;
+ 
+-                        if (k < track->n_ref) /* Check for overflow */
++                        if (k < i->n_ref) /* Check for overflow */
+                                 return -EOVERFLOW;
+ 
+-                        track->n_ref = k;
++                        i->n_ref = k;
+                 }
+ 
+                 bus_track_remove_from_queue(track);
diff --git a/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch b/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch
new file mode 100644
index 0000000..53f7b4b
--- /dev/null
+++ b/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch
@@ -0,0 +1,105 @@
+From 6fcc3befd0ca9897071af071287e8758a30046f0 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:20:16 +0900
+Subject: [PATCH] sd-bus: introduce ref/unref function for track_item
+
+(cherry picked from commit c2d7dd35d2a8cda439384a385b0c1bec804b9b79)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/bus-track.c | 35 ++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 19 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
+index 891fd0c899..135dfddc5f 100644
+--- a/src/libsystemd/sd-bus/bus-track.c
++++ b/src/libsystemd/sd-bus/bus-track.c
+@@ -40,7 +40,6 @@ struct sd_bus_track {
+                  "arg0='", name, "'")
+ 
+ static struct track_item* track_item_free(struct track_item *i) {
+-
+         if (!i)
+                 return NULL;
+ 
+@@ -49,7 +48,8 @@ static struct track_item* track_item_free(struct track_item *i) {
+         return mfree(i);
+ }
+ 
+-DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_free);
++DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(struct track_item, track_item, track_item_free);
++DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_unref);
+ DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(track_item_hash_ops, char, string_hash_func, string_compare_func,
+                                               struct track_item, track_item_free);
+ 
+@@ -180,7 +180,7 @@ static int on_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus
+ }
+ 
+ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
+-        _cleanup_(track_item_freep) struct track_item *n = NULL;
++        _cleanup_(track_item_unrefp) struct track_item *n = NULL;
+         struct track_item *i;
+         const char *match;
+         int r;
+@@ -190,14 +190,8 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
+ 
+         i = hashmap_get(track->names, name);
+         if (i) {
+-                if (track->recursive) {
+-                        unsigned k = i->n_ref + 1;
+-
+-                        if (k < i->n_ref) /* Check for overflow */
+-                                return -EOVERFLOW;
+-
+-                        i->n_ref = k;
+-                }
++                if (track->recursive)
++                        track_item_ref(i);
+ 
+                 bus_track_remove_from_queue(track);
+                 return 0;
+@@ -207,9 +201,14 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
+         if (r < 0)
+                 return r;
+ 
+-        n = new0(struct track_item, 1);
++        n = new(struct track_item, 1);
+         if (!n)
+                 return -ENOMEM;
++
++        *n = (struct track_item) {
++                .n_ref = 1,
++        };
++
+         n->name = strdup(name);
+         if (!n->name)
+                 return -ENOMEM;
+@@ -241,8 +240,7 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) {
+                 return r;
+         }
+ 
+-        n->n_ref = 1;
+-        n = NULL;
++        TAKE_PTR(n);
+ 
+         bus_track_remove_from_queue(track);
+         track->modified = true;
+@@ -264,14 +262,13 @@ _public_ int sd_bus_track_remove_name(sd_bus_track *track, const char *name) {
+         i = hashmap_get(track->names, name);
+         if (!i)
+                 return -EUNATCH;
+-        if (i->n_ref <= 0)
+-                return -EUNATCH;
+ 
+-        i->n_ref--;
+-
+-        if (i->n_ref <= 0)
++        assert(i->n_ref >= 1);
++        if (i->n_ref <= 1)
+                 return bus_track_remove_name_fully(track, name);
+ 
++        track_item_unref(i);
++
+         return 1;
+ }
+ 
diff --git a/SOURCES/0144-sd-bus-do-not-read-unused-value.patch b/SOURCES/0144-sd-bus-do-not-read-unused-value.patch
new file mode 100644
index 0000000..c3387a5
--- /dev/null
+++ b/SOURCES/0144-sd-bus-do-not-read-unused-value.patch
@@ -0,0 +1,32 @@
+From 5f241b4af41402be5357d6ab10b4c54378363c89 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:25:09 +0900
+Subject: [PATCH] sd-bus: do not read unused value
+
+(cherry picked from commit 6a7ca27740be4229b4c9f540cd610b205ca5752c)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/bus-track.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
+index 135dfddc5f..1cbdb46f4c 100644
+--- a/src/libsystemd/sd-bus/bus-track.c
++++ b/src/libsystemd/sd-bus/bus-track.c
+@@ -165,13 +165,13 @@ DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_bus_track, sd_bus_track, track_free);
+ 
+ static int on_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+         sd_bus_track *track = userdata;
+-        const char *name, *old, *new;
++        const char *name;
+         int r;
+ 
+         assert(message);
+         assert(track);
+ 
+-        r = sd_bus_message_read(message, "sss", &name, &old, &new);
++        r = sd_bus_message_read(message, "sss", &name, NULL, NULL);
+         if (r < 0)
+                 return 0;
+ 
diff --git a/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch b/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch
new file mode 100644
index 0000000..6826818
--- /dev/null
+++ b/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch
@@ -0,0 +1,35 @@
+From f2ca27c7fa3e98cbb412871d7ea18b51e7f5f048 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:29:24 +0900
+Subject: [PATCH] sd-bus: do not return negative errno when unknown name is
+ specified
+
+When 'recursive' is false, then sd_bus_track_remove_name() does not
+return negative errno when unknown name is specified. Let's follow the
+same pattern for the case that 'recursive' is true.
+
+(cherry picked from commit 55bfacc6c33eaf3475762e71172b2ef504be5af8)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/bus-track.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
+index 1cbdb46f4c..c56bd03fc6 100644
+--- a/src/libsystemd/sd-bus/bus-track.c
++++ b/src/libsystemd/sd-bus/bus-track.c
+@@ -256,12 +256,9 @@ _public_ int sd_bus_track_remove_name(sd_bus_track *track, const char *name) {
+         if (!track) /* Treat a NULL track object as an empty track object */
+                 return 0;
+ 
+-        if (!track->recursive)
+-                return bus_track_remove_name_fully(track, name);
+-
+         i = hashmap_get(track->names, name);
+         if (!i)
+-                return -EUNATCH;
++                return 0;
+ 
+         assert(i->n_ref >= 1);
+         if (i->n_ref <= 1)
diff --git a/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch b/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch
new file mode 100644
index 0000000..80691c7
--- /dev/null
+++ b/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch
@@ -0,0 +1,25 @@
+From 73c3e230dd66bedc82fa6dbf020c8d24592a32be Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 08:00:20 +0900
+Subject: [PATCH] sd-bus: use hashmap_contains() and drop unnecessary cast
+
+(cherry picked from commit c399ed923d6fa4bf731455d485cac5f00e060806)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/bus-track.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c
+index c56bd03fc6..4c44162108 100644
+--- a/src/libsystemd/sd-bus/bus-track.c
++++ b/src/libsystemd/sd-bus/bus-track.c
+@@ -287,7 +287,7 @@ _public_ const char* sd_bus_track_contains(sd_bus_track *track, const char *name
+         if (!track) /* Let's consider a NULL object equivalent to an empty object */
+                 return NULL;
+ 
+-        return hashmap_get(track->names, (void*) name) ? name : NULL;
++        return hashmap_contains(track->names, name) ? name : NULL;
+ }
+ 
+ _public_ const char* sd_bus_track_first(sd_bus_track *track) {
diff --git a/SOURCES/0147-test-shorten-code-a-bit.patch b/SOURCES/0147-test-shorten-code-a-bit.patch
new file mode 100644
index 0000000..e640be2
--- /dev/null
+++ b/SOURCES/0147-test-shorten-code-a-bit.patch
@@ -0,0 +1,99 @@
+From 6ddb7fc35d7051627fa2772226e07296c28b316f Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:35:05 +0900
+Subject: [PATCH] test: shorten code a bit
+
+(cherry picked from commit 63ec7a849039fab830961fd7fee0c1e266735fc8)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/test-bus-track.c | 39 +++++++++-----------------
+ 1 file changed, 13 insertions(+), 26 deletions(-)
+
+diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c
+index 64aa88bb4f..238934a880 100644
+--- a/src/libsystemd/sd-bus/test-bus-track.c
++++ b/src/libsystemd/sd-bus/test-bus-track.c
+@@ -26,7 +26,6 @@ static int track_cb_x(sd_bus_track *t, void *userdata) {
+ }
+ 
+ static int track_cb_y(sd_bus_track *t, void *userdata) {
+-        int r;
+ 
+         log_error("TRACK CB Y");
+ 
+@@ -35,8 +34,7 @@ static int track_cb_y(sd_bus_track *t, void *userdata) {
+ 
+         /* We got disconnected, let's close everything */
+ 
+-        r = sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS);
+-        assert_se(r >= 0);
++        assert_se(sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS) >= 0);
+ 
+         return 0;
+ }
+@@ -51,8 +49,7 @@ int main(int argc, char *argv[]) {
+ 
+         test_setup_logging(LOG_INFO);
+ 
+-        r = sd_event_default(&event);
+-        assert_se(r >= 0);
++        assert_se(sd_event_default(&event) >= 0);
+ 
+         r = sd_bus_open_user(&a);
+         if (IN_SET(r, -ECONNREFUSED, -ENOENT, -ENOMEDIUM)) {
+@@ -63,43 +60,33 @@ int main(int argc, char *argv[]) {
+         }
+         assert_se(r >= 0);
+ 
+-        r = sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL) >= 0);
+ 
+         if (use_system_bus)
+-                r = sd_bus_open_system(&b);
++                assert_se(sd_bus_open_system(&b) >= 0);
+         else
+-                r = sd_bus_open_user(&b);
+-        assert_se(r >= 0);
++                assert_se(sd_bus_open_user(&b) >= 0);
+ 
+-        r = sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL) >= 0);
+ 
+         /* Watch b's name from a */
+-        r = sd_bus_track_new(a, &x, track_cb_x, NULL);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_track_new(a, &x, track_cb_x, NULL) >= 0);
+ 
+-        r = sd_bus_get_unique_name(b, &unique);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_get_unique_name(b, &unique) >= 0);
+ 
+-        r = sd_bus_track_add_name(x, unique);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_track_add_name(x, unique) >= 0);
+ 
+         /* Watch's a's own name from a */
+-        r = sd_bus_track_new(a, &y, track_cb_y, NULL);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_track_new(a, &y, track_cb_y, NULL) >= 0);
+ 
+-        r = sd_bus_get_unique_name(a, &unique);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_get_unique_name(a, &unique) >= 0);
+ 
+-        r = sd_bus_track_add_name(y, unique);
+-        assert_se(r >= 0);
++        assert_se(sd_bus_track_add_name(y, unique) >= 0);
+ 
+         /* Now make b's name disappear */
+         sd_bus_close(b);
+ 
+-        r = sd_event_loop(event);
+-        assert_se(r >= 0);
++        assert_se(sd_event_loop(event) >= 0);
+ 
+         assert_se(track_cb_called_x);
+         assert_se(track_cb_called_y);
diff --git a/SOURCES/0148-test-add-several-tests-for-track-item.patch b/SOURCES/0148-test-add-several-tests-for-track-item.patch
new file mode 100644
index 0000000..da0c5e3
--- /dev/null
+++ b/SOURCES/0148-test-add-several-tests-for-track-item.patch
@@ -0,0 +1,97 @@
+From 4895d281d18e244d8238c1f77e597ce43310531c Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 17 Apr 2022 07:58:45 +0900
+Subject: [PATCH] test: add several tests for track item
+
+(cherry picked from commit 056a18e465bedb1bd35ce0bf78831be168c636cb)
+
+Related: #2087652
+---
+ src/libsystemd/sd-bus/test-bus-track.c | 58 +++++++++++++++++++++++++-
+ 1 file changed, 57 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c
+index 238934a880..5604e84f52 100644
+--- a/src/libsystemd/sd-bus/test-bus-track.c
++++ b/src/libsystemd/sd-bus/test-bus-track.c
+@@ -10,6 +10,7 @@
+ 
+ static bool track_cb_called_x = false;
+ static bool track_cb_called_y = false;
++static bool track_destroy_called_z = false;
+ 
+ static int track_cb_x(sd_bus_track *t, void *userdata) {
+ 
+@@ -39,9 +40,17 @@ static int track_cb_y(sd_bus_track *t, void *userdata) {
+         return 0;
+ }
+ 
++static int track_cb_z(sd_bus_track *t, void *userdata) {
++        assert_not_reached();
++}
++
++static void track_destroy_z(void *userdata) {
++        track_destroy_called_z = true;
++}
++
+ int main(int argc, char *argv[]) {
+         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
+-        _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL;
++        _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL, *z = NULL;
+         _cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL;
+         bool use_system_bus = false;
+         const char *unique;
+@@ -83,6 +92,53 @@ int main(int argc, char *argv[]) {
+ 
+         assert_se(sd_bus_track_add_name(y, unique) >= 0);
+ 
++        /* Basic tests. */
++        assert_se(sd_bus_track_new(a, &z, track_cb_z, NULL) >= 0);
++
++        /* non-recursive case */
++        assert_se(sd_bus_track_set_recursive(z, false) >= 0);
++        assert_se(sd_bus_track_get_recursive(z) == 0);
++        assert_se(!sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 0);
++        assert_se(sd_bus_track_remove_name(z, unique) == 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_set_recursive(z, true) == -EBUSY);
++        assert_se(sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 1);
++        assert_se(sd_bus_track_remove_name(z, unique) == 1);
++        assert_se(!sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 0);
++        assert_se(sd_bus_track_remove_name(z, unique) == 0);
++
++        /* recursive case */
++        assert_se(sd_bus_track_set_recursive(z, true) >= 0);
++        assert_se(sd_bus_track_get_recursive(z) == 1);
++        assert_se(!sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 0);
++        assert_se(sd_bus_track_remove_name(z, unique) == 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_add_name(z, unique) >= 0);
++        assert_se(sd_bus_track_set_recursive(z, false) == -EBUSY);
++        assert_se(sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 3);
++        assert_se(sd_bus_track_remove_name(z, unique) == 1);
++        assert_se(sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 2);
++        assert_se(sd_bus_track_remove_name(z, unique) == 1);
++        assert_se(sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 1);
++        assert_se(sd_bus_track_remove_name(z, unique) == 1);
++        assert_se(!sd_bus_track_contains(z, unique));
++        assert_se(sd_bus_track_count_name(z, unique) == 0);
++        assert_se(sd_bus_track_remove_name(z, unique) == 0);
++
++        assert_se(sd_bus_track_set_destroy_callback(z, track_destroy_z) >= 0);
++        z = sd_bus_track_unref(z);
++        assert_se(track_destroy_called_z);
++
+         /* Now make b's name disappear */
+         sd_bus_close(b);
+ 
diff --git a/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch b/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch
new file mode 100644
index 0000000..edf5faa
--- /dev/null
+++ b/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch
@@ -0,0 +1,46 @@
+From 776aab7656db605a856d2d3e9225f23779da5483 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 6 May 2022 14:01:22 +0900
+Subject: [PATCH] core/slice: make slice_freezer_action() return 0 if freezing
+ state is unchanged
+
+Fixes #23278.
+
+(cherry picked from commit d171e72e7afa11b238ba20758384d223b0c76e39)
+
+Related: #2087652
+---
+ src/core/slice.c | 6 +-----
+ src/core/unit.c  | 2 ++
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/core/slice.c b/src/core/slice.c
+index 2e43c00119..c453aa033e 100644
+--- a/src/core/slice.c
++++ b/src/core/slice.c
+@@ -389,11 +389,7 @@ static int slice_freezer_action(Unit *s, FreezerAction action) {
+                         return r;
+         }
+ 
+-        r = unit_cgroup_freezer_action(s, action);
+-        if (r < 0)
+-                return r;
+-
+-        return 1;
++        return unit_cgroup_freezer_action(s, action);
+ }
+ 
+ static int slice_freeze(Unit *s) {
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 9cbed08987..aac87dcc7a 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -5822,6 +5822,8 @@ static int unit_freezer_action(Unit *u, FreezerAction action) {
+         if (r <= 0)
+                 return r;
+ 
++        assert(IN_SET(u->freezer_state, FREEZER_FREEZING, FREEZER_THAWING));
++
+         return 1;
+ }
+ 
diff --git a/SOURCES/0150-core-unit-fix-use-after-free.patch b/SOURCES/0150-core-unit-fix-use-after-free.patch
new file mode 100644
index 0000000..e308d5f
--- /dev/null
+++ b/SOURCES/0150-core-unit-fix-use-after-free.patch
@@ -0,0 +1,29 @@
+From b8ccf30c4654ed5697562842a8a608e627425370 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Mon, 9 May 2022 00:56:05 +0900
+Subject: [PATCH] core/unit: fix use-after-free
+
+Fixes #23312.
+
+(cherry picked from commit 734582830b58e000a26e18807ea277c18778573c)
+
+Related: #2087652
+---
+ src/core/unit.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/unit.c b/src/core/unit.c
+index aac87dcc7a..0eade13ee9 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -671,8 +671,8 @@ Unit* unit_free(Unit *u) {
+ 
+         unit_dequeue_rewatch_pids(u);
+ 
+-        sd_bus_slot_unref(u->match_bus_slot);
+-        sd_bus_track_unref(u->bus_track);
++        u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot);
++        u->bus_track = sd_bus_track_unref(u->bus_track);
+         u->deserialized_refs = strv_free(u->deserialized_refs);
+         u->pending_freezer_message = sd_bus_message_unref(u->pending_freezer_message);
+ 
diff --git a/SOURCES/0151-core-timer-fix-potential-use-after-free.patch b/SOURCES/0151-core-timer-fix-potential-use-after-free.patch
new file mode 100644
index 0000000..c83f10b
--- /dev/null
+++ b/SOURCES/0151-core-timer-fix-potential-use-after-free.patch
@@ -0,0 +1,25 @@
+From e9acfceb104c8f9ccec8b468b5d111844285f43a Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 10 May 2022 14:10:17 +0900
+Subject: [PATCH] core/timer: fix potential use-after-free
+
+(cherry picked from commit 756491af392a99c4286d876b0041535e50df80ad)
+
+Related: #2087652
+---
+ src/core/timer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/timer.c b/src/core/timer.c
+index 0dc49dd46b..b439802bc2 100644
+--- a/src/core/timer.c
++++ b/src/core/timer.c
+@@ -68,7 +68,7 @@ static void timer_done(Unit *u) {
+         t->monotonic_event_source = sd_event_source_disable_unref(t->monotonic_event_source);
+         t->realtime_event_source = sd_event_source_disable_unref(t->realtime_event_source);
+ 
+-        free(t->stamp_path);
++        t->stamp_path = mfree(t->stamp_path);
+ }
+ 
+ static int timer_verify(Timer *t) {
diff --git a/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch b/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch
new file mode 100644
index 0000000..c9880b5
--- /dev/null
+++ b/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch
@@ -0,0 +1,64 @@
+From fdc436432f1ca2dd9df2f24728916ab1201015c1 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 5 Apr 2022 21:47:46 +0900
+Subject: [PATCH] core: command argument can be longer than PATH_MAX
+
+Fixes a bug introduced by 065364920281e1cf59cab989e17aff21790505c4.
+
+Fixes #22957.
+
+(cherry picked from commit 58dd4999dcc81a0ed92fbd78bce3592c3e3afe9e)
+
+Resolves: #2073994
+---
+ src/core/load-fragment.c      |  2 +-
+ src/test/test-load-fragment.c | 16 ++++++++++++++++
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index ad5a0912fc..461e073269 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1000,7 +1000,7 @@ int config_parse_exec(
+                         if (r < 0)
+                                 return ignore ? 0 : -ENOEXEC;
+ 
+-                        r = unit_path_printf(u, word, &resolved);
++                        r = unit_full_printf(u, word, &resolved);
+                         if (r < 0) {
+                                 log_syntax(unit, ignore ? LOG_WARNING : LOG_ERR, filename, line, r,
+                                            "Failed to resolve unit specifiers in %s%s: %m",
+diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
+index fbe4744333..c579be4150 100644
+--- a/src/test/test-load-fragment.c
++++ b/src/test/test-load-fragment.c
+@@ -10,6 +10,7 @@
+ #include "capability-util.h"
+ #include "conf-parser.h"
+ #include "fd-util.h"
++#include "fileio.h"
+ #include "format-util.h"
+ #include "fs-util.h"
+ #include "hashmap.h"
+@@ -416,6 +417,21 @@ TEST(config_parse_exec) {
+         assert_se(r == 0);
+         assert_se(c1->command_next == NULL);
+ 
++        log_info("/* long arg */"); /* See issue #22957. */
++
++        char x[LONG_LINE_MAX-100], *y;
++        y = mempcpy(x, "/bin/echo ", STRLEN("/bin/echo "));
++        memset(y, 'x', sizeof(x) - STRLEN("/bin/echo ") - 1);
++        x[sizeof(x) - 1] = '\0';
++
++        r = config_parse_exec(NULL, "fake", 5, "section", 1,
++                              "LValue", 0, x,
++                              &c, u);
++        assert_se(r >= 0);
++        c1 = c1->command_next;
++        check_execcommand(c1,
++                          "/bin/echo", NULL, y, NULL, false);
++
+         log_info("/* empty argument, reset */");
+         r = config_parse_exec(NULL, "fake", 4, "section", 1,
+                               "LValue", 0, "",
diff --git a/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch b/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch
new file mode 100644
index 0000000..fa69c99
--- /dev/null
+++ b/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch
@@ -0,0 +1,1534 @@
+From a2632eca864670f7a88e1a81947a9e726282e531 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 2 Mar 2022 17:17:39 +0100
+Subject: [PATCH] shared/install: consistently use 'lp' as the name for the
+ LookupPaths instance
+
+Most of the codebase does this. Here we were using 'p' or 'paths'
+instead. Those names are very generic and not good for a "global-like"
+object like the LookupPaths instance. And we also have 'path' variable,
+and it's confusing to have 'path' and 'paths' in the same function that
+are unrelated.
+
+Also pass down LookupPaths* lower in the call stack, in preparation for
+future changes.
+
+(cherry picked from commit c3e7fba07c19f232f5945c07e7cc730986615adf)
+
+Related: #2082131
+---
+ src/shared/install.c | 427 +++++++++++++++++++++----------------------
+ 1 file changed, 212 insertions(+), 215 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 8f1af755fa..c6cbe96fdb 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -98,7 +98,7 @@ static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = {
+ 
+ DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType);
+ 
+-static int in_search_path(const LookupPaths *p, const char *path) {
++static int in_search_path(const LookupPaths *lp, const char *path) {
+         _cleanup_free_ char *parent = NULL;
+ 
+         assert(path);
+@@ -107,19 +107,16 @@ static int in_search_path(const LookupPaths *p, const char *path) {
+         if (!parent)
+                 return -ENOMEM;
+ 
+-        return path_strv_contains(p->search_path, parent);
++        return path_strv_contains(lp->search_path, parent);
+ }
+ 
+-static const char* skip_root(const LookupPaths *p, const char *path) {
+-        char *e;
+-
+-        assert(p);
++static const char* skip_root(const char *root_dir, const char *path) {
+         assert(path);
+ 
+-        if (!p->root_dir)
++        if (!root_dir)
+                 return path;
+ 
+-        e = path_startswith(path, p->root_dir);
++        const char *e = path_startswith(path, root_dir);
+         if (!e)
+                 return NULL;
+ 
+@@ -134,52 +131,52 @@ static const char* skip_root(const LookupPaths *p, const char *path) {
+         return e;
+ }
+ 
+-static int path_is_generator(const LookupPaths *p, const char *path) {
++static int path_is_generator(const LookupPaths *lp, const char *path) {
+         _cleanup_free_ char *parent = NULL;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+         parent = dirname_malloc(path);
+         if (!parent)
+                 return -ENOMEM;
+ 
+-        return path_equal_ptr(parent, p->generator) ||
+-               path_equal_ptr(parent, p->generator_early) ||
+-               path_equal_ptr(parent, p->generator_late);
++        return path_equal_ptr(parent, lp->generator) ||
++               path_equal_ptr(parent, lp->generator_early) ||
++               path_equal_ptr(parent, lp->generator_late);
+ }
+ 
+-static int path_is_transient(const LookupPaths *p, const char *path) {
++static int path_is_transient(const LookupPaths *lp, const char *path) {
+         _cleanup_free_ char *parent = NULL;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+         parent = dirname_malloc(path);
+         if (!parent)
+                 return -ENOMEM;
+ 
+-        return path_equal_ptr(parent, p->transient);
++        return path_equal_ptr(parent, lp->transient);
+ }
+ 
+-static int path_is_control(const LookupPaths *p, const char *path) {
++static int path_is_control(const LookupPaths *lp, const char *path) {
+         _cleanup_free_ char *parent = NULL;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+         parent = dirname_malloc(path);
+         if (!parent)
+                 return -ENOMEM;
+ 
+-        return path_equal_ptr(parent, p->persistent_control) ||
+-               path_equal_ptr(parent, p->runtime_control);
++        return path_equal_ptr(parent, lp->persistent_control) ||
++               path_equal_ptr(parent, lp->runtime_control);
+ }
+ 
+-static int path_is_config(const LookupPaths *p, const char *path, bool check_parent) {
++static int path_is_config(const LookupPaths *lp, const char *path, bool check_parent) {
+         _cleanup_free_ char *parent = NULL;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+         /* Note that we do *not* have generic checks for /etc or /run in place, since with
+@@ -193,21 +190,21 @@ static int path_is_config(const LookupPaths *p, const char *path, bool check_par
+                 path = parent;
+         }
+ 
+-        return path_equal_ptr(path, p->persistent_config) ||
+-               path_equal_ptr(path, p->runtime_config);
++        return path_equal_ptr(path, lp->persistent_config) ||
++               path_equal_ptr(path, lp->runtime_config);
+ }
+ 
+-static int path_is_runtime(const LookupPaths *p, const char *path, bool check_parent) {
++static int path_is_runtime(const LookupPaths *lp, const char *path, bool check_parent) {
+         _cleanup_free_ char *parent = NULL;
+         const char *rpath;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+         /* Everything in /run is considered runtime. On top of that we also add
+          * explicit checks for the various runtime directories, as safety net. */
+ 
+-        rpath = skip_root(p, path);
++        rpath = skip_root(lp->root_dir, path);
+         if (rpath && path_startswith(rpath, "/run"))
+                 return true;
+ 
+@@ -219,21 +216,21 @@ static int path_is_runtime(const LookupPaths *p, const char *path, bool check_pa
+                 path = parent;
+         }
+ 
+-        return path_equal_ptr(path, p->runtime_config) ||
+-               path_equal_ptr(path, p->generator) ||
+-               path_equal_ptr(path, p->generator_early) ||
+-               path_equal_ptr(path, p->generator_late) ||
+-               path_equal_ptr(path, p->transient) ||
+-               path_equal_ptr(path, p->runtime_control);
++        return path_equal_ptr(path, lp->runtime_config) ||
++               path_equal_ptr(path, lp->generator) ||
++               path_equal_ptr(path, lp->generator_early) ||
++               path_equal_ptr(path, lp->generator_late) ||
++               path_equal_ptr(path, lp->transient) ||
++               path_equal_ptr(path, lp->runtime_control);
+ }
+ 
+-static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
++static int path_is_vendor_or_generator(const LookupPaths *lp, const char *path) {
+         const char *rpath;
+ 
+-        assert(p);
++        assert(lp);
+         assert(path);
+ 
+-        rpath = skip_root(p, path);
++        rpath = skip_root(lp->root_dir, path);
+         if (!rpath)
+                 return 0;
+ 
+@@ -245,19 +242,19 @@ static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
+                 return true;
+ #endif
+ 
+-        if (path_is_generator(p, rpath))
++        if (path_is_generator(lp, rpath))
+                 return true;
+ 
+         return path_equal(rpath, SYSTEM_DATA_UNIT_DIR);
+ }
+ 
+-static const char* config_path_from_flags(const LookupPaths *paths, UnitFileFlags flags) {
+-        assert(paths);
++static const char* config_path_from_flags(const LookupPaths *lp, UnitFileFlags flags) {
++        assert(lp);
+ 
+         if (FLAGS_SET(flags, UNIT_FILE_PORTABLE))
+-                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_attached : paths->persistent_attached;
++                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_attached : lp->persistent_attached;
+         else
+-                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_config : paths->persistent_config;
++                return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_config : lp->persistent_config;
+ }
+ 
+ int unit_file_changes_add(
+@@ -435,7 +432,7 @@ static bool chroot_symlinks_same(const char *root, const char *wd, const char *a
+ }
+ 
+ static int create_symlink(
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *old_path,
+                 const char *new_path,
+                 bool force,
+@@ -449,7 +446,7 @@ static int create_symlink(
+         assert(old_path);
+         assert(new_path);
+ 
+-        rp = skip_root(paths, old_path);
++        rp = skip_root(lp->root_dir, old_path);
+         if (rp)
+                 old_path = rp;
+ 
+@@ -487,7 +484,7 @@ static int create_symlink(
+         if (!dirname)
+                 return -ENOMEM;
+ 
+-        if (chroot_symlinks_same(paths->root_dir, dirname, dest, old_path)) {
++        if (chroot_symlinks_same(lp->root_dir, dirname, dest, old_path)) {
+                 log_debug("Symlink %s → %s already exists", new_path, dest);
+                 return 1;
+         }
+@@ -642,7 +639,7 @@ static int remove_marked_symlinks_fd(
+                         /* Now, remember the full path (but with the root prefix removed) of
+                          * the symlink we just removed, and remove any symlinks to it, too. */
+ 
+-                        rp = skip_root(lp, p);
++                        rp = skip_root(lp->root_dir, p);
+                         q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p);
+                         if (q < 0)
+                                 return q;
+@@ -861,7 +858,7 @@ static int find_symlinks(
+ 
+ static int find_symlinks_in_scope(
+                 UnitFileScope scope,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const UnitFileInstallInfo *i,
+                 bool match_name,
+                 UnitFileState *state) {
+@@ -872,23 +869,23 @@ static int find_symlinks_in_scope(
+         char **p;
+         int r;
+ 
+-        assert(paths);
++        assert(lp);
+         assert(i);
+ 
+-        /* As we iterate over the list of search paths in paths->search_path, we may encounter "same name"
++        /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name"
+          * symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are
+          * effectively masked, so we should ignore them. */
+ 
+-        STRV_FOREACH(p, paths->search_path)  {
++        STRV_FOREACH(p, lp->search_path)  {
+                 bool same_name_link = false;
+ 
+-                r = find_symlinks(paths->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
++                r = find_symlinks(lp->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+                         /* We found symlinks in this dir? Yay! Let's see where precisely it is enabled. */
+ 
+-                        if (path_equal_ptr(*p, paths->persistent_config)) {
++                        if (path_equal_ptr(*p, lp->persistent_config)) {
+                                 /* This is the best outcome, let's return it immediately. */
+                                 *state = UNIT_FILE_ENABLED;
+                                 return 1;
+@@ -900,7 +897,7 @@ static int find_symlinks_in_scope(
+                                 return 1;
+                         }
+ 
+-                        r = path_is_runtime(paths, *p, false);
++                        r = path_is_runtime(lp, *p, false);
+                         if (r < 0)
+                                 return r;
+                         if (r > 0)
+@@ -909,10 +906,10 @@ static int find_symlinks_in_scope(
+                                 enabled_at_all = true;
+ 
+                 } else if (same_name_link) {
+-                        if (path_equal_ptr(*p, paths->persistent_config))
++                        if (path_equal_ptr(*p, lp->persistent_config))
+                                 same_name_link_config = true;
+                         else {
+-                                r = path_is_runtime(paths, *p, false);
++                                r = path_is_runtime(lp, *p, false);
+                                 if (r < 0)
+                                         return r;
+                                 if (r > 0)
+@@ -990,11 +987,11 @@ static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *nam
+ 
+ static int install_info_may_process(
+                 const UnitFileInstallInfo *i,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+         assert(i);
+-        assert(paths);
++        assert(lp);
+ 
+         /* Checks whether the loaded unit file is one we should process, or is masked,
+          * transient or generated and thus not subject to enable/disable operations. */
+@@ -1003,8 +1000,8 @@ static int install_info_may_process(
+                 unit_file_changes_add(changes, n_changes, -ERFKILL, i->path, NULL);
+                 return -ERFKILL;
+         }
+-        if (path_is_generator(paths, i->path) ||
+-            path_is_transient(paths, i->path)) {
++        if (path_is_generator(lp, i->path) ||
++            path_is_transient(lp, i->path)) {
+                 unit_file_changes_add(changes, n_changes, -EADDRNOTAVAIL, i->path, NULL);
+                 return -EADDRNOTAVAIL;
+         }
+@@ -1339,20 +1336,20 @@ static int unit_file_load_or_readlink(
+                 InstallContext *c,
+                 UnitFileInstallInfo *info,
+                 const char *path,
+-                const char *root_dir,
++                const LookupPaths *lp,
+                 SearchFlags flags) {
+ 
+         _cleanup_free_ char *resolved = NULL;
+         int r;
+ 
+-        r = unit_file_load(c, info, path, root_dir, flags);
++        r = unit_file_load(c, info, path, lp->root_dir, flags);
+         if (r != -ELOOP || (flags & SEARCH_DROPIN))
+                 return r;
+ 
+-        r = chase_symlinks(path, root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
++        r = chase_symlinks(path, lp->root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
+         if (r >= 0 &&
+-            root_dir &&
+-            path_equal_ptr(path_startswith(resolved, root_dir), "dev/null"))
++            lp->root_dir &&
++            path_equal_ptr(path_startswith(resolved, lp->root_dir), "dev/null"))
+                 /* When looking under root_dir, we can't expect /dev/ to be mounted,
+                  * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
+                 info->type = UNIT_FILE_TYPE_MASKED;
+@@ -1402,7 +1399,7 @@ static int unit_file_load_or_readlink(
+ 
+                 if (path_is_absolute(target))
+                         /* This is an absolute path, prefix the root so that we always deal with fully qualified paths */
+-                        info->symlink_target = path_join(root_dir, target);
++                        info->symlink_target = path_join(lp->root_dir, target);
+                 else
+                         /* This is a relative path, take it relative to the dir the symlink is located in. */
+                         info->symlink_target = file_in_same_dir(path, target);
+@@ -1418,7 +1415,7 @@ static int unit_file_load_or_readlink(
+ static int unit_file_search(
+                 InstallContext *c,
+                 UnitFileInstallInfo *info,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 SearchFlags flags) {
+ 
+         const char *dropin_dir_name = NULL, *dropin_template_dir_name = NULL;
+@@ -1429,14 +1426,14 @@ static int unit_file_search(
+         char **p;
+ 
+         assert(info);
+-        assert(paths);
++        assert(lp);
+ 
+         /* Was this unit already loaded? */
+         if (info->type != _UNIT_FILE_TYPE_INVALID)
+                 return 0;
+ 
+         if (info->path)
+-                return unit_file_load_or_readlink(c, info, info->path, paths->root_dir, flags);
++                return unit_file_load_or_readlink(c, info, info->path, lp, flags);
+ 
+         assert(info->name);
+ 
+@@ -1446,14 +1443,14 @@ static int unit_file_search(
+                         return r;
+         }
+ 
+-        STRV_FOREACH(p, paths->search_path) {
++        STRV_FOREACH(p, lp->search_path) {
+                 _cleanup_free_ char *path = NULL;
+ 
+                 path = path_join(*p, info->name);
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
++                r = unit_file_load_or_readlink(c, info, path, lp, flags);
+                 if (r >= 0) {
+                         info->path = TAKE_PTR(path);
+                         result = r;
+@@ -1469,14 +1466,14 @@ static int unit_file_search(
+                  * enablement was requested.  We will check if it is
+                  * possible to load template unit file. */
+ 
+-                STRV_FOREACH(p, paths->search_path) {
++                STRV_FOREACH(p, lp->search_path) {
+                         _cleanup_free_ char *path = NULL;
+ 
+                         path = path_join(*p, template);
+                         if (!path)
+                                 return -ENOMEM;
+ 
+-                        r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
++                        r = unit_file_load_or_readlink(c, info, path, lp, flags);
+                         if (r >= 0) {
+                                 info->path = TAKE_PTR(path);
+                                 result = r;
+@@ -1498,7 +1495,7 @@ static int unit_file_search(
+         /* Search for drop-in directories */
+ 
+         dropin_dir_name = strjoina(info->name, ".d");
+-        STRV_FOREACH(p, paths->search_path) {
++        STRV_FOREACH(p, lp->search_path) {
+                 char *path;
+ 
+                 path = path_join(*p, dropin_dir_name);
+@@ -1512,7 +1509,7 @@ static int unit_file_search(
+ 
+         if (template) {
+                 dropin_template_dir_name = strjoina(template, ".d");
+-                STRV_FOREACH(p, paths->search_path) {
++                STRV_FOREACH(p, lp->search_path) {
+                         char *path;
+ 
+                         path = path_join(*p, dropin_template_dir_name);
+@@ -1532,7 +1529,7 @@ static int unit_file_search(
+                 return log_debug_errno(r, "Failed to get list of conf files: %m");
+ 
+         STRV_FOREACH(p, files) {
+-                r = unit_file_load_or_readlink(c, info, *p, paths->root_dir, flags | SEARCH_DROPIN);
++                r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN);
+                 if (r < 0)
+                         return log_debug_errno(r, "Failed to load conf file %s: %m", *p);
+         }
+@@ -1543,7 +1540,7 @@ static int unit_file_search(
+ static int install_info_follow(
+                 InstallContext *c,
+                 UnitFileInstallInfo *i,
+-                const char *root_dir,
++                const LookupPaths *lp,
+                 SearchFlags flags,
+                 bool ignore_different_name) {
+ 
+@@ -1564,7 +1561,7 @@ static int install_info_follow(
+         free_and_replace(i->path, i->symlink_target);
+         i->type = _UNIT_FILE_TYPE_INVALID;
+ 
+-        return unit_file_load_or_readlink(c, i, i->path, root_dir, flags);
++        return unit_file_load_or_readlink(c, i, i->path, lp, flags);
+ }
+ 
+ /**
+@@ -1574,7 +1571,7 @@ static int install_info_follow(
+ static int install_info_traverse(
+                 UnitFileScope scope,
+                 InstallContext *c,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 UnitFileInstallInfo *start,
+                 SearchFlags flags,
+                 UnitFileInstallInfo **ret) {
+@@ -1583,11 +1580,11 @@ static int install_info_traverse(
+         unsigned k = 0;
+         int r;
+ 
+-        assert(paths);
++        assert(lp);
+         assert(start);
+         assert(c);
+ 
+-        r = unit_file_search(c, start, paths, flags);
++        r = unit_file_search(c, start, lp, flags);
+         if (r < 0)
+                 return r;
+ 
+@@ -1599,14 +1596,14 @@ static int install_info_traverse(
+                         return -ELOOP;
+ 
+                 if (!(flags & SEARCH_FOLLOW_CONFIG_SYMLINKS)) {
+-                        r = path_is_config(paths, i->path, true);
++                        r = path_is_config(lp, i->path, true);
+                         if (r < 0)
+                                 return r;
+                         if (r > 0)
+                                 return -ELOOP;
+                 }
+ 
+-                r = install_info_follow(c, i, paths->root_dir, flags, false);
++                r = install_info_follow(c, i, lp, flags, false);
+                 if (r == -EXDEV) {
+                         _cleanup_free_ char *buffer = NULL;
+                         const char *bn;
+@@ -1635,7 +1632,7 @@ static int install_info_traverse(
+                                         /* We filled in the instance, and the target stayed the same? If so, then let's
+                                          * honour the link as it is. */
+ 
+-                                        r = install_info_follow(c, i, paths->root_dir, flags, true);
++                                        r = install_info_follow(c, i, lp, flags, true);
+                                         if (r < 0)
+                                                 return r;
+ 
+@@ -1645,12 +1642,12 @@ static int install_info_traverse(
+                                 bn = buffer;
+                         }
+ 
+-                        r = install_info_add(c, bn, NULL, paths->root_dir, /* auxiliary= */ false, &i);
++                        r = install_info_add(c, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i);
+                         if (r < 0)
+                                 return r;
+ 
+                         /* Try again, with the new target we found. */
+-                        r = unit_file_search(c, i, paths, flags);
++                        r = unit_file_search(c, i, lp, flags);
+                         if (r == -ENOENT)
+                                 /* Translate error code to highlight this specific case */
+                                 return -ENOLINK;
+@@ -1672,7 +1669,7 @@ static int install_info_traverse(
+  */
+ static int install_info_add_auto(
+                 InstallContext *c,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *name_or_path,
+                 UnitFileInstallInfo **ret) {
+ 
+@@ -1682,17 +1679,17 @@ static int install_info_add_auto(
+         if (path_is_absolute(name_or_path)) {
+                 const char *pp;
+ 
+-                pp = prefix_roota(paths->root_dir, name_or_path);
++                pp = prefix_roota(lp->root_dir, name_or_path);
+ 
+-                return install_info_add(c, NULL, pp, paths->root_dir, /* auxiliary= */ false, ret);
++                return install_info_add(c, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret);
+         } else
+-                return install_info_add(c, name_or_path, NULL, paths->root_dir, /* auxiliary= */ false, ret);
++                return install_info_add(c, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret);
+ }
+ 
+ static int install_info_discover(
+                 UnitFileScope scope,
+                 InstallContext *c,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *name,
+                 SearchFlags flags,
+                 UnitFileInstallInfo **ret,
+@@ -1703,12 +1700,12 @@ static int install_info_discover(
+         int r;
+ 
+         assert(c);
+-        assert(paths);
++        assert(lp);
+         assert(name);
+ 
+-        r = install_info_add_auto(c, paths, name, &i);
++        r = install_info_add_auto(c, lp, name, &i);
+         if (r >= 0)
+-                r = install_info_traverse(scope, c, paths, i, flags, ret);
++                r = install_info_traverse(scope, c, lp, i, flags, ret);
+ 
+         if (r < 0)
+                 unit_file_changes_add(changes, n_changes, r, name, NULL);
+@@ -1718,7 +1715,7 @@ static int install_info_discover(
+ static int install_info_discover_and_check(
+                         UnitFileScope scope,
+                         InstallContext *c,
+-                        const LookupPaths *paths,
++                        const LookupPaths *lp,
+                         const char *name,
+                         SearchFlags flags,
+                         UnitFileInstallInfo **ret,
+@@ -1727,11 +1724,11 @@ static int install_info_discover_and_check(
+ 
+         int r;
+ 
+-        r = install_info_discover(scope, c, paths, name, flags, ret, changes, n_changes);
++        r = install_info_discover(scope, c, lp, name, flags, ret, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+-        return install_info_may_process(ret ? *ret : NULL, paths, changes, n_changes);
++        return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes);
+ }
+ 
+ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) {
+@@ -1812,7 +1809,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+ 
+ static int install_info_symlink_alias(
+                 UnitFileInstallInfo *i,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 bool force,
+                 UnitFileChange **changes,
+@@ -1822,7 +1819,7 @@ static int install_info_symlink_alias(
+         int r = 0, q;
+ 
+         assert(i);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         STRV_FOREACH(s, i->aliases) {
+@@ -1840,7 +1837,7 @@ static int install_info_symlink_alias(
+                 if (!alias_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(paths, i->path, alias_path, force, changes, n_changes);
++                q = create_symlink(lp, i->path, alias_path, force, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+         }
+@@ -1852,7 +1849,7 @@ static int install_info_symlink_wants(
+                 UnitFileScope scope,
+                 UnitFileFlags file_flags,
+                 UnitFileInstallInfo *i,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 char **list,
+                 const char *suffix,
+@@ -1866,7 +1863,7 @@ static int install_info_symlink_wants(
+         int r = 0, q;
+ 
+         assert(i);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         if (strv_isempty(list))
+@@ -1889,7 +1886,7 @@ static int install_info_symlink_wants(
+                         return r;
+ 
+                 instance.name = buf;
+-                r = unit_file_search(NULL, &instance, paths, SEARCH_FOLLOW_CONFIG_SYMLINKS);
++                r = unit_file_search(NULL, &instance, lp, SEARCH_FOLLOW_CONFIG_SYMLINKS);
+                 if (r < 0)
+                         return r;
+ 
+@@ -1943,11 +1940,11 @@ static int install_info_symlink_wants(
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(paths, i->path, path, true, changes, n_changes);
++                q = create_symlink(lp, i->path, path, true, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+ 
+-                if (unit_file_exists(scope, paths, dst) == 0)
++                if (unit_file_exists(scope, lp, dst) == 0)
+                         unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path);
+         }
+ 
+@@ -1956,7 +1953,7 @@ static int install_info_symlink_wants(
+ 
+ static int install_info_symlink_link(
+                 UnitFileInstallInfo *i,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 bool force,
+                 UnitFileChange **changes,
+@@ -1966,11 +1963,11 @@ static int install_info_symlink_link(
+         int r;
+ 
+         assert(i);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+         assert(i->path);
+ 
+-        r = in_search_path(paths, i->path);
++        r = in_search_path(lp, i->path);
+         if (r < 0)
+                 return r;
+         if (r > 0)
+@@ -1980,14 +1977,14 @@ static int install_info_symlink_link(
+         if (!path)
+                 return -ENOMEM;
+ 
+-        return create_symlink(paths, i->path, path, force, changes, n_changes);
++        return create_symlink(lp, i->path, path, force, changes, n_changes);
+ }
+ 
+ static int install_info_apply(
+                 UnitFileScope scope,
+                 UnitFileFlags file_flags,
+                 UnitFileInstallInfo *i,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+@@ -1995,7 +1992,7 @@ static int install_info_apply(
+         int r, q;
+ 
+         assert(i);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         if (i->type != UNIT_FILE_TYPE_REGULAR)
+@@ -2003,17 +2000,17 @@ static int install_info_apply(
+ 
+         bool force = file_flags & UNIT_FILE_FORCE;
+ 
+-        r = install_info_symlink_alias(i, paths, config_path, force, changes, n_changes);
++        r = install_info_symlink_alias(i, lp, config_path, force, changes, n_changes);
+ 
+-        q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->wanted_by, ".wants/", changes, n_changes);
++        q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->wanted_by, ".wants/", changes, n_changes);
+         if (r == 0)
+                 r = q;
+ 
+-        q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->required_by, ".requires/", changes, n_changes);
++        q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->required_by, ".requires/", changes, n_changes);
+         if (r == 0)
+                 r = q;
+ 
+-        q = install_info_symlink_link(i, paths, config_path, force, changes, n_changes);
++        q = install_info_symlink_link(i, lp, config_path, force, changes, n_changes);
+         /* Do not count links to the unit file towards the "carries_install_info" count */
+         if (r == 0 && q < 0)
+                 r = q;
+@@ -2025,7 +2022,7 @@ static int install_context_apply(
+                 UnitFileScope scope,
+                 UnitFileFlags file_flags,
+                 InstallContext *c,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 SearchFlags flags,
+                 UnitFileChange **changes,
+@@ -2035,7 +2032,7 @@ static int install_context_apply(
+         int r;
+ 
+         assert(c);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         if (ordered_hashmap_isempty(c->will_process))
+@@ -2053,7 +2050,7 @@ static int install_context_apply(
+                 if (q < 0)
+                         return q;
+ 
+-                q = install_info_traverse(scope, c, paths, i, flags, NULL);
++                q = install_info_traverse(scope, c, lp, i, flags, NULL);
+                 if (q < 0) {
+                         if (i->auxiliary) {
+                                 q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name);
+@@ -2080,7 +2077,7 @@ static int install_context_apply(
+                 if (i->type != UNIT_FILE_TYPE_REGULAR)
+                         continue;
+ 
+-                q = install_info_apply(scope, file_flags, i, paths, config_path, changes, n_changes);
++                q = install_info_apply(scope, file_flags, i, lp, config_path, changes, n_changes);
+                 if (r >= 0) {
+                         if (q < 0)
+                                 r = q;
+@@ -2095,7 +2092,7 @@ static int install_context_apply(
+ static int install_context_mark_for_removal(
+                 UnitFileScope scope,
+                 InstallContext *c,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 Set **remove_symlinks_to,
+                 const char *config_path,
+                 UnitFileChange **changes,
+@@ -2105,7 +2102,7 @@ static int install_context_mark_for_removal(
+         int r;
+ 
+         assert(c);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         /* Marks all items for removal */
+@@ -2123,7 +2120,7 @@ static int install_context_mark_for_removal(
+                 if (r < 0)
+                         return r;
+ 
+-                r = install_info_traverse(scope, c, paths, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
++                r = install_info_traverse(scope, c, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
+                 if (r == -ENOLINK) {
+                         log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name);
+                         unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL);
+@@ -2164,7 +2161,7 @@ int unit_file_mask(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         const char *config_path;
+         char **i;
+         int r;
+@@ -2172,11 +2169,11 @@ int unit_file_mask(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -2194,7 +2191,7 @@ int unit_file_mask(
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(&paths, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++                q = create_symlink(&lp, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+                 if (q < 0 && r >= 0)
+                         r = q;
+         }
+@@ -2210,7 +2207,7 @@ int unit_file_unmask(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+         _cleanup_strv_free_ char **todo = NULL;
+         const char *config_path;
+@@ -2222,11 +2219,11 @@ int unit_file_unmask(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -2283,13 +2280,13 @@ int unit_file_unmask(
+ 
+                 unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
+ 
+-                rp = skip_root(&paths, path);
++                rp = skip_root(lp.root_dir, path);
+                 q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: path);
+                 if (q < 0)
+                         return q;
+         }
+ 
+-        q = remove_marked_symlinks(remove_symlinks_to, config_path, &paths, dry_run, changes, n_changes);
++        q = remove_marked_symlinks(remove_symlinks_to, config_path, &lp, dry_run, changes, n_changes);
+         if (r >= 0)
+                 r = q;
+ 
+@@ -2304,7 +2301,7 @@ int unit_file_link(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_strv_free_ char **todo = NULL;
+         const char *config_path;
+         size_t n_todo = 0;
+@@ -2314,11 +2311,11 @@ int unit_file_link(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -2334,7 +2331,7 @@ int unit_file_link(
+                 if (!unit_name_is_valid(fn, UNIT_NAME_ANY))
+                         return -EINVAL;
+ 
+-                full = path_join(paths.root_dir, *i);
++                full = path_join(lp.root_dir, *i);
+                 if (!full)
+                         return -ENOMEM;
+ 
+@@ -2344,7 +2341,7 @@ int unit_file_link(
+                 if (r < 0)
+                         return r;
+ 
+-                q = in_search_path(&paths, *i);
++                q = in_search_path(&lp, *i);
+                 if (q < 0)
+                         return q;
+                 if (q > 0)
+@@ -2370,7 +2367,7 @@ int unit_file_link(
+                 if (!new_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(&paths, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++                q = create_symlink(&lp, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+                 if (q < 0 && r >= 0)
+                         r = q;
+         }
+@@ -2378,23 +2375,23 @@ int unit_file_link(
+         return r;
+ }
+ 
+-static int path_shall_revert(const LookupPaths *paths, const char *path) {
++static int path_shall_revert(const LookupPaths *lp, const char *path) {
+         int r;
+ 
+-        assert(paths);
++        assert(lp);
+         assert(path);
+ 
+         /* Checks whether the path is one where the drop-in directories shall be removed. */
+ 
+-        r = path_is_config(paths, path, true);
++        r = path_is_config(lp, path, true);
+         if (r != 0)
+                 return r;
+ 
+-        r = path_is_control(paths, path);
++        r = path_is_control(lp, path);
+         if (r != 0)
+                 return r;
+ 
+-        return path_is_transient(paths, path);
++        return path_is_transient(lp, path);
+ }
+ 
+ int unit_file_revert(
+@@ -2405,7 +2402,7 @@ int unit_file_revert(
+                 size_t *n_changes) {
+ 
+         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_strv_free_ char **todo = NULL;
+         size_t n_todo = 0;
+         char **i;
+@@ -2422,7 +2419,7 @@ int unit_file_revert(
+          * We remove all that in both the runtime and the persistent directories, if that applies.
+          */
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+@@ -2433,7 +2430,7 @@ int unit_file_revert(
+                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                         return -EINVAL;
+ 
+-                STRV_FOREACH(p, paths.search_path) {
++                STRV_FOREACH(p, lp.search_path) {
+                         _cleanup_free_ char *path = NULL, *dropin = NULL;
+                         struct stat st;
+ 
+@@ -2447,7 +2444,7 @@ int unit_file_revert(
+                                         return -errno;
+                         } else if (S_ISREG(st.st_mode)) {
+                                 /* Check if there's a vendor version */
+-                                r = path_is_vendor_or_generator(&paths, path);
++                                r = path_is_vendor_or_generator(&lp, path);
+                                 if (r < 0)
+                                         return r;
+                                 if (r > 0)
+@@ -2464,7 +2461,7 @@ int unit_file_revert(
+                                         return -errno;
+                         } else if (S_ISDIR(st.st_mode)) {
+                                 /* Remove the drop-ins */
+-                                r = path_shall_revert(&paths, dropin);
++                                r = path_shall_revert(&lp, dropin);
+                                 if (r < 0)
+                                         return r;
+                                 if (r > 0) {
+@@ -2480,7 +2477,7 @@ int unit_file_revert(
+                         continue;
+ 
+                 /* OK, there's a vendor version, hence drop all configuration versions */
+-                STRV_FOREACH(p, paths.search_path) {
++                STRV_FOREACH(p, lp.search_path) {
+                         _cleanup_free_ char *path = NULL;
+                         struct stat st;
+ 
+@@ -2493,7 +2490,7 @@ int unit_file_revert(
+                                 if (errno != ENOENT)
+                                         return -errno;
+                         } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
+-                                r = path_is_config(&paths, path, true);
++                                r = path_is_config(&lp, path, true);
+                                 if (r < 0)
+                                         return r;
+                                 if (r > 0) {
+@@ -2534,17 +2531,17 @@ int unit_file_revert(
+ 
+                 unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, *i, NULL);
+ 
+-                rp = skip_root(&paths, *i);
++                rp = skip_root(lp.root_dir, *i);
+                 q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: *i);
+                 if (q < 0)
+                         return q;
+         }
+ 
+-        q = remove_marked_symlinks(remove_symlinks_to, paths.runtime_config, &paths, false, changes, n_changes);
++        q = remove_marked_symlinks(remove_symlinks_to, lp.runtime_config, &lp, false, changes, n_changes);
+         if (r >= 0)
+                 r = q;
+ 
+-        q = remove_marked_symlinks(remove_symlinks_to, paths.persistent_config, &paths, false, changes, n_changes);
++        q = remove_marked_symlinks(remove_symlinks_to, lp.persistent_config, &lp, false, changes, n_changes);
+         if (r >= 0)
+                 r = q;
+ 
+@@ -2561,7 +2558,7 @@ int unit_file_add_dependency(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext c = {};
+         UnitFileInstallInfo *i, *target_info;
+         const char *config_path;
+@@ -2578,15 +2575,15 @@ int unit_file_add_dependency(
+         if (!unit_name_is_valid(target, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+-        r = install_info_discover_and_check(scope, &c, &paths, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++        r = install_info_discover_and_check(scope, &c, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                             &target_info, changes, n_changes);
+         if (r < 0)
+                 return r;
+@@ -2596,7 +2593,7 @@ int unit_file_add_dependency(
+         STRV_FOREACH(f, files) {
+                 char ***l;
+ 
+-                r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                     &i, changes, n_changes);
+                 if (r < 0)
+                         return r;
+@@ -2618,7 +2615,7 @@ int unit_file_add_dependency(
+                         return -ENOMEM;
+         }
+ 
+-        return install_context_apply(scope, file_flags, &c, &paths, config_path,
++        return install_context_apply(scope, file_flags, &c, &lp, config_path,
+                                      SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes);
+ }
+ 
+@@ -2630,7 +2627,7 @@ int unit_file_enable(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext c = {};
+         const char *config_path;
+         UnitFileInstallInfo *i;
+@@ -2640,16 +2637,16 @@ int unit_file_enable(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = config_path_from_flags(&paths, file_flags);
++        config_path = config_path_from_flags(&lp, file_flags);
+         if (!config_path)
+                 return -ENXIO;
+ 
+         STRV_FOREACH(f, files) {
+-                r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                     &i, changes, n_changes);
+                 if (r < 0)
+                         return r;
+@@ -2662,7 +2659,7 @@ int unit_file_enable(
+            is useful to determine whether the passed files had any
+            installation data at all. */
+ 
+-        return install_context_apply(scope, file_flags, &c, &paths, config_path, SEARCH_LOAD, changes, n_changes);
++        return install_context_apply(scope, file_flags, &c, &lp, config_path, SEARCH_LOAD, changes, n_changes);
+ }
+ 
+ int unit_file_disable(
+@@ -2673,7 +2670,7 @@ int unit_file_disable(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext c = {};
+         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+         const char *config_path;
+@@ -2683,11 +2680,11 @@ int unit_file_disable(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = config_path_from_flags(&paths, flags);
++        config_path = config_path_from_flags(&lp, flags);
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -2695,16 +2692,16 @@ int unit_file_disable(
+                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                         return -EINVAL;
+ 
+-                r = install_info_add(&c, *i, NULL, paths.root_dir, /* auxiliary= */ false, NULL);
++                r = install_info_add(&c, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL);
+                 if (r < 0)
+                         return r;
+         }
+ 
+-        r = install_context_mark_for_removal(scope, &c, &paths, &remove_symlinks_to, config_path, changes, n_changes);
++        r = install_context_mark_for_removal(scope, &c, &lp, &remove_symlinks_to, config_path, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+-        return remove_marked_symlinks(remove_symlinks_to, config_path, &paths, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
++        return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
+ }
+ 
+ int unit_file_reenable(
+@@ -2742,7 +2739,7 @@ int unit_file_set_default(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext c = {};
+         UnitFileInstallInfo *i;
+         const char *new_path;
+@@ -2757,16 +2754,16 @@ int unit_file_set_default(
+         if (streq(name, SPECIAL_DEFAULT_TARGET))
+                 return -EINVAL;
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        r = install_info_discover_and_check(scope, &c, &paths, name, 0, &i, changes, n_changes);
++        r = install_info_discover_and_check(scope, &c, &lp, name, 0, &i, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+-        new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
+-        return create_symlink(&paths, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++        new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
++        return create_symlink(&lp, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
+ }
+ 
+ int unit_file_get_default(
+@@ -2774,7 +2771,7 @@ int unit_file_get_default(
+                 const char *root_dir,
+                 char **name) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext c = {};
+         UnitFileInstallInfo *i;
+         char *n;
+@@ -2784,15 +2781,15 @@ int unit_file_get_default(
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+         assert(name);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        r = install_info_discover(scope, &c, &paths, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++        r = install_info_discover(scope, &c, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                   &i, NULL, NULL);
+         if (r < 0)
+                 return r;
+-        r = install_info_may_process(i, &paths, NULL, 0);
++        r = install_info_may_process(i, &lp, NULL, 0);
+         if (r < 0)
+                 return r;
+ 
+@@ -2806,7 +2803,7 @@ int unit_file_get_default(
+ 
+ int unit_file_lookup_state(
+                 UnitFileScope scope,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *name,
+                 UnitFileState *ret) {
+ 
+@@ -2815,13 +2812,13 @@ int unit_file_lookup_state(
+         UnitFileState state;
+         int r;
+ 
+-        assert(paths);
++        assert(lp);
+         assert(name);
+ 
+         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        r = install_info_discover(scope, &c, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++        r = install_info_discover(scope, &c, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                   &i, NULL, NULL);
+         if (r < 0)
+                 return log_debug_errno(r, "Failed to discover unit %s: %m", name);
+@@ -2837,7 +2834,7 @@ int unit_file_lookup_state(
+         switch (i->type) {
+ 
+         case UNIT_FILE_TYPE_MASKED:
+-                r = path_is_runtime(paths, i->path, true);
++                r = path_is_runtime(lp, i->path, true);
+                 if (r < 0)
+                         return r;
+ 
+@@ -2851,7 +2848,7 @@ int unit_file_lookup_state(
+                         break;
+                 }
+ 
+-                r = path_is_generator(paths, i->path);
++                r = path_is_generator(lp, i->path);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+@@ -2859,7 +2856,7 @@ int unit_file_lookup_state(
+                         break;
+                 }
+ 
+-                r = path_is_transient(paths, i->path);
++                r = path_is_transient(lp, i->path);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+@@ -2870,7 +2867,7 @@ int unit_file_lookup_state(
+                 /* Check if any of the Alias= symlinks have been created.
+                  * We ignore other aliases, and only check those that would
+                  * be created by systemctl enable for this unit. */
+-                r = find_symlinks_in_scope(scope, paths, i, true, &state);
++                r = find_symlinks_in_scope(scope, lp, i, true, &state);
+                 if (r < 0)
+                         return r;
+                 if (r > 0)
+@@ -2878,7 +2875,7 @@ int unit_file_lookup_state(
+ 
+                 /* Check if the file is known under other names. If it is,
+                  * it might be in use. Report that as UNIT_FILE_INDIRECT. */
+-                r = find_symlinks_in_scope(scope, paths, i, false, &state);
++                r = find_symlinks_in_scope(scope, lp, i, false, &state);
+                 if (r < 0)
+                         return r;
+                 if (r > 0)
+@@ -2908,31 +2905,31 @@ int unit_file_get_state(
+                 const char *name,
+                 UnitFileState *ret) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         int r;
+ 
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+         assert(name);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        return unit_file_lookup_state(scope, &paths, name, ret);
++        return unit_file_lookup_state(scope, &lp, name, ret);
+ }
+ 
+-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name) {
++int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) {
+         _cleanup_(install_context_done) InstallContext c = {};
+         int r;
+ 
+-        assert(paths);
++        assert(lp);
+         assert(name);
+ 
+         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        r = install_info_discover(scope, &c, paths, name, 0, NULL, NULL, NULL);
++        r = install_info_discover(scope, &c, lp, name, 0, NULL, NULL, NULL);
+         if (r == -ENOENT)
+                 return 0;
+         if (r < 0)
+@@ -3195,7 +3192,7 @@ static int execute_preset(
+                 UnitFileFlags file_flags,
+                 InstallContext *plus,
+                 InstallContext *minus,
+-                const LookupPaths *paths,
++                const LookupPaths *lp,
+                 const char *config_path,
+                 char **files,
+                 UnitFilePresetMode mode,
+@@ -3206,17 +3203,17 @@ static int execute_preset(
+ 
+         assert(plus);
+         assert(minus);
+-        assert(paths);
++        assert(lp);
+         assert(config_path);
+ 
+         if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) {
+                 _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+ 
+-                r = install_context_mark_for_removal(scope, minus, paths, &remove_symlinks_to, config_path, changes, n_changes);
++                r = install_context_mark_for_removal(scope, minus, lp, &remove_symlinks_to, config_path, changes, n_changes);
+                 if (r < 0)
+                         return r;
+ 
+-                r = remove_marked_symlinks(remove_symlinks_to, config_path, paths, false, changes, n_changes);
++                r = remove_marked_symlinks(remove_symlinks_to, config_path, lp, false, changes, n_changes);
+         } else
+                 r = 0;
+ 
+@@ -3226,7 +3223,7 @@ static int execute_preset(
+                 /* Returns number of symlinks that where supposed to be installed. */
+                 q = install_context_apply(scope,
+                                           file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE,
+-                                          plus, paths, config_path, SEARCH_LOAD, changes, n_changes);
++                                          plus, lp, config_path, SEARCH_LOAD, changes, n_changes);
+                 if (r >= 0) {
+                         if (q < 0)
+                                 r = q;
+@@ -3242,7 +3239,7 @@ static int preset_prepare_one(
+                 UnitFileScope scope,
+                 InstallContext *plus,
+                 InstallContext *minus,
+-                LookupPaths *paths,
++                LookupPaths *lp,
+                 const char *name,
+                 const UnitFilePresets *presets,
+                 UnitFileChange **changes,
+@@ -3256,7 +3253,7 @@ static int preset_prepare_one(
+         if (install_info_find(plus, name) || install_info_find(minus, name))
+                 return 0;
+ 
+-        r = install_info_discover(scope, &tmp, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++        r = install_info_discover(scope, &tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                   &i, changes, n_changes);
+         if (r < 0)
+                 return r;
+@@ -3273,20 +3270,20 @@ static int preset_prepare_one(
+                 if (instance_name_list) {
+                         char **s;
+                         STRV_FOREACH(s, instance_name_list) {
+-                                r = install_info_discover_and_check(scope, plus, paths, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                r = install_info_discover_and_check(scope, plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                                     &i, changes, n_changes);
+                                 if (r < 0)
+                                         return r;
+                         }
+                 } else {
+-                        r = install_info_discover_and_check(scope, plus, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                        r = install_info_discover_and_check(scope, plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                             &i, changes, n_changes);
+                         if (r < 0)
+                                 return r;
+                 }
+ 
+         } else
+-                r = install_info_discover(scope, minus, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                r = install_info_discover(scope, minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                           &i, changes, n_changes);
+ 
+         return r;
+@@ -3302,7 +3299,7 @@ int unit_file_preset(
+                 size_t *n_changes) {
+ 
+         _cleanup_(install_context_done) InstallContext plus = {}, minus = {};
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
+         const char *config_path;
+         char **i;
+@@ -3312,11 +3309,11 @@ int unit_file_preset(
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+         assert(mode < _UNIT_FILE_PRESET_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -3325,12 +3322,12 @@ int unit_file_preset(
+                 return r;
+ 
+         STRV_FOREACH(i, files) {
+-                r = preset_prepare_one(scope, &plus, &minus, &paths, *i, &presets, changes, n_changes);
++                r = preset_prepare_one(scope, &plus, &minus, &lp, *i, &presets, changes, n_changes);
+                 if (r < 0)
+                         return r;
+         }
+ 
+-        return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, files, mode, changes, n_changes);
++        return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes);
+ }
+ 
+ int unit_file_preset_all(
+@@ -3342,7 +3339,7 @@ int unit_file_preset_all(
+                 size_t *n_changes) {
+ 
+         _cleanup_(install_context_done) InstallContext plus = {}, minus = {};
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
+         const char *config_path = NULL;
+         char **i;
+@@ -3352,11 +3349,11 @@ int unit_file_preset_all(
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+         assert(mode < _UNIT_FILE_PRESET_MAX);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
++        config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
+         if (!config_path)
+                 return -ENXIO;
+ 
+@@ -3364,7 +3361,7 @@ int unit_file_preset_all(
+         if (r < 0)
+                 return r;
+ 
+-        STRV_FOREACH(i, paths.search_path) {
++        STRV_FOREACH(i, lp.search_path) {
+                 _cleanup_closedir_ DIR *d = NULL;
+ 
+                 d = opendir(*i);
+@@ -3383,7 +3380,7 @@ int unit_file_preset_all(
+                         if (!IN_SET(de->d_type, DT_LNK, DT_REG))
+                                 continue;
+ 
+-                        r = preset_prepare_one(scope, &plus, &minus, &paths, de->d_name, &presets, changes, n_changes);
++                        r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
+                         if (r < 0 &&
+                             !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT))
+                                 /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
+@@ -3392,7 +3389,7 @@ int unit_file_preset_all(
+                 }
+         }
+ 
+-        return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, NULL, mode, changes, n_changes);
++        return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes);
+ }
+ 
+ static UnitFileList* unit_file_list_free_one(UnitFileList *f) {
+@@ -3416,7 +3413,7 @@ int unit_file_get_list(
+                 char **states,
+                 char **patterns) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths paths = {};
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         char **dirname;
+         int r;
+ 
+@@ -3424,11 +3421,11 @@ int unit_file_get_list(
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+         assert(h);
+ 
+-        r = lookup_paths_init(&paths, scope, 0, root_dir);
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+-        STRV_FOREACH(dirname, paths.search_path) {
++        STRV_FOREACH(dirname, lp.search_path) {
+                 _cleanup_closedir_ DIR *d = NULL;
+ 
+                 d = opendir(*dirname);
+@@ -3466,7 +3463,7 @@ int unit_file_get_list(
+                         if (!f->path)
+                                 return -ENOMEM;
+ 
+-                        r = unit_file_lookup_state(scope, &paths, de->d_name, &f->state);
++                        r = unit_file_lookup_state(scope, &lp, de->d_name, &f->state);
+                         if (r < 0)
+                                 f->state = UNIT_FILE_BAD;
+ 
diff --git a/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch b/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch
new file mode 100644
index 0000000..26cd8b6
--- /dev/null
+++ b/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch
@@ -0,0 +1,191 @@
+From c36354b26c757e526e9f3d8c5bc78aa36f095f61 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 20 Jan 2022 15:47:22 +0100
+Subject: [PATCH] shared/specifier: treat NULL the same as ""
+
+We would busily allocate an empty string to concatenate all of it's
+zero characters to the output. Let's make things a bit simpler by letting
+the specifier functions return NULL to mean "nothing to append".
+
+(cherry picked from commit 01c69460811f64e416c3e4a545ef84787bb6700b)
+
+Related: #2082131
+---
+ src/shared/specifier.c    | 56 ++++++++++++++-------------------------
+ src/test/test-specifier.c |  9 ++++---
+ 2 files changed, 25 insertions(+), 40 deletions(-)
+
+diff --git a/src/shared/specifier.c b/src/shared/specifier.c
+index 1fd76b1d15..f8ab98541f 100644
+--- a/src/shared/specifier.c
++++ b/src/shared/specifier.c
+@@ -35,7 +35,6 @@
+ int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret) {
+         _cleanup_free_ char *result = NULL;
+         bool percent = false;
+-        const char *f;
+         size_t l;
+         char *t;
+         int r;
+@@ -48,8 +47,10 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[
+                 return -ENOMEM;
+         t = result;
+ 
+-        for (f = text; *f != '\0'; f++, l--) {
++        for (const char *f = text; *f != '\0'; f++, l--) {
+                 if (percent) {
++                        percent = false;
++
+                         if (*f == '%')
+                                 *(t++) = '%';
+                         else {
+@@ -66,6 +67,8 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[
+                                         r = i->lookup(i->specifier, i->data, root, userdata, &w);
+                                         if (r < 0)
+                                                 return r;
++                                        if (isempty(w))
++                                                continue;
+ 
+                                         j = t - result;
+                                         k = strlen(w);
+@@ -82,8 +85,6 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[
+                                         *(t++) = *f;
+                                 }
+                         }
+-
+-                        percent = false;
+                 } else if (*f == '%')
+                         percent = true;
+                 else
+@@ -108,11 +109,13 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[
+ /* Generic handler for simple string replacements */
+ 
+ int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        char *n;
++        char *n = NULL;
+ 
+-        n = strdup(strempty(data));
+-        if (!n)
+-                return -ENOMEM;
++        if (!isempty(data)) {
++                n = strdup(data);
++                if (!n)
++                        return -ENOMEM;
++        }
+ 
+         *ret = n;
+         return 0;
+@@ -186,10 +189,8 @@ int specifier_short_host_name(char specifier, const void *data, const char *root
+ int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+         struct utsname uts;
+         char *n;
+-        int r;
+ 
+-        r = uname(&uts);
+-        if (r < 0)
++        if (uname(&uts) < 0)
+                 return -errno;
+ 
+         n = strdup(uts.release);
+@@ -211,47 +212,31 @@ int specifier_architecture(char specifier, const void *data, const char *root, c
+         return 0;
+ }
+ 
+-static int specifier_os_release_common(const char *field, const char *root, char **ret) {
+-        char *t = NULL;
+-        int r;
+-
+-        r = parse_os_release(root, field, &t);
+-        if (r < 0)
+-                return r;
+-        if (!t) {
+-                /* fields in /etc/os-release might quite possibly be missing, even if everything is entirely
+-                 * valid otherwise. Let's hence return "" in that case. */
+-                t = strdup("");
+-                if (!t)
+-                        return -ENOMEM;
+-        }
+-
+-        *ret = t;
+-        return 0;
+-}
++/* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
++ * otherwise. We'll return an empty value or NULL in that case from the functions below. */
+ 
+ int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("ID", root, ret);
++        return parse_os_release(root, "ID", ret);
+ }
+ 
+ int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("VERSION_ID", root, ret);
++        return parse_os_release(root, "VERSION_ID", ret);
+ }
+ 
+ int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("BUILD_ID", root, ret);
++        return parse_os_release(root, "BUILD_ID", ret);
+ }
+ 
+ int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("VARIANT_ID", root, ret);
++        return parse_os_release(root, "VARIANT_ID", ret);
+ }
+ 
+ int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("IMAGE_ID", root, ret);
++        return parse_os_release(root, "IMAGE_ID", ret);
+ }
+ 
+ int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return specifier_os_release_common("IMAGE_VERSION", root, ret);
++        return parse_os_release(root, "IMAGE_VERSION", ret);
+ }
+ 
+ int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+@@ -291,7 +276,6 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons
+ }
+ 
+ int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-
+         if (asprintf(ret, UID_FMT, getuid()) < 0)
+                 return -ENOMEM;
+ 
+diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
+index 40957eeb59..dda993ce9d 100644
+--- a/src/test/test-specifier.c
++++ b/src/test/test-specifier.c
+@@ -56,6 +56,7 @@ TEST(specifier_printf) {
+         static const Specifier table[] = {
+                 { 'X', specifier_string,         (char*) "AAAA" },
+                 { 'Y', specifier_string,         (char*) "BBBB" },
++                { 'e', specifier_string,         NULL           },
+                 COMMON_SYSTEM_SPECIFIERS,
+                 {}
+         };
+@@ -63,21 +64,21 @@ TEST(specifier_printf) {
+         _cleanup_free_ char *w = NULL;
+         int r;
+ 
+-        r = specifier_printf("xxx a=%X b=%Y yyy", SIZE_MAX, table, NULL, NULL, &w);
++        r = specifier_printf("xxx a=%X b=%Y e=%e yyy", SIZE_MAX, table, NULL, NULL, &w);
+         assert_se(r >= 0);
+         assert_se(w);
+ 
+         puts(w);
+-        assert_se(streq(w, "xxx a=AAAA b=BBBB yyy"));
++        assert_se(streq(w, "xxx a=AAAA b=BBBB e= yyy"));
+ 
+         free(w);
+-        r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a", SIZE_MAX, table, NULL, NULL, &w);
++        r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a, empty=%e", SIZE_MAX, table, NULL, NULL, &w);
+         assert_se(r >= 0);
+         assert_se(w);
+         puts(w);
+ 
+         w = mfree(w);
+-        specifier_printf("os=%o, os-version=%w, build=%B, variant=%W", SIZE_MAX, table, NULL, NULL, &w);
++        specifier_printf("os=%o, os-version=%w, build=%B, variant=%W, empty=%e%e%e", SIZE_MAX, table, NULL, NULL, &w);
+         if (w)
+                 puts(w);
+ }
diff --git a/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch b/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch
new file mode 100644
index 0000000..c49163f
--- /dev/null
+++ b/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch
@@ -0,0 +1,30 @@
+From 5f66b67ac6594a3dee6e463a5f31c2d1051503cc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 11:47:23 +0100
+Subject: [PATCH] shared/install: do not print aliases longer than
+ UNIT_NAME_MAX
+
+065364920281e1cf59cab989e17aff21790505c4 did the conversion to install_path_printf().
+But IIUC, here we are just looking at a unit file name, not the full
+path.
+
+(cherry picked from commit 46801e7647d98ccac8fca4cc91ef9c3513151943)
+
+Related: #2082131
+---
+ src/shared/install.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index c6cbe96fdb..79e5109ce1 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1825,7 +1825,7 @@ static int install_info_symlink_alias(
+         STRV_FOREACH(s, i->aliases) {
+                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+ 
+-                q = install_path_printf(i, *s, i->root, &dst);
++                q = install_name_printf(i, *s, i->root, &dst);
+                 if (q < 0)
+                         return q;
+ 
diff --git a/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch b/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch
new file mode 100644
index 0000000..361fa69
--- /dev/null
+++ b/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch
@@ -0,0 +1,50 @@
+From b635f03ba218df6c184da4d53648b13241b6b07d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 11:49:19 +0100
+Subject: [PATCH] shared/install-printf: drop now-unused install_path_printf()
+
+(cherry picked from commit 2cdd6bef9c940774d40046db9be41ea73cdb5d8e)
+
+Related: #2082131
+---
+ src/shared/install-printf.c | 4 ++--
+ src/shared/install-printf.h | 9 +--------
+ 2 files changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
+index 403d6013c1..6ff4198ac9 100644
+--- a/src/shared/install-printf.c
++++ b/src/shared/install-printf.c
+@@ -103,7 +103,7 @@ static int specifier_last_component(char specifier, const void *data, const char
+         return 0;
+ }
+ 
+-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret) {
++int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
+         /* This is similar to unit_name_printf() */
+ 
+         const Specifier table[] = {
+@@ -123,5 +123,5 @@ int install_full_printf_internal(const UnitFileInstallInfo *i, const char *forma
+         assert(format);
+         assert(ret);
+ 
+-        return specifier_printf(format, max_length, table, root, i, ret);
++        return specifier_printf(format, UNIT_NAME_MAX, table, root, i, ret);
+ }
+diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
+index af32acc2ca..5ca9406797 100644
+--- a/src/shared/install-printf.h
++++ b/src/shared/install-printf.h
+@@ -4,11 +4,4 @@
+ #include "install.h"
+ #include "unit-name.h"
+ 
+-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret);
+-
+-static inline int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
+-        return install_full_printf_internal(i, format, UNIT_NAME_MAX, root, ret);
+-}
+-static inline int install_path_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
+-        return install_full_printf_internal(i, format, PATH_MAX-1, root, ret);
+-}
++int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret);
diff --git a/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch b/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch
new file mode 100644
index 0000000..8ce9253
--- /dev/null
+++ b/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch
@@ -0,0 +1,1088 @@
+From f7660c55adcf3e6a7eec251c474edc0cbb19e26d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 23 Mar 2022 10:48:13 +0100
+Subject: [PATCH] strv: declare iterator of FOREACH_STRING() in the loop
+
+Same idea as 03677889f0ef42cdc534bf3b31265a054b20a354.
+
+No functional change intended. The type of the iterator is generally changed to
+be 'const char*' instead of 'char*'. Despite the type commonly used, modifying
+the string was not allowed.
+
+I adjusted the naming of some short variables for clarity and reduced the scope
+of some variable declarations in code that was being touched anyway.
+
+(cherry picked from commit 5980d463048f25411c55da2f6387cdc8eaeef4c8)
+
+Related: #2082131
+---
+ src/activate/activate.c               |  1 -
+ src/basic/fs-util.c                   |  1 -
+ src/basic/os-util.c                   |  2 --
+ src/basic/strv.h                      |  2 +-
+ src/basic/unit-file.c                 |  1 -
+ src/boot/bootctl.c                    |  9 ++++-----
+ src/cgtop/cgtop.c                     |  1 -
+ src/core/apparmor-setup.c             |  1 -
+ src/core/efi-random.c                 | 11 +++++------
+ src/core/execute.c                    |  1 -
+ src/core/timer.c                      |  2 --
+ src/core/unit.c                       |  1 -
+ src/getty-generator/getty-generator.c |  4 +---
+ src/home/homectl.c                    | 17 +++--------------
+ src/home/homed-manager.c              |  1 -
+ src/libsystemd/sd-device/sd-device.c  |  6 +-----
+ src/locale/localed.c                  |  2 +-
+ src/login/logind-user.c               |  1 -
+ src/nspawn/nspawn-cgroup.c            |  1 -
+ src/nspawn/nspawn-mount.c             |  4 ++--
+ src/nspawn/nspawn.c                   |  5 ++---
+ src/partition/repart.c                |  3 +--
+ src/portable/portable.c               |  1 -
+ src/resolve/resolved-resolv-conf.c    |  2 --
+ src/resolve/test-resolved-etc-hosts.c |  1 -
+ src/run/run.c                         |  2 --
+ src/shared/bootspec.c                 |  3 ++-
+ src/shared/chown-recursive.c          |  1 -
+ src/shared/discover-image.c           |  2 +-
+ src/shared/dissect-image.c            |  1 -
+ src/shared/machine-id-setup.c         |  2 +-
+ src/shared/mount-setup.c              |  4 ----
+ src/shared/netif-util.c               |  7 ++++---
+ src/shared/pager.c                    |  2 +-
+ src/shared/psi-util.c                 |  2 --
+ src/shared/switch-root.c              | 11 +++++------
+ src/shared/tests.c                    | 11 +++++------
+ src/systemctl/systemctl-edit.c        |  8 ++++----
+ src/systemctl/systemctl-sysv-compat.c | 25 ++++++++++++-------------
+ src/test/test-bpf-devices.c           |  1 -
+ src/test/test-ellipsize.c             |  8 ++------
+ src/test/test-env-file.c              |  2 --
+ src/test/test-execute.c               | 16 ++++++----------
+ src/test/test-fileio.c                |  1 -
+ src/test/test-gpt.c                   |  6 +-----
+ src/test/test-libcrypt-util.c         |  2 --
+ src/test/test-loop-block.c            |  1 -
+ src/test/test-mount-util.c            |  1 -
+ src/test/test-stat-util.c             |  2 --
+ src/test/test-strv.c                  |  4 +---
+ src/test/test-utf8.c                  |  3 ---
+ src/tmpfiles/offline-passwd.c         |  2 --
+ 52 files changed, 66 insertions(+), 145 deletions(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index 0c32152671..b625d97f2e 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -124,7 +124,6 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ 
+ static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) {
+         _cleanup_strv_free_ char **envp = NULL;
+-        const char *var;
+         char **s;
+         int r;
+ 
+diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
+index 552986f546..2ee7c23f68 100644
+--- a/src/basic/fs-util.c
++++ b/src/basic/fs-util.c
+@@ -570,7 +570,6 @@ int get_files_in_directory(const char *path, char ***list) {
+ }
+ 
+ static int getenv_tmp_dir(const char **ret_path) {
+-        const char *n;
+         int r, ret = 0;
+ 
+         assert(ret_path);
+diff --git a/src/basic/os-util.c b/src/basic/os-util.c
+index 75c8500e51..a6e4d09473 100644
+--- a/src/basic/os-util.c
++++ b/src/basic/os-util.c
+@@ -170,8 +170,6 @@ int open_extension_release(const char *root, const char *extension, char **ret_p
+                         }
+                 }
+         } else {
+-                const char *p;
+-
+                 FOREACH_STRING(p, "/etc/os-release", "/usr/lib/os-release") {
+                         r = chase_symlinks(p, root, CHASE_PREFIX_ROOT,
+                                            ret_path ? &q : NULL,
+diff --git a/src/basic/strv.h b/src/basic/strv.h
+index 092d40c84b..27d4450468 100644
+--- a/src/basic/strv.h
++++ b/src/basic/strv.h
+@@ -207,7 +207,7 @@ void strv_print(char * const *l);
+         })
+ 
+ #define _FOREACH_STRING(uniq, x, y, ...)                                \
+-        for (char **UNIQ_T(l, uniq) = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \
++        for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \
+              x;                                                         \
+              x = *(++UNIQ_T(l, uniq)))
+ 
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index faea92f66d..96826e2940 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -237,7 +237,6 @@ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_
+ }
+ 
+ static int directory_name_is_valid(const char *name) {
+-        const char *suffix;
+ 
+         /* Accept a directory whose name is a valid unit file name ending in .wants/, .requires/ or .d/ */
+ 
+diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
+index 1bcb4d1689..9427a0e4ce 100644
+--- a/src/boot/bootctl.c
++++ b/src/boot/bootctl.c
+@@ -1044,12 +1044,11 @@ static int remove_variables(sd_id128_t uuid, const char *path, bool in_order) {
+ }
+ 
+ static int remove_loader_variables(void) {
+-        const char *variable;
+         int r = 0;
+ 
+         /* Remove all persistent loader variables we define */
+ 
+-        FOREACH_STRING(variable,
++        FOREACH_STRING(var,
+                        EFI_LOADER_VARIABLE(LoaderConfigTimeout),
+                        EFI_LOADER_VARIABLE(LoaderConfigTimeoutOneShot),
+                        EFI_LOADER_VARIABLE(LoaderEntryDefault),
+@@ -1058,15 +1057,15 @@ static int remove_loader_variables(void) {
+ 
+                 int q;
+ 
+-                q = efi_set_variable(variable, NULL, 0);
++                q = efi_set_variable(var, NULL, 0);
+                 if (q == -ENOENT)
+                         continue;
+                 if (q < 0) {
+-                        log_warning_errno(q, "Failed to remove EFI variable %s: %m", variable);
++                        log_warning_errno(q, "Failed to remove EFI variable %s: %m", var);
+                         if (r >= 0)
+                                 r = q;
+                 } else
+-                        log_info("Removed EFI variable %s.", variable);
++                        log_info("Removed EFI variable %s.", var);
+         }
+ 
+         return r;
+diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
+index e5ab904c4f..b023e71757 100644
+--- a/src/cgtop/cgtop.c
++++ b/src/cgtop/cgtop.c
+@@ -510,7 +510,6 @@ static int refresh_one(
+ }
+ 
+ static int refresh(const char *root, Hashmap *a, Hashmap *b, unsigned iteration) {
+-        const char *c;
+         int r;
+ 
+         FOREACH_STRING(c, SYSTEMD_CGROUP_CONTROLLER, "cpu", "cpuacct", "memory", "io", "blkio", "pids") {
+diff --git a/src/core/apparmor-setup.c b/src/core/apparmor-setup.c
+index 304a3e6aac..3426a10358 100644
+--- a/src/core/apparmor-setup.c
++++ b/src/core/apparmor-setup.c
+@@ -24,7 +24,6 @@ int mac_apparmor_setup(void) {
+ #if HAVE_APPARMOR
+         _cleanup_(aa_policy_cache_unrefp) aa_policy_cache *policy_cache = NULL;
+         _cleanup_(aa_features_unrefp) aa_features *features = NULL;
+-        const char *current_file;
+         _cleanup_free_ char *current_profile = NULL, *cache_dir_path = NULL;
+         int r;
+ 
+diff --git a/src/core/efi-random.c b/src/core/efi-random.c
+index a0b89d1379..e8d8ccd117 100644
+--- a/src/core/efi-random.c
++++ b/src/core/efi-random.c
+@@ -20,24 +20,23 @@
+  * is suitably validated. */
+ 
+ static void lock_down_efi_variables(void) {
+-        const char *p;
+         int r;
+ 
+         /* Paranoia: let's restrict access modes of these a bit, so that unprivileged users can't use them to
+          * identify the system or gain too much insight into what we might have credited to the entropy
+          * pool. */
+-        FOREACH_STRING(p,
++        FOREACH_STRING(path,
+                        EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderRandomSeed)),
+                        EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken))) {
+ 
+-                r = chattr_path(p, 0, FS_IMMUTABLE_FL, NULL);
++                r = chattr_path(path, 0, FS_IMMUTABLE_FL, NULL);
+                 if (r == -ENOENT)
+                         continue;
+                 if (r < 0)
+-                        log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from %s, ignoring: %m", p);
++                        log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from %s, ignoring: %m", path);
+ 
+-                if (chmod(p, 0600) < 0)
+-                        log_warning_errno(errno, "Failed to reduce access mode of %s, ignoring: %m", p);
++                if (chmod(path, 0600) < 0)
++                        log_warning_errno(errno, "Failed to reduce access mode of %s, ignoring: %m", path);
+         }
+ }
+ 
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 8a1d070e26..3cafd0f17d 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -2917,7 +2917,6 @@ static int setup_credentials(
+                 uid_t uid) {
+ 
+         _cleanup_free_ char *p = NULL, *q = NULL;
+-        const char *i;
+         int r;
+ 
+         assert(context);
+diff --git a/src/core/timer.c b/src/core/timer.c
+index b439802bc2..23f466c630 100644
+--- a/src/core/timer.c
++++ b/src/core/timer.c
+@@ -100,8 +100,6 @@ static int timer_add_default_dependencies(Timer *t) {
+                         return r;
+ 
+                 LIST_FOREACH(value, v, t->values) {
+-                        const char *target;
+-
+                         if (v->base != TIMER_CALENDAR)
+                                 continue;
+ 
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 0eade13ee9..3d30f3807c 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -4104,7 +4104,6 @@ int unit_patch_contexts(Unit *u) {
+ 
+                 if ((ec->root_image || !LIST_IS_EMPTY(ec->mount_images)) &&
+                     (cc->device_policy != CGROUP_DEVICE_POLICY_AUTO || cc->device_allow)) {
+-                        const char *p;
+ 
+                         /* When RootImage= or MountImages= is specified, the following devices are touched. */
+                         FOREACH_STRING(p, "/dev/loop-control", "/dev/mapper/control") {
+diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
+index 59bdfc496b..4e8162a319 100644
+--- a/src/getty-generator/getty-generator.c
++++ b/src/getty-generator/getty-generator.c
+@@ -215,9 +215,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
+                         return r;
+         }
+ 
+-        /* Automatically add in a serial getty on the first
+-         * virtualizer console */
+-        const char *j;
++        /* Automatically add in a serial getty on the first virtualizer console */
+         FOREACH_STRING(j,
+                        "hvc0",
+                        "xvc0",
+diff --git a/src/home/homectl.c b/src/home/homectl.c
+index 1e3c96f5ad..ac7b00889d 100644
+--- a/src/home/homectl.c
++++ b/src/home/homectl.c
+@@ -2961,8 +2961,6 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                 case ARG_DISK_SIZE:
+                         if (isempty(optarg)) {
+-                                const char *prop;
+-
+                                 FOREACH_STRING(prop, "diskSize", "diskSizeRelative", "rebalanceWeight") {
+                                         r = drop_from_identity(prop);
+                                         if (r < 0)
+@@ -3464,9 +3462,7 @@ static int parse_argv(int argc, char *argv[]) {
+                         break;
+                 }
+ 
+-                case ARG_PKCS11_TOKEN_URI: {
+-                        const char *p;
+-
++                case ARG_PKCS11_TOKEN_URI:
+                         if (streq(optarg, "list"))
+                                 return pkcs11_list_tokens();
+ 
+@@ -3500,11 +3496,8 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                         strv_uniq(arg_pkcs11_token_uri);
+                         break;
+-                }
+-
+-                case ARG_FIDO2_DEVICE: {
+-                        const char *p;
+ 
++                case ARG_FIDO2_DEVICE:
+                         if (streq(optarg, "list"))
+                                 return fido2_list_devices();
+ 
+@@ -3534,7 +3527,6 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                         strv_uniq(arg_fido2_device);
+                         break;
+-                }
+ 
+                 case ARG_FIDO2_WITH_PIN: {
+                         bool lock_with_pin;
+@@ -3569,9 +3561,7 @@ static int parse_argv(int argc, char *argv[]) {
+                         break;
+                 }
+ 
+-                case ARG_RECOVERY_KEY: {
+-                        const char *p;
+-
++                case ARG_RECOVERY_KEY:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to parse --recovery-key= argument: %s", optarg);
+@@ -3585,7 +3575,6 @@ static int parse_argv(int argc, char *argv[]) {
+                         }
+ 
+                         break;
+-                }
+ 
+                 case ARG_AUTO_RESIZE_MODE:
+                         if (isempty(optarg)) {
+diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
+index c1ec555cac..a02248a6de 100644
+--- a/src/home/homed-manager.c
++++ b/src/home/homed-manager.c
+@@ -482,7 +482,6 @@ static int manager_enumerate_records(Manager *m) {
+ static int search_quota(uid_t uid, const char *exclude_quota_path) {
+         struct stat exclude_st = {};
+         dev_t previous_devno = 0;
+-        const char *where;
+         int r;
+ 
+         /* Checks whether the specified UID owns any files on the files system, but ignore any file system
+diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
+index b163a0fb6b..af11730f33 100644
+--- a/src/libsystemd/sd-device/sd-device.c
++++ b/src/libsystemd/sd-device/sd-device.c
+@@ -322,7 +322,6 @@ _public_ int sd_device_new_from_subsystem_sysname(
+                 const char *subsystem,
+                 const char *sysname) {
+ 
+-        const char *s;
+         char *name;
+         int r;
+ 
+@@ -331,7 +330,6 @@ _public_ int sd_device_new_from_subsystem_sysname(
+         assert_return(path_is_normalized(sysname), -EINVAL);
+ 
+         if (streq(subsystem, "subsystem")) {
+-
+                 FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/", "/sys/class/") {
+                         r = device_strjoin_new(s, sysname, NULL, NULL, ret);
+                         if (r < 0)
+@@ -341,7 +339,6 @@ _public_ int sd_device_new_from_subsystem_sysname(
+                 }
+ 
+         } else  if (streq(subsystem, "module")) {
+-
+                 r = device_strjoin_new("/sys/module/", sysname, NULL, NULL, ret);
+                 if (r < 0)
+                         return r;
+@@ -353,9 +350,8 @@ _public_ int sd_device_new_from_subsystem_sysname(
+ 
+                 sep = strchr(sysname, ':');
+                 if (sep && sep[1] != '\0') { /* Require ":" and something non-empty after that. */
+-                        const char *subsys;
+ 
+-                        subsys = memdupa_suffix0(sysname, sep - sysname);
++                        const char *subsys = memdupa_suffix0(sysname, sep - sysname);
+                         sep++;
+ 
+                         FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/") {
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index c228385d0e..f3e6ef2db1 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -475,7 +475,7 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
+ 
+ static int method_set_vc_keyboard(sd_bus_message *m, void *userdata, sd_bus_error *error) {
+         Context *c = userdata;
+-        const char *name, *keymap, *keymap_toggle;
++        const char *keymap, *keymap_toggle;
+         int convert, interactive, r;
+ 
+         assert(m);
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index 6d250be321..74739b4242 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -626,7 +626,6 @@ int user_check_linger_file(User *u) {
+ }
+ 
+ static bool user_unit_active(User *u) {
+-        const char *i;
+         int r;
+ 
+         assert(u->service);
+diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
+index d472e80c03..d8e1fe0907 100644
+--- a/src/nspawn/nspawn-cgroup.c
++++ b/src/nspawn/nspawn-cgroup.c
+@@ -22,7 +22,6 @@
+ 
+ static int chown_cgroup_path(const char *path, uid_t uid_shift) {
+         _cleanup_close_ int fd = -1;
+-        const char *fn;
+ 
+         fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+         if (fd < 0)
+diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
+index 40773d90c1..678fde3669 100644
+--- a/src/nspawn/nspawn-mount.c
++++ b/src/nspawn/nspawn-mount.c
+@@ -408,7 +408,7 @@ int tmpfs_patch_options(
+ }
+ 
+ int mount_sysfs(const char *dest, MountSettingsMask mount_settings) {
+-        const char *full, *top, *x;
++        const char *full, *top;
+         int r;
+         unsigned long extra_flags = 0;
+ 
+@@ -468,7 +468,7 @@ int mount_sysfs(const char *dest, MountSettingsMask mount_settings) {
+         /* Create mountpoint for cgroups. Otherwise we are not allowed since we
+          * remount /sys read-only.
+          */
+-        x = prefix_roota(top, "/fs/cgroup");
++        const char *x = prefix_roota(top, "/fs/cgroup");
+         (void) mkdir_p(x, 0755);
+ 
+         return mount_nofollow_verbose(LOG_ERR, NULL, top, NULL,
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 9225c8f162..1333a8702a 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -2564,7 +2564,7 @@ static int setup_hostname(void) {
+ 
+ static int setup_journal(const char *directory) {
+         _cleanup_free_ char *d = NULL;
+-        const char *dirname, *p, *q;
++        const char *p, *q;
+         sd_id128_t this_id;
+         bool try;
+         int r;
+@@ -3513,7 +3513,6 @@ static int inner_child(
+         (void) fdset_close_others(fds);
+ 
+         if (arg_start_mode == START_BOOT) {
+-                const char *init;
+                 char **a;
+                 size_t m;
+ 
+@@ -4604,7 +4603,7 @@ static int load_settings(void) {
+         _cleanup_(settings_freep) Settings *settings = NULL;
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_free_ char *p = NULL;
+-        const char *fn, *i;
++        const char *fn;
+         int r;
+ 
+         if (arg_oci_bundle)
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index 0862a37a8d..509cf69b5d 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -4561,9 +4561,8 @@ static int acquire_root_devno(
+ }
+ 
+ static int find_root(char **ret, int *ret_fd) {
+-        const char *p;
+-        int r;
+         _cleanup_free_ char *device = NULL;
++        int r;
+ 
+         assert(ret);
+         assert(ret_fd);
+diff --git a/src/portable/portable.c b/src/portable/portable.c
+index be311f94c4..bdc10da36f 100644
+--- a/src/portable/portable.c
++++ b/src/portable/portable.c
+@@ -1568,7 +1568,6 @@ int portable_detach(
+ 
+         SET_FOREACH(item, unit_files) {
+                 _cleanup_free_ char *md = NULL;
+-                const char *suffix;
+ 
+                 if (unlinkat(dirfd(d), item, 0) < 0) {
+                         log_debug_errno(errno, "Can't remove unit file %s/%s: %m", where, item);
+diff --git a/src/resolve/resolved-resolv-conf.c b/src/resolve/resolved-resolv-conf.c
+index e9785ab964..ee86cf75a0 100644
+--- a/src/resolve/resolved-resolv-conf.c
++++ b/src/resolve/resolved-resolv-conf.c
+@@ -51,8 +51,6 @@ int manager_check_resolv_conf(const Manager *m) {
+ }
+ 
+ static bool file_is_our_own(const struct stat *st) {
+-        const char *path;
+-
+         assert(st);
+ 
+         FOREACH_STRING(path,
+diff --git a/src/resolve/test-resolved-etc-hosts.c b/src/resolve/test-resolved-etc-hosts.c
+index cc55a980ad..f15e025b7b 100644
+--- a/src/resolve/test-resolved-etc-hosts.c
++++ b/src/resolve/test-resolved-etc-hosts.c
+@@ -45,7 +45,6 @@ static void test_parse_etc_hosts(void) {
+ 
+         int fd;
+         _cleanup_fclose_ FILE *f;
+-        const char *s;
+ 
+         fd = mkostemp_safe(t);
+         assert_se(fd >= 0);
+diff --git a/src/run/run.c b/src/run/run.c
+index e75b027542..2ae629f595 100644
+--- a/src/run/run.c
++++ b/src/run/run.c
+@@ -1702,8 +1702,6 @@ static int start_transient_trigger(
+ }
+ 
+ static bool shall_make_executable_absolute(void) {
+-        const char *f;
+-
+         if (strv_isempty(arg_cmdline))
+                 return false;
+         if (arg_transport != BUS_TRANSPORT_LOCAL)
+diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
+index 0076092c2a..a17375eb4c 100644
+--- a/src/shared/bootspec.c
++++ b/src/shared/bootspec.c
+@@ -1207,7 +1207,8 @@ int find_esp_and_warn(
+                 goto found;
+         }
+ 
+-        FOREACH_STRING(path, "/efi", "/boot", "/boot/efi") {
++        FOREACH_STRING(_path, "/efi", "/boot", "/boot/efi") {
++                path = _path;
+ 
+                 r = verify_esp(path, true, unprivileged_mode, ret_part, ret_pstart, ret_psize, ret_uuid);
+                 if (r >= 0)
+diff --git a/src/shared/chown-recursive.c b/src/shared/chown-recursive.c
+index 7c9a3050b4..05a7a10ce4 100644
+--- a/src/shared/chown-recursive.c
++++ b/src/shared/chown-recursive.c
+@@ -21,7 +21,6 @@ static int chown_one(
+                 gid_t gid,
+                 mode_t mask) {
+ 
+-        const char *n;
+         int r;
+ 
+         assert(fd >= 0);
+diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c
+index 268d910214..1d432328e7 100644
+--- a/src/shared/discover-image.c
++++ b/src/shared/discover-image.c
+@@ -85,7 +85,7 @@ DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(image_hash_ops, char, string_hash_func, st
+ 
+ static char **image_settings_path(Image *image) {
+         _cleanup_strv_free_ char **l = NULL;
+-        const char *fn, *s;
++        const char *fn;
+         unsigned i = 0;
+ 
+         assert(image);
+diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
+index 39a7f4c3f2..b38f16c37a 100644
+--- a/src/shared/dissect-image.c
++++ b/src/shared/dissect-image.c
+@@ -3042,7 +3042,6 @@ int dissected_image_acquire_metadata(DissectedImage *m, DissectImageFlags extra_
+ 
+                         case META_HAS_INIT_SYSTEM: {
+                                 bool found = false;
+-                                const char *init;
+ 
+                                 FOREACH_STRING(init,
+                                                "/usr/lib/systemd/systemd",  /* systemd on /usr merged system */
+diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c
+index e483675a75..df4ac419cb 100644
+--- a/src/shared/machine-id-setup.c
++++ b/src/shared/machine-id-setup.c
+@@ -197,7 +197,7 @@ finish:
+ 
+ int machine_id_commit(const char *root) {
+         _cleanup_close_ int fd = -1, initial_mntns_fd = -1;
+-        const char *etc_machine_id, *sync_path;
++        const char *etc_machine_id;
+         sd_id128_t id;
+         int r;
+ 
+diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c
+index 7917968497..7eadff3ace 100644
+--- a/src/shared/mount-setup.c
++++ b/src/shared/mount-setup.c
+@@ -126,9 +126,6 @@ bool mount_point_is_api(const char *path) {
+ }
+ 
+ bool mount_point_ignore(const char *path) {
+-
+-        const char *i;
+-
+         /* These are API file systems that might be mounted by other software, we just list them here so that
+          * we know that we should ignore them. */
+         FOREACH_STRING(i,
+@@ -518,7 +515,6 @@ int mount_setup(bool loaded_policy, bool leave_propagation) {
+          * use the same label for all their files. */
+         if (loaded_policy) {
+                 usec_t before_relabel, after_relabel;
+-                const char *i;
+                 int n_extra;
+ 
+                 before_relabel = now(CLOCK_MONOTONIC);
+diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c
+index 603d4de109..7605427052 100644
+--- a/src/shared/netif-util.c
++++ b/src/shared/netif-util.c
+@@ -39,14 +39,15 @@ int net_get_type_string(sd_device *device, uint16_t iftype, char **ret) {
+ }
+ 
+ const char *net_get_persistent_name(sd_device *device) {
+-        const char *name, *field;
+-
+         assert(device);
+ 
+         /* fetch some persistent data unique (on this machine) to this device */
+-        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC")
++        FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") {
++                const char *name;
++
+                 if (sd_device_get_property_value(device, field, &name) >= 0)
+                         return name;
++        }
+ 
+         return NULL;
+ }
+diff --git a/src/shared/pager.c b/src/shared/pager.c
+index 9426d3ef98..1a93deb628 100644
+--- a/src/shared/pager.c
++++ b/src/shared/pager.c
+@@ -144,7 +144,7 @@ void pager_open(PagerFlags flags) {
+         if (r < 0)
+                 return;
+         if (r == 0) {
+-                const char *less_charset, *exe;
++                const char *less_charset;
+ 
+                 /* In the child start the pager */
+ 
+diff --git a/src/shared/psi-util.c b/src/shared/psi-util.c
+index 009095e8c3..8bdd0d4a85 100644
+--- a/src/shared/psi-util.c
++++ b/src/shared/psi-util.c
+@@ -106,8 +106,6 @@ int read_resource_pressure(const char *path, PressureType type, ResourcePressure
+ }
+ 
+ int is_pressure_supported(void) {
+-        const char *p;
+-
+         /* The pressure files, both under /proc and in cgroups, will exist
+          * even if the kernel has PSI support disabled; we have to read
+          * the file to make sure it doesn't return -EOPNOTSUPP */
+diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
+index 99cd574197..1a444841fa 100644
+--- a/src/shared/switch-root.c
++++ b/src/shared/switch-root.c
+@@ -33,7 +33,6 @@ int switch_root(const char *new_root,
+         _cleanup_free_ char *resolved_old_root_after = NULL;
+         _cleanup_close_ int old_root_fd = -1;
+         bool old_root_remove;
+-        const char *i;
+         int r;
+ 
+         assert(new_root);
+@@ -64,12 +63,12 @@ int switch_root(const char *new_root,
+         if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0)
+                 return log_error_errno(errno, "Failed to set \"/\" mount propagation to private: %m");
+ 
+-        FOREACH_STRING(i, "/sys", "/dev", "/run", "/proc") {
++        FOREACH_STRING(path, "/sys", "/dev", "/run", "/proc") {
+                 _cleanup_free_ char *chased = NULL;
+ 
+-                r = chase_symlinks(i, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL);
++                r = chase_symlinks(path, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, i);
++                        return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, path);
+                 if (r > 0) {
+                         /* Already exists. Let's see if it is a mount point already. */
+                         r = path_is_mount_point(chased, NULL, 0);
+@@ -81,8 +80,8 @@ int switch_root(const char *new_root,
+                          /* Doesn't exist yet? */
+                         (void) mkdir_p_label(chased, 0755);
+ 
+-                if (mount(i, chased, NULL, mount_flags, NULL) < 0)
+-                        return log_error_errno(errno, "Failed to mount %s to %s: %m", i, chased);
++                if (mount(path, chased, NULL, mount_flags, NULL) < 0)
++                        return log_error_errno(errno, "Failed to mount %s to %s: %m", path, chased);
+         }
+ 
+         /* Do not fail if base_filesystem_create() fails. Not all switch roots are like base_filesystem_create() wants
+diff --git a/src/shared/tests.c b/src/shared/tests.c
+index b00006b41a..f5d9536411 100644
+--- a/src/shared/tests.c
++++ b/src/shared/tests.c
+@@ -307,16 +307,15 @@ const char *ci_environment(void) {
+          * just the general CI environment type, but also whether we're sanitizing or not, etc. The caller is
+          * expected to use strstr on the returned value. */
+         static const char *ans = POINTER_MAX;
+-        const char *p;
+         int r;
+ 
+         if (ans != POINTER_MAX)
+                 return ans;
+ 
+         /* We allow specifying the environment with $CITYPE. Nobody uses this so far, but we are ready. */
+-        p = getenv("CITYPE");
+-        if (!isempty(p))
+-                return (ans = p);
++        const char *citype = getenv("CITYPE");
++        if (!isempty(citype))
++                return (ans = citype);
+ 
+         if (getenv_bool("TRAVIS") > 0)
+                 return (ans = "travis");
+@@ -327,12 +326,12 @@ const char *ci_environment(void) {
+         if (getenv("AUTOPKGTEST_ARTIFACTS") || getenv("AUTOPKGTEST_TMP"))
+                 return (ans = "autopkgtest");
+ 
+-        FOREACH_STRING(p, "CI", "CONTINOUS_INTEGRATION") {
++        FOREACH_STRING(var, "CI", "CONTINOUS_INTEGRATION") {
+                 /* Those vars are booleans according to Semaphore and Travis docs:
+                  * https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
+                  * https://docs.semaphoreci.com/ci-cd-environment/environment-variables/#ci
+                  */
+-                r = getenv_bool(p);
++                r = getenv_bool(var);
+                 if (r > 0)
+                         return (ans = "unknown"); /* Some other unknown thing */
+                 if (r == 0)
+diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
+index b59a67ac22..a97aa7be4c 100644
+--- a/src/systemctl/systemctl-edit.c
++++ b/src/systemctl/systemctl-edit.c
+@@ -320,7 +320,7 @@ static int run_editor(char **paths) {
+         if (r == 0) {
+                 char **editor_args = NULL, **tmp_path, **original_path;
+                 size_t n_editor_args = 0, i = 1, argc;
+-                const char **args, *editor, *p;
++                const char **args, *editor;
+ 
+                 argc = strv_length(paths)/2 + 1;
+ 
+@@ -358,9 +358,9 @@ static int run_editor(char **paths) {
+                 if (n_editor_args > 0)
+                         execvp(args[0], (char* const*) args);
+ 
+-                FOREACH_STRING(p, "editor", "nano", "vim", "vi") {
+-                        args[0] = p;
+-                        execvp(p, (char* const*) args);
++                FOREACH_STRING(name, "editor", "nano", "vim", "vi") {
++                        args[0] = name;
++                        execvp(name, (char* const*) args);
+                         /* We do not fail if the editor doesn't exist because we want to try each one of them
+                          * before failing. */
+                         if (errno != ENOENT) {
+diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c
+index a78fa1e04c..017dba2034 100644
+--- a/src/systemctl/systemctl-sysv-compat.c
++++ b/src/systemctl/systemctl-sysv-compat.c
+@@ -18,9 +18,8 @@
+ 
+ int talk_initctl(char rl) {
+ #if HAVE_SYSV_COMPAT
+-        struct init_request request;
+         _cleanup_close_ int fd = -1;
+-        const char *p;
++        const char *path;
+         int r;
+ 
+         /* Try to switch to the specified SysV runlevel. Returns == 0 if the operation does not apply on this
+@@ -29,19 +28,19 @@ int talk_initctl(char rl) {
+         if (rl == 0)
+                 return 0;
+ 
+-        FOREACH_STRING(p, "/run/initctl", "/dev/initctl") {
+-                fd = open(p, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
+-                if (fd >= 0 || errno != ENOENT)
+-                        break;
+-        }
+-        if (fd < 0) {
+-                if (errno == ENOENT)
+-                        return 0;
++        FOREACH_STRING(_path, "/run/initctl", "/dev/initctl") {
++                path = _path;
+ 
+-                return log_error_errno(errno, "Failed to open initctl fifo: %m");
++                fd = open(path, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
++                if (fd < 0 && errno != ENOENT)
++                        return log_error_errno(errno, "Failed to open %s: %m", path);
++                if (fd >= 0)
++                        break;
+         }
++        if (fd < 0)
++                return 0;
+ 
+-        request = (struct init_request) {
++        struct init_request request = {
+                 .magic = INIT_MAGIC,
+                 .sleeptime = 0,
+                 .cmd = INIT_CMD_RUNLVL,
+@@ -50,7 +49,7 @@ int talk_initctl(char rl) {
+ 
+         r = loop_write(fd, &request, sizeof(request), false);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to write to %s: %m", p);
++                return log_error_errno(r, "Failed to write to %s: %m", path);
+ 
+         return 1;
+ #else
+diff --git a/src/test/test-bpf-devices.c b/src/test/test-bpf-devices.c
+index bbaa7b3605..587591cf04 100644
+--- a/src/test/test-bpf-devices.c
++++ b/src/test/test-bpf-devices.c
+@@ -30,7 +30,6 @@ static void test_policy_closed(const char *cgroup_path, BPFProgram **installed_p
+         r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_CLOSED, true, cgroup_path, installed_prog);
+         assert_se(r >= 0);
+ 
+-        const char *s;
+         FOREACH_STRING(s, "/dev/null",
+                           "/dev/zero",
+                           "/dev/full",
+diff --git a/src/test/test-ellipsize.c b/src/test/test-ellipsize.c
+index b840355f5e..7317193363 100644
+--- a/src/test/test-ellipsize.c
++++ b/src/test/test-ellipsize.c
+@@ -64,18 +64,14 @@ static void test_ellipsize_mem_one(const char *s, size_t old_length, size_t new_
+ }
+ 
+ TEST(ellipsize_mem) {
+-        const char *s;
+-        ssize_t l, k;
+-
+         FOREACH_STRING(s,
+                        "_XXXXXXXXXXX_", /* ASCII */
+                        "_aąęółśćńżźć_", /* two-byte utf-8 */
+                        "გამარჯობა",     /* multi-byte utf-8 */
+                        "你好世界",       /* wide characters */
+                        "你გą世óoó界")    /* a mix */
+-
+-                for (l = strlen(s); l >= 0; l--)
+-                        for (k = strlen(s) + 1; k >= 0; k--)
++                for (ssize_t l = strlen(s); l >= 0; l--)
++                        for (ssize_t k = strlen(s) + 1; k >= 0; k--)
+                                 test_ellipsize_mem_one(s, l, k);
+ }
+ 
+diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c
+index 7b132447bf..f97206b4d6 100644
+--- a/src/test/test-env-file.c
++++ b/src/test/test-env-file.c
+@@ -166,8 +166,6 @@ TEST(load_env_file_6) {
+ }
+ 
+ TEST(write_and_load_env_file) {
+-        const char *v;
+-
+         /* Make sure that our writer, parser and the shell agree on what our env var files mean */
+ 
+         FOREACH_STRING(v,
+diff --git a/src/test/test-execute.c b/src/test/test-execute.c
+index 49629c6bc2..0760df6603 100644
+--- a/src/test/test-execute.c
++++ b/src/test/test-execute.c
+@@ -190,19 +190,15 @@ static bool check_user_has_group_with_same_name(const char *name) {
+ }
+ 
+ static bool is_inaccessible_available(void) {
+-        const char *p;
+-
+         FOREACH_STRING(p,
+-                "/run/systemd/inaccessible/reg",
+-                "/run/systemd/inaccessible/dir",
+-                "/run/systemd/inaccessible/chr",
+-                "/run/systemd/inaccessible/blk",
+-                "/run/systemd/inaccessible/fifo",
+-                "/run/systemd/inaccessible/sock"
+-        ) {
++                       "/run/systemd/inaccessible/reg",
++                       "/run/systemd/inaccessible/dir",
++                       "/run/systemd/inaccessible/chr",
++                       "/run/systemd/inaccessible/blk",
++                       "/run/systemd/inaccessible/fifo",
++                       "/run/systemd/inaccessible/sock")
+                 if (access(p, F_OK) < 0)
+                         return false;
+-        }
+ 
+         return true;
+ }
+diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
+index 087d76f760..4f91d94709 100644
+--- a/src/test/test-fileio.c
++++ b/src/test/test-fileio.c
+@@ -1003,7 +1003,6 @@ TEST(read_full_file_offset_size) {
+ }
+ 
+ static void test_read_virtual_file_one(size_t max_size) {
+-        const char *filename;
+         int r;
+ 
+         log_info("/* %s (max_size=%zu) */", __func__, max_size);
+diff --git a/src/test/test-gpt.c b/src/test/test-gpt.c
+index ab26d5d096..05da7a9e48 100644
+--- a/src/test/test-gpt.c
++++ b/src/test/test-gpt.c
+@@ -11,16 +11,13 @@
+ #include "util.h"
+ 
+ TEST(gpt_types_against_architectures) {
+-        const char *prefix;
+         int r;
+ 
+         /* Dumps a table indicating for which architectures we know we have matching GPT partition
+          * types. Also validates whether we can properly categorize the entries. */
+ 
+         FOREACH_STRING(prefix, "root-", "usr-")
+-                for (int a = 0; a < _ARCHITECTURE_MAX; a++) {
+-                        const char *suffix;
+-
++                for (int a = 0; a < _ARCHITECTURE_MAX; a++)
+                         FOREACH_STRING(suffix, "", "-verity", "-verity-sig") {
+                                 _cleanup_free_ char *joined = NULL;
+                                 sd_id128_t id;
+@@ -48,7 +45,6 @@ TEST(gpt_types_against_architectures) {
+ 
+                                 assert_se(gpt_partition_type_uuid_to_arch(id) == a);
+                         }
+-                }
+ }
+ 
+ DEFINE_TEST_MAIN(LOG_INFO);
+diff --git a/src/test/test-libcrypt-util.c b/src/test/test-libcrypt-util.c
+index ebd520f7ba..f88a9f9b24 100644
+--- a/src/test/test-libcrypt-util.c
++++ b/src/test/test-libcrypt-util.c
+@@ -39,7 +39,6 @@ static int test_hash_password(void) {
+         /* As a warm-up exercise, check if we can hash passwords. */
+ 
+         bool have_sane_hash = false;
+-        const char *hash;
+ 
+         FOREACH_STRING(hash,
+                        "ew3bU1.hoKk4o",
+@@ -68,7 +67,6 @@ static void test_hash_password_full(void) {
+         log_info("/* %s */", __func__);
+ 
+         _cleanup_free_ void *cd_data = NULL;
+-        const char *i;
+         int cd_size = 0;
+ 
+         log_info("sizeof(struct crypt_data): %zu bytes", sizeof(struct crypt_data));
+diff --git a/src/test/test-loop-block.c b/src/test/test-loop-block.c
+index 1642f82e40..9c8c55bca2 100644
+--- a/src/test/test-loop-block.c
++++ b/src/test/test-loop-block.c
+@@ -114,7 +114,6 @@ int main(int argc, char *argv[]) {
+         _cleanup_(dissected_image_unrefp) DissectedImage *dissected = NULL;
+         _cleanup_(umount_and_rmdir_and_freep) char *mounted = NULL;
+         pthread_t threads[N_THREADS];
+-        const char *fs;
+         sd_id128_t id;
+         int r;
+ 
+diff --git a/src/test/test-mount-util.c b/src/test/test-mount-util.c
+index 74d352268e..7e06fc419c 100644
+--- a/src/test/test-mount-util.c
++++ b/src/test/test-mount-util.c
+@@ -128,7 +128,6 @@ TEST(mount_flags_to_string) {
+ TEST(bind_remount_recursive) {
+         _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
+         _cleanup_free_ char *subdir = NULL;
+-        const char *p;
+ 
+         if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
+                 (void) log_tests_skipped("not running privileged");
+diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
+index 7f633ab259..5f744b0288 100644
+--- a/src/test/test-stat-util.c
++++ b/src/test/test-stat-util.c
+@@ -67,7 +67,6 @@ TEST(path_is_fs_type) {
+ }
+ 
+ TEST(path_is_temporary_fs) {
+-        const char *s;
+         int r;
+ 
+         FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") {
+@@ -85,7 +84,6 @@ TEST(path_is_temporary_fs) {
+ }
+ 
+ TEST(path_is_read_only_fs) {
+-        const char *s;
+         int r;
+ 
+         FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") {
+diff --git a/src/test/test-strv.c b/src/test/test-strv.c
+index 94581fc832..0ece342521 100644
+--- a/src/test/test-strv.c
++++ b/src/test/test-strv.c
+@@ -924,12 +924,10 @@ TEST(foreach_string) {
+                 "waldo",
+                 NULL
+         };
+-        const char *x;
+-        unsigned i = 0;
+ 
++        unsigned i = 0;
+         FOREACH_STRING(x, "foo", "bar", "waldo")
+                 assert_se(streq_ptr(t[i++], x));
+-
+         assert_se(i == 3);
+ 
+         FOREACH_STRING(x, "zzz")
+diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
+index 7337b81227..f070c171fe 100644
+--- a/src/test/test-utf8.c
++++ b/src/test/test-utf8.c
+@@ -144,7 +144,6 @@ TEST(utf8_escape_non_printable) {
+ }
+ 
+ TEST(utf8_escape_non_printable_full) {
+-        const char *s;
+         FOREACH_STRING(s,
+                        "goo goo goo",       /* ASCII */
+                        "\001 \019\20\a",    /* control characters */
+@@ -210,8 +209,6 @@ TEST(utf8_console_width) {
+ }
+ 
+ TEST(utf8_to_utf16) {
+-        const char *p;
+-
+         FOREACH_STRING(p,
+                        "abc",
+                        "zażółcić gęślą jaźń",
+diff --git a/src/tmpfiles/offline-passwd.c b/src/tmpfiles/offline-passwd.c
+index 8ba3fea984..c847266ed4 100644
+--- a/src/tmpfiles/offline-passwd.c
++++ b/src/tmpfiles/offline-passwd.c
+@@ -39,7 +39,6 @@ static int populate_uid_cache(const char *root, Hashmap **ret) {
+         /* The directory list is hardcoded here: /etc is the standard, and rpm-ostree uses /usr/lib. This
+          * could be made configurable, but I don't see the point right now. */
+ 
+-        const char *fname;
+         FOREACH_STRING(fname, "/etc/passwd", "/usr/lib/passwd") {
+                 _cleanup_fclose_ FILE *f = NULL;
+ 
+@@ -78,7 +77,6 @@ static int populate_gid_cache(const char *root, Hashmap **ret) {
+         if (!cache)
+                 return -ENOMEM;
+ 
+-        const char *fname;
+         FOREACH_STRING(fname, "/etc/group", "/usr/lib/group") {
+                 _cleanup_fclose_ FILE *f = NULL;
+ 
diff --git a/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch b/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch
new file mode 100644
index 0000000..43c2405
--- /dev/null
+++ b/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch
@@ -0,0 +1,213 @@
+From d49d646d00078b201cdde2978b7941d20acb1d4b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 2 Mar 2022 16:53:54 +0100
+Subject: [PATCH] basic/unit-file: split out the subroutine for symlink
+ verification
+
+The old logs used __func__, but this doesn't make sense now, because the
+low-level function will be used in other places. So those are adjusted to be
+more generic.
+
+(cherry picked from commit 9825181143530af7003fc50567b814dbbee39046)
+
+Related: #2082131
+---
+ src/basic/unit-file.c | 159 +++++++++++++++++++++++++-----------------
+ 1 file changed, 96 insertions(+), 63 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 96826e2940..25abce932a 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -260,6 +260,83 @@ static int directory_name_is_valid(const char *name) {
+         return false;
+ }
+ 
++static int unit_file_resolve_symlink(
++                const char *root_dir,
++                char **search_path,
++                const char *dir,
++                int dirfd,
++                const char *filename,
++                char **ret_destination) {
++
++        _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL;
++        int r;
++
++        assert(dir);
++        assert(dirfd >= 0);
++        assert(filename);
++        assert(ret_destination);
++
++        r = readlinkat_malloc(dirfd, filename, &target);
++        if (r < 0)
++                return log_warning_errno(r, "Failed to read symlink %s%s%s: %m",
++                                         dir, dir ? "/" : "", filename);
++
++        bool is_abs = path_is_absolute(target);
++        if (root_dir || !is_abs) {
++                char *target_abs = path_join(is_abs ? root_dir : dir, target);
++                if (!target_abs)
++                        return log_oom();
++
++                free_and_replace(target, target_abs);
++        }
++
++        /* Get rid of "." and ".." components in target path */
++        r = chase_symlinks(target, root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL);
++        if (r < 0)
++                return log_warning_errno(r, "Failed to resolve symlink %s/%s pointing to %s: %m",
++                                         dir, filename, target);
++
++        /* Check if the symlink goes outside of our search path.
++         * If yes, it's a linked unit file or mask, and we don't care about the target name.
++         * Let's just store the link source directly.
++         * If not, let's verify that it's a good symlink. */
++        const char *tail = path_startswith_strv(simplified, search_path);
++        if (!tail) {
++                log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified);
++
++                dst = path_join(dir, filename);
++                if (!dst)
++                        return log_oom();
++
++        } else {
++                r = path_extract_filename(simplified, &dst);
++                if (r < 0)
++                        return r;
++
++                bool self_alias = streq(dst, filename);
++
++                if (is_path(tail))
++                        log_full(self_alias ? LOG_DEBUG : LOG_WARNING,
++                                 "Suspicious symlink %s/%s→%s, treating as alias.",
++                                 dir, filename, simplified);
++
++                r = unit_validate_alias_symlink_and_warn(filename, simplified);
++                if (r < 0)
++                        return r;
++
++                if (self_alias)
++                        /* A self-alias that has no effect */
++                        return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
++                                               "Unit file self-alias: %s/%s → %s, ignoring.",
++                                               dir, filename, dst);
++
++                log_debug("Unit file alias: %s/%s → %s", dir, filename, dst);
++        }
++
++        *ret_destination = TAKE_PTR(dst);
++        return 0;
++}
++
+ int unit_file_build_name_map(
+                 const LookupPaths *lp,
+                 uint64_t *cache_timestamp_hash,
+@@ -310,10 +387,9 @@ int unit_file_build_name_map(
+ 
+                 FOREACH_DIRENT_ALL(de, d, log_warning_errno(errno, "Failed to read \"%s\", ignoring: %m", *dir)) {
+                         _unused_ _cleanup_free_ char *_filename_free = NULL;
+-                        _cleanup_free_ char *simplified = NULL;
+-                        bool symlink_to_dir = false;
+-                        const char *dst = NULL;
+                         char *filename;
++                        _cleanup_free_ char *dst = NULL;
++                        bool symlink_to_dir = false;
+ 
+                         /* We only care about valid units and dirs with certain suffixes, let's ignore the
+                          * rest. */
+@@ -397,77 +473,34 @@ int unit_file_build_name_map(
+                                 /* We don't explicitly check for alias loops here. unit_ids_map_get() which
+                                  * limits the number of hops should be used to access the map. */
+ 
+-                                _cleanup_free_ char *target = NULL;
+-
+-                                r = readlinkat_malloc(dirfd(d), de->d_name, &target);
+-                                if (r < 0) {
+-                                        log_warning_errno(r, "Failed to read symlink %s/%s, ignoring: %m",
+-                                                          *dir, de->d_name);
++                                r = unit_file_resolve_symlink(lp->root_dir, lp->search_path,
++                                                              *dir, dirfd(d), de->d_name,
++                                                              &dst);
++                                if (r == -ENOMEM)
++                                        return r;
++                                if (r < 0)  /* we ignore other errors here */
+                                         continue;
+-                                }
+ 
+-                                const bool is_abs = path_is_absolute(target);
+-                                if (lp->root_dir || !is_abs) {
+-                                        char *target_abs = path_join(is_abs ? lp->root_dir : *dir, target);
+-                                        if (!target_abs)
++                        } else {
++                                dst = TAKE_PTR(_filename_free); /* Grab the copy we made previously, if available. */
++                                if (!dst) {
++                                        dst = strdup(filename);
++                                        if (!dst)
+                                                 return log_oom();
+-
+-                                        free_and_replace(target, target_abs);
+                                 }
+ 
+-                                /* Get rid of "." and ".." components in target path */
+-                                r = chase_symlinks(target, lp->root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL);
+-                                if (r < 0) {
+-                                        log_warning_errno(r, "Failed to resolve symlink %s pointing to %s, ignoring: %m",
+-                                                          filename, target);
+-                                        continue;
+-                                }
+-
+-                                /* Check if the symlink goes outside of our search path.
+-                                 * If yes, it's a linked unit file or mask, and we don't care about the target name.
+-                                 * Let's just store the link source directly.
+-                                 * If not, let's verify that it's a good symlink. */
+-                                char *tail = path_startswith_strv(simplified, lp->search_path);
+-                                if (!tail) {
+-                                        log_debug("%s: linked unit file: %s → %s",
+-                                                  __func__, filename, simplified);
+-
+-                                        dst = filename;
+-                                } else {
+-
+-                                        bool self_alias;
+-
+-                                        dst = basename(simplified);
+-                                        self_alias = streq(dst, de->d_name);
+-
+-                                        if (is_path(tail))
+-                                                log_full(self_alias ? LOG_DEBUG : LOG_WARNING,
+-                                                         "Suspicious symlink %s→%s, treating as alias.",
+-                                                         filename, simplified);
+-
+-                                        r = unit_validate_alias_symlink_and_warn(filename, simplified);
+-                                        if (r < 0)
+-                                                continue;
+-
+-                                        if (self_alias) {
+-                                                /* A self-alias that has no effect */
+-                                                log_debug("%s: self-alias: %s/%s → %s, ignoring.",
+-                                                          __func__, *dir, de->d_name, dst);
+-                                                continue;
+-                                        }
+-
+-                                        log_debug("%s: alias: %s/%s → %s", __func__, *dir, de->d_name, dst);
+-                                }
+-
+-                        } else {
+-                                dst = filename;
+                                 log_debug("%s: normal unit file: %s", __func__, dst);
+                         }
+ 
+-                        r = hashmap_put_strdup(&ids, de->d_name, dst);
++                        _cleanup_free_ char *key = strdup(de->d_name);
++                        if (!key)
++                                return log_oom();
++
++                        r = hashmap_ensure_put(&ids, &string_hash_ops_free_free, key, dst);
+                         if (r < 0)
+                                 return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m",
+                                                          de->d_name, dst);
++                        key = dst = NULL;
+                 }
+         }
+ 
diff --git a/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch b/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch
new file mode 100644
index 0000000..64f0c2e
--- /dev/null
+++ b/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch
@@ -0,0 +1,100 @@
+From fae45af368a90cdce95680d82b66d8e460ab939f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 23 Mar 2022 17:47:33 +0100
+Subject: [PATCH] basic/stat-util: add null_or_empty_path_with_root()
+
+(cherry picked from commit 48542eac39999f58f6c331b4b3cdf2d78bf15979)
+
+Related: #2082131
+---
+ src/basic/stat-util.c     | 15 ++++++++++-----
+ src/basic/stat-util.h     |  6 +++++-
+ src/test/test-stat-util.c | 24 ++++++++++++++++++++++++
+ 3 files changed, 39 insertions(+), 6 deletions(-)
+
+diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c
+index efac7b002e..21e71794b4 100644
+--- a/src/basic/stat-util.c
++++ b/src/basic/stat-util.c
+@@ -127,17 +127,22 @@ bool null_or_empty(struct stat *st) {
+         return false;
+ }
+ 
+-int null_or_empty_path(const char *fn) {
++int null_or_empty_path_with_root(const char *fn, const char *root) {
+         struct stat st;
++        int r;
+ 
+         assert(fn);
+ 
+-        /* If we have the path, let's do an easy text comparison first. */
+-        if (path_equal(fn, "/dev/null"))
++        /* A symlink to /dev/null or an empty file?
++         * When looking under root_dir, we can't expect /dev/ to be mounted,
++         * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
++
++        if (path_equal_ptr(path_startswith(fn, root ?: "/"), "dev/null"))
+                 return true;
+ 
+-        if (stat(fn, &st) < 0)
+-                return -errno;
++        r = chase_symlinks_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st, NULL);
++        if (r < 0)
++                return r;
+ 
+         return null_or_empty(&st);
+ }
+diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
+index a566114f7c..2c5edeb891 100644
+--- a/src/basic/stat-util.h
++++ b/src/basic/stat-util.h
+@@ -31,9 +31,13 @@ static inline int dir_is_populated(const char *path) {
+ }
+ 
+ bool null_or_empty(struct stat *st) _pure_;
+-int null_or_empty_path(const char *fn);
++int null_or_empty_path_with_root(const char *fn, const char *root);
+ int null_or_empty_fd(int fd);
+ 
++static inline int null_or_empty_path(const char *fn) {
++        return null_or_empty_path_with_root(fn, NULL);
++}
++
+ int path_is_read_only_fs(const char *path);
+ 
+ int files_same(const char *filea, const char *fileb, int flags);
+diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
+index 5f744b0288..9975a1848d 100644
+--- a/src/test/test-stat-util.c
++++ b/src/test/test-stat-util.c
+@@ -18,6 +18,30 @@
+ #include "tests.h"
+ #include "tmpfile-util.h"
+ 
++TEST(null_or_empty_path) {
++        assert_se(null_or_empty_path("/dev/null") == 1);
++        assert_se(null_or_empty_path("/dev/tty") == 1);  /* We assume that any character device is "empty", bleh. */
++        assert_se(null_or_empty_path("../../../../../../../../../../../../../../../../../../../../dev/null") == 1);
++        assert_se(null_or_empty_path("/proc/self/exe") == 0);
++        assert_se(null_or_empty_path("/nosuchfileordir") == -ENOENT);
++}
++
++TEST(null_or_empty_path_with_root) {
++        assert_se(null_or_empty_path_with_root("/dev/null", NULL) == 1);
++        assert_se(null_or_empty_path_with_root("/dev/null", "/") == 1);
++        assert_se(null_or_empty_path_with_root("/dev/null", "/.././../") == 1);
++        assert_se(null_or_empty_path_with_root("/dev/null", "/.././..") == 1);
++        assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", NULL) == 1);
++        assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", "/") == 1);
++        assert_se(null_or_empty_path_with_root("/proc/self/exe", NULL) == 0);
++        assert_se(null_or_empty_path_with_root("/proc/self/exe", "/") == 0);
++        assert_se(null_or_empty_path_with_root("/nosuchfileordir", NULL) == -ENOENT);
++        assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././../") == -ENOENT);
++        assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././..") == -ENOENT);
++        assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar") == 1);
++        assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar/") == 1);
++}
++
+ TEST(files_same) {
+         _cleanup_close_ int fd = -1;
+         char name[] = "/tmp/test-files_same.XXXXXX";
diff --git a/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch b/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch
new file mode 100644
index 0000000..3ba922e
--- /dev/null
+++ b/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch
@@ -0,0 +1,298 @@
+From 5ec751ab9a06dadc62b30dc07e9dd7a41f8da403 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 4 Mar 2022 18:47:31 +0100
+Subject: [PATCH] shared/install: reuse the standard symlink verification
+ subroutine
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We save a few lines, but the important thing is that we don't have two
+different implementations with slightly different rules used for enablement
+and loading. Fixes #22000.
+
+Tested with:
+- the report in #22000, it now says:
+$ SYSTEMD_LOG_LEVEL=debug systemctl --root=/ enable test.service
+Suspicious symlink /etc/systemd/system/test.service→/etc/systemd/system/myown.d/test.service, treating as alias.
+unit_file_resolve_symlink: self-alias: /etc/systemd/system/test.service → test.service, ignoring.
+running_in_chroot(): Permission denied
+Suspicious symlink /etc/systemd/system/test.service→/etc/systemd/system/myown.d/test.service, treating as alias.
+unit_file_resolve_symlink: self-alias: /etc/systemd/system/test.service → test.service, ignoring.
+Failed to enable unit, refusing to operate on linked unit file test.service
+
+- a symlink to /dev/null:
+...
+unit_file_resolve_symlink: linked unit file: /etc/systemd/system/test3.service → /dev/null
+Failed to enable unit, unit /etc/systemd/system/test3.service is masked.
+
+- the same from the host:
+...
+unit_file_resolve_symlink: linked unit file: /var/lib/machines/rawhide/etc/systemd/system/test3.service → /var/lib/machines/rawhide/dev/null
+Failed to enable unit, unit /var/lib/machines/rawhide/etc/systemd/system/test3.service is masked.
+
+- through the manager:
+$ sudo systemctl enable test.service
+Failed to enable unit: Refusing to operate on alias name or linked unit file: test.service
+$ sudo systemctl enable test3.service
+Failed to enable unit: Unit file /etc/systemd/system/test3.service is masked.
+
+As seen in the first example, the warning is repeated. This is because we call
+the lookup logic twice: first for sysv-compat, and then again for real. I think
+that since this is only for broken setups, and when sysv-compat is enabled, and
+in an infrequent manual operation, at debug level, this is OK.
+
+(cherry picked from commit 047d37dc3d376d912275c14d217f7a0dda9a5f0e)
+
+Related: #2082131
+---
+ src/basic/unit-file.c | 70 +++++++++++++++++++++++++++++++----------
+ src/basic/unit-file.h | 10 ++++++
+ src/shared/install.c  | 72 +++++++------------------------------------
+ 3 files changed, 75 insertions(+), 77 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 25abce932a..f7a10b22c6 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -260,27 +260,50 @@ static int directory_name_is_valid(const char *name) {
+         return false;
+ }
+ 
+-static int unit_file_resolve_symlink(
++int unit_file_resolve_symlink(
+                 const char *root_dir,
+                 char **search_path,
+                 const char *dir,
+                 int dirfd,
+                 const char *filename,
++                bool resolve_destination_target,
+                 char **ret_destination) {
+ 
+-        _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL;
++        _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL, *_dir = NULL, *_filename = NULL;
+         int r;
+ 
+-        assert(dir);
+-        assert(dirfd >= 0);
++        /* This can be called with either dir+dirfd valid and filename just a name,
++         * or !dir && dirfd==AT_FDCWD, and filename being a full path.
++         *
++         * If resolve_destination_target is true, an absolute path will be returned.
++         * If not, an absolute path is returned for linked unit files, and a relative
++         * path otherwise. */
++
+         assert(filename);
+         assert(ret_destination);
++        assert(dir || path_is_absolute(filename));
++        assert(dirfd >= 0 || dirfd == AT_FDCWD);
+ 
+         r = readlinkat_malloc(dirfd, filename, &target);
+         if (r < 0)
+                 return log_warning_errno(r, "Failed to read symlink %s%s%s: %m",
+                                          dir, dir ? "/" : "", filename);
+ 
++        if (!dir) {
++                r = path_extract_directory(filename, &_dir);
++                if (r < 0)
++                        return r;
++                dir = _dir;
++
++                r = path_extract_filename(filename, &_filename);
++                if (r < 0)
++                        return r;
++                if (r == O_DIRECTORY)
++                        return log_warning_errno(SYNTHETIC_ERRNO(EISDIR),
++                                                 "Unexpected path to a directory \"%s\", refusing.", filename);
++                filename = _filename;
++        }
++
+         bool is_abs = path_is_absolute(target);
+         if (root_dir || !is_abs) {
+                 char *target_abs = path_join(is_abs ? root_dir : dir, target);
+@@ -296,24 +319,36 @@ static int unit_file_resolve_symlink(
+                 return log_warning_errno(r, "Failed to resolve symlink %s/%s pointing to %s: %m",
+                                          dir, filename, target);
+ 
++        assert(path_is_absolute(simplified));
++
+         /* Check if the symlink goes outside of our search path.
+-         * If yes, it's a linked unit file or mask, and we don't care about the target name.
+-         * Let's just store the link source directly.
+-         * If not, let's verify that it's a good symlink. */
++         * If yes, it's a linked unit file or mask, and we don't care about the target name
++         * when loading units, and we return the link *source* (resolve_destination_target == false);
++         * When this is called for installation purposes, we want the final destination,
++         * so we return the *target*.
++         *
++         * Otherwise, let's verify that it's a good alias.
++         */
+         const char *tail = path_startswith_strv(simplified, search_path);
+         if (!tail) {
+                 log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified);
+ 
+-                dst = path_join(dir, filename);
+-                if (!dst)
+-                        return log_oom();
++                if (resolve_destination_target)
++                        dst = TAKE_PTR(simplified);
++                else {
++                        dst = path_join(dir, filename);
++                        if (!dst)
++                                return log_oom();
++                }
+ 
+         } else {
+-                r = path_extract_filename(simplified, &dst);
++                _cleanup_free_ char *target_name = NULL;
++
++                r = path_extract_filename(simplified, &target_name);
+                 if (r < 0)
+                         return r;
+ 
+-                bool self_alias = streq(dst, filename);
++                bool self_alias = streq(target_name, filename);
+ 
+                 if (is_path(tail))
+                         log_full(self_alias ? LOG_DEBUG : LOG_WARNING,
+@@ -324,13 +359,15 @@ static int unit_file_resolve_symlink(
+                 if (r < 0)
+                         return r;
+ 
+-                if (self_alias)
+-                        /* A self-alias that has no effect */
++                if (self_alias && !resolve_destination_target)
++                        /* A self-alias that has no effect when loading, let's just ignore it. */
+                         return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
+                                                "Unit file self-alias: %s/%s → %s, ignoring.",
+-                                               dir, filename, dst);
++                                               dir, filename, target_name);
++
++                log_debug("Unit file alias: %s/%s → %s", dir, filename, target_name);
+ 
+-                log_debug("Unit file alias: %s/%s → %s", dir, filename, dst);
++                dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name);
+         }
+ 
+         *ret_destination = TAKE_PTR(dst);
+@@ -475,6 +512,7 @@ int unit_file_build_name_map(
+ 
+                                 r = unit_file_resolve_symlink(lp->root_dir, lp->search_path,
+                                                               *dir, dirfd(d), de->d_name,
++                                                              /* resolve_destination_target= */ false,
+                                                               &dst);
+                                 if (r == -ENOMEM)
+                                         return r;
+diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h
+index cc731a9e06..e29e878cfd 100644
+--- a/src/basic/unit-file.h
++++ b/src/basic/unit-file.h
+@@ -44,6 +44,16 @@ int unit_symlink_name_compatible(const char *symlink, const char *target, bool i
+ int unit_validate_alias_symlink_and_warn(const char *filename, const char *target);
+ 
+ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_hash, uint64_t *ret_new);
++
++int unit_file_resolve_symlink(
++                const char *root_dir,
++                char **search_path,
++                const char *dir,
++                int dirfd,
++                const char *filename,
++                bool resolve_destination_target,
++                char **ret_destination);
++
+ int unit_file_build_name_map(
+                 const LookupPaths *lp,
+                 uint64_t *cache_timestamp_hash,
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 79e5109ce1..e07ca31797 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1338,76 +1338,26 @@ static int unit_file_load_or_readlink(
+                 const char *path,
+                 const LookupPaths *lp,
+                 SearchFlags flags) {
+-
+-        _cleanup_free_ char *resolved = NULL;
+         int r;
+ 
+         r = unit_file_load(c, info, path, lp->root_dir, flags);
+         if (r != -ELOOP || (flags & SEARCH_DROPIN))
+                 return r;
+ 
+-        r = chase_symlinks(path, lp->root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
+-        if (r >= 0 &&
+-            lp->root_dir &&
+-            path_equal_ptr(path_startswith(resolved, lp->root_dir), "dev/null"))
+-                /* When looking under root_dir, we can't expect /dev/ to be mounted,
+-                 * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
+-                info->type = UNIT_FILE_TYPE_MASKED;
+-
+-        else if (r > 0 && null_or_empty_path(resolved) > 0)
++        /* This is a symlink, let's read and verify it. */
++        r = unit_file_resolve_symlink(lp->root_dir, lp->search_path,
++                                      NULL, AT_FDCWD, path,
++                                      true, &info->symlink_target);
++        if (r < 0)
++                return r;
+ 
++        r = null_or_empty_path_with_root(info->symlink_target, lp->root_dir);
++        if (r < 0 && r != -ENOENT)
++                return log_debug_errno(r, "Failed to stat %s: %m", info->symlink_target);
++        if (r > 0)
+                 info->type = UNIT_FILE_TYPE_MASKED;
+-
+-        else {
+-                _cleanup_free_ char *target = NULL;
+-                const char *bn;
+-                UnitType a, b;
+-
+-                /* This is a symlink, let's read it. We read the link again, because last time
+-                 * we followed the link until resolution, and here we need to do one step. */
+-
+-                r = readlink_malloc(path, &target);
+-                if (r < 0)
+-                        return r;
+-
+-                bn = basename(target);
+-
+-                if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN)) {
+-
+-                        if (!unit_name_is_valid(bn, UNIT_NAME_PLAIN))
+-                                return -EINVAL;
+-
+-                } else if (unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
+-
+-                        if (!unit_name_is_valid(bn, UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE))
+-                                return -EINVAL;
+-
+-                } else if (unit_name_is_valid(info->name, UNIT_NAME_TEMPLATE)) {
+-
+-                        if (!unit_name_is_valid(bn, UNIT_NAME_TEMPLATE))
+-                                return -EINVAL;
+-                } else
+-                        return -EINVAL;
+-
+-                /* Enforce that the symlink destination does not
+-                 * change the unit file type. */
+-
+-                a = unit_name_to_type(info->name);
+-                b = unit_name_to_type(bn);
+-                if (a < 0 || b < 0 || a != b)
+-                        return -EINVAL;
+-
+-                if (path_is_absolute(target))
+-                        /* This is an absolute path, prefix the root so that we always deal with fully qualified paths */
+-                        info->symlink_target = path_join(lp->root_dir, target);
+-                else
+-                        /* This is a relative path, take it relative to the dir the symlink is located in. */
+-                        info->symlink_target = file_in_same_dir(path, target);
+-                if (!info->symlink_target)
+-                        return -ENOMEM;
+-
++        else
+                 info->type = UNIT_FILE_TYPE_SYMLINK;
+-        }
+ 
+         return 0;
+ }
diff --git a/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch b/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch
new file mode 100644
index 0000000..290f6b1
--- /dev/null
+++ b/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch
@@ -0,0 +1,118 @@
+From 348699605248eb30743c0aac4f2ecbff5dd986ad Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 3 Mar 2022 11:09:25 +0100
+Subject: [PATCH] shared/install: add a bit more quoting
+
+When we are printing a valid unit name, quoting isn't necessary, because
+unit names cannot contain whitespace or other confusing characters. In particular
+if the unit name is prefixed by " unit " or something else that clearly
+identifies the string as a unit name, quoting would just add unnecessary
+noise. But when we're printing paths or invalid names, it's better to add
+quotes for clarity.
+
+(cherry picked from commit e75a26d0457d67a3146ff2d90af07db22213da3c)
+
+Related: #2082131
+---
+ src/shared/install.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index e07ca31797..cbfe96b1e8 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -338,7 +338,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         break;
+                 case UNIT_FILE_UNLINK:
+                         if (!quiet)
+-                                log_info("Removed %s.", changes[i].path);
++                                log_info("Removed \"%s\".", changes[i].path);
+                         break;
+                 case UNIT_FILE_IS_MASKED:
+                         if (!quiet)
+@@ -361,11 +361,11 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                 case -EEXIST:
+                         if (changes[i].source)
+                                 log_error_errno(changes[i].type_or_errno,
+-                                                "Failed to %s unit, file %s already exists and is a symlink to %s.",
++                                                "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
+                                                 verb, changes[i].path, changes[i].source);
+                         else
+                                 log_error_errno(changes[i].type_or_errno,
+-                                                "Failed to %s unit, file %s already exists.",
++                                                "Failed to %s unit, file \"%s\" already exists.",
+                                                 verb, changes[i].path);
+                         logged = true;
+                         break;
+@@ -391,7 +391,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         logged = true;
+                         break;
+                 case -ELOOP:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s",
++                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.",
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
+@@ -403,7 +403,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+ 
+                 default:
+                         assert(changes[i].type_or_errno < 0);
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file %s: %m.",
++                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m",
+                                         verb, changes[i].path);
+                         logged = true;
+                 }
+@@ -840,7 +840,7 @@ static int find_symlinks(
+ 
+                 d = opendir(path);
+                 if (!d) {
+-                        log_error_errno(errno, "Failed to open directory '%s' while scanning for symlinks, ignoring: %m", path);
++                        log_error_errno(errno, "Failed to open directory \"%s\" while scanning for symlinks, ignoring: %m", path);
+                         continue;
+                 }
+ 
+@@ -848,7 +848,7 @@ static int find_symlinks(
+                 if (r > 0)
+                         return 1;
+                 else if (r < 0)
+-                        log_debug_errno(r, "Failed to lookup for symlinks in '%s': %m", path);
++                        log_debug_errno(r, "Failed to look up symlinks in \"%s\": %m", path);
+         }
+ 
+         /* We didn't find any suitable symlinks in .wants or .requires directories, let's look for linked unit files in this directory. */
+@@ -1321,7 +1321,7 @@ static int unit_file_load(
+                          0, info,
+                          NULL);
+         if (r < 0)
+-                return log_debug_errno(r, "Failed to parse %s: %m", info->name);
++                return log_debug_errno(r, "Failed to parse \"%s\": %m", info->name);
+ 
+         if ((flags & SEARCH_DROPIN) == 0)
+                 info->type = UNIT_FILE_TYPE_REGULAR;
+@@ -1481,7 +1481,7 @@ static int unit_file_search(
+         STRV_FOREACH(p, files) {
+                 r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN);
+                 if (r < 0)
+-                        return log_debug_errno(r, "Failed to load conf file %s: %m", *p);
++                        return log_debug_errno(r, "Failed to load conf file \"%s\": %m", *p);
+         }
+ 
+         return result;
+@@ -1726,7 +1726,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+                         return log_error_errno(r, "Failed to verify alias validity: %m");
+                 if (r == 0)
+                         return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                                 "Invalid unit %s symlink %s.",
++                                                 "Invalid unit \"%s\" symlink \"%s\".",
+                                                  i->name, dst);
+ 
+         } else {
+@@ -1737,7 +1737,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+ 
+                         UnitNameFlags type = unit_name_to_instance(i->name, &inst);
+                         if (type < 0)
+-                                return log_error_errno(type, "Failed to extract instance name from %s: %m", i->name);
++                                return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", i->name);
+ 
+                         if (type == UNIT_NAME_INSTANCE) {
+                                 r = unit_name_replace_instance(dst, inst, &dst_updated);
diff --git a/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch b/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch
new file mode 100644
index 0000000..439eb7c
--- /dev/null
+++ b/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch
@@ -0,0 +1,587 @@
+From e7bd636e75a5435b80a1df478e9e637dd2f7b851 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 7 Mar 2022 12:15:42 +0100
+Subject: [PATCH] test: add test for systemctl link & enable
+
+This test has overlap with test-install-root, but it tests things at a
+different level, so I think it's useful to add. It immediately shows various
+bugs which will be fixed in later patches.
+
+(cherry picked from commit 50c5f5a3d907f819fa139e1853f660ad4fd82c55)
+
+Related: #2082131
+---
+ meson.build                   |   9 +-
+ test/meson.build              |   1 +
+ test/test-systemctl-enable.sh | 523 ++++++++++++++++++++++++++++++++++
+ 3 files changed, 532 insertions(+), 1 deletion(-)
+ create mode 100644 test/test-systemctl-enable.sh
+
+diff --git a/meson.build b/meson.build
+index fdf02b8110..005af872cf 100644
+--- a/meson.build
++++ b/meson.build
+@@ -2371,7 +2371,7 @@ public_programs += executable(
+         install_rpath : rootlibexecdir,
+         install : true)
+ 
+-public_programs += executable(
++exe = executable(
+         'systemctl',
+         systemctl_sources,
+         include_directories : includes,
+@@ -2385,6 +2385,13 @@ public_programs += executable(
+         install_rpath : rootlibexecdir,
+         install : true,
+         install_dir : rootbindir)
++public_programs += exe
++if want_tests != 'false'
++        test('test-systemctl-enable',
++             test_systemctl_enable_sh,
++             # https://github.com/mesonbuild/meson/issues/2681
++             args : exe.full_path())
++endif
+ 
+ if conf.get('ENABLE_PORTABLED') == 1
+         dbus_programs += executable(
+diff --git a/test/meson.build b/test/meson.build
+index c5d8d6917b..c69d8a0204 100644
+--- a/test/meson.build
++++ b/test/meson.build
+@@ -88,6 +88,7 @@ endif
+ 
+ test_fstab_generator_sh = find_program('test-fstab-generator.sh')
+ test_network_generator_conversion_sh = find_program('test-network-generator-conversion.sh')
++test_systemctl_enable_sh = find_program('test-systemctl-enable.sh')
+ test_systemd_tmpfiles_py = find_program('test-systemd-tmpfiles.py')
+ hwdb_test_sh = find_program('hwdb-test.sh')
+ 
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+new file mode 100644
+index 0000000000..30ba6532e7
+--- /dev/null
++++ b/test/test-systemctl-enable.sh
+@@ -0,0 +1,523 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -ex
++
++# Silence warning from running_in_chroot_or_offline()
++export SYSTEMD_IGNORE_CHROOT=1
++
++systemctl=${1:-systemctl}
++
++unset root
++cleanup() {
++    [ -n "$root" ] && rm -rf "$root"
++}
++trap cleanup exit
++root=$(mktemp -d --tmpdir systemctl-test.XXXXXX)
++
++islink() {
++    test -h "$1" || return 1
++    test "$(readlink "$1")" = "$2" || return 2
++}
++
++: ------enablement nonexistent--------------------------------
++"$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; }
++
++: ------basic enablement--------------------------------------
++mkdir -p "$root/etc/systemd/system"
++cat >"$root/etc/systemd/system/test1.service" <<EOF
++[Install]
++WantedBy=default.target
++RequiredBy=special.target
++EOF
++
++"$systemctl" --root="$root" enable test1.service
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" reenable test1.service
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" disable test1.service
++test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
++
++: ------suffix guessing---------------------------------------
++"$systemctl" --root="$root" enable test1
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" reenable test1
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" disable test1
++test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
++
++: -------aliases----------------------------------------------
++"$systemctl" --root="$root" enable test1
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++cat >>"$root/etc/systemd/system/test1.service" <<EOF
++Alias=test1-goodalias.service
++Alias=test1@badalias.service
++Alias=test1-badalias.target
++Alias=test1-badalias.socket
++EOF
++
++: -------aliases in reeanble----------------------------------
++"$systemctl" --root="$root" reenable test1
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++test -h "$root/etc/systemd/system/test1-goodalias.service"
++
++test ! -e "$root/etc/systemd/system/test1@badalias.service"
++test ! -e "$root/etc/systemd/system/test1-badalias.target"
++test ! -e "$root/etc/systemd/system/test1-badalias.socket"
++
++"$systemctl" --root="$root" disable test1
++test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++
++: -------also units-------------------------------------------
++cat >"$root/etc/systemd/system/test2.socket" <<EOF
++[Install]
++WantedBy=sockets.target
++Also=test2.service
++EOF
++
++cat >"$root/etc/systemd/system/test2.service" <<EOF
++[Install]
++WantedBy=default.target
++Also=test2.socket
++EOF
++
++"$systemctl" --root="$root" reenable test2.service
++test -h "$root/etc/systemd/system/default.target.wants/test2.service"
++test -h "$root/etc/systemd/system/sockets.target.wants/test2.socket"
++
++"$systemctl" --root="$root" reenable test2.socket
++test -h "$root/etc/systemd/system/default.target.wants/test2.service"
++test -h "$root/etc/systemd/system/sockets.target.wants/test2.socket"
++
++"$systemctl" --root="$root" disable test2.socket
++test ! -e "$root/etc/systemd/system/default.target.wants/test2.service"
++test ! -e "$root/etc/systemd/system/sockets.target.wants/test2.socket"
++
++
++: -------link-------------------------------------------------
++# File doesn't exist yet
++test ! -e "$root/link1.path"
++"$systemctl" --root="$root" link '/link1.path' && { echo "Expected failure" >&2; exit 1; }
++test ! -e "$root/etc/systemd/system/link1.path"
++
++cat >"$root/link1.path" <<EOF
++[Install]
++WantedBy=paths.target
++EOF
++
++"$systemctl" --root="$root" link '/link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++
++: -------link already linked same path------------------------
++SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" link '/link1.path'  # this passes
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++
++: -------link already linked different path-------------------
++mkdir "$root/subdir"
++cp "$root/link1.path" "$root/subdir/"
++"$systemctl" --root="$root" link '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++
++: -------link bad suffix--------------------------------------
++cp "$root/link1.path" "$root/subdir/link1.suffix"
++"$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
++test ! -e "$root/etc/systemd/system/link1.suffix"
++
++: -------unlink by unit name----------------------------------
++"$systemctl" --root="$root" disable 'link1.path'
++test ! -e "$root/etc/systemd/system/link1.path"
++
++: -------unlink by path---------------------------------------
++"$systemctl" --root="$root" link '/link1.path'
++test -h "$root/etc/systemd/system/link1.path"
++"$systemctl" --root="$root" disable '/link1.path'
++test ! -e "$root/etc/systemd/system/link1.path"
++
++: -------unlink by wrong path---------------------------------
++"$systemctl" --root="$root" link '/link1.path'
++test -h "$root/etc/systemd/system/link1.path"
++"$systemctl" --root="$root" disable '/subdir/link1.path'  # we only care about the name
++test ! -e "$root/etc/systemd/system/link1.path"
++
++
++: -------link and enable--------------------------------------
++"$systemctl" --root="$root" enable '/link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++
++: -------enable already linked same path----------------------
++"$systemctl" --root="$root" enable '/link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++
++: -------enable already linked different path-----------------
++# FIXME
++# "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
++# test -h "$root/etc/systemd/system/link1.path"
++# readlink "$root/etc/systemd/system/link1.path"
++# test -h "$root/etc/systemd/system/paths.target.wants/link1.path"
++# readlink "$root/etc/systemd/system/paths.target.wants/link1.path"
++
++: -------enable bad suffix------------------------------------
++cp "$root/link1.path" "$root/subdir/link1.suffix"
++"$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
++test ! -e "$root/etc/systemd/system/link1.suffix"
++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix"
++
++: -------disable by unit name---------------------------------
++"$systemctl" --root="$root" disable 'link1.path'
++test ! -e "$root/etc/systemd/system/link1.path"
++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path"
++
++: -------disable by path--------------------------------------
++"$systemctl" --root="$root" enable '/link1.path'
++test -h "$root/etc/systemd/system/link1.path"
++test -h "$root/etc/systemd/system/paths.target.wants/link1.path"
++"$systemctl" --root="$root" disable '/link1.path'
++test ! -e "$root/etc/systemd/system/link1.path"
++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path"
++
++
++: -------link then enable-------------------------------------
++"$systemctl" --root="$root" link '/link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path"
++
++"$systemctl" --root="$root" enable 'link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++
++# FIXME
++# "$systemctl" --root="$root" reenable 'link1.path'
++# islink "$root/etc/systemd/system/link1.path" "/link1.path"
++# islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++
++
++: -------manual link------------------------------------------
++cat >"$root/link3.suffix" <<EOF
++[Install]
++WantedBy=services.target
++EOF
++
++ln -s "/link3.suffix" "$root/etc/systemd/system/link3.service"
++
++# SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" enable 'link3.service'
++# islink "$root/etc/systemd/system/link3.service" "/link3.suffix"
++# islink "$root/etc/systemd/system/services.target.wants/link3.service" "../link3.service"
++# unit_file_load_or_readlink() needs to be fixed to not follow links
++
++: -------enable on masked-------------------------------------
++ln -s "/dev/null" "$root/etc/systemd/system/masked.service"
++"$systemctl" --root="$root" enable 'masked.service' && { echo "Expected failure" >&2; exit 1; }
++"$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; }
++
++: -------enable on masked alias-------------------------------
++test -h "$root/etc/systemd/system/masked.service"
++ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service"
++"$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
++"$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
++
++: -------issue 22000: link in subdirectory--------------------
++mkdir -p "$root/etc/systemd/system/myown.d"
++cat >"$root/etc/systemd/system/link5-also.service" <<EOF
++[Install]
++WantedBy=services.target
++Also=link5.service
++EOF
++cat >"$root/etc/systemd/system/myown.d/link5.service" <<EOF
++[Install]
++WantedBy=services.target
++Also=link5-also.service
++EOF
++
++"$systemctl" --root="$root" enable 'link5.service' && { echo "Expected failure" >&2; exit 1; }
++test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service"
++
++"$systemctl" --root="$root" enable 'link5-also.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
++islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "/etc/systemd/system/link5-also.service"
++
++: -------template enablement----------------------------------
++cat >"$root/etc/systemd/system/templ1@.service" <<EOF
++[Install]
++WantedBy=services.target
++EOF
++
++# No instance here — this can't succeed.
++"$systemctl" --root="$root" enable 'templ1@.service' && { echo "Expected failure" >&2; exit 1; }
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++
++"$systemctl" --root="$root" enable 'templ1@one.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" enable 'templ1@two.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" disable 'templ1@one.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" disable 'templ1@two.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
++
++: -------template enablement w/ default instance--------------
++cat >>"$root/etc/systemd/system/templ1@.service" <<EOF
++DefaultInstance=333
++EOF
++# FIXME: should we deduplicate the target? Right now we warn twice if WantedBy= is repeated.
++# WantedBy=services.target services.target
++
++"$systemctl" --root="$root" enable 'templ1@.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" enable 'templ1@one.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" enable 'templ1@two.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++
++"$systemctl" --root="$root" disable 'templ1@one.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++
++# disable both remaining links here
++"$systemctl" --root="$root" disable 'templ1@.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
++
++: -------aliases w/ and w/o instance--------------------------
++test ! -e "$root/etc/systemd/system/link4.service"
++cat >"$root/etc/systemd/system/link4.service" <<EOF
++[Install]
++# FIXME: self-alias should be ignored
++# Alias=link4.service
++Alias=link4@.service
++Alias=link4@inst.service
++Alias=link4alias.service
++Alias=link4alias2.service
++EOF
++
++"$systemctl" --root="$root" enable 'link4.service'
++test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
++test ! -h "$root/etc/systemd/system/link4@.service"
++test ! -h "$root/etc/systemd/system/link4@inst.service"
++islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
++
++"$systemctl" --root="$root" disable 'link4.service'
++test ! -h "$root/etc/systemd/system/link4.service"
++test ! -h "$root/etc/systemd/system/link4@.service"
++test ! -h "$root/etc/systemd/system/link4@inst.service"
++test ! -h "$root/etc/systemd/system/link4alias.service"
++test ! -h "$root/etc/systemd/system/link4alias2.service"
++
++: -------systemctl enable on path to unit file----------------
++# Apparently this works. I'm not sure what to think.
++"$systemctl" --root="$root" enable '/etc/systemd/system/link4.service'
++test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
++test ! -h "$root/etc/systemd/system/link4@.service"
++test ! -h "$root/etc/systemd/system/link4@inst.service"
++islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
++
++"$systemctl" --root="$root" disable '/etc/systemd/system/link4.service'
++test ! -h "$root/etc/systemd/system/link4.service"
++test ! -h "$root/etc/systemd/system/link4@.service"
++test ! -h "$root/etc/systemd/system/link4@inst.service"
++test ! -h "$root/etc/systemd/system/link4alias.service"
++test ! -h "$root/etc/systemd/system/link4alias2.service"
++
++: -------issue 661: link and enable on unit file--------------
++test ! -e "$root/etc/systemd/system/link5.service"
++cat >"$root/etc/systemd/system/link5.service" <<EOF
++[Install]
++# FIXME: self-alias should be ignored
++# Alias=link5.service
++Alias=link5@.service
++Alias=link5@inst.service
++Alias=link5alias.service
++Alias=link5alias2.service
++EOF
++
++"$systemctl" --root="$root" enable 'link5.service'
++test ! -h "$root/etc/systemd/system/link5.service"  # this is our file
++test ! -h "$root/etc/systemd/system/link5@.service"
++test ! -h "$root/etc/systemd/system/link5@inst.service"
++# FIXME/CLARIFYME: will systemd think that link5alias2, link5alias, link5 are all aliases?
++# https://github.com/systemd/systemd/issues/661#issuecomment-1057931149
++islink "$root/etc/systemd/system/link5alias.service" "/etc/systemd/system/link5.service"
++islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5.service"
++
++"$systemctl" --root="$root" disable 'link5.service'
++test ! -h "$root/etc/systemd/system/link5.service"
++test ! -h "$root/etc/systemd/system/link5@.service"
++test ! -h "$root/etc/systemd/system/link5@inst.service"
++test ! -h "$root/etc/systemd/system/link5alias.service"
++test ! -h "$root/etc/systemd/system/link5alias2.service"
++
++: ----issue 19437: plain templates in .wants/ or .requires/---
++test ! -e "$root/etc/systemd/system/link5@.path"
++cat >"$root/etc/systemd/system/link5@.path" <<EOF
++[Install]
++WantedBy=target5@.target
++RequiredBy=target5@.target
++WantedBy=target5@inst.target
++RequiredBy=target5@inst.target
++EOF
++
++"$systemctl" --root="$root" enable 'link5@.path'
++test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
++islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
++
++"$systemctl" --root="$root" disable 'link5@.path'
++test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
++test ! -h "$root/etc/systemd/system/target5@.target.wants/link5@.path"
++test ! -h "$root/etc/systemd/system/target5@.target.requires/link5@.path"
++test ! -h "$root/etc/systemd/system/target5@inst.target.wants/link5@.path"
++test ! -h "$root/etc/systemd/system/target5@inst.target.requires/link5@.path"
++
++: -------removal of symlinks not listed in [Install]----------
++# c.f. 66a19d85a533b15ed32f4066ec880b5a8c06babd
++test ! -e "$root/etc/systemd/system/multilink.mount"
++cat >"$root/etc/systemd/system/multilink.mount" <<EOF
++[Install]
++WantedBy=multilink.target
++EOF
++
++mkdir -p "$root/etc/systemd/system/default.target.wants"
++ln -s ../multilink.mount "$root/etc/systemd/system/default.target.wants/"
++ln -s ../multilink.mount "$root/etc/systemd/system/multilink-alias.mount"
++ln -s ../multilink.mount "$root/etc/systemd/system/multilink-badalias.service"
++
++"$systemctl" --root="$root" disable 'multilink.mount'
++test -e "$root/etc/systemd/system/multilink.mount"  # this is our file
++test ! -h "$root/etc/systemd/system/default.target.wants/"
++test ! -h "$root/etc/systemd/system/multilink-alias.mount"
++test ! -h "$root/etc/systemd/system/multilink-badalias.service"
++
++: -------merge 20017: specifiers in the unit file-------------
++test ! -e "$root/etc/systemd/system/some-some-link6@.socket"
++# c.f. de61a04b188f81a85cdb5c64ddb4987dcd9d30d3
++
++check_alias() {
++    : ------------------ %$1 -------------------------------------
++    cat >"$root/etc/systemd/system/some-some-link6@.socket" <<EOF
++[Install]
++Alias=target@$1:%$1.socket
++EOF
++    SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" enable 'some-some-link6@.socket' || return 1
++    islink "$root/etc/systemd/system/target@$1:$2.socket" "/etc/systemd/system/some-some-link6@.socket" || return 2
++}
++
++check_alias a "$(uname -m | tr '_' '-')"
++
++# FIXME: when os-release is not found, we fail we a cryptic error
++# Alias=target@%A.socket
++
++check_alias b "$(systemd-id128 boot-id)"
++
++# Alias=target@%B.socket
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%C.socket
++# Alias=target@%E.socket
++# Alias=target@%f.socket
++
++# FIXME: we use the calling user instead of root :(
++check_alias g root || :
++check_alias G 0 || :
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%h.socket
++
++check_alias i ""
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%I.socket
++
++check_alias j 'link6'
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%J.socket
++
++check_alias l "$(uname -n | sed 's/\..*//')"
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%L.socket
++
++# FIXME: Failed to enable: No such file or directory.
++# Alias=target@%m.socket
++
++# FIXME: Failed to enable: No such file or directory.
++# Alias=target@%M.socket
++
++check_alias n 'some-some-link6@.socket'
++check_alias N 'some-some-link6@'
++
++# FIXME: Failed to enable: No such file or directory.
++# Alias=target@%o.socket
++
++check_alias p 'some-some-link6'
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%P.socket
++# Alias=target@%s.socket
++# Alias=target@%S.socket
++# Alias=target@%t.socket
++# Alias=target@%T.socket
++
++# FIXME: we use the calling user instead of root :(
++check_alias u root || :
++check_alias U 0 || :
++
++check_alias v "$(uname -r)"
++
++# FIXME: Failed to enable: Invalid slot.
++# Alias=target@%V.socket
++
++# Alias=target@%w.socket
++# Alias=target@%W.socket
++
++check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; }
++
++check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
++
++# FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install]
++
++exit 0  # yes, this is needed because the last test above fails
++
++# TODO: repeat the tests above for presets
diff --git a/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch b/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch
new file mode 100644
index 0000000..50d813b
--- /dev/null
+++ b/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch
@@ -0,0 +1,248 @@
+From ad50f15e51f4f2ffc4ebbfab10a3e1c5739c9ce6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 7 Mar 2022 15:06:57 +0100
+Subject: [PATCH] tests: add helper for creating tempfiles with content
+
+I put it in tests because I think we're most likely to use it in tests.
+If necessary, it can be moved somewhere else later.
+
+(cherry picked from commit 367c47c886af7d915e23de8d6aae0a1c135c0350)
+
+Related: #2082131
+---
+ src/shared/tests.c          | 19 +++++++++
+ src/shared/tests.h          |  2 +
+ src/test/test-env-file.c    | 77 +++++++++----------------------------
+ src/test/test-socket-util.c | 19 +++------
+ 4 files changed, 44 insertions(+), 73 deletions(-)
+
+diff --git a/src/shared/tests.c b/src/shared/tests.c
+index f5d9536411..307f796fe2 100644
+--- a/src/shared/tests.c
++++ b/src/shared/tests.c
+@@ -25,6 +25,7 @@
+ #include "cgroup-util.h"
+ #include "env-file.h"
+ #include "env-util.h"
++#include "fd-util.h"
+ #include "fs-util.h"
+ #include "log.h"
+ #include "namespace-util.h"
+@@ -33,6 +34,7 @@
+ #include "random-util.h"
+ #include "strv.h"
+ #include "tests.h"
++#include "tmpfile-util.h"
+ 
+ char* setup_fake_runtime_dir(void) {
+         char t[] = "/tmp/fake-xdg-runtime-XXXXXX", *p;
+@@ -133,6 +135,23 @@ int log_tests_skipped_errno(int r, const char *message) {
+         return EXIT_TEST_SKIP;
+ }
+ 
++int write_tmpfile(char *pattern, const char *contents) {
++        _cleanup_close_ int fd = -1;
++
++        assert(pattern);
++        assert(contents);
++
++        fd = mkostemp_safe(pattern);
++        if (fd < 0)
++                return fd;
++
++        ssize_t l = strlen(contents);
++        errno = 0;
++        if (write(fd, contents, l) != l)
++                return errno_or_else(EIO);
++        return 0;
++}
++
+ bool have_namespaces(void) {
+         siginfo_t si = {};
+         pid_t pid;
+diff --git a/src/shared/tests.h b/src/shared/tests.h
+index ef6acd368e..ade527590b 100644
+--- a/src/shared/tests.h
++++ b/src/shared/tests.h
+@@ -30,6 +30,8 @@ void test_setup_logging(int level);
+ int log_tests_skipped(const char *message);
+ int log_tests_skipped_errno(int r, const char *message);
+ 
++int write_tmpfile(char *pattern, const char *contents);
++
+ bool have_namespaces(void);
+ 
+ /* We use the small but non-trivial limit here */
+diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c
+index f97206b4d6..886a8e4bc8 100644
+--- a/src/test/test-env-file.c
++++ b/src/test/test-env-file.c
+@@ -55,18 +55,11 @@
+ 
+ 
+ TEST(load_env_file_1) {
+-        _cleanup_strv_free_ char **data = NULL;
+-        int r;
+-
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
+-
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1));
++        assert_se(write_tmpfile(name, env_file_1) == 0);
+ 
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(streq(data[0], "a=a"));
+         assert_se(streq(data[1], "b=bc"));
+         assert_se(streq(data[2], "d=de  f"));
+@@ -77,50 +70,30 @@ TEST(load_env_file_1) {
+ }
+ 
+ TEST(load_env_file_2) {
+-        _cleanup_strv_free_ char **data = NULL;
+-        int r;
+-
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
++        assert_se(write_tmpfile(name, env_file_2) == 0);
+ 
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2));
+-
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(streq(data[0], "a=a"));
+         assert_se(data[1] == NULL);
+ }
+ 
+ TEST(load_env_file_3) {
+-        _cleanup_strv_free_ char **data = NULL;
+-        int r;
+-
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
+-
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3));
++        assert_se(write_tmpfile(name, env_file_3) == 0);
+ 
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(data == NULL);
+ }
+ 
+ TEST(load_env_file_4) {
+-        _cleanup_strv_free_ char **data = NULL;
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
+-        int r;
+-
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4));
++        assert_se(write_tmpfile(name, env_file_4) == 0);
+ 
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
+         assert_se(streq(data[1], "MODULE_0=coretemp"));
+         assert_se(streq(data[2], "MODULE_1=f71882fg"));
+@@ -128,36 +101,22 @@ TEST(load_env_file_4) {
+ }
+ 
+ TEST(load_env_file_5) {
+-        _cleanup_strv_free_ char **data = NULL;
+-        int r;
+-
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
+-
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5));
++        assert_se(write_tmpfile(name, env_file_5) == 0);
+ 
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(streq(data[0], "a="));
+         assert_se(streq(data[1], "b="));
+         assert_se(data[2] == NULL);
+ }
+ 
+ TEST(load_env_file_6) {
+-        _cleanup_strv_free_ char **data = NULL;
+-        int r;
+-
+         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
+-        _cleanup_close_ int fd;
++        assert_se(write_tmpfile(name, env_file_6) == 0);
+ 
+-        fd = mkostemp_safe(name);
+-        assert_se(fd >= 0);
+-        assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6));
+-
+-        r = load_env_file(NULL, name, &data);
+-        assert_se(r == 0);
++        _cleanup_strv_free_ char **data = NULL;
++        assert_se(load_env_file(NULL, name, &data) == 0);
+         assert_se(streq(data[0], "a= n t x y '"));
+         assert_se(streq(data[1], "b=$'"));
+         assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n"));
+diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c
+index 9ee651a5fa..3245516f9a 100644
+--- a/src/test/test-socket-util.c
++++ b/src/test/test-socket-util.c
+@@ -228,17 +228,12 @@ TEST(passfd_read) {
+ 
+         if (r == 0) {
+                 /* Child */
+-                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
+-                _cleanup_close_ int tmpfd = -1;
+-
+                 pair[0] = safe_close(pair[0]);
+ 
+-                tmpfd = mkostemp_safe(tmpfile);
+-                assert_se(tmpfd >= 0);
+-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
+-                tmpfd = safe_close(tmpfd);
++                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
++                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
+ 
+-                tmpfd = open(tmpfile, O_RDONLY);
++                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
+                 assert_se(tmpfd >= 0);
+                 assert_se(unlink(tmpfile) == 0);
+ 
+@@ -277,16 +272,12 @@ TEST(passfd_contents_read) {
+                 /* Child */
+                 struct iovec iov = IOVEC_INIT_STRING(wire_contents);
+                 char tmpfile[] = "/tmp/test-socket-util-passfd-contents-read-XXXXXX";
+-                _cleanup_close_ int tmpfd = -1;
+ 
+                 pair[0] = safe_close(pair[0]);
+ 
+-                tmpfd = mkostemp_safe(tmpfile);
+-                assert_se(tmpfd >= 0);
+-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
+-                tmpfd = safe_close(tmpfd);
++                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
+ 
+-                tmpfd = open(tmpfile, O_RDONLY);
++                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
+                 assert_se(tmpfd >= 0);
+                 assert_se(unlink(tmpfile) == 0);
+ 
diff --git a/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch b/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch
new file mode 100644
index 0000000..a47ca97
--- /dev/null
+++ b/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch
@@ -0,0 +1,106 @@
+From 2c9079ca0eaa2a1df2a1775c28fa7a49785999df Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 28 Mar 2022 11:46:38 +0200
+Subject: [PATCH] man: clarify the descriptions of aliases and linked unit
+ files
+
+This just describes the rules that are implemented by the manager, and this
+pull request does not change any of them.
+
+(cherry picked from commit ecd6c000d3a2e743a0f533d427250714c7593cf7)
+
+Related: #2082131
+---
+ man/systemd.unit.xml | 58 ++++++++++++++++++++++++++++++++------------
+ 1 file changed, 43 insertions(+), 15 deletions(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 2a44b8cfd8..4ba602b5ad 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -140,7 +140,7 @@
+     a symlink, so when <command>systemd</command> is asked through D-Bus to load
+     <filename>dbus-org.freedesktop.network1.service</filename>, it'll load
+     <filename>systemd-networkd.service</filename>. As another example, <filename>default.target</filename> —
+-    the default system target started at boot — is commonly symlinked (aliased) to either
++    the default system target started at boot — is commonly aliased to either
+     <filename>multi-user.target</filename> or <filename>graphical.target</filename> to select what is started
+     by default. Alias names may be used in commands like <command>disable</command>,
+     <command>start</command>, <command>stop</command>, <command>status</command>, and similar, and in all
+@@ -156,8 +156,12 @@
+     template instance (e.g. <literal>alias@inst.service</literal>) may be a symlink to different template
+     (e.g. <literal>template@inst.service</literal>). In that case, just this specific instance is aliased,
+     while other instances of the template (e.g. <literal>alias@foo.service</literal>,
+-    <literal>alias@bar.service</literal>) are not aliased. Those rule preserve the requirement that the
+-    instance (if any) is always uniquely defined for a given unit and all its aliases.</para>
++    <literal>alias@bar.service</literal>) are not aliased. Those rules preserve the requirement that the
++    instance (if any) is always uniquely defined for a given unit and all its aliases. The target of alias
++    symlink must point to a valid unit file location, i.e. the symlink target name must match the symlink
++    source name as described, and the destination path must be in one of the unit search paths, see UNIT FILE
++    LOAD PATH section below for more details. Note that the target file may not exist, i.e. the symlink may
++    be dangling.</para>
+ 
+     <para>Unit files may specify aliases through the <varname>Alias=</varname> directive in the [Install]
+     section. When the unit is enabled, symlinks will be created for those names, and removed when the unit is
+@@ -177,11 +181,18 @@
+     exists for <varname>Requires=</varname> type dependencies as well, the directory suffix is
+     <filename>.requires/</filename> in this case. This functionality is useful to hook units into the
+     start-up of other units, without having to modify their unit files. For details about the semantics of
+-    <varname>Wants=</varname>, see below. The preferred way to create symlinks in the
+-    <filename>.wants/</filename> or <filename>.requires/</filename> directory of a unit file is by embedding
+-    the dependency in [Install] section of the target unit, and creating the symlink in the file system with
+-    the <command>enable</command> or <command>preset</command> commands of
+-    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
++    <varname>Wants=</varname> and <varname>Requires=</varname>, see below. The preferred way to create
++    symlinks in the <filename>.wants/</filename> or <filename>.requires/</filename> directories is by
++    specifying the dependency in [Install] section of the target unit, and creating the symlink in the file
++    system with the <command>enable</command> or <command>preset</command> commands of
++    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.  The
++    target can be a normal unit (either plain or a specific instance of a template unit). In case when the
++    source unit is a template, the target can also be a template, in which case the instance will be
++    "propagated" to the target unit to form a valid unit instance. The target of symlinks in
++    <filename>.wants/</filename> or <filename>.requires/</filename> must thus point to a valid unit file
++    location, i.e. the symlink target name must satisfy the described requirements, and the destination path
++    must be in one of the unit search paths, see UNIT FILE LOAD PATH section below for more details. Note
++    that the target file may not exist, i.e. the symlink may be dangling.</para>
+ 
+     <para>Along with a unit file <filename>foo.service</filename>, a "drop-in" directory
+     <filename>foo.service.d/</filename> may exist. All files with the suffix
+@@ -503,13 +514,30 @@
+     <programlisting>systemd-analyze --user unit-paths</programlisting>
+     </para>
+ 
+-    <para>Moreover, additional units might be loaded into systemd from
+-    directories not on the unit load path by creating a symlink pointing to a
+-    unit file in the directories. You can use <command>systemctl link</command>
+-    for this operation. See
+-    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+-    for its usage and precaution.
+-    </para>
++    <para>Moreover, additional units might be loaded into systemd from directories not on the unit load path
++    by creating a symlink pointing to a unit file in the directories. You can use <command>systemctl
++    link</command> for this; see
++    <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The file
++    system where the linked unit files are located must be accessible when systemd is started (e.g. anything
++    underneath <filename>/home/</filename> or <filename>/var/</filename> is not allowed, unless those
++    directories are located on the root file system).</para>
++
++    <para>It is important to distinguish "linked unit files" from "unit file aliases": any symlink where the
++    symlink <emphasis>target</emphasis> is within the unit load path becomes an alias: the source name and
++    the target file name must satisfy specific constraints listed above in the discussion of aliases, but the
++    symlink target doesn't have to exist, and in fact the symlink target path is not used, except to check
++    whether the target is within the unit load path. In constrast, a symlink which goes outside of the unit
++    load path signifies a linked unit file. The symlink is followed when loading the file, but the
++    destination name is otherwise unused (and may even not be a valid unit file name). For example, symlinks
++    <filename index='false'>/etc/systemd/system/alias1.service</filename> → <filename index='false'>service1.service</filename>,
++    <filename index='false'>/etc/systemd/system/alias2.service</filename> → <filename index='false'>/usr/lib/systemd/service1.service</filename>,
++    <filename index='false'>/etc/systemd/system/alias3.service</filename> → <filename index='false'>/etc/systemd/system/service1.service</filename>
++    are all valid aliases and <filename index='false'>service1.service</filename> will have
++    four names, even if the unit file is located at
++    <filename index='false'>/run/systemd/system/service1.service</filename>. In contrast,
++    a symlink <filename index='false'>/etc/systemd/system/link1.service</filename> → <filename index='false'>../link1_service_file</filename>
++    means that <filename index='false'>link1.service</filename> is a "linked unit" and the contents of
++    <filename index='false'>/etc/systemd/link1_service_file</filename> provide its configuration.</para>
+   </refsect1>
+ 
+   <refsect1>
diff --git a/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch b/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch
new file mode 100644
index 0000000..83b187f
--- /dev/null
+++ b/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch
@@ -0,0 +1,85 @@
+From d424adce45d593d41e52294bd8f32fd33c625498 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 7 Mar 2022 18:54:50 +0100
+Subject: [PATCH] basic: add new variable $SYSTEMD_OS_RELEASE to override
+ location of os-release
+
+The test for the variable is added in test-systemctl-enable because there we
+can do it almost for free, and the variable is most likely to be used with
+'systemctl enable --root' anyway.
+
+(cherry picked from commit df78419d107662dd49892d76a745c294d7031d66)
+
+Related: #2082131
+---
+ docs/ENVIRONMENT.md           |  5 +++++
+ src/basic/os-util.c           | 16 +++++++++++-----
+ test/test-systemctl-enable.sh | 12 ++++++++++--
+ 3 files changed, 26 insertions(+), 7 deletions(-)
+
+diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
+index 71d6c55010..5e9548449c 100644
+--- a/docs/ENVIRONMENT.md
++++ b/docs/ENVIRONMENT.md
+@@ -43,6 +43,11 @@ All tools:
+   debugging, in order to test generators and other code against specific kernel
+   command lines.
+ 
++* `$SYSTEMD_OS_RELEASE` — if set, use this path instead of `/etc/os-release` or
++  `/usr/lib/os-release`. When operating under some root (e.g. `systemctl
++  --root=…`), the path is taken relative to the outside root. Only useful for
++  debugging.
++
+ * `$SYSTEMD_FSTAB` — if set, use this path instead of `/etc/fstab`. Only useful
+   for debugging.
+ 
+diff --git a/src/basic/os-util.c b/src/basic/os-util.c
+index a6e4d09473..38b2179e48 100644
+--- a/src/basic/os-util.c
++++ b/src/basic/os-util.c
+@@ -170,13 +170,19 @@ int open_extension_release(const char *root, const char *extension, char **ret_p
+                         }
+                 }
+         } else {
+-                FOREACH_STRING(p, "/etc/os-release", "/usr/lib/os-release") {
+-                        r = chase_symlinks(p, root, CHASE_PREFIX_ROOT,
++                const char *var = secure_getenv("SYSTEMD_OS_RELEASE");
++                if (var)
++                        r = chase_symlinks(var, root, 0,
+                                            ret_path ? &q : NULL,
+                                            ret_fd ? &fd : NULL);
+-                        if (r != -ENOENT)
+-                                break;
+-                }
++                else
++                        FOREACH_STRING(path, "/etc/os-release", "/usr/lib/os-release") {
++                                r = chase_symlinks(path, root, CHASE_PREFIX_ROOT,
++                                                   ret_path ? &q : NULL,
++                                                   ret_fd ? &fd : NULL);
++                                if (r != -ENOENT)
++                                        break;
++                        }
+         }
+         if (r < 0)
+                 return r;
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 30ba6532e7..769341129c 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -518,6 +518,14 @@ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit
+ 
+ # FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install]
+ 
+-exit 0  # yes, this is needed because the last test above fails
+-
+ # TODO: repeat the tests above for presets
++
++: -------SYSTEMD_OS_RELEASE relative to root------------------
++# check that os-release overwriting works as expected with root
++test -e "$root/etc/os-release"
++
++cat >"$root/etc/os-release2" <<EOF
++ID='the-id2'
++EOF
++
++SYSTEMD_OS_RELEASE="$root/etc/os-release2" check_alias o 'the-id2'
diff --git a/SOURCES/0166-test-os-util-add-basic-tests-for-os-release-parsing.patch b/SOURCES/0166-test-os-util-add-basic-tests-for-os-release-parsing.patch
new file mode 100644
index 0000000..314fae9
--- /dev/null
+++ b/SOURCES/0166-test-os-util-add-basic-tests-for-os-release-parsing.patch
@@ -0,0 +1,92 @@
+From b8ebf512d4afa0f64503a96c2b58b12d9de531fb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 7 Mar 2022 19:22:01 +0100
+Subject: [PATCH] test-os-util: add basic tests for os-release parsing
+
+(cherry picked from commit 80e72f80bc407753582b421421c13ca50b675027)
+
+Related: #2082131
+---
+ src/test/test-os-util.c | 62 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 62 insertions(+)
+
+diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c
+index eb5466259a..5f82748783 100644
+--- a/src/test/test-os-util.c
++++ b/src/test/test-os-util.c
+@@ -2,8 +2,11 @@
+ 
+ #include <errno.h>
+ 
++#include "fs-util.h"
+ #include "log.h"
+ #include "os-util.h"
++#include "string-util.h"
++#include "strv.h"
+ #include "tests.h"
+ 
+ TEST(path_is_os_tree) {
+@@ -12,4 +15,63 @@ TEST(path_is_os_tree) {
+         assert_se(path_is_os_tree("/idontexist") == -ENOENT);
+ }
+ 
++TEST(parse_os_release) {
++        /* Let's assume that we're running in a valid system, so os-release is available */
++        _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL;
++        assert_se(parse_os_release(NULL, "ID", &id) == 1);
++        log_info("ID: %s", id);
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
++        assert_se(parse_os_release(NULL, "ID", &id2) == 0);
++        log_info("ID: %s", strnull(id2));
++
++        _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
++        assert_se(write_tmpfile(tmpfile,
++                                "ID=the-id  \n"
++                                "NAME=the-name") == 0);
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
++        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 2);
++        log_info("ID: %s NAME: %s", id, name);
++        assert_se(streq(id, "the-id"));
++        assert_se(streq(name, "the-name"));
++
++        _cleanup_(unlink_tempfilep) char tmpfile2[] = "/tmp/test-os-util.XXXXXX";
++        assert_se(write_tmpfile(tmpfile2,
++                                "ID=\"ignored\"  \n"
++                                "ID=\"the-id\"  \n"
++                                "NAME='the-name'") == 0);
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0);
++        // FIXME: we return 3, which means that the return value is useless in face of repeats
++        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 3);
++        log_info("ID: %s NAME: %s", id, name);
++        assert_se(streq(id, "the-id"));
++        assert_se(streq(name, "the-name"));
++
++        assert_se(parse_os_release(NULL, "FOOBAR", &foobar) == 0);
++        log_info("FOOBAR: %s", strnull(foobar));
++        assert_se(foobar == NULL);
++
++        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
++}
++
++TEST(load_os_release_pairs) {
++        _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
++        assert_se(write_tmpfile(tmpfile,
++                                "ID=\"ignored\"  \n"
++                                "ID=\"the-id\"  \n"
++                                "NAME='the-name'") == 0);
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
++
++        _cleanup_strv_free_ char **pairs = NULL;
++        assert_se(load_os_release_pairs(NULL, &pairs) == 0);
++        assert_se(strv_equal(pairs, STRV_MAKE("ID", "ignored", // FIXME
++                                              "ID", "the-id",
++                                              "NAME", "the-name")));
++
++        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
++}
++
+ DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch b/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch
new file mode 100644
index 0000000..3ba038c
--- /dev/null
+++ b/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch
@@ -0,0 +1,104 @@
+From f990ee961a75791adfdea2f5efb35017a51a310e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 10:08:05 +0100
+Subject: [PATCH] basic/env-file: make load-env-file deduplicate entries with
+ the same key
+
+We generally assume parsing like the shell would do it, so the last value
+should win when there are repeats.
+
+(cherry picked from commit 25407ad2a785d10b1aadff0c99829ea0cf51082b)
+
+Related: #2082131
+---
+ src/basic/env-file.c     | 31 ++++++++++++++++++++-----------
+ src/test/test-env-file.c |  5 +++++
+ src/test/test-os-util.c  |  3 +--
+ 3 files changed, 26 insertions(+), 13 deletions(-)
+
+diff --git a/src/basic/env-file.c b/src/basic/env-file.c
+index 599b73bc22..0353f3f2a0 100644
+--- a/src/basic/env-file.c
++++ b/src/basic/env-file.c
+@@ -415,30 +415,39 @@ static int load_env_file_push_pairs(
+                 const char *key, char *value,
+                 void *userdata,
+                 int *n_pushed) {
+-        char ***m = userdata;
++        char ***m = ASSERT_PTR(userdata);
++        bool added = false;
+         int r;
+ 
+         r = check_utf8ness_and_warn(filename, line, key, value);
+         if (r < 0)
+                 return r;
+ 
++        /* Check if the key is present */
++        for (char **t = *m; t && *t; t += 2)
++                if (streq(t[0], key)) {
++                        if (value)
++                                r = free_and_replace(t[1], value);
++                        else
++                                r = free_and_strdup(t+1, "");
++                        goto finish;
++                }
++
+         r = strv_extend(m, key);
+         if (r < 0)
+                 return -ENOMEM;
+ 
+-        if (!value) {
+-                r = strv_extend(m, "");
+-                if (r < 0)
+-                        return -ENOMEM;
+-        } else {
++        if (value)
+                 r = strv_push(m, value);
+-                if (r < 0)
+-                        return r;
+-        }
++        else
++                r = strv_extend(m, "");
++        added = true;
++ finish:
++        if (r < 0)
++                return r;
+ 
+-        if (n_pushed)
++        if (n_pushed && added)
+                 (*n_pushed)++;
+-
+         return 0;
+ }
+ 
+diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c
+index 886a8e4bc8..461a0f0810 100644
+--- a/src/test/test-env-file.c
++++ b/src/test/test-env-file.c
+@@ -9,7 +9,12 @@
+ #include "tests.h"
+ #include "tmpfile-util.h"
+ 
++/* In case of repeating keys, later entries win. */
++
+ #define env_file_1                              \
++        "a=a\n"                                 \
++        "a=b\n"                                 \
++        "a=b\n"                                 \
+         "a=a\n"                                 \
+         "b=b\\\n"                               \
+         "c\n"                                   \
+diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c
+index 5f82748783..d6336c53e9 100644
+--- a/src/test/test-os-util.c
++++ b/src/test/test-os-util.c
+@@ -67,8 +67,7 @@ TEST(load_os_release_pairs) {
+ 
+         _cleanup_strv_free_ char **pairs = NULL;
+         assert_se(load_os_release_pairs(NULL, &pairs) == 0);
+-        assert_se(strv_equal(pairs, STRV_MAKE("ID", "ignored", // FIXME
+-                                              "ID", "the-id",
++        assert_se(strv_equal(pairs, STRV_MAKE("ID", "the-id",
+                                               "NAME", "the-name")));
+ 
+         assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
diff --git a/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch b/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch
new file mode 100644
index 0000000..2fe5e02
--- /dev/null
+++ b/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch
@@ -0,0 +1,33 @@
+From b4087419bac3cd656a3f8ba82653750fd60c19b9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 10:10:12 +0100
+Subject: [PATCH] man/os-release: add a note about repeating entries
+
+We didn't actually say that keys should not be repeated. At least the
+examples in docs (both python and shell) would do that, and any simple
+parser that builds a dictionary would most likely behave the same way.
+But let's document this expectation, but also say how to deal with malformed
+files.
+
+(cherry picked from commit 3a84a3c9dfde5182398a6d0863a2b2fe90a936b1)
+
+Related: #2082131
+---
+ man/os-release.xml | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/man/os-release.xml b/man/os-release.xml
+index 1826a60d1a..baff088bc0 100644
+--- a/man/os-release.xml
++++ b/man/os-release.xml
+@@ -75,6 +75,10 @@
+     from earliest boot on, and hence must be located on the root file
+     system.</para>
+ 
++    <para><filename>os-release</filename> must not contain repeating keys. Nevertheless, readers should pick
++    the entries later in the file in case of repeats, similarly to how a shell sourcing the file would. A
++    reader may warn about repeating entries.</para>
++
+     <para>For a longer rationale for <filename>os-release</filename>
+     please refer to the <ulink
+     url="http://0pointer.de/blog/projects/os-release">Announcement of <filename>/etc/os-release</filename></ulink>.</para>
diff --git a/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch b/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch
new file mode 100644
index 0000000..9e778f6
--- /dev/null
+++ b/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch
@@ -0,0 +1,55 @@
+From fb51d78042fec1a2df2a7da1f9a759875bd7e07e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 11:38:46 +0100
+Subject: [PATCH] shared/specifier: clarify and add test for missing data
+
+In systemd.unit we document that unset fields resolve to "". But we didn't
+directly test this, so let's do that. Also, we return -ENOENT if the file
+is missing, which we didn't document or test.
+
+(cherry picked from commit 7962116fc8a2572c5c89904ac50fe99c8101f28f)
+
+Related: #2082131
+---
+ src/shared/specifier.c    |  4 +++-
+ src/test/test-specifier.c | 14 ++++++++++++++
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/specifier.c b/src/shared/specifier.c
+index f8ab98541f..c26628975c 100644
+--- a/src/shared/specifier.c
++++ b/src/shared/specifier.c
+@@ -213,7 +213,9 @@ int specifier_architecture(char specifier, const void *data, const char *root, c
+ }
+ 
+ /* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
+- * otherwise. We'll return an empty value or NULL in that case from the functions below. */
++ * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the
++ * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the
++ * installation. */
+ 
+ int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+         return parse_os_release(root, "ID", ret);
+diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
+index dda993ce9d..790f0252d7 100644
+--- a/src/test/test-specifier.c
++++ b/src/test/test-specifier.c
+@@ -96,4 +96,18 @@ TEST(specifiers) {
+         }
+ }
+ 
++TEST(specifiers_missing_data_ok) {
++        _cleanup_free_ char *resolved = NULL;
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
++        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
++        assert_se(streq(resolved, "-----"));
++
++        assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
++        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT);
++        assert_se(streq(resolved, "-----"));
++
++        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
++}
++
+ DEFINE_TEST_MAIN(LOG_DEBUG);
diff --git a/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch b/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch
new file mode 100644
index 0000000..843675d
--- /dev/null
+++ b/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch
@@ -0,0 +1,278 @@
+From b3b45ed9385341e72edfc1bae08819026d841d46 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 8 Mar 2022 12:08:00 +0100
+Subject: [PATCH] shared/specifier: provide proper error messages when
+ specifiers fail to read files
+
+ENOENT is easily confused with the file that we're working on not being
+present, e.g. when the file contains %o or something else that requires
+os-release to be present. Let's use -EUNATCH instead to reduce that chances of
+confusion if the context of the error is lost.
+
+And once we have pinpointed the reason, let's provide a proper error message:
+
++ build/systemctl --root=/tmp/systemctl-test.TO7Mcb enable some-some-link6@.socket
+/tmp/systemctl-test.TO7Mcb/etc/systemd/system/some-some-link6@.socket: Failed to resolve alias "target@A:%A.socket": Protocol driver not attached
+Failed to enable unit, cannot resolve specifiers in "target@A:%A.socket".
+
+(cherry picked from commit 6ec4c852c910b1aca649e87ba3143841334f01fa)
+
+Related: #2082131
+---
+ src/shared/install.c          | 31 +++++++++++++-------
+ src/shared/specifier.c        | 27 ++++++++++++-----
+ src/test/test-specifier.c     |  2 +-
+ test/test-systemctl-enable.sh | 55 ++++++++++++++++++++++++++---------
+ 4 files changed, 82 insertions(+), 33 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index cbfe96b1e8..ea5bc36482 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -374,6 +374,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
++
+                 case -EADDRNOTAVAIL:
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
+                                         verb, changes[i].path);
+@@ -401,6 +402,12 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         logged = true;
+                         break;
+ 
++                case -EUNATCH:
++                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
++                                        verb, changes[i].path);
++                        logged = true;
++                        break;
++
+                 default:
+                         assert(changes[i].type_or_errno < 0);
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m",
+@@ -1154,7 +1161,8 @@ static int config_parse_also(
+ 
+                 r = install_name_printf(info, word, info->root, &printed);
+                 if (r < 0)
+-                        return r;
++                        return log_syntax(unit, LOG_WARNING, filename, line, r,
++                                          "Failed to resolve unit name in Also=\"%s\": %m", word);
+ 
+                 r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL);
+                 if (r < 0)
+@@ -1201,14 +1209,13 @@ static int config_parse_default_instance(
+ 
+         r = install_name_printf(i, rvalue, i->root, &printed);
+         if (r < 0)
+-                return r;
++                return log_syntax(unit, LOG_WARNING, filename, line, r,
++                                  "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue);
+ 
+-        if (isempty(printed)) {
+-                i->default_instance = mfree(i->default_instance);
+-                return 0;
+-        }
++        if (isempty(printed))
++                printed = mfree(printed);
+ 
+-        if (!unit_instance_is_valid(printed))
++        if (printed && !unit_instance_is_valid(printed))
+                 return log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                   "Invalid DefaultInstance= value \"%s\".", printed);
+ 
+@@ -1776,8 +1783,10 @@ static int install_info_symlink_alias(
+                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+ 
+                 q = install_name_printf(i, *s, i->root, &dst);
+-                if (q < 0)
++                if (q < 0) {
++                        unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
++                }
+ 
+                 q = unit_file_verify_alias(i, dst, &dst_updated);
+                 if (q < 0)
+@@ -1861,8 +1870,10 @@ static int install_info_symlink_wants(
+                 _cleanup_free_ char *path = NULL, *dst = NULL;
+ 
+                 q = install_name_printf(i, *s, i->root, &dst);
+-                if (q < 0)
++                if (q < 0) {
++                        unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
++                }
+ 
+                 if (!unit_name_is_valid(dst, valid_dst_type)) {
+                         /* Generate a proper error here: EUCLEAN if the name is generally bad, EIDRM if the
+@@ -3332,7 +3343,7 @@ int unit_file_preset_all(
+ 
+                         r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
+                         if (r < 0 &&
+-                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT))
++                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH))
+                                 /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
+                                  * Coordinate with unit_file_dump_changes() above. */
+                                 return r;
+diff --git a/src/shared/specifier.c b/src/shared/specifier.c
+index c26628975c..a917378427 100644
+--- a/src/shared/specifier.c
++++ b/src/shared/specifier.c
+@@ -131,7 +131,8 @@ int specifier_machine_id(char specifier, const void *data, const char *root, con
+ 
+                 fd = chase_symlinks_and_open("/etc/machine-id", root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL);
+                 if (fd < 0)
+-                        return fd;
++                        /* Translate error for missing os-release file to EUNATCH. */
++                        return fd == -ENOENT ? -EUNATCH : fd;
+ 
+                 r = id128_read_fd(fd, ID128_PLAIN, &id);
+         } else
+@@ -214,31 +215,41 @@ int specifier_architecture(char specifier, const void *data, const char *root, c
+ 
+ /* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
+  * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the
+- * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the
++ * os-release file is missing, we'll return -EUNATCH. This means that something is seriously wrong with the
+  * installation. */
+ 
++static int parse_os_release_specifier(const char *root, const char *id, char **ret) {
++        int r;
++
++        assert(ret);
++
++        /* Translate error for missing os-release file to EUNATCH. */
++        r = parse_os_release(root, id, ret);
++        return r == -ENOENT ? -EUNATCH : r;
++}
++
+ int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "ID", ret);
++        return parse_os_release_specifier(root, "ID", ret);
+ }
+ 
+ int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "VERSION_ID", ret);
++        return parse_os_release_specifier(root, "VERSION_ID", ret);
+ }
+ 
+ int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "BUILD_ID", ret);
++        return parse_os_release_specifier(root, "BUILD_ID", ret);
+ }
+ 
+ int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "VARIANT_ID", ret);
++        return parse_os_release_specifier(root, "VARIANT_ID", ret);
+ }
+ 
+ int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "IMAGE_ID", ret);
++        return parse_os_release_specifier(root, "IMAGE_ID", ret);
+ }
+ 
+ int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        return parse_os_release(root, "IMAGE_VERSION", ret);
++        return parse_os_release_specifier(root, "IMAGE_VERSION", ret);
+ }
+ 
+ int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
+index 790f0252d7..a45d1bd0b9 100644
+--- a/src/test/test-specifier.c
++++ b/src/test/test-specifier.c
+@@ -104,7 +104,7 @@ TEST(specifiers_missing_data_ok) {
+         assert_se(streq(resolved, "-----"));
+ 
+         assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
+-        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT);
++        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -EUNATCH);
+         assert_se(streq(resolved, "-----"));
+ 
+         assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 769341129c..43a2c0a0fb 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -445,12 +445,45 @@ EOF
+ 
+ check_alias a "$(uname -m | tr '_' '-')"
+ 
+-# FIXME: when os-release is not found, we fail we a cryptic error
+-# Alias=target@%A.socket
++test ! -e "$root/etc/os-release"
++test ! -e "$root/usr/lib/os-release"
++
++check_alias A '' && { echo "Expected failure" >&2; exit 1; }
++check_alias B '' && { echo "Expected failure" >&2; exit 1; }
++check_alias M '' && { echo "Expected failure" >&2; exit 1; }
++check_alias o '' && { echo "Expected failure" >&2; exit 1; }
++check_alias w '' && { echo "Expected failure" >&2; exit 1; }
++check_alias W '' && { echo "Expected failure" >&2; exit 1; }
++
++cat >"$root/etc/os-release" <<EOF
++# empty
++EOF
+ 
+-check_alias b "$(systemd-id128 boot-id)"
++check_alias A ''
++check_alias B ''
++check_alias M ''
++check_alias o ''
++check_alias w ''
++check_alias W ''
++
++cat >"$root/etc/os-release" <<EOF
++ID='the-id'
++VERSION_ID=39a
++BUILD_ID=build-id
++VARIANT_ID=wrong
++VARIANT_ID=right
++IMAGE_ID="foobar"
++IMAGE_VERSION='1-2-3'
++EOF
+ 
+-# Alias=target@%B.socket
++check_alias A '1-2-3'
++check_alias B 'build-id'
++check_alias M 'foobar'
++check_alias o 'the-id'
++check_alias w '39a'
++check_alias W 'right'
++
++check_alias b "$(systemd-id128 boot-id)"
+ 
+ # FIXME: Failed to enable: Invalid slot.
+ # Alias=target@%C.socket
+@@ -479,18 +512,15 @@ check_alias l "$(uname -n | sed 's/\..*//')"
+ # FIXME: Failed to enable: Invalid slot.
+ # Alias=target@%L.socket
+ 
+-# FIXME: Failed to enable: No such file or directory.
+-# Alias=target@%m.socket
++test ! -e "$root/etc/machine-id"
++check_alias m '' && { echo "Expected failure" >&2; exit 1; }
+ 
+-# FIXME: Failed to enable: No such file or directory.
+-# Alias=target@%M.socket
++systemd-id128 new >"$root/etc/machine-id"
++check_alias m "$(cat "$root/etc/machine-id")"
+ 
+ check_alias n 'some-some-link6@.socket'
+ check_alias N 'some-some-link6@'
+ 
+-# FIXME: Failed to enable: No such file or directory.
+-# Alias=target@%o.socket
+-
+ check_alias p 'some-some-link6'
+ 
+ # FIXME: Failed to enable: Invalid slot.
+@@ -509,9 +539,6 @@ check_alias v "$(uname -r)"
+ # FIXME: Failed to enable: Invalid slot.
+ # Alias=target@%V.socket
+ 
+-# Alias=target@%w.socket
+-# Alias=target@%W.socket
+-
+ check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; }
+ 
+ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
diff --git a/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch b/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch
new file mode 100644
index 0000000..7b886a8
--- /dev/null
+++ b/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch
@@ -0,0 +1,142 @@
+From 256e0d19abd531ab34ed28181ffdae5d5c0dcfed Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 9 Mar 2022 16:06:24 +0100
+Subject: [PATCH] shared/install: provide proper error messages when invalid
+ specifiers are used
+
+$ build/systemctl --root=/tmp/systemctl-test.KXY8fu enable some-some-link6@.socket
+Failed to enable unit, invalid specifier in "target@C:%C.socket".
+
+(cherry picked from commit 19b9d5d0d14f2c9b8be8d0a026b0445168808b94)
+
+Related: #2082131
+---
+ src/shared/install.c          | 11 +++++-----
+ test/test-systemctl-enable.sh | 40 ++++++++++++-----------------------
+ 2 files changed, 20 insertions(+), 31 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index ea5bc36482..fd57488024 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -374,12 +374,16 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
+-
+                 case -EADDRNOTAVAIL:
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
++                case -EBADSLT:
++                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".",
++                                        verb, changes[i].path);
++                        logged = true;
++                        break;
+                 case -EIDRM:
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.",
+                                         verb, changes[i].source, changes[i].path);
+@@ -396,18 +400,15 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
+-
+                 case -ENOENT:
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path);
+                         logged = true;
+                         break;
+-
+                 case -EUNATCH:
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
+                                         verb, changes[i].path);
+                         logged = true;
+                         break;
+-
+                 default:
+                         assert(changes[i].type_or_errno < 0);
+                         log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m",
+@@ -3343,7 +3344,7 @@ int unit_file_preset_all(
+ 
+                         r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
+                         if (r < 0 &&
+-                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH))
++                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH))
+                                 /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
+                                  * Coordinate with unit_file_dump_changes() above. */
+                                 return r;
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 43a2c0a0fb..da1fffe944 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -485,33 +485,31 @@ check_alias W 'right'
+ 
+ check_alias b "$(systemd-id128 boot-id)"
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%C.socket
+-# Alias=target@%E.socket
+-# Alias=target@%f.socket
++# Specifiers not available for [Install]
++check_alias C '' && { echo "Expected failure" >&2; exit 1; }
++check_alias E '' && { echo "Expected failure" >&2; exit 1; }
++check_alias f '' && { echo "Expected failure" >&2; exit 1; }
++check_alias h '' && { echo "Expected failure" >&2; exit 1; }
++check_alias I '' && { echo "Expected failure" >&2; exit 1; }
++check_alias J '' && { echo "Expected failure" >&2; exit 1; }
++check_alias L '' && { echo "Expected failure" >&2; exit 1; }
++check_alias P '' && { echo "Expected failure" >&2; exit 1; }
++check_alias s '' && { echo "Expected failure" >&2; exit 1; }
++check_alias S '' && { echo "Expected failure" >&2; exit 1; }
++check_alias t '' && { echo "Expected failure" >&2; exit 1; }
++check_alias T '' && { echo "Expected failure" >&2; exit 1; }
++check_alias V '' && { echo "Expected failure" >&2; exit 1; }
+ 
+ # FIXME: we use the calling user instead of root :(
+ check_alias g root || :
+ check_alias G 0 || :
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%h.socket
+-
+ check_alias i ""
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%I.socket
+-
+ check_alias j 'link6'
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%J.socket
+-
+ check_alias l "$(uname -n | sed 's/\..*//')"
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%L.socket
+-
+ test ! -e "$root/etc/machine-id"
+ check_alias m '' && { echo "Expected failure" >&2; exit 1; }
+ 
+@@ -523,22 +521,12 @@ check_alias N 'some-some-link6@'
+ 
+ check_alias p 'some-some-link6'
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%P.socket
+-# Alias=target@%s.socket
+-# Alias=target@%S.socket
+-# Alias=target@%t.socket
+-# Alias=target@%T.socket
+-
+ # FIXME: we use the calling user instead of root :(
+ check_alias u root || :
+ check_alias U 0 || :
+ 
+ check_alias v "$(uname -r)"
+ 
+-# FIXME: Failed to enable: Invalid slot.
+-# Alias=target@%V.socket
+-
+ check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; }
+ 
+ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
diff --git a/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch b/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch
new file mode 100644
index 0000000..ed0c624
--- /dev/null
+++ b/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch
@@ -0,0 +1,1239 @@
+From b6088ce6c68e3f6e50f75ca3d1d60d2dae16dbb9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 9 Mar 2022 17:51:36 +0100
+Subject: [PATCH] shared/install: move scope into InstallContext
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This makes it easier to pass it around in preparation for future changes.
+
+While at it, let's rename InstallContext c → ctx, and InstallInfo i → info.
+'c' and 'i' are bad names for variables that are passed through multiple layers
+of functions calls. It's easier to follow what is happening with a meaningful
+variable names.
+
+(cherry picked from commit 4a84db4c0c2eef6f40da35347c95dfa6b6e3d139)
+
+Related: #2082131
+---
+ src/shared/install.c | 386 +++++++++++++++++++++----------------------
+ 1 file changed, 191 insertions(+), 195 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index fd57488024..bfdeee48bf 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -47,6 +47,7 @@ typedef enum SearchFlags {
+ } SearchFlags;
+ 
+ typedef struct {
++        UnitFileScope scope;
+         OrderedHashmap *will_process;
+         OrderedHashmap *have_processed;
+ } InstallContext;
+@@ -727,7 +728,7 @@ static int find_symlinks_in_directory(
+                 DIR *dir,
+                 const char *dir_path,
+                 const char *root_dir,
+-                const UnitFileInstallInfo *i,
++                const UnitFileInstallInfo *info,
+                 bool match_aliases,
+                 bool ignore_same_name,
+                 const char *config_path,
+@@ -764,17 +765,17 @@ static int find_symlinks_in_directory(
+                         free_and_replace(dest, x);
+                 }
+ 
+-                assert(unit_name_is_valid(i->name, UNIT_NAME_ANY));
++                assert(unit_name_is_valid(info->name, UNIT_NAME_ANY));
+                 if (!ignore_same_name)
+                                /* Check if the symlink itself matches what we are looking for.
+                                 *
+                                 * If ignore_same_name is specified, we are in one of the directories which
+                                 * have lower priority than the unit file, and even if a file or symlink with
+                                 * this name was found, we should ignore it. */
+-                                found_path = streq(de->d_name, i->name);
++                                found_path = streq(de->d_name, info->name);
+ 
+                 /* Check if what the symlink points to matches what we are looking for */
+-                found_dest = streq(basename(dest), i->name);
++                found_dest = streq(basename(dest), info->name);
+ 
+                 if (found_path && found_dest) {
+                         _cleanup_free_ char *p = NULL, *t = NULL;
+@@ -782,7 +783,7 @@ static int find_symlinks_in_directory(
+                         /* Filter out same name links in the main
+                          * config path */
+                         p = path_make_absolute(de->d_name, dir_path);
+-                        t = path_make_absolute(i->name, config_path);
++                        t = path_make_absolute(info->name, config_path);
+ 
+                         if (!p || !t)
+                                 return -ENOMEM;
+@@ -797,7 +798,7 @@ static int find_symlinks_in_directory(
+                                 return 1;
+ 
+                         /* Check if symlink name is in the set of names used by [Install] */
+-                        q = is_symlink_with_known_name(i, de->d_name);
++                        q = is_symlink_with_known_name(info, de->d_name);
+                         if (q < 0)
+                                 return q;
+                         if (q > 0)
+@@ -867,7 +868,7 @@ static int find_symlinks(
+ static int find_symlinks_in_scope(
+                 UnitFileScope scope,
+                 const LookupPaths *lp,
+-                const UnitFileInstallInfo *i,
++                const UnitFileInstallInfo *info,
+                 bool match_name,
+                 UnitFileState *state) {
+ 
+@@ -878,7 +879,7 @@ static int find_symlinks_in_scope(
+         int r;
+ 
+         assert(lp);
+-        assert(i);
++        assert(info);
+ 
+         /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name"
+          * symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are
+@@ -887,7 +888,7 @@ static int find_symlinks_in_scope(
+         STRV_FOREACH(p, lp->search_path)  {
+                 bool same_name_link = false;
+ 
+-                r = find_symlinks(lp->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
++                r = find_symlinks(lp->root_dir, info, match_name, ignore_same_name, *p, &same_name_link);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+@@ -927,7 +928,7 @@ static int find_symlinks_in_scope(
+ 
+                 /* Check if next iteration will be "below" the unit file (either a regular file
+                  * or a symlink), and hence should be ignored */
+-                if (!ignore_same_name && path_startswith(i->path, *p))
++                if (!ignore_same_name && path_startswith(info->path, *p))
+                         ignore_same_name = true;
+         }
+ 
+@@ -940,7 +941,7 @@ static int find_symlinks_in_scope(
+          * outside of runtime and configuration directory, then we consider it statically enabled. Note we do that only
+          * for instance, not for regular names, as those are merely aliases, while instances explicitly instantiate
+          * something, and hence are a much stronger concept. */
+-        if (enabled_at_all && unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) {
++        if (enabled_at_all && unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
+                 *state = UNIT_FILE_STATIC;
+                 return 1;
+         }
+@@ -960,7 +961,6 @@ static int find_symlinks_in_scope(
+ }
+ 
+ static void install_info_free(UnitFileInstallInfo *i) {
+-
+         if (!i)
+                 return;
+ 
+@@ -976,21 +976,21 @@ static void install_info_free(UnitFileInstallInfo *i) {
+         free(i);
+ }
+ 
+-static void install_context_done(InstallContext *c) {
+-        assert(c);
++static void install_context_done(InstallContext *ctx) {
++        assert(ctx);
+ 
+-        c->will_process = ordered_hashmap_free_with_destructor(c->will_process, install_info_free);
+-        c->have_processed = ordered_hashmap_free_with_destructor(c->have_processed, install_info_free);
++        ctx->will_process = ordered_hashmap_free_with_destructor(ctx->will_process, install_info_free);
++        ctx->have_processed = ordered_hashmap_free_with_destructor(ctx->have_processed, install_info_free);
+ }
+ 
+-static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *name) {
++static UnitFileInstallInfo *install_info_find(InstallContext *ctx, const char *name) {
+         UnitFileInstallInfo *i;
+ 
+-        i = ordered_hashmap_get(c->have_processed, name);
++        i = ordered_hashmap_get(ctx->have_processed, name);
+         if (i)
+                 return i;
+ 
+-        return ordered_hashmap_get(c->will_process, name);
++        return ordered_hashmap_get(ctx->will_process, name);
+ }
+ 
+ static int install_info_may_process(
+@@ -1024,7 +1024,7 @@ static int install_info_may_process(
+  * Returns negative on error, 0 if the unit was already known, 1 otherwise.
+  */
+ static int install_info_add(
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const char *name,
+                 const char *path,
+                 const char *root,
+@@ -1034,7 +1034,7 @@ static int install_info_add(
+         UnitFileInstallInfo *i = NULL;
+         int r;
+ 
+-        assert(c);
++        assert(ctx);
+ 
+         if (!name) {
+                 /* 'name' and 'path' must not both be null. Check here 'path' using assert_se() to
+@@ -1047,7 +1047,7 @@ static int install_info_add(
+         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        i = install_info_find(c, name);
++        i = install_info_find(ctx, name);
+         if (i) {
+                 i->auxiliary = i->auxiliary && auxiliary;
+ 
+@@ -1087,7 +1087,7 @@ static int install_info_add(
+                 }
+         }
+ 
+-        r = ordered_hashmap_ensure_put(&c->will_process, &string_hash_ops, i->name, i);
++        r = ordered_hashmap_ensure_put(&ctx->will_process, &string_hash_ops, i->name, i);
+         if (r < 0)
+                 goto fail;
+ 
+@@ -1142,8 +1142,8 @@ static int config_parse_also(
+                 void *data,
+                 void *userdata) {
+ 
+-        UnitFileInstallInfo *info = userdata;
+-        InstallContext *c = data;
++        UnitFileInstallInfo *info = ASSERT_PTR(userdata);
++        InstallContext *ctx = ASSERT_PTR(data);
+         int r;
+ 
+         assert(unit);
+@@ -1165,7 +1165,7 @@ static int config_parse_also(
+                         return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to resolve unit name in Also=\"%s\": %m", word);
+ 
+-                r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL);
++                r = install_info_add(ctx, printed, NULL, info->root, /* auxiliary= */ true, NULL);
+                 if (r < 0)
+                         return r;
+ 
+@@ -1191,7 +1191,7 @@ static int config_parse_default_instance(
+                 void *data,
+                 void *userdata) {
+ 
+-        UnitFileInstallInfo *i = data;
++        UnitFileInstallInfo *info = ASSERT_PTR(userdata);
+         _cleanup_free_ char *printed = NULL;
+         int r;
+ 
+@@ -1208,7 +1208,7 @@ static int config_parse_default_instance(
+                 return log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "DefaultInstance= only makes sense for template units, ignoring.");
+ 
+-        r = install_name_printf(i, rvalue, i->root, &printed);
++        r = install_name_printf(info, rvalue, info->root, &printed);
+         if (r < 0)
+                 return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue);
+@@ -1220,11 +1220,11 @@ static int config_parse_default_instance(
+                 return log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
+                                   "Invalid DefaultInstance= value \"%s\".", printed);
+ 
+-        return free_and_replace(i->default_instance, printed);
++        return free_and_replace(info->default_instance, printed);
+ }
+ 
+ static int unit_file_load(
+-                InstallContext *c,
++                InstallContext *ctx,
+                 UnitFileInstallInfo *info,
+                 const char *path,
+                 const char *root_dir,
+@@ -1235,7 +1235,7 @@ static int unit_file_load(
+                 { "Install", "WantedBy",        config_parse_strv,             0, &info->wanted_by         },
+                 { "Install", "RequiredBy",      config_parse_strv,             0, &info->required_by       },
+                 { "Install", "DefaultInstance", config_parse_default_instance, 0, info                     },
+-                { "Install", "Also",            config_parse_also,             0, c                        },
++                { "Install", "Also",            config_parse_also,             0, ctx                      },
+                 {}
+         };
+ 
+@@ -1308,8 +1308,8 @@ static int unit_file_load(
+         if (!f)
+                 return -errno;
+ 
+-        /* c is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */
+-        assert(c);
++        /* ctx is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */
++        assert(ctx);
+ 
+         r = config_parse(info->name, path, f,
+                          "Install\0"
+@@ -1341,14 +1341,14 @@ static int unit_file_load(
+ }
+ 
+ static int unit_file_load_or_readlink(
+-                InstallContext *c,
++                InstallContext *ctx,
+                 UnitFileInstallInfo *info,
+                 const char *path,
+                 const LookupPaths *lp,
+                 SearchFlags flags) {
+         int r;
+ 
+-        r = unit_file_load(c, info, path, lp->root_dir, flags);
++        r = unit_file_load(ctx, info, path, lp->root_dir, flags);
+         if (r != -ELOOP || (flags & SEARCH_DROPIN))
+                 return r;
+ 
+@@ -1371,7 +1371,7 @@ static int unit_file_load_or_readlink(
+ }
+ 
+ static int unit_file_search(
+-                InstallContext *c,
++                InstallContext *ctx,
+                 UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 SearchFlags flags) {
+@@ -1391,7 +1391,7 @@ static int unit_file_search(
+                 return 0;
+ 
+         if (info->path)
+-                return unit_file_load_or_readlink(c, info, info->path, lp, flags);
++                return unit_file_load_or_readlink(ctx, info, info->path, lp, flags);
+ 
+         assert(info->name);
+ 
+@@ -1408,7 +1408,7 @@ static int unit_file_search(
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                r = unit_file_load_or_readlink(c, info, path, lp, flags);
++                r = unit_file_load_or_readlink(ctx, info, path, lp, flags);
+                 if (r >= 0) {
+                         info->path = TAKE_PTR(path);
+                         result = r;
+@@ -1431,7 +1431,7 @@ static int unit_file_search(
+                         if (!path)
+                                 return -ENOMEM;
+ 
+-                        r = unit_file_load_or_readlink(c, info, path, lp, flags);
++                        r = unit_file_load_or_readlink(ctx, info, path, lp, flags);
+                         if (r >= 0) {
+                                 info->path = TAKE_PTR(path);
+                                 result = r;
+@@ -1487,7 +1487,7 @@ static int unit_file_search(
+                 return log_debug_errno(r, "Failed to get list of conf files: %m");
+ 
+         STRV_FOREACH(p, files) {
+-                r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN);
++                r = unit_file_load_or_readlink(ctx, info, *p, lp, flags | SEARCH_DROPIN);
+                 if (r < 0)
+                         return log_debug_errno(r, "Failed to load conf file \"%s\": %m", *p);
+         }
+@@ -1496,30 +1496,30 @@ static int unit_file_search(
+ }
+ 
+ static int install_info_follow(
+-                InstallContext *c,
+-                UnitFileInstallInfo *i,
++                InstallContext *ctx,
++                UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 SearchFlags flags,
+                 bool ignore_different_name) {
+ 
+-        assert(c);
+-        assert(i);
++        assert(ctx);
++        assert(info);
+ 
+-        if (i->type != UNIT_FILE_TYPE_SYMLINK)
++        if (info->type != UNIT_FILE_TYPE_SYMLINK)
+                 return -EINVAL;
+-        if (!i->symlink_target)
++        if (!info->symlink_target)
+                 return -EINVAL;
+ 
+         /* If the basename doesn't match, the caller should add a
+          * complete new entry for this. */
+ 
+-        if (!ignore_different_name && !streq(basename(i->symlink_target), i->name))
++        if (!ignore_different_name && !streq(basename(info->symlink_target), info->name))
+                 return -EXDEV;
+ 
+-        free_and_replace(i->path, i->symlink_target);
+-        i->type = _UNIT_FILE_TYPE_INVALID;
++        free_and_replace(info->path, info->symlink_target);
++        info->type = _UNIT_FILE_TYPE_INVALID;
+ 
+-        return unit_file_load_or_readlink(c, i, i->path, lp, flags);
++        return unit_file_load_or_readlink(ctx, info, info->path, lp, flags);
+ }
+ 
+ /**
+@@ -1527,8 +1527,7 @@ static int install_info_follow(
+  * target, maybe more than once. Propagate the instance name if present.
+  */
+ static int install_info_traverse(
+-                UnitFileScope scope,
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const LookupPaths *lp,
+                 UnitFileInstallInfo *start,
+                 SearchFlags flags,
+@@ -1540,9 +1539,9 @@ static int install_info_traverse(
+ 
+         assert(lp);
+         assert(start);
+-        assert(c);
++        assert(ctx);
+ 
+-        r = unit_file_search(c, start, lp, flags);
++        r = unit_file_search(ctx, start, lp, flags);
+         if (r < 0)
+                 return r;
+ 
+@@ -1561,7 +1560,7 @@ static int install_info_traverse(
+                                 return -ELOOP;
+                 }
+ 
+-                r = install_info_follow(c, i, lp, flags, false);
++                r = install_info_follow(ctx, i, lp, flags, false);
+                 if (r == -EXDEV) {
+                         _cleanup_free_ char *buffer = NULL;
+                         const char *bn;
+@@ -1590,7 +1589,7 @@ static int install_info_traverse(
+                                         /* We filled in the instance, and the target stayed the same? If so, then let's
+                                          * honour the link as it is. */
+ 
+-                                        r = install_info_follow(c, i, lp, flags, true);
++                                        r = install_info_follow(ctx, i, lp, flags, true);
+                                         if (r < 0)
+                                                 return r;
+ 
+@@ -1600,12 +1599,12 @@ static int install_info_traverse(
+                                 bn = buffer;
+                         }
+ 
+-                        r = install_info_add(c, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i);
++                        r = install_info_add(ctx, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i);
+                         if (r < 0)
+                                 return r;
+ 
+                         /* Try again, with the new target we found. */
+-                        r = unit_file_search(c, i, lp, flags);
++                        r = unit_file_search(ctx, i, lp, flags);
+                         if (r == -ENOENT)
+                                 /* Translate error code to highlight this specific case */
+                                 return -ENOLINK;
+@@ -1626,12 +1625,12 @@ static int install_info_traverse(
+  * or the name (otherwise). root_dir is prepended to the path.
+  */
+ static int install_info_add_auto(
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const LookupPaths *lp,
+                 const char *name_or_path,
+                 UnitFileInstallInfo **ret) {
+ 
+-        assert(c);
++        assert(ctx);
+         assert(name_or_path);
+ 
+         if (path_is_absolute(name_or_path)) {
+@@ -1639,14 +1638,13 @@ static int install_info_add_auto(
+ 
+                 pp = prefix_roota(lp->root_dir, name_or_path);
+ 
+-                return install_info_add(c, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret);
++                return install_info_add(ctx, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret);
+         } else
+-                return install_info_add(c, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret);
++                return install_info_add(ctx, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret);
+ }
+ 
+ static int install_info_discover(
+-                UnitFileScope scope,
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const LookupPaths *lp,
+                 const char *name,
+                 SearchFlags flags,
+@@ -1654,16 +1652,16 @@ static int install_info_discover(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        UnitFileInstallInfo *i;
++        UnitFileInstallInfo *info;
+         int r;
+ 
+-        assert(c);
++        assert(ctx);
+         assert(lp);
+         assert(name);
+ 
+-        r = install_info_add_auto(c, lp, name, &i);
++        r = install_info_add_auto(ctx, lp, name, &info);
+         if (r >= 0)
+-                r = install_info_traverse(scope, c, lp, i, flags, ret);
++                r = install_info_traverse(ctx, lp, info, flags, ret);
+ 
+         if (r < 0)
+                 unit_file_changes_add(changes, n_changes, r, name, NULL);
+@@ -1671,25 +1669,24 @@ static int install_info_discover(
+ }
+ 
+ static int install_info_discover_and_check(
+-                        UnitFileScope scope,
+-                        InstallContext *c,
+-                        const LookupPaths *lp,
+-                        const char *name,
+-                        SearchFlags flags,
+-                        UnitFileInstallInfo **ret,
+-                        UnitFileChange **changes,
+-                        size_t *n_changes) {
++                InstallContext *ctx,
++                const LookupPaths *lp,
++                const char *name,
++                SearchFlags flags,
++                UnitFileInstallInfo **ret,
++                UnitFileChange **changes,
++                size_t *n_changes) {
+ 
+         int r;
+ 
+-        r = install_info_discover(scope, c, lp, name, flags, ret, changes, n_changes);
++        r = install_info_discover(ctx, lp, name, flags, ret, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+         return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes);
+ }
+ 
+-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) {
++int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, char **ret_dst) {
+         _cleanup_free_ char *dst_updated = NULL;
+         int r;
+ 
+@@ -1729,13 +1726,13 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+                 const bool instance_propagation = type == UNIT_NAME_TEMPLATE;
+ 
+                 /* That's the name we want to use for verification. */
+-                r = unit_symlink_name_compatible(path_alias, i->name, instance_propagation);
++                r = unit_symlink_name_compatible(path_alias, info->name, instance_propagation);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to verify alias validity: %m");
+                 if (r == 0)
+                         return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
+                                                  "Invalid unit \"%s\" symlink \"%s\".",
+-                                                 i->name, dst);
++                                                 info->name, dst);
+ 
+         } else {
+                 /* If the symlink target has an instance set and the symlink source doesn't, we "propagate
+@@ -1743,9 +1740,9 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+                 if (unit_name_is_valid(dst, UNIT_NAME_TEMPLATE)) {
+                         _cleanup_free_ char *inst = NULL;
+ 
+-                        UnitNameFlags type = unit_name_to_instance(i->name, &inst);
++                        UnitNameFlags type = unit_name_to_instance(info->name, &inst);
+                         if (type < 0)
+-                                return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", i->name);
++                                return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", info->name);
+ 
+                         if (type == UNIT_NAME_INSTANCE) {
+                                 r = unit_name_replace_instance(dst, inst, &dst_updated);
+@@ -1755,10 +1752,9 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+                         }
+                 }
+ 
+-                r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, i->name);
++                r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, info->name);
+                 if (r < 0)
+                         return r;
+-
+         }
+ 
+         *ret_dst = TAKE_PTR(dst_updated);
+@@ -1766,7 +1762,8 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
+ }
+ 
+ static int install_info_symlink_alias(
+-                UnitFileInstallInfo *i,
++                UnitFileScope scope,
++                UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 const char *config_path,
+                 bool force,
+@@ -1776,20 +1773,20 @@ static int install_info_symlink_alias(
+         char **s;
+         int r = 0, q;
+ 
+-        assert(i);
++        assert(info);
+         assert(lp);
+         assert(config_path);
+ 
+-        STRV_FOREACH(s, i->aliases) {
++        STRV_FOREACH(s, info->aliases) {
+                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+ 
+-                q = install_name_printf(i, *s, i->root, &dst);
++                q = install_name_printf(info, *s, info->root, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
+                 }
+ 
+-                q = unit_file_verify_alias(i, dst, &dst_updated);
++                q = unit_file_verify_alias(info, dst, &dst_updated);
+                 if (q < 0)
+                         continue;
+ 
+@@ -1797,7 +1794,7 @@ static int install_info_symlink_alias(
+                 if (!alias_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(lp, i->path, alias_path, force, changes, n_changes);
++                q = create_symlink(lp, info->path, alias_path, force, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+         }
+@@ -1808,7 +1805,7 @@ static int install_info_symlink_alias(
+ static int install_info_symlink_wants(
+                 UnitFileScope scope,
+                 UnitFileFlags file_flags,
+-                UnitFileInstallInfo *i,
++                UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 const char *config_path,
+                 char **list,
+@@ -1822,18 +1819,18 @@ static int install_info_symlink_wants(
+         char **s;
+         int r = 0, q;
+ 
+-        assert(i);
++        assert(info);
+         assert(lp);
+         assert(config_path);
+ 
+         if (strv_isempty(list))
+                 return 0;
+ 
+-        if (unit_name_is_valid(i->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE))
++        if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE))
+                 /* Not a template unit. Use the name directly. */
+-                n = i->name;
++                n = info->name;
+ 
+-        else if (i->default_instance) {
++        else if (info->default_instance) {
+                 UnitFileInstallInfo instance = {
+                         .type = _UNIT_FILE_TYPE_INVALID,
+                 };
+@@ -1841,7 +1838,7 @@ static int install_info_symlink_wants(
+ 
+                 /* If this is a template, and we have a default instance, use it. */
+ 
+-                r = unit_name_replace_instance(i->name, i->default_instance, &buf);
++                r = unit_name_replace_instance(info->name, info->default_instance, &buf);
+                 if (r < 0)
+                         return r;
+ 
+@@ -1864,13 +1861,13 @@ static int install_info_symlink_wants(
+                  * the instance from that unit. Cannot be used with non-instance units. */
+ 
+                 valid_dst_type = UNIT_NAME_INSTANCE | UNIT_NAME_TEMPLATE;
+-                n = i->name;
++                n = info->name;
+         }
+ 
+         STRV_FOREACH(s, list) {
+                 _cleanup_free_ char *path = NULL, *dst = NULL;
+ 
+-                q = install_name_printf(i, *s, i->root, &dst);
++                q = install_name_printf(info, *s, info->root, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
+@@ -1902,19 +1899,19 @@ static int install_info_symlink_wants(
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(lp, i->path, path, true, changes, n_changes);
++                q = create_symlink(lp, info->path, path, true, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+ 
+                 if (unit_file_exists(scope, lp, dst) == 0)
+-                        unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path);
++                        unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, info->path);
+         }
+ 
+         return r;
+ }
+ 
+ static int install_info_symlink_link(
+-                UnitFileInstallInfo *i,
++                UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 const char *config_path,
+                 bool force,
+@@ -1924,28 +1921,28 @@ static int install_info_symlink_link(
+         _cleanup_free_ char *path = NULL;
+         int r;
+ 
+-        assert(i);
++        assert(info);
+         assert(lp);
+         assert(config_path);
+-        assert(i->path);
++        assert(info->path);
+ 
+-        r = in_search_path(lp, i->path);
++        r = in_search_path(lp, info->path);
+         if (r < 0)
+                 return r;
+         if (r > 0)
+                 return 0;
+ 
+-        path = path_join(config_path, i->name);
++        path = path_join(config_path, info->name);
+         if (!path)
+                 return -ENOMEM;
+ 
+-        return create_symlink(lp, i->path, path, force, changes, n_changes);
++        return create_symlink(lp, info->path, path, force, changes, n_changes);
+ }
+ 
+ static int install_info_apply(
+                 UnitFileScope scope,
+                 UnitFileFlags file_flags,
+-                UnitFileInstallInfo *i,
++                UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 const char *config_path,
+                 UnitFileChange **changes,
+@@ -1953,26 +1950,26 @@ static int install_info_apply(
+ 
+         int r, q;
+ 
+-        assert(i);
++        assert(info);
+         assert(lp);
+         assert(config_path);
+ 
+-        if (i->type != UNIT_FILE_TYPE_REGULAR)
++        if (info->type != UNIT_FILE_TYPE_REGULAR)
+                 return 0;
+ 
+         bool force = file_flags & UNIT_FILE_FORCE;
+ 
+-        r = install_info_symlink_alias(i, lp, config_path, force, changes, n_changes);
++        r = install_info_symlink_alias(scope, info, lp, config_path, force, changes, n_changes);
+ 
+-        q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->wanted_by, ".wants/", changes, n_changes);
++        q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->wanted_by, ".wants/", changes, n_changes);
+         if (r == 0)
+                 r = q;
+ 
+-        q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->required_by, ".requires/", changes, n_changes);
++        q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->required_by, ".requires/", changes, n_changes);
+         if (r == 0)
+                 r = q;
+ 
+-        q = install_info_symlink_link(i, lp, config_path, force, changes, n_changes);
++        q = install_info_symlink_link(info, lp, config_path, force, changes, n_changes);
+         /* Do not count links to the unit file towards the "carries_install_info" count */
+         if (r == 0 && q < 0)
+                 r = q;
+@@ -1981,10 +1978,9 @@ static int install_info_apply(
+ }
+ 
+ static int install_context_apply(
+-                UnitFileScope scope,
+-                UnitFileFlags file_flags,
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const LookupPaths *lp,
++                UnitFileFlags file_flags,
+                 const char *config_path,
+                 SearchFlags flags,
+                 UnitFileChange **changes,
+@@ -1993,26 +1989,26 @@ static int install_context_apply(
+         UnitFileInstallInfo *i;
+         int r;
+ 
+-        assert(c);
++        assert(ctx);
+         assert(lp);
+         assert(config_path);
+ 
+-        if (ordered_hashmap_isempty(c->will_process))
++        if (ordered_hashmap_isempty(ctx->will_process))
+                 return 0;
+ 
+-        r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops);
++        r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops);
+         if (r < 0)
+                 return r;
+ 
+         r = 0;
+-        while ((i = ordered_hashmap_first(c->will_process))) {
++        while ((i = ordered_hashmap_first(ctx->will_process))) {
+                 int q;
+ 
+-                q = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name);
++                q = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name);
+                 if (q < 0)
+                         return q;
+ 
+-                q = install_info_traverse(scope, c, lp, i, flags, NULL);
++                q = install_info_traverse(ctx, lp, i, flags, NULL);
+                 if (q < 0) {
+                         if (i->auxiliary) {
+                                 q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name);
+@@ -2039,7 +2035,7 @@ static int install_context_apply(
+                 if (i->type != UNIT_FILE_TYPE_REGULAR)
+                         continue;
+ 
+-                q = install_info_apply(scope, file_flags, i, lp, config_path, changes, n_changes);
++                q = install_info_apply(ctx->scope, file_flags, i, lp, config_path, changes, n_changes);
+                 if (r >= 0) {
+                         if (q < 0)
+                                 r = q;
+@@ -2052,8 +2048,7 @@ static int install_context_apply(
+ }
+ 
+ static int install_context_mark_for_removal(
+-                UnitFileScope scope,
+-                InstallContext *c,
++                InstallContext *ctx,
+                 const LookupPaths *lp,
+                 Set **remove_symlinks_to,
+                 const char *config_path,
+@@ -2063,26 +2058,26 @@ static int install_context_mark_for_removal(
+         UnitFileInstallInfo *i;
+         int r;
+ 
+-        assert(c);
++        assert(ctx);
+         assert(lp);
+         assert(config_path);
+ 
+         /* Marks all items for removal */
+ 
+-        if (ordered_hashmap_isempty(c->will_process))
++        if (ordered_hashmap_isempty(ctx->will_process))
+                 return 0;
+ 
+-        r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops);
++        r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops);
+         if (r < 0)
+                 return r;
+ 
+-        while ((i = ordered_hashmap_first(c->will_process))) {
++        while ((i = ordered_hashmap_first(ctx->will_process))) {
+ 
+-                r = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name);
++                r = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name);
+                 if (r < 0)
+                         return r;
+ 
+-                r = install_info_traverse(scope, c, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
++                r = install_info_traverse(ctx, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
+                 if (r == -ENOLINK) {
+                         log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name);
+                         unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL);
+@@ -2521,8 +2516,8 @@ int unit_file_add_dependency(
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext c = {};
+-        UnitFileInstallInfo *i, *target_info;
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++        UnitFileInstallInfo *info, *target_info;
+         const char *config_path;
+         char **f;
+         int r;
+@@ -2545,7 +2540,7 @@ int unit_file_add_dependency(
+         if (!config_path)
+                 return -ENXIO;
+ 
+-        r = install_info_discover_and_check(scope, &c, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++        r = install_info_discover_and_check(&ctx, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                             &target_info, changes, n_changes);
+         if (r < 0)
+                 return r;
+@@ -2555,21 +2550,21 @@ int unit_file_add_dependency(
+         STRV_FOREACH(f, files) {
+                 char ***l;
+ 
+-                r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                                    &i, changes, n_changes);
++                r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                                    &info, changes, n_changes);
+                 if (r < 0)
+                         return r;
+ 
+-                assert(i->type == UNIT_FILE_TYPE_REGULAR);
++                assert(info->type == UNIT_FILE_TYPE_REGULAR);
+ 
+                 /* We didn't actually load anything from the unit
+                  * file, but instead just add in our new symlink to
+                  * create. */
+ 
+                 if (dep == UNIT_WANTS)
+-                        l = &i->wanted_by;
++                        l = &info->wanted_by;
+                 else
+-                        l = &i->required_by;
++                        l = &info->required_by;
+ 
+                 strv_free(*l);
+                 *l = strv_new(target_info->name);
+@@ -2577,7 +2572,7 @@ int unit_file_add_dependency(
+                         return -ENOMEM;
+         }
+ 
+-        return install_context_apply(scope, file_flags, &c, &lp, config_path,
++        return install_context_apply(&ctx, &lp, file_flags, config_path,
+                                      SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes);
+ }
+ 
+@@ -2590,9 +2585,9 @@ int unit_file_enable(
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext c = {};
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+         const char *config_path;
+-        UnitFileInstallInfo *i;
++        UnitFileInstallInfo *info;
+         char **f;
+         int r;
+ 
+@@ -2608,12 +2603,12 @@ int unit_file_enable(
+                 return -ENXIO;
+ 
+         STRV_FOREACH(f, files) {
+-                r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                                    &i, changes, n_changes);
++                r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                                    &info, changes, n_changes);
+                 if (r < 0)
+                         return r;
+ 
+-                assert(i->type == UNIT_FILE_TYPE_REGULAR);
++                assert(info->type == UNIT_FILE_TYPE_REGULAR);
+         }
+ 
+         /* This will return the number of symlink rules that were
+@@ -2621,7 +2616,8 @@ int unit_file_enable(
+            is useful to determine whether the passed files had any
+            installation data at all. */
+ 
+-        return install_context_apply(scope, file_flags, &c, &lp, config_path, SEARCH_LOAD, changes, n_changes);
++        return install_context_apply(&ctx, &lp, file_flags, config_path,
++                                     SEARCH_LOAD, changes, n_changes);
+ }
+ 
+ int unit_file_disable(
+@@ -2633,7 +2629,7 @@ int unit_file_disable(
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext c = {};
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+         const char *config_path;
+         char **i;
+@@ -2654,12 +2650,12 @@ int unit_file_disable(
+                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                         return -EINVAL;
+ 
+-                r = install_info_add(&c, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL);
++                r = install_info_add(&ctx, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL);
+                 if (r < 0)
+                         return r;
+         }
+ 
+-        r = install_context_mark_for_removal(scope, &c, &lp, &remove_symlinks_to, config_path, changes, n_changes);
++        r = install_context_mark_for_removal(&ctx, &lp, &remove_symlinks_to, config_path, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+@@ -2702,8 +2698,8 @@ int unit_file_set_default(
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext c = {};
+-        UnitFileInstallInfo *i;
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++        UnitFileInstallInfo *info;
+         const char *new_path;
+         int r;
+ 
+@@ -2720,12 +2716,12 @@ int unit_file_set_default(
+         if (r < 0)
+                 return r;
+ 
+-        r = install_info_discover_and_check(scope, &c, &lp, name, 0, &i, changes, n_changes);
++        r = install_info_discover_and_check(&ctx, &lp, name, 0, &info, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+         new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
+-        return create_symlink(&lp, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++        return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
+ }
+ 
+ int unit_file_get_default(
+@@ -2734,8 +2730,8 @@ int unit_file_get_default(
+                 char **name) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext c = {};
+-        UnitFileInstallInfo *i;
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++        UnitFileInstallInfo *info;
+         char *n;
+         int r;
+ 
+@@ -2747,15 +2743,15 @@ int unit_file_get_default(
+         if (r < 0)
+                 return r;
+ 
+-        r = install_info_discover(scope, &c, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                  &i, NULL, NULL);
++        r = install_info_discover(&ctx, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                  &info, NULL, NULL);
+         if (r < 0)
+                 return r;
+-        r = install_info_may_process(i, &lp, NULL, 0);
++        r = install_info_may_process(info, &lp, NULL, 0);
+         if (r < 0)
+                 return r;
+ 
+-        n = strdup(i->name);
++        n = strdup(info->name);
+         if (!n)
+                 return -ENOMEM;
+ 
+@@ -2769,8 +2765,8 @@ int unit_file_lookup_state(
+                 const char *name,
+                 UnitFileState *ret) {
+ 
+-        _cleanup_(install_context_done) InstallContext c = {};
+-        UnitFileInstallInfo *i;
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++        UnitFileInstallInfo *info;
+         UnitFileState state;
+         int r;
+ 
+@@ -2780,23 +2776,23 @@ int unit_file_lookup_state(
+         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        r = install_info_discover(scope, &c, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                  &i, NULL, NULL);
++        r = install_info_discover(&ctx, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                  &info, NULL, NULL);
+         if (r < 0)
+                 return log_debug_errno(r, "Failed to discover unit %s: %m", name);
+ 
+-        assert(IN_SET(i->type, UNIT_FILE_TYPE_REGULAR, UNIT_FILE_TYPE_MASKED));
+-        log_debug("Found unit %s at %s (%s)", name, strna(i->path),
+-                  i->type == UNIT_FILE_TYPE_REGULAR ? "regular file" : "mask");
++        assert(IN_SET(info->type, UNIT_FILE_TYPE_REGULAR, UNIT_FILE_TYPE_MASKED));
++        log_debug("Found unit %s at %s (%s)", name, strna(info->path),
++                  info->type == UNIT_FILE_TYPE_REGULAR ? "regular file" : "mask");
+ 
+         /* Shortcut things, if the caller just wants to know if this unit exists. */
+         if (!ret)
+                 return 0;
+ 
+-        switch (i->type) {
++        switch (info->type) {
+ 
+         case UNIT_FILE_TYPE_MASKED:
+-                r = path_is_runtime(lp, i->path, true);
++                r = path_is_runtime(lp, info->path, true);
+                 if (r < 0)
+                         return r;
+ 
+@@ -2805,12 +2801,12 @@ int unit_file_lookup_state(
+ 
+         case UNIT_FILE_TYPE_REGULAR:
+                 /* Check if the name we were querying is actually an alias */
+-                if (!streq(name, basename(i->path)) && !unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) {
++                if (!streq(name, basename(info->path)) && !unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) {
+                         state = UNIT_FILE_ALIAS;
+                         break;
+                 }
+ 
+-                r = path_is_generator(lp, i->path);
++                r = path_is_generator(lp, info->path);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+@@ -2818,7 +2814,7 @@ int unit_file_lookup_state(
+                         break;
+                 }
+ 
+-                r = path_is_transient(lp, i->path);
++                r = path_is_transient(lp, info->path);
+                 if (r < 0)
+                         return r;
+                 if (r > 0) {
+@@ -2829,7 +2825,7 @@ int unit_file_lookup_state(
+                 /* Check if any of the Alias= symlinks have been created.
+                  * We ignore other aliases, and only check those that would
+                  * be created by systemctl enable for this unit. */
+-                r = find_symlinks_in_scope(scope, lp, i, true, &state);
++                r = find_symlinks_in_scope(scope, lp, info, true, &state);
+                 if (r < 0)
+                         return r;
+                 if (r > 0)
+@@ -2837,15 +2833,15 @@ int unit_file_lookup_state(
+ 
+                 /* Check if the file is known under other names. If it is,
+                  * it might be in use. Report that as UNIT_FILE_INDIRECT. */
+-                r = find_symlinks_in_scope(scope, lp, i, false, &state);
++                r = find_symlinks_in_scope(scope, lp, info, false, &state);
+                 if (r < 0)
+                         return r;
+                 if (r > 0)
+                         state = UNIT_FILE_INDIRECT;
+                 else {
+-                        if (unit_file_install_info_has_rules(i))
++                        if (unit_file_install_info_has_rules(info))
+                                 state = UNIT_FILE_DISABLED;
+-                        else if (unit_file_install_info_has_also(i))
++                        else if (unit_file_install_info_has_also(info))
+                                 state = UNIT_FILE_INDIRECT;
+                         else
+                                 state = UNIT_FILE_STATIC;
+@@ -2882,7 +2878,7 @@ int unit_file_get_state(
+ }
+ 
+ int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) {
+-        _cleanup_(install_context_done) InstallContext c = {};
++        _cleanup_(install_context_done) InstallContext c = { .scope = scope };
+         int r;
+ 
+         assert(lp);
+@@ -2891,7 +2887,7 @@ int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *nam
+         if (!unit_name_is_valid(name, UNIT_NAME_ANY))
+                 return -EINVAL;
+ 
+-        r = install_info_discover(scope, &c, lp, name, 0, NULL, NULL, NULL);
++        r = install_info_discover(&c, lp, name, 0, NULL, NULL, NULL);
+         if (r == -ENOENT)
+                 return 0;
+         if (r < 0)
+@@ -3150,7 +3146,6 @@ int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char
+ }
+ 
+ static int execute_preset(
+-                UnitFileScope scope,
+                 UnitFileFlags file_flags,
+                 InstallContext *plus,
+                 InstallContext *minus,
+@@ -3171,7 +3166,7 @@ static int execute_preset(
+         if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) {
+                 _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+ 
+-                r = install_context_mark_for_removal(scope, minus, lp, &remove_symlinks_to, config_path, changes, n_changes);
++                r = install_context_mark_for_removal(minus, lp, &remove_symlinks_to, config_path, changes, n_changes);
+                 if (r < 0)
+                         return r;
+ 
+@@ -3183,9 +3178,10 @@ static int execute_preset(
+                 int q;
+ 
+                 /* Returns number of symlinks that where supposed to be installed. */
+-                q = install_context_apply(scope,
++                q = install_context_apply(plus, lp,
+                                           file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE,
+-                                          plus, lp, config_path, SEARCH_LOAD, changes, n_changes);
++                                          config_path,
++                                          SEARCH_LOAD, changes, n_changes);
+                 if (r >= 0) {
+                         if (q < 0)
+                                 r = q;
+@@ -3207,20 +3203,20 @@ static int preset_prepare_one(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(install_context_done) InstallContext tmp = {};
++        _cleanup_(install_context_done) InstallContext tmp = { .scope = scope };
+         _cleanup_strv_free_ char **instance_name_list = NULL;
+-        UnitFileInstallInfo *i;
++        UnitFileInstallInfo *info;
+         int r;
+ 
+         if (install_info_find(plus, name) || install_info_find(minus, name))
+                 return 0;
+ 
+-        r = install_info_discover(scope, &tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                  &i, changes, n_changes);
++        r = install_info_discover(&tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                  &info, changes, n_changes);
+         if (r < 0)
+                 return r;
+-        if (!streq(name, i->name)) {
+-                log_debug("Skipping %s because it is an alias for %s.", name, i->name);
++        if (!streq(name, info->name)) {
++                log_debug("Skipping %s because it is an alias for %s.", name, info->name);
+                 return 0;
+         }
+ 
+@@ -3232,21 +3228,21 @@ static int preset_prepare_one(
+                 if (instance_name_list) {
+                         char **s;
+                         STRV_FOREACH(s, instance_name_list) {
+-                                r = install_info_discover_and_check(scope, plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                                                    &i, changes, n_changes);
++                                r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                                                    &info, changes, n_changes);
+                                 if (r < 0)
+                                         return r;
+                         }
+                 } else {
+-                        r = install_info_discover_and_check(scope, plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                                            &i, changes, n_changes);
++                        r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                                            &info, changes, n_changes);
+                         if (r < 0)
+                                 return r;
+                 }
+ 
+         } else
+-                r = install_info_discover(scope, minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
+-                                          &i, changes, n_changes);
++                r = install_info_discover(minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                                          &info, changes, n_changes);
+ 
+         return r;
+ }
+@@ -3289,7 +3285,7 @@ int unit_file_preset(
+                         return r;
+         }
+ 
+-        return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes);
++        return execute_preset(file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes);
+ }
+ 
+ int unit_file_preset_all(
+@@ -3351,7 +3347,7 @@ int unit_file_preset_all(
+                 }
+         }
+ 
+-        return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes);
++        return execute_preset(file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes);
+ }
+ 
+ static UnitFileList* unit_file_list_free_one(UnitFileList *f) {
diff --git a/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch b/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch
new file mode 100644
index 0000000..ec381a7
--- /dev/null
+++ b/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch
@@ -0,0 +1,549 @@
+From 87df0601074b024ab591534e0e78b2d1e7013a8d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 9 Mar 2022 22:29:19 +0100
+Subject: [PATCH] shared/specifier: fix %u/%U/%g/%G when called as unprivileged
+ user
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We would resolve those specifiers to the calling user/group. This is mostly OK
+when done in the manager, because the manager generally operates as root
+in system mode, and a non-root in user mode. It would still be wrong if
+called with --test though. But in systemctl, this would be generally wrong,
+since we can call 'systemctl --system' as a normal user, either for testing
+or even for actual operation with '--root=…'.
+
+When operating in --global mode, %u/%U/%g/%G should return an error.
+
+The information whether we're operating in system mode, user mode, or global
+mode is passed as the data pointer to specifier_group_name(), specifier_user_name(),
+specifier_group_id(), specifier_user_id(). We can't use userdata, because
+it's already used for other things.
+
+(cherry picked from commit 172e9cc3ee3dcca288d04c744984a9a3b2a0d008)
+
+Related: #2082131
+---
+ src/core/unit-printf.c        |   4 +-
+ src/shared/install-printf.c   |   9 ++-
+ src/shared/install-printf.h   |   7 ++-
+ src/shared/install.c          |   9 +--
+ src/shared/specifier.c        |  52 ++++++++++++++---
+ src/shared/specifier.h        |  10 ++--
+ src/test/test-load-fragment.c | 101 +++++++++++++++++++---------------
+ src/test/test-specifier.c     |   3 +-
+ src/tmpfiles/tmpfiles.c       |  53 +++++++++---------
+ test/test-systemctl-enable.sh |  11 ++--
+ test/test-systemd-tmpfiles.py |   8 +--
+ 11 files changed, 163 insertions(+), 104 deletions(-)
+
+diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
+index 46c383b841..3086356419 100644
+--- a/src/core/unit-printf.c
++++ b/src/core/unit-printf.c
+@@ -190,7 +190,7 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) {
+ 
+                 COMMON_SYSTEM_SPECIFIERS,
+ 
+-                COMMON_CREDS_SPECIFIERS,
++                COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope),
+                 {}
+         };
+ 
+@@ -256,7 +256,7 @@ int unit_full_printf_full(const Unit *u, const char *format, size_t max_length,
+ 
+                 COMMON_SYSTEM_SPECIFIERS,
+ 
+-                COMMON_CREDS_SPECIFIERS,
++                COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope),
+ 
+                 COMMON_TMP_SPECIFIERS,
+                 {}
+diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
+index 6ff4198ac9..963102674b 100644
+--- a/src/shared/install-printf.c
++++ b/src/shared/install-printf.c
+@@ -103,7 +103,12 @@ static int specifier_last_component(char specifier, const void *data, const char
+         return 0;
+ }
+ 
+-int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) {
++int install_name_printf(
++                UnitFileScope scope,
++                const UnitFileInstallInfo *i,
++                const char *format,
++                const char *root,
++                char **ret) {
+         /* This is similar to unit_name_printf() */
+ 
+         const Specifier table[] = {
+@@ -115,7 +120,7 @@ int install_name_printf(const UnitFileInstallInfo *i, const char *format, const
+ 
+                 COMMON_SYSTEM_SPECIFIERS,
+ 
+-                COMMON_CREDS_SPECIFIERS,
++                COMMON_CREDS_SPECIFIERS(scope),
+                 {}
+         };
+ 
+diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
+index 5ca9406797..d2cccdf66d 100644
+--- a/src/shared/install-printf.h
++++ b/src/shared/install-printf.h
+@@ -4,4 +4,9 @@
+ #include "install.h"
+ #include "unit-name.h"
+ 
+-int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret);
++int install_name_printf(
++                UnitFileScope scope,
++                const UnitFileInstallInfo *i,
++                const char *format,
++                const char *root,
++                char **ret);
+diff --git a/src/shared/install.c b/src/shared/install.c
+index bfdeee48bf..8d82cb6b16 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1160,7 +1160,7 @@ static int config_parse_also(
+                 if (r == 0)
+                         break;
+ 
+-                r = install_name_printf(info, word, info->root, &printed);
++                r = install_name_printf(ctx->scope, info, word, info->root, &printed);
+                 if (r < 0)
+                         return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to resolve unit name in Also=\"%s\": %m", word);
+@@ -1191,6 +1191,7 @@ static int config_parse_default_instance(
+                 void *data,
+                 void *userdata) {
+ 
++        InstallContext *ctx = ASSERT_PTR(data);
+         UnitFileInstallInfo *info = ASSERT_PTR(userdata);
+         _cleanup_free_ char *printed = NULL;
+         int r;
+@@ -1208,7 +1209,7 @@ static int config_parse_default_instance(
+                 return log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "DefaultInstance= only makes sense for template units, ignoring.");
+ 
+-        r = install_name_printf(info, rvalue, info->root, &printed);
++        r = install_name_printf(ctx->scope, info, rvalue, info->root, &printed);
+         if (r < 0)
+                 return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue);
+@@ -1780,7 +1781,7 @@ static int install_info_symlink_alias(
+         STRV_FOREACH(s, info->aliases) {
+                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+ 
+-                q = install_name_printf(info, *s, info->root, &dst);
++                q = install_name_printf(scope, info, *s, info->root, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
+@@ -1867,7 +1868,7 @@ static int install_info_symlink_wants(
+         STRV_FOREACH(s, list) {
+                 _cleanup_free_ char *path = NULL, *dst = NULL;
+ 
+-                q = install_name_printf(info, *s, info->root, &dst);
++                q = install_name_printf(scope, info, *s, info->root, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
+diff --git a/src/shared/specifier.c b/src/shared/specifier.c
+index a917378427..ac353a651c 100644
+--- a/src/shared/specifier.c
++++ b/src/shared/specifier.c
+@@ -21,6 +21,7 @@
+ #include "specifier.h"
+ #include "string-util.h"
+ #include "strv.h"
++#include "unit-file.h"
+ #include "user-util.h"
+ 
+ /*
+@@ -253,9 +254,15 @@ int specifier_os_image_version(char specifier, const void *data, const char *roo
+ }
+ 
+ int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
++        UnitFileScope scope = PTR_TO_INT(data);
+         char *t;
+ 
+-        t = gid_to_name(getgid());
++        assert(ret);
++
++        if (scope == UNIT_FILE_GLOBAL)
++                return -EINVAL;
++
++        t = gid_to_name(scope == UNIT_FILE_USER ? getgid() : 0);
+         if (!t)
+                 return -ENOMEM;
+ 
+@@ -264,23 +271,42 @@ int specifier_group_name(char specifier, const void *data, const char *root, con
+ }
+ 
+ int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        if (asprintf(ret, UID_FMT, getgid()) < 0)
++        UnitFileScope scope = PTR_TO_INT(data);
++        gid_t gid;
++
++        assert(ret);
++
++        if (scope == UNIT_FILE_GLOBAL)
++                return -EINVAL;
++
++        gid = scope == UNIT_FILE_USER ? getgid() : 0;
++
++        if (asprintf(ret, UID_FMT, gid) < 0)
+                 return -ENOMEM;
+ 
+         return 0;
+ }
+ 
+ int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
++        UnitFileScope scope = PTR_TO_INT(data);
++        uid_t uid;
+         char *t;
+ 
+-        /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want to be able
+-         * to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed.
++        assert(ret);
+ 
+-         * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain consistent with
+-         * specifer_user_id() below.
++        if (scope == UNIT_FILE_GLOBAL)
++                return -EINVAL;
++
++        uid = scope == UNIT_FILE_USER ? getuid() : 0;
++
++        /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want
++         * to be able to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed.
++
++         * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain
++         * consistent with specifer_user_id() below.
+          */
+ 
+-        t = uid_to_name(getuid());
++        t = uid_to_name(uid);
+         if (!t)
+                 return -ENOMEM;
+ 
+@@ -289,7 +315,17 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons
+ }
+ 
+ int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        if (asprintf(ret, UID_FMT, getuid()) < 0)
++        UnitFileScope scope = PTR_TO_INT(data);
++        uid_t uid;
++
++        assert(ret);
++
++        if (scope == UNIT_FILE_GLOBAL)
++                return -EINVAL;
++
++        uid = scope == UNIT_FILE_USER ? getuid() : 0;
++
++        if (asprintf(ret, UID_FMT, uid) < 0)
+                 return -ENOMEM;
+ 
+         return 0;
+diff --git a/src/shared/specifier.h b/src/shared/specifier.h
+index c433ee2d63..3c619a6c8f 100644
+--- a/src/shared/specifier.h
++++ b/src/shared/specifier.h
+@@ -80,11 +80,11 @@ int specifier_var_tmp_dir(char specifier, const void *data, const char *root, co
+         { 'w', specifier_os_version_id,   NULL }, \
+         { 'W', specifier_os_variant_id,   NULL }
+ 
+-#define COMMON_CREDS_SPECIFIERS                   \
+-        { 'g', specifier_group_name,      NULL }, \
+-        { 'G', specifier_group_id,        NULL }, \
+-        { 'u', specifier_user_name,       NULL }, \
+-        { 'U', specifier_user_id,         NULL }
++#define COMMON_CREDS_SPECIFIERS(scope)                          \
++        { 'g', specifier_group_name,      INT_TO_PTR(scope) },  \
++        { 'G', specifier_group_id,        INT_TO_PTR(scope) },  \
++        { 'u', specifier_user_name,       INT_TO_PTR(scope) },  \
++        { 'U', specifier_user_id,         INT_TO_PTR(scope) }
+ 
+ #define COMMON_TMP_SPECIFIERS                     \
+         { 'T', specifier_tmp_dir,         NULL }, \
+diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
+index c579be4150..9df53cec2b 100644
+--- a/src/test/test-load-fragment.c
++++ b/src/test/test-load-fragment.c
+@@ -526,59 +526,74 @@ TEST(install_printf, .sd_booted = true) {
+         assert_se(user = uid_to_name(getuid()));
+         assert_se(asprintf(&uid, UID_FMT, getuid()) >= 0);
+ 
+-#define expect(src, pattern, result)                                    \
++#define expect(scope, src, pattern, result)                             \
+         do {                                                            \
+-                _cleanup_free_ char *t = NULL;                          \
+-                _cleanup_free_ char                                     \
+-                        *d1 = strdup(i.name),                           \
+-                        *d2 = strdup(i.path);                           \
+-                assert_se(install_name_printf(&src, pattern, NULL, &t) >= 0 || !result); \
++                _cleanup_free_ char *t = NULL,                          \
++                        *d1 = ASSERT_PTR(strdup(i.name)),               \
++                        *d2 = ASSERT_PTR(strdup(i.path));               \
++                int r = install_name_printf(scope, &src, pattern, NULL, &t); \
++                assert_se(result ? r >= 0 : r < 0);                     \
+                 memzero(i.name, strlen(i.name));                        \
+                 memzero(i.path, strlen(i.path));                        \
+-                assert_se(d1 && d2);                                    \
+                 if (result) {                                           \
+                         printf("%s\n", t);                              \
+                         assert_se(streq(t, result));                    \
+-                } else assert_se(t == NULL);                            \
++                } else                                                  \
++                        assert_se(!t);                                  \
+                 strcpy(i.name, d1);                                     \
+                 strcpy(i.path, d2);                                     \
+         } while (false)
+ 
+-        expect(i, "%n", "name.service");
+-        expect(i, "%N", "name");
+-        expect(i, "%p", "name");
+-        expect(i, "%i", "");
+-        expect(i, "%j", "name");
+-        expect(i, "%g", group);
+-        expect(i, "%G", gid);
+-        expect(i, "%u", user);
+-        expect(i, "%U", uid);
+-
+-        expect(i, "%m", mid);
+-        expect(i, "%b", bid);
+-        expect(i, "%H", host);
+-
+-        expect(i2, "%g", group);
+-        expect(i2, "%G", gid);
+-        expect(i2, "%u", user);
+-        expect(i2, "%U", uid);
+-
+-        expect(i3, "%n", "name@inst.service");
+-        expect(i3, "%N", "name@inst");
+-        expect(i3, "%p", "name");
+-        expect(i3, "%g", group);
+-        expect(i3, "%G", gid);
+-        expect(i3, "%u", user);
+-        expect(i3, "%U", uid);
+-
+-        expect(i3, "%m", mid);
+-        expect(i3, "%b", bid);
+-        expect(i3, "%H", host);
+-
+-        expect(i4, "%g", group);
+-        expect(i4, "%G", gid);
+-        expect(i4, "%u", user);
+-        expect(i4, "%U", uid);
++        expect(UNIT_FILE_SYSTEM, i, "%n", "name.service");
++        expect(UNIT_FILE_SYSTEM, i, "%N", "name");
++        expect(UNIT_FILE_SYSTEM, i, "%p", "name");
++        expect(UNIT_FILE_SYSTEM, i, "%i", "");
++        expect(UNIT_FILE_SYSTEM, i, "%j", "name");
++        expect(UNIT_FILE_SYSTEM, i, "%g", "root");
++        expect(UNIT_FILE_SYSTEM, i, "%G", "0");
++        expect(UNIT_FILE_SYSTEM, i, "%u", "root");
++        expect(UNIT_FILE_SYSTEM, i, "%U", "0");
++
++        expect(UNIT_FILE_SYSTEM, i, "%m", mid);
++        expect(UNIT_FILE_SYSTEM, i, "%b", bid);
++        expect(UNIT_FILE_SYSTEM, i, "%H", host);
++
++        expect(UNIT_FILE_SYSTEM, i2, "%g", "root");
++        expect(UNIT_FILE_SYSTEM, i2, "%G", "0");
++        expect(UNIT_FILE_SYSTEM, i2, "%u", "root");
++        expect(UNIT_FILE_SYSTEM, i2, "%U", "0");
++
++        expect(UNIT_FILE_USER, i2, "%g", group);
++        expect(UNIT_FILE_USER, i2, "%G", gid);
++        expect(UNIT_FILE_USER, i2, "%u", user);
++        expect(UNIT_FILE_USER, i2, "%U", uid);
++
++        /* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called,
++         * even though the call is inside of a conditional where the pointer is checked. :( */
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
++        expect(UNIT_FILE_GLOBAL, i2, "%g", NULL);
++        expect(UNIT_FILE_GLOBAL, i2, "%G", NULL);
++        expect(UNIT_FILE_GLOBAL, i2, "%u", NULL);
++        expect(UNIT_FILE_GLOBAL, i2, "%U", NULL);
++#pragma GCC diagnostic pop
++
++        expect(UNIT_FILE_SYSTEM, i3, "%n", "name@inst.service");
++        expect(UNIT_FILE_SYSTEM, i3, "%N", "name@inst");
++        expect(UNIT_FILE_SYSTEM, i3, "%p", "name");
++        expect(UNIT_FILE_USER, i3, "%g", group);
++        expect(UNIT_FILE_USER, i3, "%G", gid);
++        expect(UNIT_FILE_USER, i3, "%u", user);
++        expect(UNIT_FILE_USER, i3, "%U", uid);
++
++        expect(UNIT_FILE_SYSTEM, i3, "%m", mid);
++        expect(UNIT_FILE_SYSTEM, i3, "%b", bid);
++        expect(UNIT_FILE_SYSTEM, i3, "%H", host);
++
++        expect(UNIT_FILE_USER, i4, "%g", group);
++        expect(UNIT_FILE_USER, i4, "%G", gid);
++        expect(UNIT_FILE_USER, i4, "%u", user);
++        expect(UNIT_FILE_USER, i4, "%U", uid);
+ }
+ 
+ static uint64_t make_cap(int cap) {
+diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
+index a45d1bd0b9..dd47f0285e 100644
+--- a/src/test/test-specifier.c
++++ b/src/test/test-specifier.c
+@@ -7,6 +7,7 @@
+ #include "string-util.h"
+ #include "strv.h"
+ #include "tests.h"
++#include "unit-file.h"
+ 
+ static void test_specifier_escape_one(const char *a, const char *b) {
+         _cleanup_free_ char *x = NULL;
+@@ -45,7 +46,7 @@ TEST(specifier_escape_strv) {
+ static const Specifier specifier_table[] = {
+         COMMON_SYSTEM_SPECIFIERS,
+ 
+-        COMMON_CREDS_SPECIFIERS,
++        COMMON_CREDS_SPECIFIERS(UNIT_FILE_USER),
+         { 'h', specifier_user_home,       NULL },
+ 
+         COMMON_TMP_SPECIFIERS,
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index fcab51c208..aa7ff73a36 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -204,31 +204,6 @@ STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+ static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+ static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret);
+ 
+-static const Specifier specifier_table[] = {
+-        { 'a', specifier_architecture,    NULL },
+-        { 'b', specifier_boot_id,         NULL },
+-        { 'B', specifier_os_build_id,     NULL },
+-        { 'H', specifier_host_name,       NULL },
+-        { 'l', specifier_short_host_name, NULL },
+-        { 'm', specifier_machine_id_safe, NULL },
+-        { 'o', specifier_os_id,           NULL },
+-        { 'v', specifier_kernel_release,  NULL },
+-        { 'w', specifier_os_version_id,   NULL },
+-        { 'W', specifier_os_variant_id,   NULL },
+-
+-        { 'h', specifier_user_home,       NULL },
+-
+-        { 'C', specifier_directory,       UINT_TO_PTR(DIRECTORY_CACHE) },
+-        { 'L', specifier_directory,       UINT_TO_PTR(DIRECTORY_LOGS) },
+-        { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE) },
+-        { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
+-
+-        COMMON_CREDS_SPECIFIERS,
+-
+-        COMMON_TMP_SPECIFIERS,
+-        {}
+-};
+-
+ static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+         int r;
+ 
+@@ -2743,7 +2718,7 @@ static bool should_include_path(const char *path) {
+         return false;
+ }
+ 
+-static int specifier_expansion_from_arg(Item *i) {
++static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *i) {
+         int r;
+ 
+         assert(i);
+@@ -2951,6 +2926,30 @@ static int parse_line(
+         assert(line >= 1);
+         assert(buffer);
+ 
++        const Specifier specifier_table[] = {
++                { 'a', specifier_architecture,    NULL },
++                { 'b', specifier_boot_id,         NULL },
++                { 'B', specifier_os_build_id,     NULL },
++                { 'H', specifier_host_name,       NULL },
++                { 'l', specifier_short_host_name, NULL },
++                { 'm', specifier_machine_id_safe, NULL },
++                { 'o', specifier_os_id,           NULL },
++                { 'v', specifier_kernel_release,  NULL },
++                { 'w', specifier_os_version_id,   NULL },
++                { 'W', specifier_os_variant_id,   NULL },
++
++                { 'h', specifier_user_home,       NULL },
++
++                { 'C', specifier_directory,       UINT_TO_PTR(DIRECTORY_CACHE)   },
++                { 'L', specifier_directory,       UINT_TO_PTR(DIRECTORY_LOGS)    },
++                { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE)   },
++                { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
++
++                COMMON_CREDS_SPECIFIERS(arg_user ? UNIT_FILE_USER : UNIT_FILE_SYSTEM),
++                COMMON_TMP_SPECIFIERS,
++                {}
++        };
++
+         r = extract_many_words(
+                         &buffer,
+                         NULL,
+@@ -3155,7 +3154,7 @@ static int parse_line(
+         if (!should_include_path(i.path))
+                 return 0;
+ 
+-        r = specifier_expansion_from_arg(&i);
++        r = specifier_expansion_from_arg(specifier_table, &i);
+         if (r == -ENXIO)
+                 return log_unresolvable_specifier(fname, line);
+         if (r < 0) {
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index da1fffe944..8ac1342b91 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -500,9 +500,10 @@ check_alias t '' && { echo "Expected failure" >&2; exit 1; }
+ check_alias T '' && { echo "Expected failure" >&2; exit 1; }
+ check_alias V '' && { echo "Expected failure" >&2; exit 1; }
+ 
+-# FIXME: we use the calling user instead of root :(
+-check_alias g root || :
+-check_alias G 0 || :
++check_alias g root
++check_alias G 0
++check_alias u root
++check_alias U 0
+ 
+ check_alias i ""
+ 
+@@ -521,10 +522,6 @@ check_alias N 'some-some-link6@'
+ 
+ check_alias p 'some-some-link6'
+ 
+-# FIXME: we use the calling user instead of root :(
+-check_alias u root || :
+-check_alias U 0 || :
+-
+ check_alias v "$(uname -r)"
+ 
+ check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; }
+diff --git a/test/test-systemd-tmpfiles.py b/test/test-systemd-tmpfiles.py
+index 3376029463..ba42b3fa37 100755
+--- a/test/test-systemd-tmpfiles.py
++++ b/test/test-systemd-tmpfiles.py
+@@ -98,13 +98,13 @@ def test_valid_specifiers(*, user):
+         test_content('f {} - - - - %b', '{}'.format(id128.get_boot().hex), user=user)
+     test_content('f {} - - - - %H', '{}'.format(socket.gethostname()), user=user)
+     test_content('f {} - - - - %v', '{}'.format(os.uname().release), user=user)
+-    test_content('f {} - - - - %U', '{}'.format(os.getuid()), user=user)
+-    test_content('f {} - - - - %G', '{}'.format(os.getgid()), user=user)
++    test_content('f {} - - - - %U', '{}'.format(os.getuid() if user else 0), user=user)
++    test_content('f {} - - - - %G', '{}'.format(os.getgid() if user else 0), user=user)
+ 
+-    puser = pwd.getpwuid(os.getuid())
++    puser = pwd.getpwuid(os.getuid() if user else 0)
+     test_content('f {} - - - - %u', '{}'.format(puser.pw_name), user=user)
+ 
+-    pgroup = grp.getgrgid(os.getgid())
++    pgroup = grp.getgrgid(os.getgid() if user else 0)
+     test_content('f {} - - - - %g', '{}'.format(pgroup.gr_name), user=user)
+ 
+     # Note that %h is the only specifier in which we look the environment,
diff --git a/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch b/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch
new file mode 100644
index 0000000..a463fab
--- /dev/null
+++ b/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch
@@ -0,0 +1,118 @@
+From cb49e80f8adf8fe81b6aa96b17a39a96850dcfa6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 09:19:37 +0100
+Subject: [PATCH] shared/install: simplify unit_file_dump_changes()
+
+No functional change.
+
+(cherry picked from commit 32450f5348c03262f3257af328b6547cbfba5859)
+
+Related: #2082131
+---
+ src/shared/install.c | 63 +++++++++++++++++++-------------------------
+ 1 file changed, 27 insertions(+), 36 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 8d82cb6b16..80863b448b 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -320,7 +320,7 @@ void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) {
+ }
+ 
+ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet) {
+-        bool logged = false;
++        int err = 0;
+ 
+         assert(changes || n_changes == 0);
+         /* If verb is not specified, errors are not allowed! */
+@@ -361,64 +361,55 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         break;
+                 case -EEXIST:
+                         if (changes[i].source)
+-                                log_error_errno(changes[i].type_or_errno,
+-                                                "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
+-                                                verb, changes[i].path, changes[i].source);
++                                err = log_error_errno(changes[i].type_or_errno,
++                                                      "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
++                                                      verb, changes[i].path, changes[i].source);
+                         else
+-                                log_error_errno(changes[i].type_or_errno,
+-                                                "Failed to %s unit, file \"%s\" already exists.",
+-                                                verb, changes[i].path);
+-                        logged = true;
++                                err = log_error_errno(changes[i].type_or_errno,
++                                                      "Failed to %s unit, file \"%s\" already exists.",
++                                                      verb, changes[i].path);
+                         break;
+                 case -ERFKILL:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.",
++                                              verb, changes[i].path);
+                         break;
+                 case -EADDRNOTAVAIL:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
++                                              verb, changes[i].path);
+                         break;
+                 case -EBADSLT:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".",
++                                              verb, changes[i].path);
+                         break;
+                 case -EIDRM:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.",
+-                                        verb, changes[i].source, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.",
++                                              verb, changes[i].source, changes[i].path);
+                         break;
+                 case -EUCLEAN:
+-                        log_error_errno(changes[i].type_or_errno,
+-                                        "Failed to %s unit, \"%s\" is not a valid unit name.",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno,
++                                              "Failed to %s unit, \"%s\" is not a valid unit name.",
++                                              verb, changes[i].path);
+                         break;
+                 case -ELOOP:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.",
++                                              verb, changes[i].path);
+                         break;
+                 case -ENOENT:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.",
++                                              verb, changes[i].path);
+                         break;
+                 case -EUNATCH:
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
++                                              verb, changes[i].path);
+                         break;
+                 default:
+                         assert(changes[i].type_or_errno < 0);
+-                        log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m",
+-                                        verb, changes[i].path);
+-                        logged = true;
++                        err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m",
++                                              verb, changes[i].path);
+                 }
+         }
+ 
+-        if (r < 0 && !logged)
++        if (r < 0 && err >= 0)
+                 log_error_errno(r, "Failed to %s: %m.", verb);
+ }
+ 
diff --git a/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch b/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch
new file mode 100644
index 0000000..4fa41b3
--- /dev/null
+++ b/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch
@@ -0,0 +1,325 @@
+From 35bcb96c1ac2db777db1649026f931ce77c9c7ba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 11:03:41 +0100
+Subject: [PATCH] shared/install: propagate errors about invalid aliases and
+ such too
+
+If an invalid arg appears in [Install] Alias=, WantedBy=, RequiredBy=,
+we'd warn in the logs, but not propagate this information to the caller,
+and in particular not over dbus. But if we call "systemctl enable" on a
+unit, and the config if invalid, this information is quite important.
+
+(cherry picked from commit cbfdbffb618f1d75e668c59887a27c7a60950546)
+
+Related: #2082131
+---
+ src/basic/unit-file.c        | 44 +++++++++++++-------------
+ src/basic/unit-file.h        |  2 +-
+ src/shared/install.c         | 61 ++++++++++++++++++++++++++----------
+ src/shared/install.h         |  7 ++++-
+ src/test/test-install-root.c |  2 +-
+ src/test/test-unit-file.c    | 28 ++++++++---------
+ 6 files changed, 88 insertions(+), 56 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index f7a10b22c6..105dacc1b2 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -69,7 +69,7 @@ int unit_symlink_name_compatible(const char *symlink, const char *target, bool i
+         return 0;
+ }
+ 
+-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target) {
++int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target) {
+         const char *src, *dst;
+         _cleanup_free_ char *src_instance = NULL, *dst_instance = NULL;
+         UnitType src_unit_type, dst_unit_type;
+@@ -92,51 +92,51 @@ int unit_validate_alias_symlink_and_warn(const char *filename, const char *targe
+ 
+         src_name_type = unit_name_to_instance(src, &src_instance);
+         if (src_name_type < 0)
+-                return log_notice_errno(src_name_type,
+-                                        "%s: not a valid unit name \"%s\": %m", filename, src);
++                return log_full_errno(log_level, src_name_type,
++                                      "%s: not a valid unit name \"%s\": %m", filename, src);
+ 
+         src_unit_type = unit_name_to_type(src);
+         assert(src_unit_type >= 0); /* unit_name_to_instance() checked the suffix already */
+ 
+         if (!unit_type_may_alias(src_unit_type))
+-                return log_notice_errno(SYNTHETIC_ERRNO(EINVAL),
+-                                        "%s: symlinks are not allowed for units of this type, rejecting.",
+-                                        filename);
++                return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL),
++                                      "%s: symlinks are not allowed for units of this type, rejecting.",
++                                      filename);
+ 
+         if (src_name_type != UNIT_NAME_PLAIN &&
+             !unit_type_may_template(src_unit_type))
+-                return log_notice_errno(SYNTHETIC_ERRNO(EINVAL),
+-                                        "%s: templates not allowed for %s units, rejecting.",
+-                                        filename, unit_type_to_string(src_unit_type));
++                return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL),
++                                      "%s: templates not allowed for %s units, rejecting.",
++                                      filename, unit_type_to_string(src_unit_type));
+ 
+         /* dst checks */
+ 
+         dst_name_type = unit_name_to_instance(dst, &dst_instance);
+         if (dst_name_type < 0)
+-                return log_notice_errno(dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type,
+-                                        "%s points to \"%s\" which is not a valid unit name: %m",
+-                                        filename, dst);
++                return log_full_errno(log_level, dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type,
++                                      "%s points to \"%s\" which is not a valid unit name: %m",
++                                      filename, dst);
+ 
+         if (!(dst_name_type == src_name_type ||
+               (src_name_type == UNIT_NAME_INSTANCE && dst_name_type == UNIT_NAME_TEMPLATE)))
+-                return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                        "%s: symlink target name type \"%s\" does not match source, rejecting.",
+-                                        filename, dst);
++                return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
++                                      "%s: symlink target name type \"%s\" does not match source, rejecting.",
++                                      filename, dst);
+ 
+         if (dst_name_type == UNIT_NAME_INSTANCE) {
+                 assert(src_instance);
+                 assert(dst_instance);
+                 if (!streq(src_instance, dst_instance))
+-                        return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                                "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.",
+-                                                filename, dst);
++                        return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
++                                              "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.",
++                                              filename, dst);
+         }
+ 
+         dst_unit_type = unit_name_to_type(dst);
+         if (dst_unit_type != src_unit_type)
+-                return log_notice_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                        "%s: symlink target \"%s\" has incompatible suffix, rejecting.",
+-                                        filename, dst);
++                return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV),
++                                      "%s: symlink target \"%s\" has incompatible suffix, rejecting.",
++                                      filename, dst);
+ 
+         return 0;
+ }
+@@ -355,7 +355,7 @@ int unit_file_resolve_symlink(
+                                  "Suspicious symlink %s/%s→%s, treating as alias.",
+                                  dir, filename, simplified);
+ 
+-                r = unit_validate_alias_symlink_and_warn(filename, simplified);
++                r = unit_validate_alias_symlink_or_warn(LOG_NOTICE, filename, simplified);
+                 if (r < 0)
+                         return r;
+ 
+diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h
+index e29e878cfd..b7c03e9c2c 100644
+--- a/src/basic/unit-file.h
++++ b/src/basic/unit-file.h
+@@ -41,7 +41,7 @@ bool unit_type_may_alias(UnitType type) _const_;
+ bool unit_type_may_template(UnitType type) _const_;
+ 
+ int unit_symlink_name_compatible(const char *symlink, const char *target, bool instance_propagation);
+-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target);
++int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target);
+ 
+ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_hash, uint64_t *ret_new);
+ 
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 80863b448b..6da9ba6b0c 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -394,6 +394,14 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.",
+                                               verb, changes[i].path);
+                         break;
++                case -EXDEV:
++                        if (changes[i].source)
++                                err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot alias %s as %s.",
++                                                      verb, changes[i].source, changes[i].path);
++                        else
++                                err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid unit reference \"%s\".",
++                                                      verb, changes[i].path);
++                        break;
+                 case -ENOENT:
+                         err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.",
+                                               verb, changes[i].path);
+@@ -1678,7 +1686,13 @@ static int install_info_discover_and_check(
+         return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes);
+ }
+ 
+-int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, char **ret_dst) {
++int unit_file_verify_alias(
++                const UnitFileInstallInfo *info,
++                const char *dst,
++                char **ret_dst,
++                UnitFileChange **changes,
++                size_t *n_changes) {
++
+         _cleanup_free_ char *dst_updated = NULL;
+         int r;
+ 
+@@ -1705,15 +1719,19 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha
+                 p = endswith(dir, ".wants");
+                 if (!p)
+                         p = endswith(dir, ".requires");
+-                if (!p)
+-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                                 "Invalid path \"%s\" in alias.", dir);
++                if (!p) {
++                        unit_file_changes_add(changes, n_changes, -EXDEV, dst, NULL);
++                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir);
++                }
++
+                 *p = '\0'; /* dir should now be a unit name */
+ 
+                 UnitNameFlags type = unit_name_classify(dir);
+-                if (type < 0)
+-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                                 "Invalid unit name component \"%s\" in alias.", dir);
++                if (type < 0) {
++                        unit_file_changes_add(changes, n_changes, -EXDEV, dst, NULL);
++                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
++                                               "Invalid unit name component \"%s\" in alias.", dir);
++                }
+ 
+                 const bool instance_propagation = type == UNIT_NAME_TEMPLATE;
+ 
+@@ -1721,10 +1739,12 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha
+                 r = unit_symlink_name_compatible(path_alias, info->name, instance_propagation);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to verify alias validity: %m");
+-                if (r == 0)
+-                        return log_warning_errno(SYNTHETIC_ERRNO(EXDEV),
+-                                                 "Invalid unit \"%s\" symlink \"%s\".",
+-                                                 info->name, dst);
++                if (r == 0) {
++                        unit_file_changes_add(changes, n_changes, -EXDEV, dst, info->name);
++                        return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
++                                               "Invalid unit \"%s\" symlink \"%s\".",
++                                               info->name, dst);
++                }
+ 
+         } else {
+                 /* If the symlink target has an instance set and the symlink source doesn't, we "propagate
+@@ -1733,8 +1753,10 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha
+                         _cleanup_free_ char *inst = NULL;
+ 
+                         UnitNameFlags type = unit_name_to_instance(info->name, &inst);
+-                        if (type < 0)
+-                                return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", info->name);
++                        if (type < 0) {
++                                unit_file_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL);
++                                return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name);
++                        }
+ 
+                         if (type == UNIT_NAME_INSTANCE) {
+                                 r = unit_name_replace_instance(dst, inst, &dst_updated);
+@@ -1744,9 +1766,14 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha
+                         }
+                 }
+ 
+-                r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, info->name);
+-                if (r < 0)
++                r = unit_validate_alias_symlink_or_warn(LOG_DEBUG, dst_updated ?: dst, info->name);
++                if (r < 0) {
++                        unit_file_changes_add(changes, n_changes,
++                                              r == -EINVAL ? -EXDEV : r,
++                                              dst_updated ?: dst,
++                                              info->name);
+                         return r;
++                }
+         }
+ 
+         *ret_dst = TAKE_PTR(dst_updated);
+@@ -1778,7 +1805,7 @@ static int install_info_symlink_alias(
+                         return q;
+                 }
+ 
+-                q = unit_file_verify_alias(info, dst, &dst_updated);
++                q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes);
+                 if (q < 0)
+                         continue;
+ 
+@@ -3332,7 +3359,7 @@ int unit_file_preset_all(
+ 
+                         r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
+                         if (r < 0 &&
+-                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH))
++                            !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH, -EXDEV))
+                                 /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
+                                  * Coordinate with unit_file_dump_changes() above. */
+                                 return r;
+diff --git a/src/shared/install.h b/src/shared/install.h
+index cdc5435035..d21e2aaa45 100644
+--- a/src/shared/install.h
++++ b/src/shared/install.h
+@@ -193,7 +193,12 @@ int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type,
+ void unit_file_changes_free(UnitFileChange *changes, size_t n_changes);
+ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet);
+ 
+-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst);
++int unit_file_verify_alias(
++                const UnitFileInstallInfo *info,
++                const char *dst,
++                char **ret_dst,
++                UnitFileChange **changes,
++                size_t *n_changes);
+ 
+ typedef struct UnitFilePresetRule UnitFilePresetRule;
+ 
+diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
+index f718689c3a..4f66c12655 100644
+--- a/src/test/test-install-root.c
++++ b/src/test/test-install-root.c
+@@ -1091,7 +1091,7 @@ static void verify_one(
+         if (i != last_info)
+                 log_info("-- %s --", (last_info = i)->name);
+ 
+-        r = unit_file_verify_alias(i, alias, &alias2);
++        r = unit_file_verify_alias(i, alias, &alias2, NULL, NULL);
+         log_info_errno(r, "alias %s ← %s: %d/%m (expected %d)%s%s%s",
+                        i->name, alias, r, expected,
+                        alias2 ? " [" : "", strempty(alias2),
+diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
+index cc08a4ae4b..8ed56ad3b8 100644
+--- a/src/test/test-unit-file.c
++++ b/src/test/test-unit-file.c
+@@ -8,20 +8,20 @@
+ #include "unit-file.h"
+ 
+ TEST(unit_validate_alias_symlink_and_warn) {
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.service") == 0);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.socket") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.foobar") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.service") == 0);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.socket") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@YYY.service") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@XXX.service") == 0);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@.service") == 0);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b.service") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b@.service") == -EXDEV);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a@.slice", "/other/b.slice") == -EINVAL);
+-        assert_se(unit_validate_alias_symlink_and_warn("/path/a.slice", "/other/b.slice") == -EINVAL);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.service") == 0);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.socket") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.foobar") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.service") == 0);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.socket") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@YYY.service") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@XXX.service") == 0);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@.service") == 0);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b.service") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b@.service") == -EXDEV);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.slice", "/other/b.slice") == -EINVAL);
++        assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.slice", "/other/b.slice") == -EINVAL);
+ }
+ 
+ TEST(unit_file_build_name_map) {
diff --git a/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch b/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch
new file mode 100644
index 0000000..614089b
--- /dev/null
+++ b/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch
@@ -0,0 +1,165 @@
+From db20c5cec8adf865dd47672bc091092b8cea5e0e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 15:47:12 +0100
+Subject: [PATCH] shared/install: return failure when enablement fails, but
+ process as much as possible
+
+So far we'd issue a warning (before this series, just in the logs on the server
+side, and before this commit, on stderr on the caller's side), but return
+success. It seems that successfull return was introduced by mistake in
+aa0f357fd833feecbea6c3e9be80b643e433bced (my fault :( ), which was supposed to
+be a refactoring without a functional change. I think it's better to fail,
+because if enablement fails, the user will most likely want to diagnose the
+issue.
+
+Note that we still do partial enablement, as far as that is possible. So if
+e.g. we have [Install] Alias=foo.service foobar, we'll create the symlink
+'foo.service', but not 'foobar', since that's not a valid unit name. We'll
+print info about the action taken, and about 'foobar' being invalid, and return
+failure.
+
+(cherry picked from commit 0d11db59825a9deee0b56fdede0602ef1c37c5c5)
+
+Related: #2082131
+---
+ src/shared/install.c          | 10 +++++----
+ test/test-systemctl-enable.sh | 39 ++++++++++++++++++-----------------
+ 2 files changed, 26 insertions(+), 23 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 6da9ba6b0c..a541d32fb7 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1802,20 +1802,22 @@ static int install_info_symlink_alias(
+                 q = install_name_printf(scope, info, *s, info->root, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+-                        return q;
++                        r = r < 0 ? r : q;
++                        continue;
+                 }
+ 
+                 q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes);
+-                if (q < 0)
++                if (q < 0) {
++                        r = r < 0 ? r : q;
+                         continue;
++                }
+ 
+                 alias_path = path_make_absolute(dst_updated ?: dst, config_path);
+                 if (!alias_path)
+                         return -ENOMEM;
+ 
+                 q = create_symlink(lp, info->path, alias_path, force, changes, n_changes);
+-                if (r == 0)
+-                        r = q;
++                r = r < 0 ? r : q;
+         }
+ 
+         return r;
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 8ac1342b91..32bc6e5ef7 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -56,19 +56,27 @@ test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
+ 
+ : -------aliases----------------------------------------------
+-"$systemctl" --root="$root" enable test1
+-test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+-test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+-
+ cat >>"$root/etc/systemd/system/test1.service" <<EOF
+ Alias=test1-goodalias.service
+ Alias=test1@badalias.service
+ Alias=test1-badalias.target
+ Alias=test1-badalias.socket
++# we have a series of good, bad, and then good again
++Alias=test1-goodalias2.service
+ EOF
+ 
++"$systemctl" --root="$root" enable test1 && { echo "Expected failure" >&2; exit 1; }
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++test -h "$root/etc/systemd/system/test1-goodalias.service"
++test ! -e "$root/etc/systemd/system/test1@badalias.service"
++test ! -e "$root/etc/systemd/system/test1-badalias.target"
++test ! -e "$root/etc/systemd/system/test1-badalias.socket"
++test -h "$root/etc/systemd/system/test1-goodalias2.service"
++
+ : -------aliases in reeanble----------------------------------
+-"$systemctl" --root="$root" reenable test1
++"$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; }
+ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -e "$root/etc/systemd/system/test1-goodalias.service"
+ test -h "$root/etc/systemd/system/test1-goodalias.service"
+@@ -328,7 +336,7 @@ Alias=link4alias.service
+ Alias=link4alias2.service
+ EOF
+ 
+-"$systemctl" --root="$root" enable 'link4.service'
++"$systemctl" --root="$root" enable 'link4.service' && { echo "Expected failure" >&2; exit 1; }
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+ test ! -h "$root/etc/systemd/system/link4@.service"
+ test ! -h "$root/etc/systemd/system/link4@inst.service"
+@@ -343,18 +351,20 @@ test ! -h "$root/etc/systemd/system/link4alias.service"
+ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ 
+ : -------systemctl enable on path to unit file----------------
++cat >"$root/etc/systemd/system/link4.service" <<EOF
++[Install]
++Alias=link4alias.service
++Alias=link4alias2.service
++EOF
++
+ # Apparently this works. I'm not sure what to think.
+ "$systemctl" --root="$root" enable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+-test ! -h "$root/etc/systemd/system/link4@.service"
+-test ! -h "$root/etc/systemd/system/link4@inst.service"
+ islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
+ islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
+ 
+ "$systemctl" --root="$root" disable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"
+-test ! -h "$root/etc/systemd/system/link4@.service"
+-test ! -h "$root/etc/systemd/system/link4@inst.service"
+ test ! -h "$root/etc/systemd/system/link4alias.service"
+ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ 
+@@ -364,25 +374,18 @@ cat >"$root/etc/systemd/system/link5.service" <<EOF
+ [Install]
+ # FIXME: self-alias should be ignored
+ # Alias=link5.service
+-Alias=link5@.service
+-Alias=link5@inst.service
+ Alias=link5alias.service
+ Alias=link5alias2.service
+ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5.service"  # this is our file
+-test ! -h "$root/etc/systemd/system/link5@.service"
+-test ! -h "$root/etc/systemd/system/link5@inst.service"
+ # FIXME/CLARIFYME: will systemd think that link5alias2, link5alias, link5 are all aliases?
+ # https://github.com/systemd/systemd/issues/661#issuecomment-1057931149
+ islink "$root/etc/systemd/system/link5alias.service" "/etc/systemd/system/link5.service"
+ islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5.service"
+ 
+ "$systemctl" --root="$root" disable 'link5.service'
+-test ! -h "$root/etc/systemd/system/link5.service"
+-test ! -h "$root/etc/systemd/system/link5@.service"
+-test ! -h "$root/etc/systemd/system/link5@inst.service"
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+@@ -528,8 +531,6 @@ check_alias % '%' && { echo "Expected failure because % is not legal in unit nam
+ 
+ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
+ 
+-# FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install]
+-
+ # TODO: repeat the tests above for presets
+ 
+ : -------SYSTEMD_OS_RELEASE relative to root------------------
diff --git a/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch b/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch
new file mode 100644
index 0000000..a9ce03e
--- /dev/null
+++ b/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch
@@ -0,0 +1,545 @@
+From 8fa3444f3ca7add9af40ab565e045c2754e5a855 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 16:47:51 +0100
+Subject: [PATCH] systemctl: fix silent failure when --root is not found
+
+Some calls to lookup_path_init() were not followed by any log emission.
+E.g.:
+$ SYSTEMD_LOG_LEVEL=debug systemctl --root=/missing enable unit; echo $?
+1
+
+Let's add a helper function and use it in various places.
+
+$ SYSTEMD_LOG_LEVEL=debug build/systemctl --root=/missing enable unit; echo $?
+Failed to initialize unit search paths for root directory /missing: No such file or directory
+1
+$ SYSTEMCTL_SKIP_SYSV=1 build/systemctl --root=/missing enable unit; echo $?
+Failed to initialize unit search paths for root directory /missing: No such file or directory
+Failed to enable: No such file or directory.
+1
+
+The repeated error in the second case is not very nice, but this is a niche
+case and I don't think it's worth the trouble to trying to avoid it.
+
+(cherry picked from commit 99aad9a2b9e2c06023a2043976fd9395332ff097)
+
+Related: #2082131
+---
+ src/basic/env-file.c                  | 83 +++++++++------------------
+ src/basic/path-lookup.c               | 56 ++++++++++--------
+ src/basic/path-lookup.h               |  3 +-
+ src/core/manager.c                    | 12 ++--
+ src/shared/condition.c                |  3 +-
+ src/shared/install.c                  |  2 +-
+ src/systemctl/systemctl-edit.c        |  8 +--
+ src/systemctl/systemctl-enable.c      |  2 +-
+ src/systemctl/systemctl-sysv-compat.c |  2 +-
+ src/sysv-generator/sysv-generator.c   |  4 +-
+ src/test/test-fileio.c                |  3 +-
+ src/test/test-os-util.c               |  7 +--
+ 12 files changed, 84 insertions(+), 101 deletions(-)
+
+diff --git a/src/basic/env-file.c b/src/basic/env-file.c
+index 0353f3f2a0..0e272da083 100644
+--- a/src/basic/env-file.c
++++ b/src/basic/env-file.c
+@@ -16,9 +16,8 @@ static int parse_env_file_internal(
+                 FILE *f,
+                 const char *fname,
+                 int (*push) (const char *filename, unsigned line,
+-                             const char *key, char *value, void *userdata, int *n_pushed),
+-                void *userdata,
+-                int *n_pushed) {
++                             const char *key, char *value, void *userdata),
++                void *userdata) {
+ 
+         size_t n_key = 0, n_value = 0, last_value_whitespace = SIZE_MAX, last_key_whitespace = SIZE_MAX;
+         _cleanup_free_ char *contents = NULL, *key = NULL, *value = NULL;
+@@ -100,7 +99,7 @@ static int parse_env_file_internal(
+                                 if (last_key_whitespace != SIZE_MAX)
+                                         key[last_key_whitespace] = 0;
+ 
+-                                r = push(fname, line, key, value, userdata, n_pushed);
++                                r = push(fname, line, key, value, userdata);
+                                 if (r < 0)
+                                         return r;
+ 
+@@ -143,7 +142,7 @@ static int parse_env_file_internal(
+                                 if (last_key_whitespace != SIZE_MAX)
+                                         key[last_key_whitespace] = 0;
+ 
+-                                r = push(fname, line, key, value, userdata, n_pushed);
++                                r = push(fname, line, key, value, userdata);
+                                 if (r < 0)
+                                         return r;
+ 
+@@ -262,7 +261,7 @@ static int parse_env_file_internal(
+                 if (last_key_whitespace != SIZE_MAX)
+                         key[last_key_whitespace] = 0;
+ 
+-                r = push(fname, line, key, value, userdata, n_pushed);
++                r = push(fname, line, key, value, userdata);
+                 if (r < 0)
+                         return r;
+ 
+@@ -300,8 +299,7 @@ static int check_utf8ness_and_warn(
+ static int parse_env_file_push(
+                 const char *filename, unsigned line,
+                 const char *key, char *value,
+-                void *userdata,
+-                int *n_pushed) {
++                void *userdata) {
+ 
+         const char *k;
+         va_list aq, *ap = userdata;
+@@ -323,9 +321,6 @@ static int parse_env_file_push(
+                         free(*v);
+                         *v = value;
+ 
+-                        if (n_pushed)
+-                                (*n_pushed)++;
+-
+                         return 1;
+                 }
+         }
+@@ -341,16 +336,13 @@ int parse_env_filev(
+                 const char *fname,
+                 va_list ap) {
+ 
+-        int r, n_pushed = 0;
++        int r;
+         va_list aq;
+ 
+         va_copy(aq, ap);
+-        r = parse_env_file_internal(f, fname, parse_env_file_push, &aq, &n_pushed);
++        r = parse_env_file_internal(f, fname, parse_env_file_push, &aq);
+         va_end(aq);
+-        if (r < 0)
+-                return r;
+-
+-        return n_pushed;
++        return r;
+ }
+ 
+ int parse_env_file_sentinel(
+@@ -371,8 +363,7 @@ int parse_env_file_sentinel(
+ static int load_env_file_push(
+                 const char *filename, unsigned line,
+                 const char *key, char *value,
+-                void *userdata,
+-                int *n_pushed) {
++                void *userdata) {
+         char ***m = userdata;
+         char *p;
+         int r;
+@@ -389,34 +380,28 @@ static int load_env_file_push(
+         if (r < 0)
+                 return r;
+ 
+-        if (n_pushed)
+-                (*n_pushed)++;
+-
+         free(value);
+         return 0;
+ }
+ 
+ int load_env_file(FILE *f, const char *fname, char ***rl) {
+-        char **m = NULL;
++        _cleanup_strv_free_ char **m = NULL;
+         int r;
+ 
+-        r = parse_env_file_internal(f, fname, load_env_file_push, &m, NULL);
+-        if (r < 0) {
+-                strv_free(m);
++        r = parse_env_file_internal(f, fname, load_env_file_push, &m);
++        if (r < 0)
+                 return r;
+-        }
+ 
+-        *rl = m;
++        *rl = TAKE_PTR(m);
+         return 0;
+ }
+ 
+ static int load_env_file_push_pairs(
+                 const char *filename, unsigned line,
+                 const char *key, char *value,
+-                void *userdata,
+-                int *n_pushed) {
++                void *userdata) {
++
+         char ***m = ASSERT_PTR(userdata);
+-        bool added = false;
+         int r;
+ 
+         r = check_utf8ness_and_warn(filename, line, key, value);
+@@ -427,49 +412,37 @@ static int load_env_file_push_pairs(
+         for (char **t = *m; t && *t; t += 2)
+                 if (streq(t[0], key)) {
+                         if (value)
+-                                r = free_and_replace(t[1], value);
++                                return free_and_replace(t[1], value);
+                         else
+-                                r = free_and_strdup(t+1, "");
+-                        goto finish;
++                                return free_and_strdup(t+1, "");
+                 }
+ 
+         r = strv_extend(m, key);
+         if (r < 0)
+-                return -ENOMEM;
++                return r;
+ 
+         if (value)
+-                r = strv_push(m, value);
++                return strv_push(m, value);
+         else
+-                r = strv_extend(m, "");
+-        added = true;
+- finish:
+-        if (r < 0)
+-                return r;
+-
+-        if (n_pushed && added)
+-                (*n_pushed)++;
+-        return 0;
++                return strv_extend(m, "");
+ }
+ 
+ int load_env_file_pairs(FILE *f, const char *fname, char ***rl) {
+-        char **m = NULL;
++        _cleanup_strv_free_ char **m = NULL;
+         int r;
+ 
+-        r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m, NULL);
+-        if (r < 0) {
+-                strv_free(m);
++        r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m);
++        if (r < 0)
+                 return r;
+-        }
+ 
+-        *rl = m;
++        *rl = TAKE_PTR(m);
+         return 0;
+ }
+ 
+ static int merge_env_file_push(
+                 const char *filename, unsigned line,
+                 const char *key, char *value,
+-                void *userdata,
+-                int *n_pushed) {
++                void *userdata) {
+ 
+         char ***env = userdata;
+         char *expanded_value;
+@@ -498,7 +471,7 @@ static int merge_env_file_push(
+ 
+         log_debug("%s:%u: setting %s=%s", filename, line, key, value);
+ 
+-        return load_env_file_push(filename, line, key, value, env, n_pushed);
++        return load_env_file_push(filename, line, key, value, env);
+ }
+ 
+ int merge_env_file(
+@@ -510,7 +483,7 @@ int merge_env_file(
+          * plus "extended" substitutions, unlike other exported parsing functions.
+          */
+ 
+-        return parse_env_file_internal(f, fname, merge_env_file_push, env, NULL);
++        return parse_env_file_internal(f, fname, merge_env_file_push, env);
+ }
+ 
+ static void write_env_var(FILE *f, const char *v) {
+diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
+index 921a30cef7..ab51955e34 100644
+--- a/src/basic/path-lookup.c
++++ b/src/basic/path-lookup.c
+@@ -509,7 +509,7 @@ static int get_paths_from_environ(const char *var, char ***paths, bool *append)
+ }
+ 
+ int lookup_paths_init(
+-                LookupPaths *p,
++                LookupPaths *lp,
+                 UnitFileScope scope,
+                 LookupPathsFlags flags,
+                 const char *root_dir) {
+@@ -527,7 +527,7 @@ int lookup_paths_init(
+         _cleanup_strv_free_ char **paths = NULL;
+         int r;
+ 
+-        assert(p);
++        assert(lp);
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+@@ -717,7 +717,7 @@ int lookup_paths_init(
+         if (r < 0)
+                 return -ENOMEM;
+ 
+-        *p = (LookupPaths) {
++        *lp = (LookupPaths) {
+                 .search_path = strv_uniq(TAKE_PTR(paths)),
+ 
+                 .persistent_config = TAKE_PTR(persistent_config),
+@@ -742,41 +742,51 @@ int lookup_paths_init(
+         return 0;
+ }
+ 
+-void lookup_paths_free(LookupPaths *p) {
+-        if (!p)
++int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir) {
++        int r;
++
++        r = lookup_paths_init(lp, scope, flags, root_dir);
++        if (r < 0)
++                return log_error_errno(r, "Failed to initialize unit search paths%s%s: %m",
++                                       isempty(root_dir) ? "" : " for root directory ", strempty(root_dir));
++        return r;
++}
++
++void lookup_paths_free(LookupPaths *lp) {
++        if (!lp)
+                 return;
+ 
+-        p->search_path = strv_free(p->search_path);
++        lp->search_path = strv_free(lp->search_path);
+ 
+-        p->persistent_config = mfree(p->persistent_config);
+-        p->runtime_config = mfree(p->runtime_config);
++        lp->persistent_config = mfree(lp->persistent_config);
++        lp->runtime_config = mfree(lp->runtime_config);
+ 
+-        p->persistent_attached = mfree(p->persistent_attached);
+-        p->runtime_attached = mfree(p->runtime_attached);
++        lp->persistent_attached = mfree(lp->persistent_attached);
++        lp->runtime_attached = mfree(lp->runtime_attached);
+ 
+-        p->generator = mfree(p->generator);
+-        p->generator_early = mfree(p->generator_early);
+-        p->generator_late = mfree(p->generator_late);
++        lp->generator = mfree(lp->generator);
++        lp->generator_early = mfree(lp->generator_early);
++        lp->generator_late = mfree(lp->generator_late);
+ 
+-        p->transient = mfree(p->transient);
++        lp->transient = mfree(lp->transient);
+ 
+-        p->persistent_control = mfree(p->persistent_control);
+-        p->runtime_control = mfree(p->runtime_control);
++        lp->persistent_control = mfree(lp->persistent_control);
++        lp->runtime_control = mfree(lp->runtime_control);
+ 
+-        p->root_dir = mfree(p->root_dir);
+-        p->temporary_dir = mfree(p->temporary_dir);
++        lp->root_dir = mfree(lp->root_dir);
++        lp->temporary_dir = mfree(lp->temporary_dir);
+ }
+ 
+-void lookup_paths_log(LookupPaths *p) {
+-        assert(p);
++void lookup_paths_log(LookupPaths *lp) {
++        assert(lp);
+ 
+-        if (strv_isempty(p->search_path)) {
++        if (strv_isempty(lp->search_path)) {
+                 log_debug("Ignoring unit files.");
+-                p->search_path = strv_free(p->search_path);
++                lp->search_path = strv_free(lp->search_path);
+         } else {
+                 _cleanup_free_ char *t = NULL;
+ 
+-                t = strv_join(p->search_path, "\n\t");
++                t = strv_join(lp->search_path, "\n\t");
+                 log_debug("Looking for unit files in (higher priority first):\n\t%s", strna(t));
+         }
+ }
+diff --git a/src/basic/path-lookup.h b/src/basic/path-lookup.h
+index af85dc7b4f..1f0e5ea271 100644
+--- a/src/basic/path-lookup.h
++++ b/src/basic/path-lookup.h
+@@ -54,7 +54,8 @@ struct LookupPaths {
+         char *temporary_dir;
+ };
+ 
+-int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
++int lookup_paths_init(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
++int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
+ 
+ int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs);
+ int xdg_user_runtime_dir(char **ret, const char *suffix);
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 12c49e7fca..22bd0866c5 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1756,11 +1756,11 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo
+ 
+         /* If we are running in test mode, we still want to run the generators,
+          * but we should not touch the real generator directories. */
+-        r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope,
+-                              MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0,
+-                              root);
++        r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope,
++                                      MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0,
++                                      root);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to initialize path lookup table: %m");
++                return r;
+ 
+         dual_timestamp_get(m->timestamps + manager_timestamp_initrd_mangle(MANAGER_TIMESTAMP_GENERATORS_START));
+         r = manager_run_environment_generators(m);
+@@ -3302,9 +3302,9 @@ int manager_reload(Manager *m) {
+         m->uid_refs = hashmap_free(m->uid_refs);
+         m->gid_refs = hashmap_free(m->gid_refs);
+ 
+-        r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope, 0, NULL);
++        r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope, 0, NULL);
+         if (r < 0)
+-                log_warning_errno(r, "Failed to initialize path lookup table, ignoring: %m");
++                return r;
+ 
+         (void) manager_run_environment_generators(m);
+         (void) manager_run_generators(m);
+diff --git a/src/shared/condition.c b/src/shared/condition.c
+index 68fbbf643a..21f3714eba 100644
+--- a/src/shared/condition.c
++++ b/src/shared/condition.c
+@@ -787,7 +787,8 @@ static int condition_test_needs_update(Condition *c, char **env) {
+         if (r < 0) {
+                 log_debug_errno(r, "Failed to parse timestamp file '%s', using mtime: %m", p);
+                 return true;
+-        } else if (r == 0) {
++        }
++        if (isempty(timestamp_str)) {
+                 log_debug("No data in timestamp file '%s', using mtime.", p);
+                 return true;
+         }
+diff --git a/src/shared/install.c b/src/shared/install.c
+index a541d32fb7..f1a8b7eb9b 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2615,7 +2615,7 @@ int unit_file_enable(
+         assert(scope >= 0);
+         assert(scope < _UNIT_FILE_SCOPE_MAX);
+ 
+-        r = lookup_paths_init(&lp, scope, 0, root_dir);
++        r = lookup_paths_init_or_warn(&lp, scope, 0, root_dir);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
+index a97aa7be4c..92abd15636 100644
+--- a/src/systemctl/systemctl-edit.c
++++ b/src/systemctl/systemctl-edit.c
+@@ -38,9 +38,9 @@ int cat(int argc, char *argv[], void *userdata) {
+         if (arg_transport != BUS_TRANSPORT_LOCAL)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot remotely cat units.");
+ 
+-        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
++        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to determine unit paths: %m");
++                return r;
+ 
+         r = acquire_bus(BUS_MANAGER, &bus);
+         if (r < 0)
+@@ -511,9 +511,9 @@ int edit(int argc, char *argv[], void *userdata) {
+         if (arg_transport != BUS_TRANSPORT_LOCAL)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit units remotely.");
+ 
+-        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
++        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to determine unit paths: %m");
++                return r;
+ 
+         r = mac_selinux_init();
+         if (r < 0)
+diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c
+index dcbe2c7302..7860f3dc6c 100644
+--- a/src/systemctl/systemctl-enable.c
++++ b/src/systemctl/systemctl-enable.c
+@@ -142,7 +142,7 @@ int enable_unit(int argc, char *argv[], void *userdata) {
+                         char **name;
+                         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+ 
+-                        r = lookup_paths_init(&lp, arg_scope, 0, arg_root);
++                        r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
+                         if (r < 0)
+                                 return r;
+ 
+diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c
+index 017dba2034..c6e8defd1b 100644
+--- a/src/systemctl/systemctl-sysv-compat.c
++++ b/src/systemctl/systemctl-sysv-compat.c
+@@ -128,7 +128,7 @@ int enable_sysv_units(const char *verb, char **args) {
+                         "is-enabled"))
+                 return 0;
+ 
+-        r = lookup_paths_init(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root);
++        r = lookup_paths_init_or_warn(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
+index e9976540b5..bb74b486be 100644
+--- a/src/sysv-generator/sysv-generator.c
++++ b/src/sysv-generator/sysv-generator.c
+@@ -894,9 +894,9 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
+ 
+         assert_se(arg_dest = dest_late);
+ 
+-        r = lookup_paths_init(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
++        r = lookup_paths_init_or_warn(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to find lookup paths: %m");
++                return r;
+ 
+         all_services = hashmap_new(&string_hash_ops);
+         if (!all_services)
+diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
+index 4f91d94709..238ae8f586 100644
+--- a/src/test/test-fileio.c
++++ b/src/test/test-fileio.c
+@@ -110,8 +110,7 @@ TEST(parse_env_file) {
+                        "eleven", &eleven,
+                        "twelve", &twelve,
+                        "thirteen", &thirteen);
+-
+-        assert_se(r >= 0);
++        assert_se(r == 0);
+ 
+         log_info("one=[%s]", strna(one));
+         log_info("two=[%s]", strna(two));
+diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c
+index d6336c53e9..2cee6470c4 100644
+--- a/src/test/test-os-util.c
++++ b/src/test/test-os-util.c
+@@ -18,7 +18,7 @@ TEST(path_is_os_tree) {
+ TEST(parse_os_release) {
+         /* Let's assume that we're running in a valid system, so os-release is available */
+         _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL;
+-        assert_se(parse_os_release(NULL, "ID", &id) == 1);
++        assert_se(parse_os_release(NULL, "ID", &id) == 0);
+         log_info("ID: %s", id);
+ 
+         assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
+@@ -31,7 +31,7 @@ TEST(parse_os_release) {
+                                 "NAME=the-name") == 0);
+ 
+         assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
+-        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 2);
++        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
+         log_info("ID: %s NAME: %s", id, name);
+         assert_se(streq(id, "the-id"));
+         assert_se(streq(name, "the-name"));
+@@ -43,8 +43,7 @@ TEST(parse_os_release) {
+                                 "NAME='the-name'") == 0);
+ 
+         assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0);
+-        // FIXME: we return 3, which means that the return value is useless in face of repeats
+-        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 3);
++        assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
+         log_info("ID: %s NAME: %s", id, name);
+         assert_se(streq(id, "the-id"));
+         assert_se(streq(name, "the-name"));
diff --git a/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch b/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch
new file mode 100644
index 0000000..f97f386
--- /dev/null
+++ b/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch
@@ -0,0 +1,134 @@
+From c892aaa100fa04f877c7bf66e3cce846a7aa834c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 20:26:59 +0100
+Subject: [PATCH] shared/install: also check for self-aliases during
+ installation and ignore them
+
+We had a check that was done in unit_file_resolve_symlink(). Let's move
+the check to unit_validate_alias_symlink_or_warn(), which makes it available
+to the code in install.c.
+
+With this, unit_file_resolve_symlink() behaves almost the same. The warning
+about "suspicious symlink" is done a bit later. I think this should be OK.
+
+(cherry picked from commit f663e6468ff6f667a67fa1a0f9ca5c4962d4c605)
+
+Related: #2082131
+---
+ src/basic/unit-file.c         | 26 ++++++++++----------------
+ src/shared/install.c          |  9 +++++++++
+ test/test-systemctl-enable.sh |  6 ++----
+ 3 files changed, 21 insertions(+), 20 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 105dacc1b2..142ba006f8 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -82,7 +82,8 @@ int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, con
+          *
+          * -EINVAL is returned if the something is wrong with the source filename or the source unit type is
+          *         not allowed to symlink,
+-         * -EXDEV if the target filename is not a valid unit name or doesn't match the source.
++         * -EXDEV if the target filename is not a valid unit name or doesn't match the source,
++         * -ELOOP for an alias to self.
+          */
+ 
+         src = basename(filename);
+@@ -111,6 +112,11 @@ int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, con
+ 
+         /* dst checks */
+ 
++        if (streq(src, dst))
++                return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
++                                       "%s: unit self-alias: %s → %s, ignoring.",
++                                       filename, src, dst);
++
+         dst_name_type = unit_name_to_instance(dst, &dst_instance);
+         if (dst_name_type < 0)
+                 return log_full_errno(log_level, dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type,
+@@ -348,24 +354,12 @@ int unit_file_resolve_symlink(
+                 if (r < 0)
+                         return r;
+ 
+-                bool self_alias = streq(target_name, filename);
+-
+-                if (is_path(tail))
+-                        log_full(self_alias ? LOG_DEBUG : LOG_WARNING,
+-                                 "Suspicious symlink %s/%s→%s, treating as alias.",
+-                                 dir, filename, simplified);
+-
+                 r = unit_validate_alias_symlink_or_warn(LOG_NOTICE, filename, simplified);
+                 if (r < 0)
+                         return r;
+-
+-                if (self_alias && !resolve_destination_target)
+-                        /* A self-alias that has no effect when loading, let's just ignore it. */
+-                        return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
+-                                               "Unit file self-alias: %s/%s → %s, ignoring.",
+-                                               dir, filename, target_name);
+-
+-                log_debug("Unit file alias: %s/%s → %s", dir, filename, target_name);
++                if (is_path(tail))
++                        log_warning("Suspicious symlink %s/%s→%s, treating as alias.",
++                                    dir, filename, simplified);
+ 
+                 dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name);
+         }
+diff --git a/src/shared/install.c b/src/shared/install.c
+index f1a8b7eb9b..459e8a6951 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1702,6 +1702,11 @@ int unit_file_verify_alias(
+          * ret_dst is set in cases where "instance propagation" happens, i.e. when the instance part is
+          * inserted into dst. It is not normally set, even on success, so that the caller can easily
+          * distinguish the case where instance propagation occurred.
++         *
++         * Returns:
++         * -EXDEV when the alias doesn't match the unit,
++         * -EUCLEAN when the name is invalid,
++         * -ELOOP when the alias it to the unit itself.
+          */
+ 
+         const char *path_alias = strrchr(dst, '/');
+@@ -1767,6 +1772,8 @@ int unit_file_verify_alias(
+                 }
+ 
+                 r = unit_validate_alias_symlink_or_warn(LOG_DEBUG, dst_updated ?: dst, info->name);
++                if (r == -ELOOP)  /* -ELOOP means self-alias, which we (quietly) ignore */
++                        return r;
+                 if (r < 0) {
+                         unit_file_changes_add(changes, n_changes,
+                                               r == -EINVAL ? -EXDEV : r,
+@@ -1807,6 +1814,8 @@ static int install_info_symlink_alias(
+                 }
+ 
+                 q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes);
++                if (q == -ELOOP)
++                        continue;
+                 if (q < 0) {
+                         r = r < 0 ? r : q;
+                         continue;
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 32bc6e5ef7..4117436462 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -328,8 +328,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ test ! -e "$root/etc/systemd/system/link4.service"
+ cat >"$root/etc/systemd/system/link4.service" <<EOF
+ [Install]
+-# FIXME: self-alias should be ignored
+-# Alias=link4.service
++Alias=link4.service
+ Alias=link4@.service
+ Alias=link4@inst.service
+ Alias=link4alias.service
+@@ -372,8 +371,7 @@ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ test ! -e "$root/etc/systemd/system/link5.service"
+ cat >"$root/etc/systemd/system/link5.service" <<EOF
+ [Install]
+-# FIXME: self-alias should be ignored
+-# Alias=link5.service
++Alias=link5.service
+ Alias=link5alias.service
+ Alias=link5alias2.service
+ EOF
diff --git a/SOURCES/0179-docs-Correct-WantedBy-regarding-template-units.patch b/SOURCES/0179-docs-Correct-WantedBy-regarding-template-units.patch
new file mode 100644
index 0000000..6297dd8
--- /dev/null
+++ b/SOURCES/0179-docs-Correct-WantedBy-regarding-template-units.patch
@@ -0,0 +1,29 @@
+From 3e2830ddce4474efb403914e910de2943a2a6bd0 Mon Sep 17 00:00:00 2001
+From: Max Gautier <mg@max.gautier.name>
+Date: Sun, 13 Feb 2022 15:16:05 +0100
+Subject: [PATCH] docs: Correct WantedBy= regarding template units
+
+(cherry picked from commit f55fe53ffce351bb55b6190cf36511c37f99d766)
+
+Related: #2082131
+---
+ man/systemd.unit.xml | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 4ba602b5ad..2e6261c1ed 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -1922,9 +1922,9 @@
+         <para><command>WantedBy=foo.service</command> in a service
+         <filename>bar.service</filename> is mostly equivalent to
+         <command>Alias=foo.service.wants/bar.service</command> in the
+-        same file. In case of template units, <command>systemctl
+-        enable</command> must be called with an instance name, and
+-        this instance will be added to the
++        same file. In case of template units listing non template units,
++        <command>systemctl enable</command> must be called with an
++        instance name, and this instance will be added to the
+         <filename>.wants/</filename> or
+         <filename>.requires/</filename> list of the listed unit. E.g.
+         <command>WantedBy=getty.target</command> in a service
diff --git a/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch b/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch
new file mode 100644
index 0000000..2fc62e6
--- /dev/null
+++ b/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch
@@ -0,0 +1,152 @@
+From 842c3bade0b593e5c4eabbe1c18dfab503683cc6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 10 Mar 2022 21:33:25 +0100
+Subject: [PATCH] man: fix invalid description of template handling in
+ WantedBy=
+
+We don't need to talk about Alias=. The approach of using Alias= to enable
+units is still supported, but hasn't been advertised as the way to do thing
+for many years. Using it as an explanation is just confusing.
+
+Also, the description of templated units did not take DefaultInstance=
+into account. It is updated and extended.
+
+(cherry picked from commit 17a2679e9925c9ec3c5764d01def92c5627973e4)
+
+Related: #2082131
+---
+ man/systemd.unit.xml          | 53 +++++++++++++++++------------------
+ test/test-systemctl-enable.sh | 49 ++++++++++++++++++++++++++++++++
+ 2 files changed, 74 insertions(+), 28 deletions(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 2e6261c1ed..caebaecfdc 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -1906,34 +1906,31 @@
+         <term><varname>WantedBy=</varname></term>
+         <term><varname>RequiredBy=</varname></term>
+ 
+-        <listitem><para>This option may be used more than once, or a
+-        space-separated list of unit names may be given. A symbolic
+-        link is created in the <filename>.wants/</filename> or
+-        <filename>.requires/</filename> directory of each of the
+-        listed units when this unit is installed by <command>systemctl
+-        enable</command>. This has the effect that a dependency of
+-        type <varname>Wants=</varname> or <varname>Requires=</varname>
+-        is added from the listed unit to the current unit. The primary
+-        result is that the current unit will be started when the
+-        listed unit is started. See the description of
+-        <varname>Wants=</varname> and <varname>Requires=</varname> in
+-        the [Unit] section for details.</para>
+-
+-        <para><command>WantedBy=foo.service</command> in a service
+-        <filename>bar.service</filename> is mostly equivalent to
+-        <command>Alias=foo.service.wants/bar.service</command> in the
+-        same file. In case of template units listing non template units,
+-        <command>systemctl enable</command> must be called with an
+-        instance name, and this instance will be added to the
+-        <filename>.wants/</filename> or
+-        <filename>.requires/</filename> list of the listed unit. E.g.
+-        <command>WantedBy=getty.target</command> in a service
+-        <filename>getty@.service</filename> will result in
+-        <command>systemctl enable getty@tty2.service</command>
+-        creating a
+-        <filename>getty.target.wants/getty@tty2.service</filename>
+-        link to <filename>getty@.service</filename>.
+-        </para></listitem>
++        <listitem><para>This option may be used more than once, or a space-separated list of unit names may
++        be given. A symbolic link is created in the <filename>.wants/</filename> or
++        <filename>.requires/</filename> directory of each of the listed units when this unit is installed by
++        <command>systemctl enable</command>. This has the effect of a dependency of type
++        <varname>Wants=</varname> or <varname>Requires=</varname> being added from the listed unit to the
++        current unit. The primary result is that the current unit will be started when the listed unit is
++        started, see the description of <varname>Wants=</varname> and <varname>Requires=</varname> in the
++        [Unit] section for details.</para>
++
++        <para>In case of template units listing non template units, the listing unit must have
++        <varname>DefaultInstance=</varname> set, or <command>systemctl enable</command> must be called with
++        an instance name. The instance (default or specified) will be added to the
++        <filename>.wants/</filename> or <filename>.requires/</filename> list of the listed unit. For example,
++        <command>WantedBy=getty.target</command> in a service <filename>getty@.service</filename> will result
++        in <command>systemctl enable getty@tty2.service</command> creating a
++        <filename>getty.target.wants/getty@tty2.service</filename> link to
++        <filename>getty@.service</filename>. This also applies to listing specific instances of templated
++        units: this specific instance will gain the dependency. A template unit may also list a template
++        unit, in which case a generic dependency will be added where each instance of the listing unit will
++        have a dependency on an instance of the listed template with the same instance value. For example,
++        <command>WantedBy=container@.target</command> in a service <filename>monitor@.service</filename> will
++        result in <command>systemctl enable monitor@.service</command> creating a
++        <filename>container@.target.wants/monitor@.service</filename> link to
++        <filename>monitor@.service</filename>, which applies to all instances of
++        <filename>container@.target</filename>.</para></listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 4117436462..3aa61222a8 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -324,6 +324,31 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ 
++: -------template enablement for another template-------------
++cat >"$root/etc/systemd/system/templ2@.service" <<EOF
++[Install]
++RequiredBy=another-template@.target
++EOF
++
++"$systemctl" --root="$root" enable 'templ2@.service'
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++
++"$systemctl" --root="$root" enable 'templ2@two.service'
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
++
++"$systemctl" --root="$root" disable 'templ2@other.service'
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
++
++"$systemctl" --root="$root" disable 'templ2@two.service'
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service"
++
++"$systemctl" --root="$root" disable 'templ2@.service'
++test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@.service"
++test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service"
++
+ : -------aliases w/ and w/o instance--------------------------
+ test ! -e "$root/etc/systemd/system/link4.service"
+ cat >"$root/etc/systemd/system/link4.service" <<EOF
+@@ -529,6 +554,30 @@ check_alias % '%' && { echo "Expected failure because % is not legal in unit nam
+ 
+ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
+ 
++: -------specifiers in WantedBy-------------------------------
++# We don't need to repeat all the tests. Let's do a basic check that specifier
++# expansion is performed.
++
++cat >"$root/etc/systemd/system/some-some-link7.socket" <<EOF
++[Install]
++WantedBy=target@%p.target
++WantedBy=another-target@.target
++RequiredBy=target2@%p.target
++RequiredBy=another-target2@.target
++EOF
++
++"$systemctl" --root="$root" enable 'some-some-link7.socket'
++islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++
++"$systemctl" --root="$root" disable 'some-some-link7.socket'
++test ! -h "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket"
++test ! -h "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket"
++test ! -h "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket"
++test ! -h "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket"
++
+ # TODO: repeat the tests above for presets
+ 
+ : -------SYSTEMD_OS_RELEASE relative to root------------------
diff --git a/SOURCES/0181-shared-install-drop-unnecessary-casts.patch b/SOURCES/0181-shared-install-drop-unnecessary-casts.patch
new file mode 100644
index 0000000..c9db77a
--- /dev/null
+++ b/SOURCES/0181-shared-install-drop-unnecessary-casts.patch
@@ -0,0 +1,62 @@
+From 34c379b77a4bfacb675cb6e5a363317d7dcc9c95 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 2 Mar 2022 17:19:56 +0100
+Subject: [PATCH] shared/install: drop unnecessary casts
+
+The compiler coerces to bool for us, no need to do it explicitly.
+
+(cherry picked from commit d3e85c9c81b1dd55eed2a33e8c25cef38db665f9)
+
+Related: #2082131
+---
+ src/shared/install.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 459e8a6951..f1ee3c2716 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2178,7 +2178,7 @@ int unit_file_mask(
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(&lp, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++                q = create_symlink(&lp, "/dev/null", path, flags & UNIT_FILE_FORCE, changes, n_changes);
+                 if (q < 0 && r >= 0)
+                         r = q;
+         }
+@@ -2199,7 +2199,6 @@ int unit_file_unmask(
+         _cleanup_strv_free_ char **todo = NULL;
+         const char *config_path;
+         size_t n_todo = 0;
+-        bool dry_run;
+         char **i;
+         int r, q;
+ 
+@@ -2214,7 +2213,7 @@ int unit_file_unmask(
+         if (!config_path)
+                 return -ENXIO;
+ 
+-        dry_run = !!(flags & UNIT_FILE_DRY_RUN);
++        bool dry_run = flags & UNIT_FILE_DRY_RUN;
+ 
+         STRV_FOREACH(i, files) {
+                 _cleanup_free_ char *path = NULL;
+@@ -2354,7 +2353,7 @@ int unit_file_link(
+                 if (!new_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(&lp, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
++                q = create_symlink(&lp, *i, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
+                 if (q < 0 && r >= 0)
+                         r = q;
+         }
+@@ -2689,7 +2688,7 @@ int unit_file_disable(
+         if (r < 0)
+                 return r;
+ 
+-        return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
++        return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes);
+ }
+ 
+ int unit_file_reenable(
diff --git a/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch b/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch
new file mode 100644
index 0000000..7679d6c
--- /dev/null
+++ b/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch
@@ -0,0 +1,5179 @@
+From 86eae9a1dade5ba15990196b1459e1394bf0a632 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 16 Mar 2022 22:32:23 +0900
+Subject: [PATCH] strv: make iterator in STRV_FOREACH() declaread in the loop
+
+This also avoids multiple evaluations in STRV_FOREACH_BACKWARDS()
+
+(cherry picked from commit de010b0b2e50cf0b3837ce350b116bc92605f67a)
+
+Related: #2082131
+---
+ src/activate/activate.c                       |  3 --
+ src/analyze/analyze-condition.c               |  2 --
+ src/analyze/analyze-elf.c                     |  1 -
+ src/analyze/analyze-security.c                |  7 +---
+ src/analyze/analyze-verify.c                  |  3 --
+ src/analyze/analyze.c                         | 27 ++------------
+ src/ask-password/ask-password.c               |  1 -
+ src/basic/conf-files.c                        |  9 ++---
+ src/basic/env-file.c                          |  1 -
+ src/basic/env-util.c                          | 19 +++-------
+ src/basic/escape.c                            |  1 -
+ src/basic/fileio.c                            |  2 --
+ src/basic/hashmap.c                           |  1 -
+ src/basic/ordered-set.c                       |  1 -
+ src/basic/os-util.c                           |  1 -
+ src/basic/path-lookup.c                       |  1 -
+ src/basic/path-util.c                         | 20 ++++-------
+ src/basic/process-util.c                      |  1 -
+ src/basic/strv.c                              | 28 ++-------------
+ src/basic/strv.h                              | 35 ++++++++++++-------
+ src/basic/unit-file.c                         |  8 ++---
+ src/binfmt/binfmt.c                           |  1 -
+ src/boot/bless-boot.c                         |  2 --
+ src/boot/bootctl.c                            |  2 --
+ src/busctl/busctl.c                           |  5 +--
+ src/cgls/cgls.c                               |  1 -
+ src/core/bpf-firewall.c                       |  2 --
+ src/core/cgroup.c                             |  1 -
+ src/core/dbus-cgroup.c                        |  2 --
+ src/core/dbus-execute.c                       | 26 +++-----------
+ src/core/dbus-manager.c                       |  1 -
+ src/core/dbus-socket.c                        |  4 +--
+ src/core/dbus-unit.c                          |  5 +--
+ src/core/device.c                             | 16 +++------
+ src/core/execute.c                            | 16 +++------
+ src/core/load-dropin.c                        |  2 --
+ src/core/load-fragment.c                      |  1 -
+ src/core/main.c                               |  1 -
+ src/core/manager.c                            |  1 -
+ src/core/namespace.c                          |  6 ----
+ src/core/service.c                            |  2 --
+ src/core/socket.c                             |  4 ---
+ src/core/transaction.c                        |  3 +-
+ src/core/unit-serialize.c                     |  2 +-
+ src/core/unit.c                               |  6 ----
+ src/coredump/coredumpctl.c                    |  1 -
+ src/creds/creds.c                             |  1 -
+ src/cryptenroll/cryptenroll.c                 |  1 -
+ src/cryptsetup/cryptsetup-keyfile.c           |  1 -
+ src/cryptsetup/cryptsetup.c                   |  4 +--
+ src/debug-generator/debug-generator.c         |  2 --
+ src/delta/delta.c                             |  2 --
+ src/dissect/dissect.c                         |  3 --
+ .../environment-d-generator.c                 |  1 -
+ src/escape/escape.c                           |  1 -
+ src/fstab-generator/fstab-generator.c         |  3 --
+ src/home/homectl.c                            | 11 ++----
+ src/home/homed-manager-bus.c                  |  1 -
+ src/home/homed-manager.c                      |  1 -
+ src/home/homed-varlink.c                      |  6 +---
+ src/home/homework-cifs.c                      |  1 -
+ src/home/homework-fscrypt.c                   |  3 --
+ src/home/homework-luks.c                      |  3 --
+ src/home/homework-pkcs11.c                    |  1 -
+ src/home/homework.c                           | 13 ++-----
+ src/home/user-record-pwquality.c              |  3 +-
+ src/home/user-record-util.c                   |  3 --
+ src/id128/id128.c                             |  1 -
+ src/journal-remote/journal-remote-main.c      |  1 -
+ src/journal-remote/microhttpd-util.c          |  5 ++-
+ src/journal/journalctl.c                      |  5 +--
+ src/libsystemd-network/dhcp-option.c          |  1 -
+ src/libsystemd-network/dhcp6-option.c         |  2 --
+ src/libsystemd-network/sd-dhcp-client.c       |  1 -
+ src/libsystemd-network/sd-dhcp6-client.c      |  2 --
+ src/libsystemd-network/sd-radv.c              |  1 -
+ src/libsystemd/sd-bus/bus-dump.c              |  4 ---
+ src/libsystemd/sd-bus/bus-match.c             |  6 ----
+ src/libsystemd/sd-bus/bus-message.c           |  1 -
+ src/libsystemd/sd-bus/bus-objects.c           |  4 +--
+ src/libsystemd/sd-bus/test-bus-address.c      |  1 -
+ src/libsystemd/sd-device/device-private.c     |  1 -
+ src/libsystemd/sd-journal/catalog.c           |  2 --
+ src/libsystemd/sd-journal/sd-journal.c        |  1 -
+ src/libsystemd/sd-netlink/netlink-message.c   |  1 -
+ src/libsystemd/sd-path/sd-path.c              |  2 +-
+ src/locale/localectl.c                        |  2 --
+ src/locale/localed.c                          |  1 -
+ src/login/loginctl.c                          |  2 --
+ src/login/logind-dbus.c                       |  1 -
+ src/login/pam_systemd.c                       |  1 -
+ src/modules-load/modules-load.c               |  1 -
+ src/network/generator/network-generator.c     |  1 -
+ src/network/netdev/netdev.c                   |  1 -
+ src/network/networkctl.c                      |  1 -
+ src/network/networkd-dhcp-server.c            |  2 --
+ src/network/networkd-json.c                   |  3 +-
+ src/network/networkd-link-bus.c               |  2 --
+ src/network/networkd-link.c                   |  3 --
+ src/network/networkd-ndisc.c                  |  1 -
+ src/network/networkd-network.c                |  1 -
+ src/nspawn/nspawn-bind-user.c                 |  1 -
+ src/nspawn/nspawn-mount.c                     |  4 ---
+ src/nspawn/nspawn-network.c                   |  5 ---
+ src/nspawn/nspawn-oci.c                       |  1 -
+ src/nspawn/nspawn-seccomp.c                   |  1 -
+ src/nspawn/nspawn.c                           |  1 -
+ src/nss-systemd/userdb-glue.c                 |  2 +-
+ src/partition/repart.c                        |  3 --
+ src/portable/portable.c                       |  7 ----
+ src/portable/portablectl.c                    |  2 --
+ src/resolve/resolvectl.c                      |  9 +----
+ src/resolve/resolved-dns-trust-anchor.c       |  1 -
+ src/resolve/resolved-dnssd.c                  |  1 -
+ src/resolve/resolved-etc-hosts.c              |  3 --
+ src/resolve/resolved-link-bus.c               |  1 -
+ src/resolve/resolved-link.c                   |  2 --
+ src/run-generator/run-generator.c             |  1 -
+ src/shared/acl-util.c                         |  1 -
+ src/shared/bootspec.c                         |  4 ---
+ src/shared/bus-polkit.c                       |  1 -
+ src/shared/bus-unit-util.c                    |  3 --
+ src/shared/bus-util.c                         |  2 --
+ src/shared/cgroup-setup.c                     |  1 -
+ src/shared/condition.c                        |  1 -
+ src/shared/conf-parser.c                      |  1 -
+ src/shared/discover-image.c                   |  6 +---
+ src/shared/dissect-image.c                    |  1 -
+ src/shared/dropin.c                           |  1 -
+ src/shared/exec-util.c                        |  4 +--
+ src/shared/format-table.c                     |  1 -
+ src/shared/hwdb-util.c                        |  3 +-
+ src/shared/install.c                          | 28 +++------------
+ src/shared/libcrypt-util.c                    |  1 -
+ src/shared/libfido2-util.c                    |  3 --
+ src/shared/mount-setup.c                      |  3 --
+ src/shared/mount-util.c                       |  1 -
+ src/shared/net-condition.c                    |  4 ---
+ src/shared/nscd-flush.c                       |  1 -
+ src/shared/pkcs11-util.c                      |  2 +-
+ src/shared/pretty-print.c                     |  4 +--
+ src/shared/seccomp-util.c                     |  1 -
+ src/shared/serialize.c                        |  1 -
+ src/shared/tests.c                            |  1 -
+ src/shared/user-record-show.c                 | 13 ++-----
+ src/sleep/sleep.c                             |  2 --
+ src/sysctl/sysctl.c                           |  4 ---
+ src/sysext/sysext.c                           |  6 ----
+ src/systemctl/systemctl-cancel-job.c          |  1 -
+ src/systemctl/systemctl-clean-or-freeze.c     |  1 -
+ src/systemctl/systemctl-edit.c                |  6 +---
+ src/systemctl/systemctl-enable.c              |  3 --
+ src/systemctl/systemctl-is-active.c           |  1 -
+ src/systemctl/systemctl-is-enabled.c          |  1 -
+ src/systemctl/systemctl-kill.c                |  2 +-
+ src/systemctl/systemctl-list-dependencies.c   |  3 +-
+ src/systemctl/systemctl-list-machines.c       |  1 -
+ src/systemctl/systemctl-list-units.c          |  1 -
+ src/systemctl/systemctl-logind.c              |  2 --
+ src/systemctl/systemctl-reset-failed.c        |  1 -
+ src/systemctl/systemctl-set-environment.c     |  3 --
+ src/systemctl/systemctl-set-property.c        |  1 -
+ src/systemctl/systemctl-show.c                |  7 ----
+ src/systemctl/systemctl-start-unit.c          |  6 +---
+ src/systemctl/systemctl-util.c                |  7 +---
+ src/sysusers/sysusers.c                       |  6 ----
+ src/sysv-generator/sysv-generator.c           |  3 --
+ src/test/test-bpf-foreign-programs.c          |  2 --
+ src/test/test-bpf-lsm.c                       |  1 -
+ src/test/test-copy.c                          |  1 -
+ src/test/test-env-util.c                      |  1 -
+ src/test/test-exec-util.c                     |  4 +--
+ src/test/test-execute.c                       |  2 --
+ src/test/test-fileio.c                        |  5 ---
+ src/test/test-fs-util.c                       |  1 -
+ src/test/test-kbd-util.c                      |  1 -
+ src/test/test-locale-util.c                   |  2 --
+ src/test/test-nss-hosts.c                     |  5 ---
+ src/test/test-nss-users.c                     |  2 --
+ src/test/test-path-lookup.c                   |  3 +-
+ src/test/test-path-util.c                     |  1 -
+ src/test/test-path.c                          |  1 -
+ src/test/test-sd-path.c                       |  1 -
+ src/test/test-socket-bind.c                   |  3 +-
+ src/test/test-string-util.c                   |  1 -
+ src/test/test-strv.c                          |  5 ---
+ src/test/test-sysctl-util.c                   |  1 -
+ src/test/test-time-util.c                     |  1 -
+ src/test/test-unit-file.c                     |  1 -
+ src/timedate/timedated.c                      |  1 -
+ src/timesync/timesyncd-manager.c              |  1 -
+ src/tmpfiles/tmpfiles.c                       | 14 ++------
+ .../tty-ask-password-agent.c                  |  5 +--
+ src/udev/net/link-config.c                    |  2 --
+ src/udev/udev-event.c                         |  1 -
+ src/udev/udev-rules.c                         |  4 +--
+ src/udev/udevadm-info.c                       |  1 -
+ src/userdb/userdbctl.c                        | 24 ++++---------
+ .../xdg-autostart-condition.c                 |  1 -
+ .../xdg-autostart-generator.c                 |  1 -
+ 200 files changed, 110 insertions(+), 611 deletions(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index b625d97f2e..8ee7a3ec60 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -49,7 +49,6 @@ static int add_epoll(int epoll_fd, int fd) {
+ }
+ 
+ static int open_sockets(int *epoll_fd, bool accept) {
+-        char **address;
+         int n, fd, r, count = 0;
+ 
+         n = sd_listen_fds(true);
+@@ -124,7 +123,6 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ 
+ static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) {
+         _cleanup_strv_free_ char **envp = NULL;
+-        char **s;
+         int r;
+ 
+         if (arg_inetd && n_fds != 1)
+@@ -389,7 +387,6 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+                 case ARG_FDNAME: {
+                         _cleanup_strv_free_ char **names = NULL;
+-                        char **s;
+ 
+                         names = strv_split(optarg, ":");
+                         if (!names)
+diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c
+index f57bb27b9a..a7ad085f46 100644
+--- a/src/analyze/analyze-condition.c
++++ b/src/analyze/analyze-condition.c
+@@ -113,8 +113,6 @@ int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const
+                 if (r < 0)
+                         return r;
+         } else {
+-                char **line;
+-
+                 r = unit_new_for_name(m, sizeof(Service), "test.service", &u);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to create test.service: %m");
+diff --git a/src/analyze/analyze-elf.c b/src/analyze/analyze-elf.c
+index 741cd20f99..a0aa97da69 100644
+--- a/src/analyze/analyze-elf.c
++++ b/src/analyze/analyze-elf.c
+@@ -11,7 +11,6 @@
+ #include "strv.h"
+ 
+ int analyze_elf(char **filenames, JsonFormatFlags json_flags) {
+-        char **filename;
+         int r;
+ 
+         STRV_FOREACH(filename, filenames) {
+diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
+index 2691dc2c86..d8ccbf8c54 100644
+--- a/src/analyze/analyze-security.c
++++ b/src/analyze/analyze-security.c
+@@ -2663,7 +2663,6 @@ static int offline_security_checks(char **filenames,
+         _cleanup_free_ char *var = NULL;
+         int r, k;
+         size_t count = 0;
+-        char **filename;
+ 
+         if (strv_isempty(filenames))
+                 return 0;
+@@ -2786,7 +2785,6 @@ int analyze_security(sd_bus *bus,
+                 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+                 _cleanup_strv_free_ char **list = NULL;
+                 size_t n = 0;
+-                char **i;
+ 
+                 r = sd_bus_call_method(
+                                 bus,
+@@ -2838,9 +2836,7 @@ int analyze_security(sd_bus *bus,
+                                 ret = r;
+                 }
+ 
+-        } else {
+-                char **i;
+-
++        } else
+                 STRV_FOREACH(i, units) {
+                         _cleanup_free_ char *mangled = NULL, *instance = NULL;
+                         const char *name;
+@@ -2872,7 +2868,6 @@ int analyze_security(sd_bus *bus,
+                         if (r < 0 && ret >= 0)
+                                 ret = r;
+                 }
+-        }
+ 
+         if (overview_table) {
+                 if (!FLAGS_SET(flags, ANALYZE_SECURITY_SHORT)) {
+diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c
+index 943a1f27de..39eb5cf93b 100644
+--- a/src/analyze/analyze-verify.c
++++ b/src/analyze/analyze-verify.c
+@@ -75,7 +75,6 @@ int verify_prepare_filename(const char *filename, char **ret) {
+ 
+ int verify_generate_path(char **var, char **filenames) {
+         const char *old;
+-        char **filename;
+ 
+         _cleanup_strv_free_ char **ans = NULL;
+         int r;
+@@ -184,7 +183,6 @@ static int verify_executables(Unit *u, const char *root) {
+ }
+ 
+ static int verify_documentation(Unit *u, bool check_man) {
+-        char **p;
+         int r = 0, k;
+ 
+         STRV_FOREACH(p, u->documentation) {
+@@ -258,7 +256,6 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run
+         Unit *units[strv_length(filenames)];
+         _cleanup_free_ char *var = NULL;
+         int r, k, i, count = 0;
+-        char **filename;
+ 
+         if (strv_isempty(filenames))
+                 return 0;
+diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
+index a1908ff442..846acf31d3 100644
+--- a/src/analyze/analyze.c
++++ b/src/analyze/analyze.c
+@@ -239,7 +239,6 @@ static int compare_unit_start(const UnitTimes *a, const UnitTimes *b) {
+ 
+ static int process_aliases(char *argv[], char *tempdir, char ***ret) {
+         _cleanup_strv_free_ char **filenames = NULL;
+-        char **filename;
+         int r;
+ 
+         assert(argv);
+@@ -961,7 +960,6 @@ static bool times_in_range(const UnitTimes *times, const BootTimes *boot) {
+ 
+ static int list_dependencies_one(sd_bus *bus, const char *name, unsigned level, char ***units, unsigned branches) {
+         _cleanup_strv_free_ char **deps = NULL;
+-        char **c;
+         int r;
+         usec_t service_longest = 0;
+         int to_print = 0;
+@@ -1111,7 +1109,6 @@ static int analyze_critical_chain(int argc, char *argv[], void *userdata) {
+              "The time the unit took to start is printed after the \"+\" character.\n");
+ 
+         if (argc > 1) {
+-                char **name;
+                 STRV_FOREACH(name, strv_skip(argv, 1))
+                         list_dependencies(bus, *name);
+         } else
+@@ -1207,7 +1204,6 @@ static int graph_one_property(
+                 char *to_patterns[]) {
+ 
+         _cleanup_strv_free_ char **units = NULL;
+-        char **unit;
+         int r;
+         bool match_patterns;
+ 
+@@ -1273,7 +1269,6 @@ static int graph_one(sd_bus *bus, const UnitInfo *u, char *patterns[], char *fro
+ 
+ static int expand_patterns(sd_bus *bus, char **patterns, char ***ret) {
+         _cleanup_strv_free_ char **expanded_patterns = NULL;
+-        char **pattern;
+         int r;
+ 
+         STRV_FOREACH(pattern, patterns) {
+@@ -1427,7 +1422,7 @@ static int dump(int argc, char *argv[], void *userdata) {
+ }
+ 
+ static int cat_config(int argc, char *argv[], void *userdata) {
+-        char **arg, **list;
++        char **list;
+         int r;
+ 
+         pager_open(arg_pager_flags);
+@@ -1476,7 +1471,6 @@ static int verb_log_control(int argc, char *argv[], void *userdata) {
+ }
+ 
+ static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
+-        char **s;
+         STRV_FOREACH(s, strv)
+                 if (strv_fnmatch_or_empty(patterns, *s, flags))
+                         return true;
+@@ -1524,7 +1518,6 @@ static int do_unit_files(int argc, char *argv[], void *userdata) {
+ static int dump_unit_paths(int argc, char *argv[], void *userdata) {
+         _cleanup_(lookup_paths_free) LookupPaths paths = {};
+         int r;
+-        char **p;
+ 
+         r = lookup_paths_init(&paths, arg_scope, 0, NULL);
+         if (r < 0)
+@@ -1737,7 +1730,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
+ 
+                 if (!set_isempty(known)) {
+                         _cleanup_free_ char **l = NULL;
+-                        char **syscall;
+ 
+                         printf("\n"
+                                "# %sUngrouped System Calls%s (known but not included in any of the groups except @known):\n",
+@@ -1760,7 +1752,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
+                                 log_notice_errno(k, "# Not showing unlisted system calls, couldn't retrieve kernel system call list: %m");
+                 } else if (!set_isempty(kernel)) {
+                         _cleanup_free_ char **l = NULL;
+-                        char **syscall;
+ 
+                         printf("\n"
+                                "# %sUnlisted System Calls%s (supported by the local kernel, but not included in any of the groups listed above):\n",
+@@ -1775,9 +1766,7 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
+                         STRV_FOREACH(syscall, l)
+                                 printf("#   %s\n", *syscall);
+                 }
+-        } else {
+-                char **name;
+-
++        } else
+                 STRV_FOREACH(name, strv_skip(argv, 1)) {
+                         const SyscallFilterSet *set;
+ 
+@@ -1796,7 +1785,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
+                         dump_syscall_filter(set);
+                         first = false;
+                 }
+-        }
+ 
+         return 0;
+ }
+@@ -1944,7 +1932,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
+ 
+                 if (!set_isempty(known)) {
+                         _cleanup_free_ char **l = NULL;
+-                        char **filesystem;
+ 
+                         printf("\n"
+                                "# %sUngrouped filesystems%s (known but not included in any of the groups except @known):\n",
+@@ -1987,7 +1974,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
+                         log_notice_errno(k, "# Not showing unlisted filesystems, couldn't retrieve kernel filesystem list: %m");
+                 } else if (!set_isempty(kernel)) {
+                         _cleanup_free_ char **l = NULL;
+-                        char **filesystem;
+ 
+                         printf("\n"
+                                "# %sUnlisted filesystems%s (available to the local kernel, but not included in any of the groups listed above):\n",
+@@ -2002,9 +1988,7 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
+                         STRV_FOREACH(filesystem, l)
+                                 printf("#   %s\n", *filesystem);
+                 }
+-        } else {
+-                char **name;
+-
++        } else
+                 STRV_FOREACH(name, strv_skip(argv, 1)) {
+                         const FilesystemSet *set;
+ 
+@@ -2023,7 +2007,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
+                         dump_filesystem_set(set);
+                         first = false;
+                 }
+-        }
+ 
+         return 0;
+ }
+@@ -2041,8 +2024,6 @@ static void parsing_hint(const char *p, bool calendar, bool timestamp, bool time
+ }
+ 
+ static int dump_timespan(int argc, char *argv[], void *userdata) {
+-        char **input_timespan;
+-
+         STRV_FOREACH(input_timespan, strv_skip(argv, 1)) {
+                 _cleanup_(table_unrefp) Table *table = NULL;
+                 usec_t output_usecs;
+@@ -2180,7 +2161,6 @@ static int test_timestamp_one(const char *p) {
+ 
+ static int test_timestamp(int argc, char *argv[], void *userdata) {
+         int ret = 0, r;
+-        char **p;
+ 
+         STRV_FOREACH(p, strv_skip(argv, 1)) {
+                 r = test_timestamp_one(*p);
+@@ -2312,7 +2292,6 @@ static int test_calendar_one(usec_t n, const char *p) {
+ 
+ static int test_calendar(int argc, char *argv[], void *userdata) {
+         int ret = 0, r;
+-        char **p;
+         usec_t n;
+ 
+         if (arg_base_time != USEC_INFINITY)
+diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c
+index a100679af2..093533182f 100644
+--- a/src/ask-password/ask-password.c
++++ b/src/ask-password/ask-password.c
+@@ -223,7 +223,6 @@ static int parse_argv(int argc, char *argv[]) {
+ static int run(int argc, char *argv[]) {
+         _cleanup_strv_free_erase_ char **l = NULL;
+         usec_t timeout;
+-        char **p;
+         int r;
+ 
+         log_show_color(true);
+diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c
+index 287428b561..82c6dc5677 100644
+--- a/src/basic/conf-files.c
++++ b/src/basic/conf-files.c
+@@ -145,7 +145,7 @@ static int conf_files_list_strv_internal(
+ 
+         _cleanup_hashmap_free_ Hashmap *fh = NULL;
+         _cleanup_set_free_free_ Set *masked = NULL;
+-        char **files, **p;
++        char **files;
+         int r;
+ 
+         assert(ret);
+@@ -202,11 +202,8 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
+                 int c;
+ 
+                 c = base_cmp((char* const*) *strv + i, (char* const*) &path);
+-                if (c == 0) {
+-                        char **dir;
+-
++                if (c == 0)
+                         /* Oh, there already is an entry with a matching name (the last component). */
+-
+                         STRV_FOREACH(dir, dirs) {
+                                 _cleanup_free_ char *rdir = NULL;
+                                 char *p1, *p2;
+@@ -233,7 +230,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
+                                 }
+                         }
+ 
+-                } else if (c > 0)
++                else if (c > 0)
+                         /* Following files have lower priority, let's go insert our
+                          * new entry. */
+                         break;
+diff --git a/src/basic/env-file.c b/src/basic/env-file.c
+index 0e272da083..b46a679e06 100644
+--- a/src/basic/env-file.c
++++ b/src/basic/env-file.c
+@@ -520,7 +520,6 @@ static void write_env_var(FILE *f, const char *v) {
+ int write_env_file(const char *fname, char **l) {
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_free_ char *p = NULL;
+-        char **i;
+         int r;
+ 
+         assert(fname);
+diff --git a/src/basic/env-util.c b/src/basic/env-util.c
+index 885967e7f3..455f5d76f5 100644
+--- a/src/basic/env-util.c
++++ b/src/basic/env-util.c
+@@ -96,8 +96,6 @@ bool env_assignment_is_valid(const char *e) {
+ }
+ 
+ bool strv_env_is_valid(char **e) {
+-        char **p, **q;
+-
+         STRV_FOREACH(p, e) {
+                 size_t k;
+ 
+@@ -115,8 +113,6 @@ bool strv_env_is_valid(char **e) {
+ }
+ 
+ bool strv_env_name_is_valid(char **l) {
+-        char **p;
+-
+         STRV_FOREACH(p, l) {
+                 if (!env_name_is_valid(*p))
+                         return false;
+@@ -129,8 +125,6 @@ bool strv_env_name_is_valid(char **l) {
+ }
+ 
+ bool strv_env_name_or_assignment_is_valid(char **l) {
+-        char **p;
+-
+         STRV_FOREACH(p, l) {
+                 if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p))
+                         return false;
+@@ -272,7 +266,7 @@ static bool env_entry_has_name(const char *entry, const char *name) {
+ 
+ char **strv_env_delete(char **x, size_t n_lists, ...) {
+         size_t n, i = 0;
+-        char **k, **r;
++        char **r;
+         va_list ap;
+ 
+         /* Deletes every entry from x that is mentioned in the other
+@@ -287,7 +281,7 @@ char **strv_env_delete(char **x, size_t n_lists, ...) {
+         STRV_FOREACH(k, x) {
+                 va_start(ap, n_lists);
+                 for (size_t v = 0; v < n_lists; v++) {
+-                        char **l, **j;
++                        char **l;
+ 
+                         l = va_arg(ap, char**);
+                         STRV_FOREACH(j, l)
+@@ -379,7 +373,6 @@ char **strv_env_unset_many(char **l, ...) {
+ 
+ int strv_env_replace_consume(char ***l, char *p) {
+         const char *t, *name;
+-        char **f;
+         int r;
+ 
+         assert(p);
+@@ -467,8 +460,6 @@ int strv_env_assign(char ***l, const char *key, const char *value) {
+ }
+ 
+ char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) {
+-        char **i;
+-
+         assert(name);
+ 
+         if (k <= 0)
+@@ -496,7 +487,7 @@ char *strv_env_get(char **l, const char *name) {
+ }
+ 
+ char *strv_env_pairs_get(char **l, const char *name) {
+-        char **key, **value, *result = NULL;
++        char *result = NULL;
+ 
+         assert(name);
+ 
+@@ -508,7 +499,6 @@ char *strv_env_pairs_get(char **l, const char *name) {
+ }
+ 
+ char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) {
+-        char **p, **q;
+         int k = 0;
+ 
+         STRV_FOREACH(p, e) {
+@@ -702,7 +692,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) {
+ }
+ 
+ char **replace_env_argv(char **argv, char **env) {
+-        char **ret, **i;
++        char **ret;
+         size_t k = 0, l = 0;
+ 
+         l = strv_length(argv);
+@@ -832,7 +822,6 @@ int setenv_systemd_exec_pid(bool update_only) {
+ int getenv_path_list(const char *name, char ***ret_paths) {
+         _cleanup_strv_free_ char **l = NULL;
+         const char *e;
+-        char **p;
+         int r;
+ 
+         assert(name);
+diff --git a/src/basic/escape.c b/src/basic/escape.c
+index ce57fcc762..1cb7ced545 100644
+--- a/src/basic/escape.c
++++ b/src/basic/escape.c
+@@ -549,7 +549,6 @@ char* quote_command_line(char **argv, ShellEscapeFlags flags) {
+ 
+         assert(argv);
+ 
+-        char **a;
+         STRV_FOREACH(a, argv) {
+                 _cleanup_free_ char *t = NULL;
+ 
+diff --git a/src/basic/fileio.c b/src/basic/fileio.c
+index 8d92da327e..d9b988d117 100644
+--- a/src/basic/fileio.c
++++ b/src/basic/fileio.c
+@@ -1042,8 +1042,6 @@ static int search_and_fopen_internal(
+                 FILE **ret,
+                 char **ret_path) {
+ 
+-        char **i;
+-
+         assert(path);
+         assert(mode);
+         assert(ret);
+diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
+index b51d70bc87..bd7a6b0d6e 100644
+--- a/src/basic/hashmap.c
++++ b/src/basic/hashmap.c
+@@ -1864,7 +1864,6 @@ int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p
+ 
+ int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l  HASHMAP_DEBUG_PARAMS) {
+         int n = 0, r;
+-        char **i;
+ 
+         assert(s);
+ 
+diff --git a/src/basic/ordered-set.c b/src/basic/ordered-set.c
+index 0a76f04561..b4c2588395 100644
+--- a/src/basic/ordered-set.c
++++ b/src/basic/ordered-set.c
+@@ -58,7 +58,6 @@ int _ordered_set_put_strdup(OrderedSet **s, const char *p  HASHMAP_DEBUG_PARAMS)
+ 
+ int _ordered_set_put_strdupv(OrderedSet **s, char **l  HASHMAP_DEBUG_PARAMS) {
+         int n = 0, r;
+-        char **i;
+ 
+         STRV_FOREACH(i, l) {
+                 r = _ordered_set_put_strdup(s, *i  HASHMAP_DEBUG_PASS_ARGS);
+diff --git a/src/basic/os-util.c b/src/basic/os-util.c
+index 38b2179e48..acfff24319 100644
+--- a/src/basic/os-util.c
++++ b/src/basic/os-util.c
+@@ -277,7 +277,6 @@ int load_os_release_pairs(const char *root, char ***ret) {
+ 
+ int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret) {
+         _cleanup_strv_free_ char **os_release_pairs = NULL, **os_release_pairs_prefixed = NULL;
+-        char **p, **q;
+         int r;
+ 
+         r = load_os_release_pairs(root, &os_release_pairs);
+diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
+index ab51955e34..b699756658 100644
+--- a/src/basic/path-lookup.c
++++ b/src/basic/path-lookup.c
+@@ -463,7 +463,6 @@ static int patch_root_prefix(char **p, const char *root_dir) {
+ }
+ 
+ static int patch_root_prefix_strv(char **l, const char *root_dir) {
+-        char **i;
+         int r;
+ 
+         if (!root_dir)
+diff --git a/src/basic/path-util.c b/src/basic/path-util.c
+index 4c952d863c..76af40aaf2 100644
+--- a/src/basic/path-util.c
++++ b/src/basic/path-util.c
+@@ -202,9 +202,9 @@ int path_make_relative(const char *from, const char *to, char **ret) {
+ }
+ 
+ char* path_startswith_strv(const char *p, char **set) {
+-        char **s, *t;
+-
+         STRV_FOREACH(s, set) {
++                char *t;
++
+                 t = path_startswith(p, *s);
+                 if (t)
+                         return t;
+@@ -214,7 +214,6 @@ char* path_startswith_strv(const char *p, char **set) {
+ }
+ 
+ int path_strv_make_absolute_cwd(char **l) {
+-        char **s;
+         int r;
+ 
+         /* Goes through every item in the string list and makes it
+@@ -236,7 +235,6 @@ int path_strv_make_absolute_cwd(char **l) {
+ }
+ 
+ char **path_strv_resolve(char **l, const char *root) {
+-        char **s;
+         unsigned k = 0;
+         bool enomem = false;
+         int r;
+@@ -700,12 +698,12 @@ int find_executable_full(const char *name, const char *root, char **exec_search_
+                 p = DEFAULT_PATH;
+ 
+         if (exec_search_path) {
+-                char **element;
+-
+                 STRV_FOREACH(element, exec_search_path) {
+                         _cleanup_free_ char *full_path = NULL;
++
+                         if (!path_is_absolute(*element))
+                                 continue;
++
+                         full_path = path_join(*element, name);
+                         if (!full_path)
+                                 return -ENOMEM;
+@@ -754,7 +752,6 @@ int find_executable_full(const char *name, const char *root, char **exec_search_
+ 
+ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
+         bool changed = false, originally_unset;
+-        const char* const* i;
+ 
+         assert(timestamp);
+ 
+@@ -1339,7 +1336,7 @@ int systemd_installation_has_version(const char *root, unsigned minimal_version)
+ 
+                 _cleanup_strv_free_ char **names = NULL;
+                 _cleanup_free_ char *path = NULL;
+-                char *c, **name;
++                char *c;
+ 
+                 path = path_join(root, pattern);
+                 if (!path)
+@@ -1411,8 +1408,6 @@ bool empty_or_root(const char *path) {
+ }
+ 
+ bool path_strv_contains(char **l, const char *path) {
+-        char **i;
+-
+         STRV_FOREACH(i, l)
+                 if (path_equal(*i, path))
+                         return true;
+@@ -1421,10 +1416,9 @@ bool path_strv_contains(char **l, const char *path) {
+ }
+ 
+ bool prefixed_path_strv_contains(char **l, const char *path) {
+-        char **i, *j;
+-
+         STRV_FOREACH(i, l) {
+-                j = *i;
++                const char *j = *i;
++
+                 if (*j == '-')
+                         j++;
+                 if (*j == '+')
+diff --git a/src/basic/process-util.c b/src/basic/process-util.c
+index c971852158..c09d7d0321 100644
+--- a/src/basic/process-util.c
++++ b/src/basic/process-util.c
+@@ -214,7 +214,6 @@ int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags
+                 assert(!(flags & PROCESS_CMDLINE_USE_LOCALE));
+ 
+                 _cleanup_strv_free_ char **args = NULL;
+-                char **p;
+ 
+                 args = strv_parse_nulstr(t, k);
+                 if (!args)
+diff --git a/src/basic/strv.c b/src/basic/strv.c
+index 2ba5a94839..d195606fff 100644
+--- a/src/basic/strv.c
++++ b/src/basic/strv.c
+@@ -17,8 +17,6 @@
+ #include "strv.h"
+ 
+ char* strv_find(char * const *l, const char *name) {
+-        char * const *i;
+-
+         assert(name);
+ 
+         STRV_FOREACH(i, l)
+@@ -29,8 +27,6 @@ char* strv_find(char * const *l, const char *name) {
+ }
+ 
+ char* strv_find_case(char * const *l, const char *name) {
+-        char * const *i;
+-
+         assert(name);
+ 
+         STRV_FOREACH(i, l)
+@@ -41,8 +37,6 @@ char* strv_find_case(char * const *l, const char *name) {
+ }
+ 
+ char* strv_find_prefix(char * const *l, const char *name) {
+-        char * const *i;
+-
+         assert(name);
+ 
+         STRV_FOREACH(i, l)
+@@ -53,14 +47,14 @@ char* strv_find_prefix(char * const *l, const char *name) {
+ }
+ 
+ char* strv_find_startswith(char * const *l, const char *name) {
+-        char * const *i, *e;
+-
+         assert(name);
+ 
+         /* Like strv_find_prefix, but actually returns only the
+          * suffix, not the whole item */
+ 
+         STRV_FOREACH(i, l) {
++                char *e;
++
+                 e = startswith(*i, name);
+                 if (e)
+                         return e;
+@@ -80,8 +74,6 @@ char** strv_free(char **l) {
+ }
+ 
+ char** strv_free_erase(char **l) {
+-        char **i;
+-
+         STRV_FOREACH(i, l)
+                 erase_and_freep(i);
+ 
+@@ -171,8 +163,8 @@ char** strv_new_internal(const char *x, ...) {
+ }
+ 
+ int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) {
+-        char * const *s, **t;
+         size_t p, q, i = 0;
++        char **t;
+ 
+         assert(a);
+ 
+@@ -217,7 +209,6 @@ rollback:
+ }
+ 
+ int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix) {
+-        char * const *s;
+         int r;
+ 
+         STRV_FOREACH(s, b) {
+@@ -367,7 +358,6 @@ int strv_split_colon_pairs(char ***t, const char *s) {
+ }
+ 
+ char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) {
+-        char * const *s;
+         char *r, *e;
+         size_t n, k, m;
+ 
+@@ -595,8 +585,6 @@ int strv_extend_front(char ***l, const char *value) {
+ }
+ 
+ char** strv_uniq(char **l) {
+-        char **i;
+-
+         /* Drops duplicate entries. The first identical string will be
+          * kept, the others dropped */
+ 
+@@ -607,8 +595,6 @@ char** strv_uniq(char **l) {
+ }
+ 
+ bool strv_is_uniq(char * const *l) {
+-        char * const *i;
+-
+         STRV_FOREACH(i, l)
+                 if (strv_find(i+1, *i))
+                         return false;
+@@ -717,7 +703,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
+          */
+ 
+         _cleanup_free_ char *m = NULL;
+-        char * const *i;
+         size_t n = 0;
+ 
+         assert(ret);
+@@ -754,8 +739,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
+ }
+ 
+ bool strv_overlap(char * const *a, char * const *b) {
+-        char * const *i;
+-
+         STRV_FOREACH(i, a)
+                 if (strv_contains(b, *i))
+                         return true;
+@@ -795,8 +778,6 @@ int strv_compare(char * const *a, char * const *b) {
+ }
+ 
+ void strv_print(char * const *l) {
+-        char * const *s;
+-
+         STRV_FOREACH(s, l)
+                 puts(*s);
+ }
+@@ -830,8 +811,6 @@ char** strv_reverse(char **l) {
+ }
+ 
+ char** strv_shell_escape(char **l, const char *bad) {
+-        char **s;
+-
+         /* Escapes every character in every string in l that is in bad,
+          * edits in-place, does not roll-back on error. */
+ 
+@@ -914,7 +893,6 @@ rollback:
+ 
+ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
+         bool b = false;
+-        char * const *s;
+         int r;
+ 
+         /* Like fputs(), but for strv, and with a less stupid argument order */
+diff --git a/src/basic/strv.h b/src/basic/strv.h
+index 27d4450468..3acf0a48f3 100644
+--- a/src/basic/strv.h
++++ b/src/basic/strv.h
+@@ -122,19 +122,30 @@ static inline int strv_from_nulstr(char ***a, const char *nulstr) {
+ 
+ bool strv_overlap(char * const *a, char * const *b) _pure_;
+ 
++#define _STRV_FOREACH(s, l, i)                                          \
++        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
++
+ #define STRV_FOREACH(s, l)                      \
+-        for ((s) = (l); (s) && *(s); (s)++)
++        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
++
++#define _STRV_FOREACH_BACKWARDS(s, l, h, i)                             \
++        for (typeof(*(l)) *s, *h = (l), *i = ({                         \
++                                size_t _len = strv_length(h);           \
++                                _len > 0 ? h + _len - 1 : NULL;         \
++                        });                                             \
++             i && (s = i) >= h;                                         \
++             i--)
++
++#define STRV_FOREACH_BACKWARDS(s, l)                                    \
++        _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ))
+ 
+-#define STRV_FOREACH_BACKWARDS(s, l)                                \
+-        for (s = ({                                                 \
+-                        typeof(l) _l = l;                           \
+-                        _l ? _l + strv_length(_l) - 1U : NULL;      \
+-                        });                                         \
+-             (l) && ((s) >= (l));                                   \
+-             (s)--)
++#define _STRV_FOREACH_PAIR(x, y, l, i)                          \
++        for (typeof(*l) *x, *y, *i = (l);                       \
++             i && *(x = i) && *(y = i + 1);                     \
++             i += 2)
+ 
+-#define STRV_FOREACH_PAIR(x, y, l)               \
+-        for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
++#define STRV_FOREACH_PAIR(x, y, l)                      \
++        _STRV_FOREACH_PAIR(x, y, l, UNIQ_T(i, UNIQ))
+ 
+ char** strv_sort(char **l);
+ void strv_print(char * const *l);
+@@ -185,7 +196,7 @@ void strv_print(char * const *l);
+ #define STARTSWITH_SET(p, ...)                                  \
+         ({                                                      \
+                 const char *_p = (p);                           \
+-                char  *_found = NULL, **_i;                     \
++                char *_found = NULL;                            \
+                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
+                         _found = startswith(_p, *_i);           \
+                         if (_found)                             \
+@@ -197,7 +208,7 @@ void strv_print(char * const *l);
+ #define ENDSWITH_SET(p, ...)                                    \
+         ({                                                      \
+                 const char *_p = (p);                           \
+-                char  *_found = NULL, **_i;                     \
++                char *_found = NULL;                            \
+                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
+                         _found = endswith(_p, *_i);             \
+                         if (_found)                             \
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 142ba006f8..6cf66b45cf 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -215,8 +215,7 @@ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_
+ 
+         siphash24_init(&state, HASH_KEY.bytes);
+ 
+-        char **dir;
+-        STRV_FOREACH(dir, (char**) lp->search_path) {
++        STRV_FOREACH(dir, lp->search_path) {
+                 struct stat st;
+ 
+                 if (lookup_paths_mtime_exclude(lp, *dir))
+@@ -388,7 +387,6 @@ int unit_file_build_name_map(
+         _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL;
+         _cleanup_set_free_free_ Set *paths = NULL;
+         uint64_t timestamp_hash;
+-        char **dir;
+         int r;
+ 
+         /* Before doing anything, check if the timestamp hash that was passed is still valid.
+@@ -406,7 +404,7 @@ int unit_file_build_name_map(
+                         return log_oom();
+         }
+ 
+-        STRV_FOREACH(dir, (char**) lp->search_path) {
++        STRV_FOREACH(dir, lp->search_path) {
+                 _cleanup_closedir_ DIR *d = NULL;
+ 
+                 d = opendir(*dir);
+@@ -614,7 +612,7 @@ static int add_names(
+                 Set **names,
+                 const char *name) {
+ 
+-        char **aliases, **alias;
++        char **aliases;
+         int r;
+ 
+         assert(name_type == UNIT_NAME_PLAIN || instance);
+diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
+index 18231c2618..817ee387ff 100644
+--- a/src/binfmt/binfmt.c
++++ b/src/binfmt/binfmt.c
+@@ -213,7 +213,6 @@ static int run(int argc, char *argv[]) {
+                 }
+         else {
+                 _cleanup_strv_free_ char **files = NULL;
+-                char **f;
+ 
+                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("binfmt.d"));
+                 if (r < 0)
+diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c
+index 9e4b0d1f72..49009cb1eb 100644
+--- a/src/boot/bless-boot.c
++++ b/src/boot/bless-boot.c
+@@ -320,7 +320,6 @@ static const char *skip_slash(const char *path) {
+ static int verb_status(int argc, char *argv[], void *userdata) {
+         _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL;
+         uint64_t left, done;
+-        char **p;
+         int r;
+ 
+         r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix);
+@@ -397,7 +396,6 @@ static int verb_set(int argc, char *argv[], void *userdata) {
+         _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL, *parent = NULL;
+         const char *target, *source1, *source2;
+         uint64_t done;
+-        char **p;
+         int r;
+ 
+         r = acquire_boot_count_path(&path, &prefix, NULL, &done, &suffix);
+diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
+index 9427a0e4ce..c1adae4962 100644
+--- a/src/boot/bootctl.c
++++ b/src/boot/bootctl.c
+@@ -440,7 +440,6 @@ static int boot_entry_show(const BootEntry *e, bool show_as_default) {
+         if (e->kernel)
+                 boot_entry_file_list("linux", e->root, e->kernel, &status);
+ 
+-        char **s;
+         STRV_FOREACH(s, e->initrd)
+                 boot_entry_file_list(s == e->initrd ? "initrd" : NULL,
+                                      e->root,
+@@ -669,7 +668,6 @@ static const char *const dollar_boot_subdirs[] = {
+ };
+ 
+ static int create_subdirs(const char *root, const char * const *subdirs) {
+-        const char *const *i;
+         int r;
+ 
+         STRV_FOREACH(i, subdirs) {
+diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
+index c0c9b23ae9..fd646784b9 100644
+--- a/src/busctl/busctl.c
++++ b/src/busctl/busctl.c
+@@ -141,7 +141,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_hashmap_free_ Hashmap *names = NULL;
+         _cleanup_(table_unrefp) Table *table = NULL;
+-        char **i, *k;
++        char *k;
+         void *v;
+         int r;
+ 
+@@ -502,7 +502,6 @@ static int tree_one(sd_bus *bus, const char *service) {
+ 
+ static int tree(int argc, char **argv, void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+-        char **i;
+         int r;
+ 
+         /* Do superficial verification of arguments before even opening the bus */
+@@ -1206,7 +1205,6 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *message = NULL;
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        char **i;
+         uint32_t flags = 0;
+         const char *unique_name;
+         bool is_monitor = false;
+@@ -2115,7 +2113,6 @@ static int emit_signal(int argc, char **argv, void *userdata) {
+ static int get_property(int argc, char **argv, void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        char **i;
+         int r;
+ 
+         r = acquire_bus(false, &bus);
+diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
+index 775bd84ad2..8e8f97b3ce 100644
+--- a/src/cgls/cgls.c
++++ b/src/cgls/cgls.c
+@@ -201,7 +201,6 @@ static int run(int argc, char *argv[]) {
+         if (arg_names) {
+                 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+                 _cleanup_free_ char *root = NULL;
+-                char **name;
+ 
+                 STRV_FOREACH(name, arg_names) {
+                         int q;
+diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c
+index 3c1c02e444..c149c0afff 100644
+--- a/src/core/bpf-firewall.c
++++ b/src/core/bpf-firewall.c
+@@ -596,8 +596,6 @@ int bpf_firewall_compile(Unit *u) {
+ }
+ 
+ static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set) {
+-        char **bpf_fs_path;
+-
+         set_clear(*set);
+ 
+         STRV_FOREACH(bpf_fs_path, filter_paths) {
+diff --git a/src/core/cgroup.c b/src/core/cgroup.c
+index f58de95a49..17ec70567c 100644
+--- a/src/core/cgroup.c
++++ b/src/core/cgroup.c
+@@ -430,7 +430,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
+         CGroupContext *c;
+         CGroupSocketBindItem *bi;
+         struct in_addr_prefix *iaai;
+-        char **path;
+ 
+         char cda[FORMAT_CGROUP_DIFF_MAX];
+         char cdb[FORMAT_CGROUP_DIFF_MAX];
+diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
+index f0d8759e85..bd76ce7117 100644
+--- a/src/core/dbus-cgroup.c
++++ b/src/core/dbus-cgroup.c
+@@ -640,7 +640,6 @@ static int bus_cgroup_set_transient_property(
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *buf = NULL;
+                         _cleanup_fclose_ FILE *f = NULL;
+-                        char **entry;
+                         size_t size = 0;
+ 
+                         if (n == 0)
+@@ -2050,7 +2049,6 @@ int bus_cgroup_set_property(
+ 
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *joined = NULL;
+-                        char **s;
+ 
+                         if (strv_isempty(l)) {
+                                 c->restrict_network_interfaces_is_allow_list = false;
+diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
+index 5c499e5d06..2d49f86366 100644
+--- a/src/core/dbus-execute.c
++++ b/src/core/dbus-execute.c
+@@ -74,7 +74,6 @@ static int property_get_environment_files(
+                 sd_bus_error *error) {
+ 
+         ExecContext *c = userdata;
+-        char **j;
+         int r;
+ 
+         assert(bus);
+@@ -1143,15 +1142,12 @@ static int bus_property_get_exec_dir_symlink(
+         if (r < 0)
+                 return r;
+ 
+-        for (size_t i = 0; i < d->n_items; i++) {
+-                char **dst;
+-
++        for (size_t i = 0; i < d->n_items; i++)
+                 STRV_FOREACH(dst, d->items[i].symlinks) {
+                         r = sd_bus_message_append(reply, "(sst)", d->items[i].path, *dst, 0 /* flags, unused for now */);
+                         if (r < 0)
+                                 return r;
+                 }
+-        }
+ 
+         return sd_bus_message_close_container(reply);
+ }
+@@ -2021,7 +2017,6 @@ int bus_exec_context_set_transient_property(
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *joined = NULL;
+                         FilesystemParseFlags invert_flag = allow_list ? 0 : FILESYSTEM_PARSE_INVERT;
+-                        char **s;
+ 
+                         if (strv_isempty(l)) {
+                                 c->restrict_filesystems_allow_list = false;
+@@ -2067,7 +2062,6 @@ int bus_exec_context_set_transient_property(
+ 
+         if (streq(name, "SupplementaryGroups")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+@@ -2432,7 +2426,6 @@ int bus_exec_context_set_transient_property(
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *joined = NULL;
+                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
+-                        char **s;
+ 
+                         if (strv_isempty(l)) {
+                                 c->syscall_allow_list = false;
+@@ -2517,7 +2510,6 @@ int bus_exec_context_set_transient_property(
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *joined = NULL;
+                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
+-                        char **s;
+ 
+                         if (strv_isempty(l)) {
+                                 c->syscall_log_allow_list = false;
+@@ -2569,9 +2561,7 @@ int bus_exec_context_set_transient_property(
+ 
+                         if (strv_isempty(l))
+                                 c->syscall_archs = set_free(c->syscall_archs);
+-                        else {
+-                                char **s;
+-
++                        else
+                                 STRV_FOREACH(s, l) {
+                                         uint32_t a;
+ 
+@@ -2584,8 +2574,6 @@ int bus_exec_context_set_transient_property(
+                                                 return r;
+                                 }
+ 
+-                        }
+-
+                         joined = strv_join(l, " ");
+                         if (!joined)
+                                 return -ENOMEM;
+@@ -2617,7 +2605,6 @@ int bus_exec_context_set_transient_property(
+ 
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         _cleanup_free_ char *joined = NULL;
+-                        char **s;
+ 
+                         if (strv_isempty(l)) {
+                                 c->address_families_allow_list = allow_list;
+@@ -3146,7 +3133,6 @@ int bus_exec_context_set_transient_property(
+                 _cleanup_fclose_ FILE *f = NULL;
+                 _cleanup_strv_free_ char **l = NULL;
+                 size_t size = 0;
+-                char **i;
+ 
+                 r = sd_bus_message_enter_container(message, 'a', "(sb)");
+                 if (r < 0)
+@@ -3264,7 +3250,6 @@ int bus_exec_context_set_transient_property(
+                               "ReadWritePaths", "ReadOnlyPaths", "InaccessiblePaths", "ExecPaths", "NoExecPaths")) {
+                 _cleanup_strv_free_ char **l = NULL;
+                 char ***dirs;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+@@ -3316,16 +3301,15 @@ int bus_exec_context_set_transient_property(
+ 
+         } else if (streq(name, "ExecSearchPath")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+                         return r;
+ 
+-                STRV_FOREACH(p, l) {
++                STRV_FOREACH(p, l)
+                         if (!path_is_absolute(*p) || !path_is_normalized(*p) || strchr(*p, ':'))
+                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid %s", name);
+-                }
++
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         if (strv_isempty(l)) {
+                                 c->exec_search_path = strv_free(c->exec_search_path);
+@@ -3346,7 +3330,6 @@ int bus_exec_context_set_transient_property(
+ 
+         } else if (STR_IN_SET(name, "RuntimeDirectory", "StateDirectory", "CacheDirectory", "LogsDirectory", "ConfigurationDirectory")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+@@ -3375,7 +3358,6 @@ int bus_exec_context_set_transient_property(
+                                 unit_write_settingf(u, flags, name, "%s=", name);
+                         } else {
+                                 _cleanup_free_ char *joined = NULL;
+-                                char **source;
+ 
+                                 STRV_FOREACH(source, l) {
+                                         r = exec_directory_add(&d->items, &d->n_items, *source, NULL);
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 1a3098ceb1..0e3590d1c9 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -817,7 +817,6 @@ static int method_list_units_by_names(sd_bus_message *message, void *userdata, s
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+         Manager *m = userdata;
+         int r;
+-        char **unit;
+         _cleanup_strv_free_ char **units = NULL;
+ 
+         assert(message);
+diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
+index a3b1e0442f..989c3f74db 100644
+--- a/src/core/dbus-socket.c
++++ b/src/core/dbus-socket.c
+@@ -326,16 +326,14 @@ static int bus_socket_set_transient_property(
+ 
+         if (streq(name, "Symlinks")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+                         return r;
+ 
+-                STRV_FOREACH(p, l) {
++                STRV_FOREACH(p, l)
+                         if (!path_is_absolute(*p))
+                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Symlink path is not absolute: %s", *p);
+-                }
+ 
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         if (strv_isempty(l)) {
+diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
+index 1128c42ad9..c1cf6dfb6f 100644
+--- a/src/core/dbus-unit.c
++++ b/src/core/dbus-unit.c
+@@ -2245,16 +2245,14 @@ static int bus_unit_set_transient_property(
+ 
+         if (streq(name, "Documentation")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+                         return r;
+ 
+-                STRV_FOREACH(p, l) {
++                STRV_FOREACH(p, l)
+                         if (!documentation_url_is_valid(*p))
+                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid URL in %s: %s", name, *p);
+-                }
+ 
+                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                         if (strv_isempty(l)) {
+@@ -2310,7 +2308,6 @@ static int bus_unit_set_transient_property(
+ 
+         } else if (streq(name, "RequiresMountsFor")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **p;
+ 
+                 r = sd_bus_message_read_strv(message, &l);
+                 if (r < 0)
+diff --git a/src/core/device.c b/src/core/device.c
+index 43f49573b9..d2c5febd3f 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -307,13 +307,9 @@ static void device_dump(Unit *u, FILE *f, const char *prefix) {
+                 prefix, strna(d->sysfs),
+                 prefix, strna(s));
+ 
+-        if (!strv_isempty(d->wants_property)) {
+-                char **i;
+-
+-                STRV_FOREACH(i, d->wants_property)
+-                        fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
+-                                prefix, *i);
+-        }
++        STRV_FOREACH(i, d->wants_property)
++                fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
++                        prefix, *i);
+ }
+ 
+ _pure_ static UnitActiveState device_active_state(Unit *u) {
+@@ -419,9 +415,7 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
+                 k = NULL;
+         }
+ 
+-        if (d->state != DEVICE_DEAD) {
+-                char **i;
+-
++        if (d->state != DEVICE_DEAD)
+                 /* So here's a special hack, to compensate for the fact that the udev database's reload cycles are not
+                  * synchronized with our own reload cycles: when we detect that the SYSTEMD_WANTS property of a device
+                  * changes while the device unit is already up, let's manually trigger any new units listed in it not
+@@ -431,7 +425,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
+                  *
+                  * We do this only if the device has been up already when we parse this, as otherwise the usual
+                  * dependency logic that is run from the dead → plugged transition will trigger these deps. */
+-
+                 STRV_FOREACH(i, added) {
+                         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ 
+@@ -442,7 +435,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
+                         if (r < 0)
+                                 log_unit_warning_errno(u, r, "Failed to enqueue SYSTEMD_WANTS= job, ignoring: %s", bus_error_message(&error, r));
+                 }
+-        }
+ 
+         return strv_free_and_replace(d->wants_property, added);
+ }
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 3cafd0f17d..306e563e4f 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -994,7 +994,6 @@ static int get_fixed_group(const ExecContext *c, const char **group, gid_t *gid)
+ static int get_supplementary_groups(const ExecContext *c, const char *user,
+                                     const char *group, gid_t gid,
+                                     gid_t **supplementary_gids, int *ngids) {
+-        char **i;
+         int r, k = 0;
+         int ngroups_max;
+         bool keep_groups = false;
+@@ -1185,7 +1184,7 @@ static int setup_pam(
+         pam_handle_t *handle = NULL;
+         sigset_t old_ss;
+         int pam_code = PAM_SUCCESS, r;
+-        char **nv, **e = NULL;
++        char **e = NULL;
+         bool close_session = false;
+         pid_t pam_pid = 0, parent_pid;
+         int flags = 0;
+@@ -2010,7 +2009,6 @@ static int build_environment(
+ static int build_pass_environment(const ExecContext *c, char ***ret) {
+         _cleanup_strv_free_ char **pass_env = NULL;
+         size_t n_env = 0;
+-        char **i;
+ 
+         STRV_FOREACH(i, c->pass_environment) {
+                 _cleanup_free_ char *x = NULL;
+@@ -2283,7 +2281,6 @@ static bool exec_directory_is_private(const ExecContext *context, ExecDirectoryT
+ 
+ static int create_many_symlinks(const char *root, const char *source, char **symlinks) {
+         _cleanup_free_ char *src_abs = NULL;
+-        char **dst;
+         int r;
+ 
+         assert(source);
+@@ -3221,7 +3218,6 @@ static int compile_symlinks(
+         for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) {
+                 for (size_t i = 0; i < context->directories[dt].n_items; i++) {
+                         _cleanup_free_ char *private_path = NULL, *path = NULL;
+-                        char **symlink;
+ 
+                         STRV_FOREACH(symlink, context->directories[dt].items[i].symlinks) {
+                                 _cleanup_free_ char *src_abs = NULL, *dst_abs = NULL;
+@@ -5190,7 +5186,6 @@ int exec_context_destroy_runtime_directory(const ExecContext *c, const char *run
+                  * service next. */
+                 (void) rm_rf(p, REMOVE_ROOT);
+ 
+-                char **symlink;
+                 STRV_FOREACH(symlink, c->directories[EXEC_DIRECTORY_RUNTIME].items[i].symlinks) {
+                         _cleanup_free_ char *symlink_abs = NULL;
+ 
+@@ -5364,7 +5359,6 @@ static int exec_context_named_iofds(
+ 
+ static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) {
+         _cleanup_strv_free_ char **v = NULL;
+-        char **i;
+         int r;
+ 
+         assert(c);
+@@ -5471,8 +5465,6 @@ bool exec_context_may_touch_console(const ExecContext *ec) {
+ }
+ 
+ static void strv_fprintf(FILE *f, char **l) {
+-        char **g;
+-
+         assert(f);
+ 
+         STRV_FOREACH(g, l)
+@@ -5492,7 +5484,6 @@ static void strv_dump(FILE* f, const char *prefix, const char *name, char **strv
+ }
+ 
+ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
+-        char **e, **d;
+         int r;
+ 
+         assert(c);
+@@ -5924,9 +5915,11 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
+         }
+ 
+ #if HAVE_LIBBPF
+-        if (exec_context_restrict_filesystems_set(c))
++        if (exec_context_restrict_filesystems_set(c)) {
++                char **e;
+                 SET_FOREACH(e, c->restrict_filesystems)
+                         fprintf(f, "%sRestrictFileSystems: %s\n", prefix, *e);
++        }
+ #endif
+ 
+         if (c->network_namespace_path)
+@@ -6117,7 +6110,6 @@ int exec_context_get_clean_directories(
+                                         return r;
+                         }
+ 
+-                        char **symlink;
+                         STRV_FOREACH(symlink, c->directories[t].items[i].symlinks) {
+                                 j = path_join(prefix[t], *symlink);
+                                 if (!j)
+diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c
+index 080a63bc7e..53d2a3daa1 100644
+--- a/src/core/load-dropin.c
++++ b/src/core/load-dropin.c
+@@ -13,7 +13,6 @@
+ 
+ static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) {
+         _cleanup_strv_free_ char **paths = NULL;
+-        char **p;
+         int r;
+ 
+         r = unit_file_find_dropin_paths(NULL,
+@@ -85,7 +84,6 @@ static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suff
+ 
+ int unit_load_dropin(Unit *u) {
+         _cleanup_strv_free_ char **l = NULL;
+-        char **f;
+         int r;
+ 
+         assert(u);
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index 461e073269..0acc350389 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1634,7 +1634,6 @@ int config_parse_root_image_options(
+ 
+         _cleanup_(mount_options_free_allp) MountOptions *options = NULL;
+         _cleanup_strv_free_ char **l = NULL;
+-        char **first = NULL, **second = NULL;
+         ExecContext *c = data;
+         const Unit *u = userdata;
+         int r;
+diff --git a/src/core/main.c b/src/core/main.c
+index cb3131c12a..4bad2e84a0 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -2409,7 +2409,6 @@ static void fallback_rlimit_memlock(const struct rlimit *saved_rlimit_memlock) {
+ }
+ 
+ static void setenv_manager_environment(void) {
+-        char **p;
+         int r;
+ 
+         STRV_FOREACH(p, arg_manager_environment) {
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 22bd0866c5..60846a66e6 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -3582,7 +3582,6 @@ void manager_check_finished(Manager *m) {
+ }
+ 
+ static bool generator_path_any(const char* const* paths) {
+-        char **path;
+         bool found = false;
+ 
+         /* Optimize by skipping the whole process by not creating output directories
+diff --git a/src/core/namespace.c b/src/core/namespace.c
+index c549dcc96b..4bd63f6227 100644
+--- a/src/core/namespace.c
++++ b/src/core/namespace.c
+@@ -313,8 +313,6 @@ static void mount_entry_done(MountEntry *p) {
+ }
+ 
+ static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, bool forcibly_require_prefix) {
+-        char **i;
+-
+         assert(p);
+ 
+         /* Adds a list of user-supplied READWRITE/READWRITE_IMPLICIT/READONLY/INACCESSIBLE entries */
+@@ -349,8 +347,6 @@ static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, boo
+ }
+ 
+ static int append_empty_dir_mounts(MountEntry **p, char **strv) {
+-        char **i;
+-
+         assert(p);
+ 
+         /* Adds tmpfs mounts to provide readable but empty directories. This is primarily used to implement the
+@@ -417,7 +413,6 @@ static int append_extension_images(
+                 size_t n) {
+ 
+         _cleanup_strv_free_ char **overlays = NULL;
+-        char **hierarchy;
+         int r;
+ 
+         assert(p);
+@@ -1590,7 +1585,6 @@ static void normalize_mounts(const char *root_directory, MountEntry *mounts, siz
+ }
+ 
+ static int create_symlinks_from_tuples(const char *root, char **strv_symlinks) {
+-        char **src, **dst;
+         int r;
+ 
+         STRV_FOREACH_PAIR(src, dst, strv_symlinks) {
+diff --git a/src/core/service.c b/src/core/service.c
+index 49579f7998..5d9464d588 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2592,7 +2592,6 @@ static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command
+         ServiceExecCommand id;
+         size_t length = 0;
+         unsigned idx;
+-        char **arg;
+ 
+         assert(s);
+         assert(f);
+@@ -4028,7 +4027,6 @@ static void service_notify_message(
+         Service *s = SERVICE(u);
+         bool notify_dbus = false;
+         const char *e;
+-        char * const *i;
+         int r;
+ 
+         assert(u);
+diff --git a/src/core/socket.c b/src/core/socket.c
+index 8a5c7fdd0a..8da9f14db6 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -781,8 +781,6 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
+                 fprintf(f, "%sSocketProtocol: %s\n", prefix, str);
+ 
+         if (!strv_isempty(s->symlinks)) {
+-                char **q;
+-
+                 fprintf(f, "%sSymlinks:", prefix);
+                 STRV_FOREACH(q, s->symlinks)
+                         fprintf(f, " %s", *q);
+@@ -924,7 +922,6 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
+ 
+ static void socket_close_fds(Socket *s) {
+         SocketPort *p;
+-        char **i;
+ 
+         assert(s);
+ 
+@@ -1271,7 +1268,6 @@ static int mq_address_create(
+ 
+ static int socket_symlink(Socket *s) {
+         const char *p;
+-        char **i;
+         int r;
+ 
+         assert(s);
+diff --git a/src/core/transaction.c b/src/core/transaction.c
+index ebe5f1910d..32badaaef1 100644
+--- a/src/core/transaction.c
++++ b/src/core/transaction.c
+@@ -329,7 +329,7 @@ _pure_ static bool unit_matters_to_anchor(Unit *u, Job *j) {
+ }
+ 
+ static char* merge_unit_ids(const char* unit_log_field, char **pairs) {
+-        char **unit_id, **job_type, *ans = NULL;
++        char *ans = NULL;
+         size_t size = 0, next;
+ 
+         STRV_FOREACH_PAIR(unit_id, job_type, pairs) {
+@@ -366,7 +366,6 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
+         if (j->generation == generation) {
+                 Job *k, *delete = NULL;
+                 _cleanup_free_ char **array = NULL, *unit_ids = NULL;
+-                char **unit_id, **job_type;
+ 
+                 /* If the marker is NULL we have been here already and decided the job was loop-free from
+                  * here. Hence shortcut things and return right-away. */
+diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c
+index 7d2e6bc130..65ed110ce6 100644
+--- a/src/core/unit-serialize.c
++++ b/src/core/unit-serialize.c
+@@ -623,7 +623,7 @@ static void print_unit_dependency_mask(FILE *f, const char *kind, UnitDependency
+ }
+ 
+ void unit_dump(Unit *u, FILE *f, const char *prefix) {
+-        char *t, **j;
++        char *t;
+         const char *prefix2;
+         Unit *following;
+         _cleanup_set_free_ Set *following_set = NULL;
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 3d30f3807c..6eaa553255 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -568,8 +568,6 @@ static void unit_clear_dependencies(Unit *u) {
+ }
+ 
+ static void unit_remove_transient(Unit *u) {
+-        char **i;
+-
+         assert(u);
+ 
+         if (!u->transient)
+@@ -3594,7 +3592,6 @@ int unit_add_blockdev_dependency(Unit *u, const char *what, UnitDependencyMask m
+ 
+ int unit_coldplug(Unit *u) {
+         int r = 0, q;
+-        char **i;
+ 
+         assert(u);
+ 
+@@ -3667,7 +3664,6 @@ static bool fragment_mtime_newer(const char *path, usec_t mtime, bool path_maske
+ 
+ bool unit_need_daemon_reload(Unit *u) {
+         _cleanup_strv_free_ char **t = NULL;
+-        char **path;
+ 
+         assert(u);
+ 
+@@ -4251,7 +4247,6 @@ char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) {
+ char* unit_concat_strv(char **l, UnitWriteFlags flags) {
+         _cleanup_free_ char *result = NULL;
+         size_t n = 0;
+-        char **i;
+ 
+         /* Takes a list of strings, escapes them, and concatenates them. This may be used to format command lines in a
+          * way suitable for ExecStart= stanzas */
+@@ -5052,7 +5047,6 @@ int unit_fork_and_watch_rm_rf(Unit *u, char **paths, pid_t *ret_pid) {
+                 return r;
+         if (r == 0) {
+                 int ret = EXIT_SUCCESS;
+-                char **i;
+ 
+                 STRV_FOREACH(i, paths) {
+                         r = rm_rf(*i, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK);
+diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c
+index 2904de3728..7235544285 100644
+--- a/src/coredump/coredumpctl.c
++++ b/src/coredump/coredumpctl.c
+@@ -91,7 +91,6 @@ static int add_match(sd_journal *j, const char *match) {
+ }
+ 
+ static int add_matches(sd_journal *j, char **matches) {
+-        char **match;
+         int r;
+ 
+         r = sd_journal_add_match(j, "MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR, 0);
+diff --git a/src/creds/creds.c b/src/creds/creds.c
+index 3d2841c07d..2fd314ff37 100644
+--- a/src/creds/creds.c
++++ b/src/creds/creds.c
+@@ -311,7 +311,6 @@ static int write_blob(FILE *f, const void *data, size_t size) {
+ static int verb_cat(int argc, char **argv, void *userdata) {
+         _cleanup_(closedirp) DIR *d = NULL;
+         int r, ret = 0;
+-        char **cn;
+ 
+         r = open_credential_directory(&d);
+         if (r == -ENXIO)
+diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
+index c9bc9a2489..7f397f197f 100644
+--- a/src/cryptenroll/cryptenroll.c
++++ b/src/cryptenroll/cryptenroll.c
+@@ -482,7 +482,6 @@ static int prepare_luks(
+ 
+                 for (;;) {
+                         _cleanup_strv_free_erase_ char **passwords = NULL;
+-                        char **p;
+ 
+                         if (--i == 0)
+                                 return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
+diff --git a/src/cryptsetup/cryptsetup-keyfile.c b/src/cryptsetup/cryptsetup-keyfile.c
+index 924555d262..1867e9012c 100644
+--- a/src/cryptsetup/cryptsetup-keyfile.c
++++ b/src/cryptsetup/cryptsetup-keyfile.c
+@@ -12,7 +12,6 @@ int find_key_file(
+                 void **ret_key,
+                 size_t *ret_key_size) {
+ 
+-        char **i;
+         int r;
+ 
+         assert(key_file);
+diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
+index 250a8314f6..dddd976dc8 100644
+--- a/src/cryptsetup/cryptsetup.c
++++ b/src/cryptsetup/cryptsetup.c
+@@ -562,7 +562,7 @@ static int get_password(
+ 
+         _cleanup_free_ char *friendly = NULL, *text = NULL, *disk_path = NULL;
+         _cleanup_strv_free_erase_ char **passwords = NULL;
+-        char **p, *id;
++        char *id;
+         int r = 0;
+         AskPasswordFlags flags = arg_ask_password_flags | ASK_PASSWORD_PUSH_CACHE;
+ 
+@@ -851,7 +851,6 @@ static int attach_luks2_by_fido2(
+ #if HAVE_LIBCRYPTSETUP_PLUGINS
+         AskPasswordFlags flags = ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
+         _cleanup_strv_free_erase_ char **pins = NULL;
+-        char **p;
+         int r;
+ 
+         r = crypt_activate_by_token_pin(cd, name, "systemd-fido2", CRYPT_ANY_TOKEN, NULL, 0, usrptr, activation_flags);
+@@ -1523,7 +1522,6 @@ static int attach_luks_or_plain_or_bitlk_by_passphrase(
+                 uint32_t flags,
+                 bool pass_volume_key) {
+ 
+-        char **p;
+         int r;
+ 
+         assert(cd);
+diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c
+index a724ae510d..e2e1df5715 100644
+--- a/src/debug-generator/debug-generator.c
++++ b/src/debug-generator/debug-generator.c
+@@ -89,7 +89,6 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
+ }
+ 
+ static int generate_mask_symlinks(void) {
+-        char **u;
+         int r = 0;
+ 
+         if (strv_isempty(arg_mask))
+@@ -112,7 +111,6 @@ static int generate_mask_symlinks(void) {
+ }
+ 
+ static int generate_wants_symlinks(void) {
+-        char **u;
+         int r = 0;
+ 
+         if (strv_isempty(arg_wants))
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index 3f1b206e6c..eafe1c05c4 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -195,7 +195,6 @@ static int enumerate_dir_d(
+         _cleanup_free_ char *unit = NULL;
+         _cleanup_free_ char *path = NULL;
+         _cleanup_strv_free_ char **list = NULL;
+-        char **file;
+         char *c;
+         int r;
+ 
+@@ -292,7 +291,6 @@ static int enumerate_dir(
+         _cleanup_closedir_ DIR *d = NULL;
+         _cleanup_strv_free_ char **files = NULL, **dirs = NULL;
+         size_t n_files = 0, n_dirs = 0;
+-        char **t;
+         int r;
+ 
+         assert(top);
+diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c
+index a9632a3f16..1d78dc5085 100644
+--- a/src/dissect/dissect.c
++++ b/src/dissect/dissect.c
+@@ -354,7 +354,6 @@ static int parse_argv(int argc, char *argv[]) {
+ 
+ static int strv_pair_to_json(char **l, JsonVariant **ret) {
+         _cleanup_strv_free_ char **jl = NULL;
+-        char **a, **b;
+ 
+         STRV_FOREACH_PAIR(a, b, l) {
+                 char *j;
+@@ -371,8 +370,6 @@ static int strv_pair_to_json(char **l, JsonVariant **ret) {
+ }
+ 
+ static void strv_pair_print(char **l, const char *prefix) {
+-        char **p, **q;
+-
+         assert(prefix);
+ 
+         STRV_FOREACH_PAIR(p, q, l) {
+diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c
+index 1171fdc290..39c46c7c2b 100644
+--- a/src/environment-d-generator/environment-d-generator.c
++++ b/src/environment-d-generator/environment-d-generator.c
+@@ -41,7 +41,6 @@ static int environment_dirs(char ***ret) {
+ 
+ static int load_and_print(void) {
+         _cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL;
+-        char **i;
+         int r;
+ 
+         r = environment_dirs(&dirs);
+diff --git a/src/escape/escape.c b/src/escape/escape.c
+index 676b7dce54..0ad77f3f94 100644
+--- a/src/escape/escape.c
++++ b/src/escape/escape.c
+@@ -155,7 +155,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+ 
+ static int run(int argc, char *argv[]) {
+-        char **i;
+         int r;
+ 
+         log_setup();
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 9b32383a76..355f2b8668 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -237,7 +237,6 @@ static int write_dependency(
+ 
+         _cleanup_strv_free_ char **names = NULL, **units = NULL;
+         _cleanup_free_ char *res = NULL;
+-        char **s;
+         int r;
+ 
+         assert(f);
+@@ -518,8 +517,6 @@ static int add_mount(
+                         if (r < 0)
+                                 return r;
+                 } else {
+-                        char **s;
+-
+                         STRV_FOREACH(s, wanted_by) {
+                                 r = generator_add_symlink(dest, *s, "wants", name);
+                                 if (r < 0)
+diff --git a/src/home/homectl.c b/src/home/homectl.c
+index ac7b00889d..4aeaaf6b9a 100644
+--- a/src/home/homectl.c
++++ b/src/home/homectl.c
+@@ -554,7 +554,6 @@ static int acquire_passed_secrets(const char *user_name, UserRecord **ret) {
+ static int activate_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r, ret = 0;
+-        char **i;
+ 
+         r = acquire_bus(&bus);
+         if (r < 0)
+@@ -603,7 +602,6 @@ static int activate_home(int argc, char *argv[], void *userdata) {
+ static int deactivate_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r, ret = 0;
+-        char **i;
+ 
+         r = acquire_bus(&bus);
+         if (r < 0)
+@@ -690,7 +688,7 @@ static int inspect_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(strv_freep) char **mangled_list = NULL;
+         int r, ret = 0;
+-        char **items, **i;
++        char **items;
+ 
+         pager_open(arg_pager_flags);
+ 
+@@ -774,7 +772,7 @@ static int authenticate_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(strv_freep) char **mangled_list = NULL;
+         int r, ret = 0;
+-        char **i, **items;
++        char **items;
+ 
+         items = mangle_user_list(strv_skip(argv, 1), &mangled_list);
+         if (!items)
+@@ -1084,7 +1082,6 @@ static int add_disposition(JsonVariant **v) {
+ static int acquire_new_home_record(UserRecord **ret) {
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
+-        char **i;
+         int r;
+ 
+         assert(ret);
+@@ -1375,7 +1372,6 @@ static int create_home(int argc, char *argv[], void *userdata) {
+ static int remove_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r, ret = 0;
+-        char **i;
+ 
+         r = acquire_bus(&bus);
+         if (r < 0)
+@@ -1413,7 +1409,6 @@ static int acquire_updated_home_record(
+ 
+         _cleanup_(json_variant_unrefp) JsonVariant *json = NULL;
+         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
+-        char **i;
+         int r;
+ 
+         assert(ret);
+@@ -1863,7 +1858,6 @@ static int resize_home(int argc, char *argv[], void *userdata) {
+ static int lock_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r, ret = 0;
+-        char **i;
+ 
+         r = acquire_bus(&bus);
+         if (r < 0)
+@@ -1895,7 +1889,6 @@ static int lock_home(int argc, char *argv[], void *userdata) {
+ static int unlock_home(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         int r, ret = 0;
+-        char **i;
+ 
+         r = acquire_bus(&bus);
+         if (r < 0)
+diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c
+index 47eb287aa9..ba5ca42ed3 100644
+--- a/src/home/homed-manager-bus.c
++++ b/src/home/homed-manager-bus.c
+@@ -39,7 +39,6 @@ static int property_get_auto_login(
+         HASHMAP_FOREACH(h, m->homes_by_name) {
+                 _cleanup_(strv_freep) char **seats = NULL;
+                 _cleanup_free_ char *home_path = NULL;
+-                char **s;
+ 
+                 r = home_auto_login(h, &seats);
+                 if (r < 0) {
+diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
+index a02248a6de..f04b87e366 100644
+--- a/src/home/homed-manager.c
++++ b/src/home/homed-manager.c
+@@ -1553,7 +1553,6 @@ static int manager_load_public_key_one(Manager *m, const char *path) {
+ 
+ static int manager_load_public_keys(Manager *m) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **i;
+         int r;
+ 
+         assert(m);
+diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c
+index 96a6ea754e..3dd5a14802 100644
+--- a/src/home/homed-varlink.c
++++ b/src/home/homed-varlink.c
+@@ -282,7 +282,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
+ 
+         if (p.user_name) {
+                 const char *last = NULL;
+-                char **i;
+ 
+                 h = hashmap_get(m->homes_by_name, p.user_name);
+                 if (!h)
+@@ -335,9 +334,7 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
+         } else {
+                 const char *last_user_name = NULL, *last_group_name = NULL;
+ 
+-                HASHMAP_FOREACH(h, m->homes_by_name) {
+-                        char **j;
+-
++                HASHMAP_FOREACH(h, m->homes_by_name)
+                         STRV_FOREACH(j, h->record->member_of) {
+ 
+                                 if (last_user_name) {
+@@ -353,7 +350,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
+                                 last_user_name = h->user_name;
+                                 last_group_name = *j;
+                         }
+-                }
+ 
+                 if (last_user_name) {
+                         assert(last_group_name);
+diff --git a/src/home/homework-cifs.c b/src/home/homework-cifs.c
+index ed06d1f221..6d499f76b2 100644
+--- a/src/home/homework-cifs.c
++++ b/src/home/homework-cifs.c
+@@ -20,7 +20,6 @@ int home_setup_cifs(
+                 HomeSetup *setup) {
+ 
+         _cleanup_free_ char *chost = NULL, *cservice = NULL, *cdir = NULL, *chost_and_service = NULL, *j = NULL;
+-        char **pw;
+         int r;
+ 
+         assert(h);
+diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c
+index f9fef73f75..afa706a1bf 100644
+--- a/src/home/homework-fscrypt.c
++++ b/src/home/homework-fscrypt.c
+@@ -197,7 +197,6 @@ static int fscrypt_slot_try_many(
+                 const uint8_t match_key_descriptor[static FS_KEY_DESCRIPTOR_SIZE],
+                 void **ret_decrypted, size_t *ret_decrypted_size) {
+ 
+-        char **i;
+         int r;
+ 
+         STRV_FOREACH(i, passwords) {
+@@ -499,7 +498,6 @@ int home_create_fscrypt(
+         _cleanup_free_ char *d = NULL;
+         uint32_t nr = 0;
+         const char *ip;
+-        char **i;
+         int r;
+ 
+         assert(h);
+@@ -649,7 +647,6 @@ int home_passwd_fscrypt(
+         size_t volume_key_size = 0;
+         uint32_t slot = 0;
+         const char *xa;
+-        char **p;
+         int r;
+ 
+         assert(h);
+diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c
+index 8063206358..f8f4afb253 100644
+--- a/src/home/homework-luks.c
++++ b/src/home/homework-luks.c
+@@ -303,7 +303,6 @@ static int luks_try_passwords(
+                 size_t *volume_key_size,
+                 key_serial_t *ret_key_serial) {
+ 
+-        char **pp;
+         int r;
+ 
+         assert(h);
+@@ -1721,7 +1720,6 @@ static int luks_format(
+         _cleanup_free_ char *text = NULL;
+         size_t volume_key_size;
+         int slot = 0, r;
+-        char **pp;
+ 
+         assert(node);
+         assert(dm_name);
+@@ -3664,7 +3662,6 @@ static int luks_try_resume(
+                 const char *dm_name,
+                 char **password) {
+ 
+-        char **pp;
+         int r;
+ 
+         assert(cd);
+diff --git a/src/home/homework-pkcs11.c b/src/home/homework-pkcs11.c
+index 15402b1002..7868fb6064 100644
+--- a/src/home/homework-pkcs11.c
++++ b/src/home/homework-pkcs11.c
+@@ -20,7 +20,6 @@ int pkcs11_callback(
+         CK_TOKEN_INFO updated_token_info;
+         size_t decrypted_key_size;
+         CK_OBJECT_HANDLE object;
+-        char **i;
+         CK_RV rv;
+         int r;
+ 
+diff --git a/src/home/homework.c b/src/home/homework.c
+index 9fdc74b775..0014a7f598 100644
+--- a/src/home/homework.c
++++ b/src/home/homework.c
+@@ -97,9 +97,7 @@ int user_record_authenticate(
+                 log_info("None of the supplied plaintext passwords unlock the user record's hashed recovery keys.");
+ 
+         /* Second, test cached PKCS#11 passwords */
+-        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
+-                char **pp;
+-
++        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++)
+                 STRV_FOREACH(pp, cache->pkcs11_passwords) {
+                         r = test_password_one(h->pkcs11_encrypted_key[n].hashed_password, *pp);
+                         if (r < 0)
+@@ -109,12 +107,9 @@ int user_record_authenticate(
+                                 return 1;
+                         }
+                 }
+-        }
+ 
+         /* Third, test cached FIDO2 passwords */
+-        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) {
+-                char **pp;
+-
++        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++)
+                 /* See if any of the previously calculated passwords work */
+                 STRV_FOREACH(pp, cache->fido2_passwords) {
+                         r = test_password_one(h->fido2_hmac_salt[n].hashed_password, *pp);
+@@ -125,7 +120,6 @@ int user_record_authenticate(
+                                 return 1;
+                         }
+                 }
+-        }
+ 
+         /* Fourth, let's see if any of the PKCS#11 security tokens are plugged in and help us */
+         for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
+@@ -1096,7 +1090,6 @@ static int user_record_compile_effective_passwords(
+ 
+         _cleanup_(strv_free_erasep) char **effective = NULL;
+         size_t n;
+-        char **i;
+         int r;
+ 
+         assert(h);
+@@ -1116,7 +1109,6 @@ static int user_record_compile_effective_passwords(
+ 
+         STRV_FOREACH(i, h->hashed_password) {
+                 bool found = false;
+-                char **j;
+ 
+                 log_debug("Looking for plaintext password for: %s", *i);
+ 
+@@ -1144,7 +1136,6 @@ static int user_record_compile_effective_passwords(
+ 
+         for (n = 0; n < h->n_recovery_key; n++) {
+                 bool found = false;
+-                char **j;
+ 
+                 log_debug("Looking for plaintext recovery key for: %s", h->recovery_key[n].hashed_password);
+ 
+diff --git a/src/home/user-record-pwquality.c b/src/home/user-record-pwquality.c
+index 23c3357836..609e620511 100644
+--- a/src/home/user-record-pwquality.c
++++ b/src/home/user-record-pwquality.c
+@@ -17,7 +17,7 @@ int user_record_quality_check_password(
+                 sd_bus_error *error) {
+ 
+         _cleanup_(sym_pwquality_free_settingsp) pwquality_settings_t *pwq = NULL;
+-        char buf[PWQ_MAX_ERROR_MESSAGE_LEN], **pp;
++        char buf[PWQ_MAX_ERROR_MESSAGE_LEN];
+         void *auxerror;
+         int r;
+ 
+@@ -37,7 +37,6 @@ int user_record_quality_check_password(
+         /* Iterate through all new passwords */
+         STRV_FOREACH(pp, secret->password) {
+                 bool called = false;
+-                char **old;
+ 
+                 r = test_password_many(hr->hashed_password, *pp);
+                 if (r < 0)
+diff --git a/src/home/user-record-util.c b/src/home/user-record-util.c
+index f4578783f3..1ae3e82bce 100644
+--- a/src/home/user-record-util.c
++++ b/src/home/user-record-util.c
+@@ -563,7 +563,6 @@ int user_record_test_image_path_and_warn(UserRecord *h) {
+ }
+ 
+ int user_record_test_password(UserRecord *h, UserRecord *secret) {
+-        char **i;
+         int r;
+ 
+         assert(h);
+@@ -585,7 +584,6 @@ int user_record_test_password(UserRecord *h, UserRecord *secret) {
+ }
+ 
+ int user_record_test_recovery_key(UserRecord *h, UserRecord *secret) {
+-        char **i;
+         int r;
+ 
+         assert(h);
+@@ -779,7 +777,6 @@ int user_record_update_last_changed(UserRecord *h, bool with_password) {
+ int user_record_make_hashed_password(UserRecord *h, char **secret, bool extend) {
+         _cleanup_(json_variant_unrefp) JsonVariant *priv = NULL;
+         _cleanup_strv_free_ char **np = NULL;
+-        char **i;
+         int r;
+ 
+         assert(h);
+diff --git a/src/id128/id128.c b/src/id128/id128.c
+index 484a72677d..6f4d65103c 100644
+--- a/src/id128/id128.c
++++ b/src/id128/id128.c
+@@ -102,7 +102,6 @@ static int show_one(Table **table, const char *name, sd_id128_t uuid, bool first
+ 
+ static int verb_show(int argc, char **argv, void *userdata) {
+         _cleanup_(table_unrefp) Table *table = NULL;
+-        char **p;
+         int r;
+ 
+         argv = strv_skip(argv, 1);
+diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
+index 6ab91263b1..13ca22ef26 100644
+--- a/src/journal-remote/journal-remote-main.c
++++ b/src/journal-remote/journal-remote-main.c
+@@ -594,7 +594,6 @@ static int create_remoteserver(
+                 const char* trust) {
+ 
+         int r, n, fd;
+-        char **file;
+ 
+         r = journal_remote_server_init(s, arg_output, arg_split_mode, arg_compress, arg_seal);
+         if (r < 0)
+diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c
+index e6a8254491..a8119bd687 100644
+--- a/src/journal-remote/microhttpd-util.c
++++ b/src/journal-remote/microhttpd-util.c
+@@ -151,18 +151,17 @@ static int log_enable_gnutls_category(const char *cat) {
+ }
+ 
+ int setup_gnutls_logger(char **categories) {
+-        char **cat;
+         int r;
+ 
+         gnutls_global_set_log_function(log_func_gnutls);
+ 
+-        if (categories) {
++        if (categories)
+                 STRV_FOREACH(cat, categories) {
+                         r = log_enable_gnutls_category(*cat);
+                         if (r < 0)
+                                 return r;
+                 }
+-        } else
++        else
+                 log_reset_gnutls_level();
+ 
+         return 0;
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 3c4a7c0a7a..6353c77c91 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -1139,7 +1139,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+ 
+ static int add_matches(sd_journal *j, char **args) {
+-        char **i;
+         bool have_term = false;
+ 
+         assert(j);
+@@ -1562,7 +1561,7 @@ static int get_possible_units(
+                         return r;
+ 
+                 SD_JOURNAL_FOREACH_UNIQUE(j, data, size) {
+-                        char **pattern, *eq;
++                        char *eq;
+                         size_t prefix;
+                         _cleanup_free_ char *u = NULL;
+ 
+@@ -1615,7 +1614,6 @@ static int get_possible_units(
+ static int add_units(sd_journal *j) {
+         _cleanup_strv_free_ char **patterns = NULL;
+         int r, count = 0;
+-        char **i;
+ 
+         assert(j);
+ 
+@@ -1760,7 +1758,6 @@ static int add_facilities(sd_journal *j) {
+ 
+ static int add_syslog_identifier(sd_journal *j) {
+         int r;
+-        char **i;
+ 
+         assert(j);
+ 
+diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c
+index ebe8eecc9d..efb676e60b 100644
+--- a/src/libsystemd-network/dhcp-option.c
++++ b/src/libsystemd-network/dhcp-option.c
+@@ -58,7 +58,6 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
+ 
+         case SD_DHCP_OPTION_USER_CLASS: {
+                 size_t total = 0;
+-                char **s;
+ 
+                 if (strv_isempty((char **) optval))
+                         return -EINVAL;
+diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c
+index 28fe036a40..8b2ecfc44b 100644
+--- a/src/libsystemd-network/dhcp6-option.c
++++ b/src/libsystemd-network/dhcp6-option.c
+@@ -468,7 +468,6 @@ int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) {
+ int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class) {
+         _cleanup_free_ uint8_t *p = NULL;
+         size_t total = 0, offset = 0;
+-        char * const *s;
+ 
+         assert(buf);
+         assert(*buf);
+@@ -501,7 +500,6 @@ int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const
+         _cleanup_free_ uint8_t *p = NULL;
+         uint32_t enterprise_identifier;
+         size_t total, offset;
+-        char * const *s;
+ 
+         assert(buf);
+         assert(*buf);
+diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
+index c33be947b7..1c34893de6 100644
+--- a/src/libsystemd-network/sd-dhcp-client.c
++++ b/src/libsystemd-network/sd-dhcp-client.c
+@@ -612,7 +612,6 @@ int sd_dhcp_client_set_user_class(
+                 sd_dhcp_client *client,
+                 char * const *user_class) {
+ 
+-        char * const *p;
+         char **s = NULL;
+ 
+         assert_return(client, -EINVAL);
+diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
+index 706904c720..122c878a66 100644
+--- a/src/libsystemd-network/sd-dhcp6-client.c
++++ b/src/libsystemd-network/sd-dhcp6-client.c
+@@ -510,7 +510,6 @@ int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mud
+ }
+ 
+ int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const *user_class) {
+-        char * const *p;
+         char **s;
+ 
+         assert_return(client, -EINVAL);
+@@ -532,7 +531,6 @@ int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const
+ }
+ 
+ int sd_dhcp6_client_set_request_vendor_class(sd_dhcp6_client *client, char * const *vendor_class) {
+-        char * const *p;
+         char **s;
+ 
+         assert_return(client, -EINVAL);
+diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c
+index e332f6a2ab..26f782208e 100644
+--- a/src/libsystemd-network/sd-radv.c
++++ b/src/libsystemd-network/sd-radv.c
+@@ -800,7 +800,6 @@ int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime,
+                                char **search_list) {
+         _cleanup_free_ struct sd_radv_opt_dns *opt_dnssl = NULL;
+         size_t len = 0;
+-        char **s;
+         uint8_t *p;
+ 
+         assert_return(ra, -EINVAL);
+diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c
+index 0a4b3cbf68..42790ee3b4 100644
+--- a/src/libsystemd/sd-bus/bus-dump.c
++++ b/src/libsystemd/sd-bus/bus-dump.c
+@@ -412,8 +412,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) {
+ 
+         r = sd_bus_creds_get_cmdline(c, &cmdline);
+         if (r >= 0) {
+-                char **i;
+-
+                 fprintf(f, "%sCommandLine=%s", prefix, color);
+                 STRV_FOREACH(i, cmdline) {
+                         if (i != cmdline)
+@@ -478,8 +476,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) {
+                 fprintf(f, "%sUniqueName=%s%s%s", prefix, color, c->unique_name, suffix);
+ 
+         if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) {
+-                char **i;
+-
+                 fprintf(f, "%sWellKnownNames=%s", prefix, color);
+                 STRV_FOREACH(i, well_known) {
+                         if (i != well_known)
+diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
+index 12a50845db..d4da60717e 100644
+--- a/src/libsystemd/sd-bus/bus-match.c
++++ b/src/libsystemd/sd-bus/bus-match.c
+@@ -139,8 +139,6 @@ static bool value_node_test(
+                         return true;
+ 
+                 if (m->creds.mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) {
+-                        char **i;
+-
+                         /* on kdbus we have the well known names list
+                          * in the credentials, let's make use of that
+                          * for an accurate match */
+@@ -174,8 +172,6 @@ static bool value_node_test(
+                 return false;
+ 
+         case BUS_MATCH_ARG_HAS ... BUS_MATCH_ARG_HAS_LAST: {
+-                char **i;
+-
+                 STRV_FOREACH(i, value_strv)
+                         if (streq_ptr(node->value.str, *i))
+                                 return true;
+@@ -386,8 +382,6 @@ int bus_match_run(
+                 if (test_str)
+                         found = hashmap_get(node->compare.children, test_str);
+                 else if (test_strv) {
+-                        char **i;
+-
+                         STRV_FOREACH(i, test_strv) {
+                                 found = hashmap_get(node->compare.children, *i);
+                                 if (found) {
+diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
+index 96529b422b..b77372c3a0 100644
+--- a/src/libsystemd/sd-bus/bus-message.c
++++ b/src/libsystemd/sd-bus/bus-message.c
+@@ -2815,7 +2815,6 @@ _public_ int sd_bus_message_append_string_memfd(
+ }
+ 
+ _public_ int sd_bus_message_append_strv(sd_bus_message *m, char **l) {
+-        char **i;
+         int r;
+ 
+         assert_return(m, -EINVAL);
+diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
+index 40158a7326..35546afebc 100644
+--- a/src/libsystemd/sd-bus/bus-objects.c
++++ b/src/libsystemd/sd-bus/bus-objects.c
+@@ -109,7 +109,7 @@ static int add_enumerated_to_set(
+         assert(s);
+ 
+         LIST_FOREACH(enumerators, c, first) {
+-                char **children = NULL, **k;
++                char **children = NULL;
+                 sd_bus_slot *slot;
+ 
+                 if (bus->nodes_modified)
+@@ -2072,7 +2072,6 @@ static int emit_properties_changed_on_interface(
+         struct vtable_member key = {};
+         struct node_vtable *c;
+         struct node *n;
+-        char **property;
+         void *u = NULL;
+         int r;
+ 
+@@ -2854,7 +2853,6 @@ static int interfaces_added_append_one(
+ _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) {
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
+         struct node *object_manager;
+-        char **i;
+         int r;
+ 
+         assert_return(bus, -EINVAL);
+diff --git a/src/libsystemd/sd-bus/test-bus-address.c b/src/libsystemd/sd-bus/test-bus-address.c
+index 59421094c5..6de9f7cd57 100644
+--- a/src/libsystemd/sd-bus/test-bus-address.c
++++ b/src/libsystemd/sd-bus/test-bus-address.c
+@@ -27,7 +27,6 @@ static void test_bus_set_address_system_remote(char **args) {
+ 
+         assert_se(sd_bus_new(&b) >= 0);
+         if (!strv_isempty(args)) {
+-                char **a;
+                 STRV_FOREACH(a, args)
+                         test_one_address(b, *a, 0, NULL);
+                 return;
+diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
+index 37eda23a5f..d3898ba959 100644
+--- a/src/libsystemd/sd-device/device-private.c
++++ b/src/libsystemd/sd-device/device-private.c
+@@ -429,7 +429,6 @@ static int device_verify(sd_device *device) {
+ 
+ int device_new_from_strv(sd_device **ret, char **strv) {
+         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+-        char **key;
+         const char *major = NULL, *minor = NULL;
+         int r;
+ 
+diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c
+index 4a2ba02ad0..d9ba9d11d3 100644
+--- a/src/libsystemd/sd-journal/catalog.c
++++ b/src/libsystemd/sd-journal/catalog.c
+@@ -442,7 +442,6 @@ error:
+ 
+ int catalog_update(const char* database, const char* root, const char* const* dirs) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         _cleanup_(strbuf_freep) struct strbuf *sb = NULL;
+         _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
+         _cleanup_free_ CatalogItem *items = NULL;
+@@ -709,7 +708,6 @@ int catalog_list(FILE *f, const char *database, bool oneline) {
+ }
+ 
+ int catalog_list_items(FILE *f, const char *database, bool oneline, char **items) {
+-        char **item;
+         int r = 0;
+ 
+         STRV_FOREACH(item, items) {
+diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c
+index 7a6cc4aca3..ecd755c705 100644
+--- a/src/libsystemd/sd-journal/sd-journal.c
++++ b/src/libsystemd/sd-journal/sd-journal.c
+@@ -2029,7 +2029,6 @@ _public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f
+ 
+ _public_ int sd_journal_open_files(sd_journal **ret, const char **paths, int flags) {
+         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
+-        const char **path;
+         int r;
+ 
+         assert_return(ret, -EINVAL);
+diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
+index 182c74ed3d..469076ae23 100644
+--- a/src/libsystemd/sd-netlink/netlink-message.c
++++ b/src/libsystemd/sd-netlink/netlink-message.c
+@@ -258,7 +258,6 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type,
+ 
+ int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) {
+         size_t length, size;
+-        char * const *p;
+         int r;
+ 
+         assert_return(m, -EINVAL);
+diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
+index ff1e0d5f8e..8d9cfbc0af 100644
+--- a/src/libsystemd/sd-path/sd-path.c
++++ b/src/libsystemd/sd-path/sd-path.c
+@@ -669,7 +669,7 @@ _public_ int sd_path_lookup_strv(uint64_t type, const char *suffix, char ***path
+         if (!n)
+                 return -ENOMEM;
+ 
+-        char **i, **j = n;
++        char **j = n;
+         STRV_FOREACH(i, l) {
+                 *j = path_join(*i, suffix);
+                 if (!*j)
+diff --git a/src/locale/localectl.c b/src/locale/localectl.c
+index b5624209dc..661d54c27d 100644
+--- a/src/locale/localectl.c
++++ b/src/locale/localectl.c
+@@ -98,8 +98,6 @@ static void print_status_info(StatusInfo *i) {
+         if (strv_isempty(i->locale))
+                 puts("   System Locale: n/a");
+         else {
+-                char **j;
+-
+                 printf("   System Locale: %s\n", i->locale[0]);
+                 STRV_FOREACH(j, i->locale + 1)
+                         printf("                  %s\n", *j);
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index f3e6ef2db1..89bf9c6fba 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -346,7 +346,6 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
+         Context *c = userdata;
+         bool modified = false;
+         int interactive, r;
+-        char **i;
+         bool use_localegen;
+ 
+         assert(m);
+diff --git a/src/login/loginctl.c b/src/login/loginctl.c
+index 3e1916725d..4198f13f00 100644
+--- a/src/login/loginctl.c
++++ b/src/login/loginctl.c
+@@ -601,7 +601,6 @@ static int print_user_status_info(sd_bus *bus, const char *path, bool *new_line)
+                 printf("\t   State: %s\n", i.state);
+ 
+         if (!strv_isempty(i.sessions)) {
+-                char **l;
+                 printf("\tSessions:");
+ 
+                 STRV_FOREACH(l, i.sessions)
+@@ -662,7 +661,6 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line)
+         printf("%s\n", strna(i.id));
+ 
+         if (!strv_isempty(i.sessions)) {
+-                char **l;
+                 printf("\tSessions:");
+ 
+                 STRV_FOREACH(l, i.sessions) {
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index c05c0d02cc..31a41bd271 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -3947,7 +3947,6 @@ int manager_start_scope(
+                 char **job) {
+ 
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
+-        char **i;
+         int r;
+ 
+         assert(manager);
+diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
+index 5bd7efc3e8..2047dc1817 100644
+--- a/src/login/pam_systemd.c
++++ b/src/login/pam_systemd.c
+@@ -533,7 +533,6 @@ static int pam_putenv_and_log(pam_handle_t *handle, const char *e, bool debug) {
+ }
+ 
+ static int apply_user_record_settings(pam_handle_t *handle, UserRecord *ur, bool debug) {
+-        char **i;
+         int r;
+ 
+         assert(handle);
+diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
+index eda847cb4a..9e20d59389 100644
+--- a/src/modules-load/modules-load.c
++++ b/src/modules-load/modules-load.c
+@@ -194,7 +194,6 @@ static int run(int argc, char *argv[]) {
+ 
+         } else {
+                 _cleanup_strv_free_ char **files = NULL;
+-                char **fn, **i;
+ 
+                 STRV_FOREACH(i, arg_proc_cmdline_modules) {
+                         k = module_load_and_warn(ctx, *i, true);
+diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
+index c081ec673c..7d7f35253b 100644
+--- a/src/network/generator/network-generator.c
++++ b/src/network/generator/network-generator.c
+@@ -1132,7 +1132,6 @@ void network_dump(Network *network, FILE *f) {
+         Address *address;
+         Route *route;
+         const char *dhcp;
+-        char **dns;
+ 
+         assert(network);
+         assert(f);
+diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
+index 8e7fe11c18..7b15c281e3 100644
+--- a/src/network/netdev/netdev.c
++++ b/src/network/netdev/netdev.c
+@@ -866,7 +866,6 @@ int netdev_load_one(Manager *manager, const char *filename) {
+ 
+ int netdev_load(Manager *manager, bool reload) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         assert(manager);
+diff --git a/src/network/networkctl.c b/src/network/networkctl.c
+index c35f851bdb..3eb63efa9c 100644
+--- a/src/network/networkctl.c
++++ b/src/network/networkctl.c
+@@ -525,7 +525,6 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, b
+                 if (!strv_fnmatch_full(patterns, str, 0, &pos) &&
+                     !strv_fnmatch_full(patterns, name, 0, &pos)) {
+                         bool match = false;
+-                        char **p;
+ 
+                         STRV_FOREACH(p, altnames)
+                                 if (strv_fnmatch_full(patterns, *p, 0, &pos)) {
+diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
+index 9acfd17d49..41c8122b5a 100644
+--- a/src/network/networkd-dhcp-server.c
++++ b/src/network/networkd-dhcp-server.c
+@@ -206,8 +206,6 @@ static int link_push_uplink_to_dhcp_server(
+                 break;
+ 
+         case SD_DHCP_LEASE_NTP: {
+-                char **i;
+-
+                 /* For NTP things are similar, but for NTP hostnames can be configured too, which we cannot
+                  * propagate via DHCP. Hence let's only propagate those which are IP addresses. */
+ 
+diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c
+index fb1f50063e..dc9823c375 100644
+--- a/src/network/networkd-json.c
++++ b/src/network/networkd-json.c
+@@ -699,7 +699,6 @@ static int server_build_json_one_string(const char *str, NetworkConfigSource s,
+ static int ntp_build_json(Link *link, JsonVariant **ret) {
+         JsonVariant **elements = NULL;
+         size_t n = 0;
+-        char **p;
+         int r;
+ 
+         assert(link);
+@@ -878,7 +877,7 @@ static int domains_build_json(Link *link, bool is_route, JsonVariant **ret) {
+         JsonVariant **elements = NULL;
+         DHCPUseDomains use_domains;
+         union in_addr_union s;
+-        char **p, **domains;
++        char **domains;
+         const char *domain;
+         size_t n = 0;
+         int r;
+diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c
+index 765733b38c..4173eaa15f 100644
+--- a/src/network/networkd-link-bus.c
++++ b/src/network/networkd-link-bus.c
+@@ -81,7 +81,6 @@ int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_
+         _cleanup_strv_free_ char **ntp = NULL;
+         Link *l = userdata;
+         int r;
+-        char **i;
+ 
+         assert(message);
+         assert(l);
+@@ -484,7 +483,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
+         _cleanup_strv_free_ char **ntas = NULL;
+         Link *l = userdata;
+         int r;
+-        char **i;
+ 
+         assert(message);
+         assert(l);
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index 7bc391d68d..f409d1f33a 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -998,8 +998,6 @@ static void link_drop_requests(Link *link) {
+ }
+ 
+ static Link *link_drop(Link *link) {
+-        char **n;
+-
+         if (!link)
+                 return NULL;
+ 
+@@ -2280,7 +2278,6 @@ static int link_update_mtu(Link *link, sd_netlink_message *message) {
+ 
+ static int link_update_alternative_names(Link *link, sd_netlink_message *message) {
+         _cleanup_strv_free_ char **altnames = NULL;
+-        char **n;
+         int r;
+ 
+         assert(link);
+diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
+index f616f2c9bc..3be078b179 100644
+--- a/src/network/networkd-ndisc.c
++++ b/src/network/networkd-ndisc.c
+@@ -786,7 +786,6 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) {
+         struct in6_addr router;
+         uint32_t lifetime_sec;
+         bool updated = false;
+-        char **j;
+         int r;
+ 
+         assert(link);
+diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
+index 873ad2e703..03f09d730f 100644
+--- a/src/network/networkd-network.c
++++ b/src/network/networkd-network.c
+@@ -573,7 +573,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
+ 
+ int network_load(Manager *manager, OrderedHashmap **networks) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         assert(manager);
+diff --git a/src/nspawn/nspawn-bind-user.c b/src/nspawn/nspawn-bind-user.c
+index d3113c303e..c9386e91f7 100644
+--- a/src/nspawn/nspawn-bind-user.c
++++ b/src/nspawn/nspawn-bind-user.c
+@@ -203,7 +203,6 @@ int bind_user_prepare(
+ 
+         _cleanup_(bind_user_context_freep) BindUserContext *c = NULL;
+         uid_t current_uid = MAP_UID_START;
+-        char **n;
+         int r;
+ 
+         assert(custom_mounts);
+diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
+index 678fde3669..4379bd9b37 100644
+--- a/src/nspawn/nspawn-mount.c
++++ b/src/nspawn/nspawn-mount.c
+@@ -166,8 +166,6 @@ int custom_mount_prepare_all(const char *dest, CustomMount *l, size_t n) {
+                 }
+ 
+                 if (m->type == CUSTOM_MOUNT_OVERLAY) {
+-                        char **j;
+-
+                         STRV_FOREACH(j, m->lower) {
+                                 char *s;
+ 
+@@ -319,8 +317,6 @@ int overlay_mount_parse(CustomMount **l, size_t *n, const char *s, bool read_onl
+                 if (!destination)
+                         return -ENOMEM;
+         } else {
+-                char **i;
+-
+                 /* If more than two parameters are specified, the last one is the destination, the second to last one
+                  * the "upper", and all before that the "lower" directories. */
+ 
+diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c
+index 023b1e7e1a..fab4eb9609 100644
+--- a/src/nspawn/nspawn-network.c
++++ b/src/nspawn/nspawn-network.c
+@@ -288,7 +288,6 @@ int setup_veth_extra(
+ 
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         uint64_t idx = 0;
+-        char **a, **b;
+         int r;
+ 
+         assert(machine_name);
+@@ -495,7 +494,6 @@ int test_network_interface_initialized(const char *name) {
+ 
+ int move_network_interfaces(int netns_fd, char **ifaces) {
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+-        char **i;
+         int r;
+ 
+         if (strv_isempty(ifaces))
+@@ -532,7 +530,6 @@ int move_network_interfaces(int netns_fd, char **ifaces) {
+ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         unsigned idx = 0;
+-        char **i;
+         int r;
+ 
+         if (strv_isempty(ifaces))
+@@ -619,7 +616,6 @@ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
+ 
+ int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) {
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+-        char **i;
+         int r;
+ 
+         if (strv_isempty(ifaces))
+@@ -728,7 +724,6 @@ int veth_extra_parse(char ***l, const char *p) {
+ 
+ int remove_veth_links(const char *primary, char **pairs) {
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+-        char **a, **b;
+         int r;
+ 
+         /* In some cases the kernel might pin the veth links between host and container even after the namespace
+diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
+index 9e59d6a814..afdac67427 100644
+--- a/src/nspawn/nspawn-oci.c
++++ b/src/nspawn/nspawn-oci.c
+@@ -1892,7 +1892,6 @@ static int oci_seccomp_syscalls(const char *name, JsonVariant *v, JsonDispatchFl
+                 struct syscall_rule rule = {
+                         .action = UINT32_MAX,
+                 };
+-                char **i;
+ 
+                 r = json_dispatch(e, table, oci_unexpected, flags, &rule);
+                 if (r < 0)
+diff --git a/src/nspawn/nspawn-seccomp.c b/src/nspawn/nspawn-seccomp.c
+index c94512ef30..77f4c2ac88 100644
+--- a/src/nspawn/nspawn-seccomp.c
++++ b/src/nspawn/nspawn-seccomp.c
+@@ -140,7 +140,6 @@ static int add_syscall_filters(
+         };
+ 
+         _cleanup_strv_free_ char **added = NULL;
+-        char **p;
+         int r;
+ 
+         for (size_t i = 0; i < ELEMENTSOF(allow_list); i++) {
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 1333a8702a..dd1cdb74b7 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -3149,7 +3149,6 @@ static int patch_sysctl(void) {
+         };
+ 
+         unsigned long flags;
+-        char **k, **v;
+         int r;
+ 
+         flags = effective_clone_ns_flags();
+diff --git a/src/nss-systemd/userdb-glue.c b/src/nss-systemd/userdb-glue.c
+index 002e6925f9..c69667d660 100644
+--- a/src/nss-systemd/userdb-glue.c
++++ b/src/nss-systemd/userdb-glue.c
+@@ -217,7 +217,7 @@ int nss_pack_group_record(
+                 char *buffer,
+                 size_t buflen) {
+ 
+-        char **array = NULL, *p, **m;
++        char **array = NULL, *p;
+         size_t required, n = 0, i = 0;
+ 
+         assert(g);
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index 509cf69b5d..2f70796e58 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -1404,7 +1404,6 @@ static int context_read_definitions(
+ 
+         _cleanup_strv_free_ char **files = NULL;
+         Partition *last = NULL;
+-        char **f;
+         int r;
+ 
+         assert(context);
+@@ -2832,7 +2831,6 @@ static int context_copy_blocks(Context *context) {
+ }
+ 
+ static int do_copy_files(Partition *p, const char *fs) {
+-        char **source, **target;
+         int r;
+ 
+         assert(p);
+@@ -2929,7 +2927,6 @@ static int do_copy_files(Partition *p, const char *fs) {
+ }
+ 
+ static int do_make_directories(Partition *p, const char *fs) {
+-        char **d;
+         int r;
+ 
+         assert(p);
+diff --git a/src/portable/portable.c b/src/portable/portable.c
+index bdc10da36f..5be7ea854d 100644
+--- a/src/portable/portable.c
++++ b/src/portable/portable.c
+@@ -58,7 +58,6 @@ static bool prefix_match(const char *unit, const char *prefix) {
+ 
+ static bool unit_match(const char *unit, char **matches) {
+         const char *dot;
+-        char **i;
+ 
+         dot = strrchr(unit, '.');
+         if (!dot)
+@@ -182,7 +181,6 @@ static int extract_now(
+         _cleanup_close_ int os_release_fd = -1;
+         _cleanup_free_ char *os_release_path = NULL;
+         const char *os_release_id;
+-        char **i;
+         int r;
+ 
+         /* Extracts the metadata from a directory tree 'where'. Extracts two kinds of information: the /etc/os-release
+@@ -527,8 +525,6 @@ static int extract_image_and_extensions(
+                 return r;
+ 
+         if (!strv_isempty(extension_image_paths)) {
+-                char **p;
+-
+                 extension_images = ordered_hashmap_new(&image_hash_ops);
+                 if (!extension_images)
+                         return -ENOMEM;
+@@ -1224,8 +1220,6 @@ static int install_image_and_extensions_symlinks(
+ }
+ 
+ static bool prefix_matches_compatible(char **matches, char **valid_prefixes) {
+-        char **m;
+-
+         /* Checks if all 'matches' are included in the list of 'valid_prefixes' */
+ 
+         STRV_FOREACH(m, matches)
+@@ -1342,7 +1336,6 @@ int portable_attach(
+ 
+ static bool marker_matches_images(const char *marker, const char *name_or_path, char **extension_image_paths) {
+         _cleanup_strv_free_ char **root_and_extensions = NULL;
+-        char **image_name_or_path;
+         const char *a;
+         int r;
+ 
+diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c
+index 60feac6f5d..f4c57e14ae 100644
+--- a/src/portable/portablectl.c
++++ b/src/portable/portablectl.c
+@@ -90,7 +90,6 @@ static int determine_image(const char *image, bool permit_non_existing, char **r
+ }
+ 
+ static int attach_extensions_to_message(sd_bus_message *m, char **extensions) {
+-        char **p;
+         int r;
+ 
+         assert(m);
+@@ -1067,7 +1066,6 @@ static int dump_profiles(void) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_strv_free_ char **l = NULL;
+-        char **i;
+         int r;
+ 
+         r = acquire_bus(&bus);
+diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
+index 5b3ceeff36..96a505f5e1 100644
+--- a/src/resolve/resolvectl.c
++++ b/src/resolve/resolvectl.c
+@@ -705,7 +705,6 @@ invalid:
+ 
+ static int verb_query(int argc, char **argv, void *userdata) {
+         sd_bus *bus = userdata;
+-        char **p;
+         int q, r = 0;
+ 
+         if (arg_type != 0)
+@@ -975,7 +974,6 @@ static int resolve_openpgp(sd_bus *bus, const char *address) {
+ 
+ static int verb_openpgp(int argc, char **argv, void *userdata) {
+         sd_bus *bus = userdata;
+-        char **p;
+         int q, r = 0;
+ 
+         STRV_FOREACH(p, argv + 1) {
+@@ -1025,7 +1023,7 @@ static bool service_family_is_valid(const char *s) {
+ 
+ static int verb_tlsa(int argc, char **argv, void *userdata) {
+         sd_bus *bus = userdata;
+-        char **p, **args = argv + 1;
++        char **args = argv + 1;
+         const char *family = "tcp";
+         int q, r = 0;
+ 
+@@ -1389,7 +1387,6 @@ static int status_print_strv_ifindex(int ifindex, const char *ifname, char **p)
+                 printf("%s%nGlobal%n%s:", ansi_highlight(), &pos1, &pos2, ansi_normal());
+ 
+         size_t cols = columns(), position = pos2 - pos1 + 2;
+-        char **i;
+ 
+         STRV_FOREACH(i, p) {
+                 size_t our_len = utf8_console_width(*i); /* This returns -1 on invalid utf-8 (which shouldn't happen).
+@@ -2025,7 +2022,6 @@ static int verb_status(int argc, char **argv, void *userdata) {
+         int r = 0;
+ 
+         if (argc > 1) {
+-                char **ifname;
+                 bool empty_line = false;
+ 
+                 STRV_FOREACH(ifname, argv + 1) {
+@@ -2049,7 +2045,6 @@ static int verb_status(int argc, char **argv, void *userdata) {
+ 
+ static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_error *error, bool extended) {
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
+-        char **p;
+         int r;
+ 
+         r = bus_message_new_method_call(bus, &req, locator, extended ? "SetLinkDNSEx" : "SetLinkDNS");
+@@ -2157,7 +2152,6 @@ static int verb_dns(int argc, char **argv, void *userdata) {
+ 
+ static int call_domain(sd_bus *bus, char **domain, const BusLocator *locator, sd_bus_error *error) {
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
+-        char **p;
+         int r;
+ 
+         r = bus_message_new_method_call(bus, &req, locator, "SetLinkDomains");
+@@ -2454,7 +2448,6 @@ static int call_nta(sd_bus *bus, char **nta, const BusLocator *locator,  sd_bus_
+ static int verb_nta(int argc, char **argv, void *userdata) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+         sd_bus *bus = userdata;
+-        char **p;
+         int r;
+         bool clear;
+ 
+diff --git a/src/resolve/resolved-dns-trust-anchor.c b/src/resolve/resolved-dns-trust-anchor.c
+index b036aa402c..4a6c06d13d 100644
+--- a/src/resolve/resolved-dns-trust-anchor.c
++++ b/src/resolve/resolved-dns-trust-anchor.c
+@@ -409,7 +409,6 @@ static int dns_trust_anchor_load_files(
+                 int (*loader)(DnsTrustAnchor *d, const char *path, unsigned n, const char *line)) {
+ 
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         assert(d);
+diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c
+index ab2773e4e4..a05bd20199 100644
+--- a/src/resolve/resolved-dnssd.c
++++ b/src/resolve/resolved-dnssd.c
+@@ -186,7 +186,6 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
+ 
+ int dnssd_load(Manager *manager) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         assert(manager);
+diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c
+index 9af3a27bb1..c33bbbeb79 100644
+--- a/src/resolve/resolved-etc-hosts.c
++++ b/src/resolve/resolved-etc-hosts.c
+@@ -189,7 +189,6 @@ static void strip_localhost(EtcHosts *hosts) {
+ 
+         for (size_t j = 0; j < ELEMENTSOF(local_in_addrs); j++) {
+                 bool all_localhost, in_order;
+-                char **i;
+ 
+                 item = hashmap_get(hosts->by_address, local_in_addrs + j);
+                 if (!item)
+@@ -389,8 +388,6 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) {
+                 }
+ 
+                 if (found_ptr) {
+-                        char **n;
+-
+                         r = dns_answer_reserve(answer, strv_length(item->names));
+                         if (r < 0)
+                                 return r;
+diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c
+index 8d533d7ecf..97f6eb70ca 100644
+--- a/src/resolve/resolved-link-bus.c
++++ b/src/resolve/resolved-link-bus.c
+@@ -706,7 +706,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
+         _cleanup_free_ char *j = NULL;
+         Link *l = userdata;
+         int r;
+-        char **i;
+ 
+         assert(message);
+         assert(l);
+diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c
+index 6c910498a2..e6b46aed8e 100644
+--- a/src/resolve/resolved-link.c
++++ b/src/resolve/resolved-link.c
+@@ -282,7 +282,6 @@ static int link_update_dns_server_one(Link *l, const char *str) {
+ 
+ static int link_update_dns_servers(Link *l) {
+         _cleanup_strv_free_ char **nameservers = NULL;
+-        char **nameserver;
+         int r;
+ 
+         assert(l);
+@@ -511,7 +510,6 @@ static int link_update_search_domain_one(Link *l, const char *name, bool route_o
+ 
+ static int link_update_search_domains(Link *l) {
+         _cleanup_strv_free_ char **sdomains = NULL, **rdomains = NULL;
+-        char **i;
+         int r, q;
+ 
+         assert(l);
+diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c
+index 1cf14e71fc..fb62209704 100644
+--- a/src/run-generator/run-generator.c
++++ b/src/run-generator/run-generator.c
+@@ -55,7 +55,6 @@ static int parse(const char *key, const char *value, void *data) {
+ static int generate(void) {
+         _cleanup_fclose_ FILE *f = NULL;
+         const char *p;
+-        char **c;
+         int r;
+ 
+         if (strv_isempty(arg_commands) && !arg_success_action)
+diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c
+index 3f286a888b..2bdc529b80 100644
+--- a/src/shared/acl-util.c
++++ b/src/shared/acl-util.c
+@@ -212,7 +212,6 @@ int acl_search_groups(const char *path, char ***ret_groups) {
+ int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) {
+         _cleanup_free_ char **a = NULL, **d = NULL; /* strings are not freed */
+         _cleanup_strv_free_ char **split = NULL;
+-        char **entry;
+         int r = -EINVAL;
+         _cleanup_(acl_freep) acl_t a_acl = NULL, d_acl = NULL;
+ 
+diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
+index a17375eb4c..4c39ce2f0e 100644
+--- a/src/shared/bootspec.c
++++ b/src/shared/bootspec.c
+@@ -256,7 +256,6 @@ static int boot_entries_find(
+                 size_t *n_entries) {
+ 
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         assert(root);
+@@ -771,8 +770,6 @@ int boot_entries_augment_from_loader(
+                 "auto-reboot-to-firmware-setup", "Reboot Into Firmware Interface",
+         };
+ 
+-        char **i;
+-
+         assert(config);
+ 
+         /* Let's add the entries discovered by the boot loader to the end of our list, unless they are
+@@ -780,7 +777,6 @@ int boot_entries_augment_from_loader(
+ 
+         STRV_FOREACH(i, found_by_loader) {
+                 _cleanup_free_ char *c = NULL, *t = NULL, *p = NULL;
+-                char **a, **b;
+ 
+                 if (boot_config_has_entry(config, *i))
+                         continue;
+diff --git a/src/shared/bus-polkit.c b/src/shared/bus-polkit.c
+index bbe04bea37..4d733a8173 100644
+--- a/src/shared/bus-polkit.c
++++ b/src/shared/bus-polkit.c
+@@ -36,7 +36,6 @@ static int bus_message_append_strv_key_value(
+                 sd_bus_message *m,
+                 const char **l) {
+ 
+-        const char **k, **v;
+         int r;
+ 
+         assert(m);
+diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
+index ef134bcee4..c211fe34d5 100644
+--- a/src/shared/bus-unit-util.c
++++ b/src/shared/bus-unit-util.c
+@@ -1674,7 +1674,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
+ 
+         if (streq(field, "RootImageOptions")) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **first = NULL, **second = NULL;
+                 const char *p = eq;
+ 
+                 r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv");
+@@ -2023,7 +2022,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
+                         if (r < 0)
+                                 return bus_log_create_error(r);
+ 
+-                        char **source, **destination;
+                         STRV_FOREACH_PAIR(source, destination, symlinks) {
+                                 r = sd_bus_message_append(m, "(sst)", *source, *destination, 0);
+                                 if (r < 0)
+@@ -2647,7 +2645,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const cha
+ }
+ 
+ int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l) {
+-        char **i;
+         int r;
+ 
+         assert(m);
+diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
+index 4a2b7684bc..a907b67a70 100644
+--- a/src/shared/bus-util.c
++++ b/src/shared/bus-util.c
+@@ -490,7 +490,6 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send
+ 
+ int bus_track_add_name_many(sd_bus_track *t, char **l) {
+         int r = 0;
+-        char **i;
+ 
+         assert(t);
+ 
+@@ -562,7 +561,6 @@ int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *descri
+ 
+ int bus_reply_pair_array(sd_bus_message *m, char **l) {
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+-        char **k, **v;
+         int r;
+ 
+         assert(m);
+diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c
+index 8bda66ca36..3532d55286 100644
+--- a/src/shared/cgroup-setup.c
++++ b/src/shared/cgroup-setup.c
+@@ -22,7 +22,6 @@
+ static int cg_any_controller_used_for_v1(void) {
+         _cleanup_free_ char *buf = NULL;
+         _cleanup_strv_free_ char **lines = NULL;
+-        char **line;
+         int r;
+ 
+         r = read_full_virtual_file("/proc/cgroups", &buf, NULL);
+diff --git a/src/shared/condition.c b/src/shared/condition.c
+index 21f3714eba..d0f2ebfc23 100644
+--- a/src/shared/condition.c
++++ b/src/shared/condition.c
+@@ -830,7 +830,6 @@ static int condition_test_first_boot(Condition *c, char **env) {
+ 
+ static int condition_test_environment(Condition *c, char **env) {
+         bool equal;
+-        char **i;
+ 
+         assert(c);
+         assert(c->parameter);
+diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
+index 1e1967d7ea..d19041207c 100644
+--- a/src/shared/conf-parser.c
++++ b/src/shared/conf-parser.c
+@@ -474,7 +474,6 @@ static int config_parse_many_files(
+ 
+         _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
+         struct stat st;
+-        char **fn;
+         int r;
+ 
+         if (ret_stats_by_path) {
+diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c
+index 1d432328e7..3f1644ea85 100644
+--- a/src/shared/discover-image.c
++++ b/src/shared/discover-image.c
+@@ -632,7 +632,6 @@ int image_remove(Image *i) {
+         _cleanup_(release_lock_file) LockFile global_lock = LOCK_FILE_INIT, local_lock = LOCK_FILE_INIT;
+         _cleanup_strv_free_ char **settings = NULL;
+         _cleanup_free_ char *roothash = NULL;
+-        char **j;
+         int r;
+ 
+         assert(i);
+@@ -695,10 +694,9 @@ int image_remove(Image *i) {
+                 return -EOPNOTSUPP;
+         }
+ 
+-        STRV_FOREACH(j, settings) {
++        STRV_FOREACH(j, settings)
+                 if (unlink(*j) < 0 && errno != ENOENT)
+                         log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", *j);
+-        }
+ 
+         if (unlink(roothash) < 0 && errno != ENOENT)
+                 log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", roothash);
+@@ -724,7 +722,6 @@ int image_rename(Image *i, const char *new_name) {
+         _cleanup_free_ char *new_path = NULL, *nn = NULL, *roothash = NULL;
+         _cleanup_strv_free_ char **settings = NULL;
+         unsigned file_attr = 0;
+-        char **j;
+         int r;
+ 
+         assert(i);
+@@ -845,7 +842,6 @@ int image_clone(Image *i, const char *new_name, bool read_only) {
+         _cleanup_strv_free_ char **settings = NULL;
+         _cleanup_free_ char *roothash = NULL;
+         const char *new_path;
+-        char **j;
+         int r;
+ 
+         assert(i);
+diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
+index b38f16c37a..79438c69d2 100644
+--- a/src/shared/dissect-image.c
++++ b/src/shared/dissect-image.c
+@@ -2208,7 +2208,6 @@ static int validate_signature_userspace(const VeritySettings *verity) {
+         _cleanup_(BIO_freep) BIO *bio = NULL; /* 'bio' must be freed first, 's' second, hence keep this order
+                                                * of declaration in place, please */
+         const unsigned char *d;
+-        char **i;
+         int r;
+ 
+         assert(verity);
+diff --git a/src/shared/dropin.c b/src/shared/dropin.c
+index eb016eb114..375a3ca600 100644
+--- a/src/shared/dropin.c
++++ b/src/shared/dropin.c
+@@ -232,7 +232,6 @@ int unit_file_find_dropin_paths(
+ 
+         _cleanup_strv_free_ char **dirs = NULL;
+         const char *n;
+-        char **p;
+         int r;
+ 
+         assert(ret);
+diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c
+index b93de9c922..918f997e5a 100644
+--- a/src/shared/exec-util.c
++++ b/src/shared/exec-util.c
+@@ -91,7 +91,6 @@ static int do_execute(
+ 
+         _cleanup_hashmap_free_free_ Hashmap *pids = NULL;
+         _cleanup_strv_free_ char **paths = NULL;
+-        char **path, **e;
+         int r;
+         bool parallel_execution;
+ 
+@@ -254,7 +253,7 @@ int execute_directories(
+ }
+ 
+ static int gather_environment_generate(int fd, void *arg) {
+-        char ***env = arg, **x, **y;
++        char ***env = arg;
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_strv_free_ char **new = NULL;
+         int r;
+@@ -369,7 +368,6 @@ static int gather_environment_consume(int fd, void *arg) {
+ 
+ int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags) {
+         ExecCommandFlags ex_flag, ret_flags = 0;
+-        char **opt;
+ 
+         assert(flags);
+ 
+diff --git a/src/shared/format-table.c b/src/shared/format-table.c
+index b95680b365..b756c5286b 100644
+--- a/src/shared/format-table.c
++++ b/src/shared/format-table.c
+@@ -1364,7 +1364,6 @@ static char* format_strv_width(char **strv, size_t column_width) {
+                 return NULL;
+ 
+         size_t position = 0;
+-        char **p;
+         STRV_FOREACH(p, strv) {
+                 size_t our_len = utf8_console_width(*p); /* This returns -1 on invalid utf-8 (which shouldn't happen).
+                                                           * If that happens, we'll just print one item per line. */
+diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c
+index fe4785f3e5..f98d03f766 100644
+--- a/src/shared/hwdb-util.c
++++ b/src/shared/hwdb-util.c
+@@ -434,7 +434,7 @@ static int trie_store(struct trie *trie, const char *filename, bool compat) {
+ 
+ static int insert_data(struct trie *trie, char **match_list, char *line, const char *filename,
+                        uint16_t file_priority, uint32_t line_number, bool compat) {
+-        char *value, **entry;
++        char *value;
+ 
+         assert(line[0] == ' ');
+ 
+@@ -583,7 +583,6 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co
+         _cleanup_free_ char *hwdb_bin = NULL;
+         _cleanup_(trie_freep) struct trie *trie = NULL;
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         uint16_t file_priority = 1;
+         int r = 0, err;
+ 
+diff --git a/src/shared/install.c b/src/shared/install.c
+index f1ee3c2716..785ef55dbd 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -874,7 +874,6 @@ static int find_symlinks_in_scope(
+         bool same_name_link_runtime = false, same_name_link_config = false;
+         bool enabled_in_runtime = false, enabled_at_all = false;
+         bool ignore_same_name = false;
+-        char **p;
+         int r;
+ 
+         assert(lp);
+@@ -1381,7 +1380,6 @@ static int unit_file_search(
+         _cleanup_free_ char *template = NULL;
+         bool found_unit = false;
+         int r, result;
+-        char **p;
+ 
+         assert(info);
+         assert(lp);
+@@ -1796,7 +1794,6 @@ static int install_info_symlink_alias(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        char **s;
+         int r = 0, q;
+ 
+         assert(info);
+@@ -1846,7 +1843,6 @@ static int install_info_symlink_wants(
+         _cleanup_free_ char *buf = NULL;
+         UnitNameFlags valid_dst_type = UNIT_NAME_ANY;
+         const char *n;
+-        char **s;
+         int r = 0, q;
+ 
+         assert(info);
+@@ -2150,7 +2146,6 @@ int unit_file_mask(
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         const char *config_path;
+-        char **i;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2199,7 +2194,6 @@ int unit_file_unmask(
+         _cleanup_strv_free_ char **todo = NULL;
+         const char *config_path;
+         size_t n_todo = 0;
+-        char **i;
+         int r, q;
+ 
+         assert(scope >= 0);
+@@ -2291,7 +2285,6 @@ int unit_file_link(
+         _cleanup_strv_free_ char **todo = NULL;
+         const char *config_path;
+         size_t n_todo = 0;
+-        char **i;
+         int r, q;
+ 
+         assert(scope >= 0);
+@@ -2391,7 +2384,6 @@ int unit_file_revert(
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_strv_free_ char **todo = NULL;
+         size_t n_todo = 0;
+-        char **i;
+         int r, q;
+ 
+         /* Puts a unit file back into vendor state. This means:
+@@ -2411,7 +2403,6 @@ int unit_file_revert(
+ 
+         STRV_FOREACH(i, files) {
+                 bool has_vendor = false;
+-                char **p;
+ 
+                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                         return -EINVAL;
+@@ -2495,7 +2486,6 @@ int unit_file_revert(
+         STRV_FOREACH(i, todo) {
+                 _cleanup_strv_free_ char **fs = NULL;
+                 const char *rp;
+-                char **j;
+ 
+                 (void) get_files_in_directory(*i, &fs);
+ 
+@@ -2548,7 +2538,6 @@ int unit_file_add_dependency(
+         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+         UnitFileInstallInfo *info, *target_info;
+         const char *config_path;
+-        char **f;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2617,7 +2606,6 @@ int unit_file_enable(
+         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+         const char *config_path;
+         UnitFileInstallInfo *info;
+-        char **f;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2661,7 +2649,6 @@ int unit_file_disable(
+         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+         const char *config_path;
+-        char **i;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2979,7 +2966,6 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char *
+ static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) {
+         _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {};
+         _cleanup_strv_free_ char **files = NULL;
+-        char **p;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -3097,7 +3083,6 @@ static int pattern_match_multiple_instances(
+         if (unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) {
+                 _cleanup_strv_free_ char **out_strv = NULL;
+ 
+-                char **iter;
+                 STRV_FOREACH(iter, rule.instances) {
+                         _cleanup_free_ char *name = NULL;
+ 
+@@ -3144,11 +3129,10 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char
+                 log_debug("Preset files don't specify rule for %s. Enabling.", name);
+                 return 1;
+         case PRESET_ENABLE:
+-                if (instance_name_list && *instance_name_list) {
+-                        char **s;
++                if (instance_name_list && *instance_name_list)
+                         STRV_FOREACH(s, *instance_name_list)
+                                 log_debug("Preset files say enable %s.", *s);
+-                } else
++                else
+                         log_debug("Preset files say enable %s.", name);
+                 return 1;
+         case PRESET_DISABLE:
+@@ -3254,15 +3238,14 @@ static int preset_prepare_one(
+                 return r;
+ 
+         if (r > 0) {
+-                if (instance_name_list) {
+-                        char **s;
++                if (instance_name_list)
+                         STRV_FOREACH(s, instance_name_list) {
+                                 r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                                     &info, changes, n_changes);
+                                 if (r < 0)
+                                         return r;
+                         }
+-                } else {
++                else {
+                         r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                             &info, changes, n_changes);
+                         if (r < 0)
+@@ -3289,7 +3272,6 @@ int unit_file_preset(
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
+         const char *config_path;
+-        char **i;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -3329,7 +3311,6 @@ int unit_file_preset_all(
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
+         const char *config_path = NULL;
+-        char **i;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -3401,7 +3382,6 @@ int unit_file_get_list(
+                 char **patterns) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        char **dirname;
+         int r;
+ 
+         assert(scope >= 0);
+diff --git a/src/shared/libcrypt-util.c b/src/shared/libcrypt-util.c
+index 5b315413aa..0d72032f53 100644
+--- a/src/shared/libcrypt-util.c
++++ b/src/shared/libcrypt-util.c
+@@ -197,7 +197,6 @@ int test_password_one(const char *hashed_password, const char *password) {
+ }
+ 
+ int test_password_many(char **hashed_password, const char *password) {
+-        char **hpw;
+         int r;
+ 
+         STRV_FOREACH(hpw, hashed_password) {
+diff --git a/src/shared/libfido2-util.c b/src/shared/libfido2-util.c
+index 87b88f04d6..8c9fa88e32 100644
+--- a/src/shared/libfido2-util.c
++++ b/src/shared/libfido2-util.c
+@@ -313,8 +313,6 @@ static int fido2_use_hmac_hash_specific_token(
+                 bool retry_with_up = false, retry_with_pin = false;
+ 
+                 if (FLAGS_SET(required, FIDO2ENROLL_PIN)) {
+-                        char **i;
+-
+                         /* OK, we need a pin, try with all pins in turn */
+                         if (strv_isempty(pins))
+                                 r = FIDO_ERR_PIN_REQUIRED;
+@@ -683,7 +681,6 @@ int fido2_generate_hmac_hash(
+ 
+                 for (;;) {
+                         _cleanup_(strv_free_erasep) char **pin = NULL;
+-                        char **i;
+ 
+                         r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin);
+                         if (r < 0)
+diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c
+index 7eadff3ace..975c027f47 100644
+--- a/src/shared/mount-setup.c
++++ b/src/shared/mount-setup.c
+@@ -244,8 +244,6 @@ static const char *join_with(const char *controller) {
+                 NULL
+         };
+ 
+-        const char *const *x, *const *y;
+-
+         assert(controller);
+ 
+         /* This will lookup which controller to mount another controller with. Input is a controller name, and output
+@@ -433,7 +431,6 @@ static int relabel_cgroup_filesystems(void) {
+ 
+ static int relabel_extra(void) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **file;
+         int r, c = 0;
+ 
+         /* Support for relabelling additional files or directories after loading the policy. For this, code in the
+diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c
+index c75c02f5be..12c7044f04 100644
+--- a/src/shared/mount-util.c
++++ b/src/shared/mount-util.c
+@@ -274,7 +274,6 @@ int bind_remount_recursive_with_mountinfo(
+                          * we shall operate on. */
+                         if (!path_equal(path, prefix)) {
+                                 bool deny_listed = false;
+-                                char **i;
+ 
+                                 STRV_FOREACH(i, deny_list) {
+                                         if (path_equal(*i, prefix))
+diff --git a/src/shared/net-condition.c b/src/shared/net-condition.c
+index 006676d973..2bb4c0b509 100644
+--- a/src/shared/net-condition.c
++++ b/src/shared/net-condition.c
+@@ -46,7 +46,6 @@ bool net_match_is_empty(const NetMatch *match) {
+ }
+ 
+ static bool net_condition_test_strv(char * const *patterns, const char *string) {
+-        char * const *p;
+         bool match = false, has_positive_rule = false;
+ 
+         if (strv_isempty(patterns))
+@@ -77,7 +76,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname
+         if (net_condition_test_strv(patterns, ifname))
+                 return true;
+ 
+-        char * const *p;
+         STRV_FOREACH(p, alternative_names)
+                 if (net_condition_test_strv(patterns, *p))
+                         return true;
+@@ -86,8 +84,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname
+ }
+ 
+ static int net_condition_test_property(char * const *match_property, sd_device *device) {
+-        char * const *p;
+-
+         if (strv_isempty(match_property))
+                 return true;
+ 
+diff --git a/src/shared/nscd-flush.c b/src/shared/nscd-flush.c
+index 0655030633..95dfe24b22 100644
+--- a/src/shared/nscd-flush.c
++++ b/src/shared/nscd-flush.c
+@@ -132,7 +132,6 @@ static int nscd_flush_cache_one(const char *database, usec_t end) {
+ int nscd_flush_cache(char **databases) {
+         usec_t end;
+         int r = 0;
+-        char **i;
+ 
+         /* Tries to invalidate the specified database in nscd. We do this carefully, with a 5s timeout, so that we
+          * don't block indefinitely on another service. */
+diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c
+index 67ea44515a..4f9ec1fbd6 100644
+--- a/src/shared/pkcs11-util.c
++++ b/src/shared/pkcs11-util.c
+@@ -275,7 +275,7 @@ int pkcs11_token_login(
+ 
+         for (unsigned tries = 0; tries < 3; tries++) {
+                 _cleanup_strv_free_erase_ char **passwords = NULL;
+-                char **i, *e;
++                char *e;
+ 
+                 e = getenv("PIN");
+                 if (e) {
+diff --git a/src/shared/pretty-print.c b/src/shared/pretty-print.c
+index 26daec3450..98619c25d4 100644
+--- a/src/shared/pretty-print.c
++++ b/src/shared/pretty-print.c
+@@ -168,7 +168,6 @@ static int cat_file(const char *filename, bool newline) {
+ }
+ 
+ int cat_files(const char *file, char **dropins, CatFlags flags) {
+-        char **path;
+         int r;
+ 
+         if (file) {
+@@ -284,10 +283,9 @@ static int guess_type(const char **name, char ***prefixes, bool *is_collection,
+ int conf_files_cat(const char *root, const char *name) {
+         _cleanup_strv_free_ char **dirs = NULL, **files = NULL;
+         _cleanup_free_ char *path = NULL;
+-        char **prefix, **prefixes = NULL; /* explicit initialization to appease gcc */
++        char **prefixes = NULL; /* explicit initialization to appease gcc */
+         bool is_collection;
+         const char *extension;
+-        char **t;
+         int r;
+ 
+         r = guess_type(&name, &prefixes, &is_collection, &extension);
+diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c
+index 32bd8aa73b..e597a156cf 100644
+--- a/src/shared/seccomp-util.c
++++ b/src/shared/seccomp-util.c
+@@ -1837,7 +1837,6 @@ int seccomp_restrict_archs(Set *archs) {
+ 
+ int parse_syscall_archs(char **l, Set **ret_archs) {
+         _cleanup_set_free_ Set *archs = NULL;
+-        char **s;
+         int r;
+ 
+         assert(l);
+diff --git a/src/shared/serialize.c b/src/shared/serialize.c
+index 47996b9ead..cd48286355 100644
+--- a/src/shared/serialize.c
++++ b/src/shared/serialize.c
+@@ -117,7 +117,6 @@ int serialize_dual_timestamp(FILE *f, const char *name, const dual_timestamp *t)
+ 
+ int serialize_strv(FILE *f, const char *key, char **l) {
+         int ret = 0, r;
+-        char **i;
+ 
+         /* Returns the first error, or positive if anything was serialized, 0 otherwise. */
+ 
+diff --git a/src/shared/tests.c b/src/shared/tests.c
+index 307f796fe2..70fbbb45a5 100644
+--- a/src/shared/tests.c
++++ b/src/shared/tests.c
+@@ -51,7 +51,6 @@ static void load_testdata_env(void) {
+         _cleanup_free_ char *s = NULL;
+         _cleanup_free_ char *envpath = NULL;
+         _cleanup_strv_free_ char **pairs = NULL;
+-        char **k, **v;
+ 
+         if (called)
+                 return;
+diff --git a/src/shared/user-record-show.c b/src/shared/user-record-show.c
+index 7c2751f3a7..95895a8e45 100644
+--- a/src/shared/user-record-show.c
++++ b/src/shared/user-record-show.c
+@@ -143,7 +143,6 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
+                         break;
+                 }
+                 bool has_valid_passwords = false;
+-                char **p;
+                 STRV_FOREACH(p, hr->hashed_password)
+                         if (!hashed_password_is_locked_or_invalid(*p)) {
+                                 has_valid_passwords = true;
+@@ -240,15 +239,12 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
+         if (hr->preferred_language)
+                 printf("    Language: %s\n", hr->preferred_language);
+ 
+-        if (!strv_isempty(hr->environment)) {
+-                char **i;
+-
++        if (!strv_isempty(hr->environment))
+                 STRV_FOREACH(i, hr->environment) {
+                         printf(i == hr->environment ?
+                                " Environment: %s\n" :
+                                "              %s\n", *i);
+                 }
+-        }
+ 
+         if (hr->locked >= 0)
+                 printf("      Locked: %s\n", yes_no(hr->locked));
+@@ -478,14 +474,11 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
+         if (!strv_isempty(hr->ssh_authorized_keys))
+                 printf("SSH Pub. Key: %zu\n", strv_length(hr->ssh_authorized_keys));
+ 
+-        if (!strv_isempty(hr->pkcs11_token_uri)) {
+-                char **i;
+-
++        if (!strv_isempty(hr->pkcs11_token_uri))
+                 STRV_FOREACH(i, hr->pkcs11_token_uri)
+                         printf(i == hr->pkcs11_token_uri ?
+                                "PKCS11 Token: %s\n" :
+                                "              %s\n", *i);
+-        }
+ 
+         if (hr->n_fido2_hmac_credential > 0)
+                 printf(" FIDO2 Token: %zu\n", hr->n_fido2_hmac_credential);
+@@ -558,7 +551,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) {
+                 }
+         } else {
+                 const char *prefix = "     Members:";
+-                char **i;
+ 
+                 STRV_FOREACH(i, gr->members) {
+                         printf("%s %s\n", prefix, *i);
+@@ -568,7 +560,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) {
+ 
+         if (!strv_isempty(gr->administrators)) {
+                 const char *prefix = "      Admins:";
+-                char **i;
+ 
+                 STRV_FOREACH(i, gr->administrators) {
+                         printf("%s %s\n", prefix, *i);
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index 7064f3a905..f108529bbd 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -85,7 +85,6 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca
+ 
+ static int write_mode(char **modes) {
+         int r = 0;
+-        char **mode;
+ 
+         STRV_FOREACH(mode, modes) {
+                 int k;
+@@ -103,7 +102,6 @@ static int write_mode(char **modes) {
+ }
+ 
+ static int write_state(FILE **f, char **states) {
+-        char **state;
+         int r = 0;
+ 
+         assert(f);
+diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
+index 408ac3b8be..24c8baab03 100644
+--- a/src/sysctl/sysctl.c
++++ b/src/sysctl/sysctl.c
+@@ -51,8 +51,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Option*, option_free);
+ DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(option_hash_ops, char, string_hash_func, string_compare_func, Option, option_free);
+ 
+ static bool test_prefix(const char *p) {
+-        char **i;
+-
+         if (strv_isempty(arg_prefixes))
+                 return true;
+ 
+@@ -131,7 +129,6 @@ static int apply_all(OrderedHashmap *sysctl_options) {
+                 if (string_is_glob(option->key)) {
+                         _cleanup_strv_free_ char **paths = NULL;
+                         _cleanup_free_ char *pattern = NULL;
+-                        char **s;
+ 
+                         pattern = path_join("/proc/sys", option->key);
+                         if (!pattern)
+@@ -403,7 +400,6 @@ static int run(int argc, char *argv[]) {
+                 }
+         } else {
+                 _cleanup_strv_free_ char **files = NULL;
+-                char **f;
+ 
+                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d"));
+                 if (r < 0)
+diff --git a/src/sysext/sysext.c b/src/sysext/sysext.c
+index 5abf1bb418..6a2dc16ab9 100644
+--- a/src/sysext/sysext.c
++++ b/src/sysext/sysext.c
+@@ -123,7 +123,6 @@ static int unmerge_hierarchy(const char *p) {
+ 
+ static int unmerge(void) {
+         int r, ret = 0;
+-        char **p;
+ 
+         STRV_FOREACH(p, arg_hierarchies) {
+                 _cleanup_free_ char *resolved = NULL;
+@@ -160,7 +159,6 @@ static int verb_unmerge(int argc, char **argv, void *userdata) {
+ static int verb_status(int argc, char **argv, void *userdata) {
+         _cleanup_(table_unrefp) Table *t = NULL;
+         int r, ret = 0;
+-        char **p;
+ 
+         t = table_new("hierarchy", "extensions", "since");
+         if (!t)
+@@ -244,7 +242,6 @@ static int mount_overlayfs(
+ 
+         _cleanup_free_ char *options = NULL;
+         bool separator = false;
+-        char **l;
+         int r;
+ 
+         assert(where);
+@@ -284,7 +281,6 @@ static int merge_hierarchy(
+         _cleanup_free_ char *resolved_hierarchy = NULL, *f = NULL, *buf = NULL;
+         _cleanup_strv_free_ char **layers = NULL;
+         struct stat st;
+-        char **p;
+         int r;
+ 
+         assert(hierarchy);
+@@ -452,7 +448,6 @@ static int merge_subprocess(Hashmap *images, const char *workspace) {
+         size_t n_extensions = 0;
+         unsigned n_ignored = 0;
+         Image *img;
+-        char **h;
+         int r;
+ 
+         /* Mark the whole of /run as MS_SLAVE, so that we can mount stuff below it that doesn't show up on
+@@ -759,7 +754,6 @@ static int image_discover_and_read_metadata(Hashmap **ret_images) {
+ 
+ static int verb_merge(int argc, char **argv, void *userdata) {
+         _cleanup_(hashmap_freep) Hashmap *images = NULL;
+-        char **p;
+         int r;
+ 
+         if (!have_effective_cap(CAP_SYS_ADMIN))
+diff --git a/src/systemctl/systemctl-cancel-job.c b/src/systemctl/systemctl-cancel-job.c
+index 4c5203c1f9..647e70767e 100644
+--- a/src/systemctl/systemctl-cancel-job.c
++++ b/src/systemctl/systemctl-cancel-job.c
+@@ -10,7 +10,6 @@
+ 
+ int cancel_job(int argc, char *argv[], void *userdata) {
+         sd_bus *bus;
+-        char **name;
+         int r;
+ 
+         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
+diff --git a/src/systemctl/systemctl-clean-or-freeze.c b/src/systemctl/systemctl-clean-or-freeze.c
+index fb4d643517..dc44110c72 100644
+--- a/src/systemctl/systemctl-clean-or-freeze.c
++++ b/src/systemctl/systemctl-clean-or-freeze.c
+@@ -11,7 +11,6 @@ int clean_or_freeze_unit(int argc, char *argv[], void *userdata) {
+         _cleanup_(bus_wait_for_units_freep) BusWaitForUnits *w = NULL;
+         _cleanup_strv_free_ char **names = NULL;
+         int r, ret = EXIT_SUCCESS;
+-        char **name;
+         const char *method;
+         sd_bus *bus;
+ 
+diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
+index 92abd15636..328168e4bb 100644
+--- a/src/systemctl/systemctl-edit.c
++++ b/src/systemctl/systemctl-edit.c
+@@ -26,7 +26,6 @@ int cat(int argc, char *argv[], void *userdata) {
+         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_strv_free_ char **names = NULL;
+-        char **name;
+         sd_bus *bus;
+         bool first = true;
+         int r, rc = 0;
+@@ -145,7 +144,6 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
+         } else if (original_unit_paths) {
+                 _cleanup_free_ char *new_contents = NULL;
+                 _cleanup_fclose_ FILE *f = NULL;
+-                char **path;
+ 
+                 r = mac_selinux_create_file_prepare(new_path, S_IFREG);
+                 if (r < 0)
+@@ -318,7 +316,7 @@ static int run_editor(char **paths) {
+         if (r < 0)
+                 return r;
+         if (r == 0) {
+-                char **editor_args = NULL, **tmp_path, **original_path;
++                char **editor_args = NULL;
+                 size_t n_editor_args = 0, i = 1, argc;
+                 const char **args, *editor;
+ 
+@@ -379,7 +377,6 @@ static int run_editor(char **paths) {
+ static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) {
+         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        char **name;
+         int r;
+ 
+         assert(names);
+@@ -501,7 +498,6 @@ int edit(int argc, char *argv[], void *userdata) {
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_strv_free_ char **names = NULL;
+         _cleanup_strv_free_ char **paths = NULL;
+-        char **original, **tmp;
+         sd_bus *bus;
+         int r;
+ 
+diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c
+index 7860f3dc6c..6266363f00 100644
+--- a/src/systemctl/systemctl-enable.c
++++ b/src/systemctl/systemctl-enable.c
+@@ -12,7 +12,6 @@
+ #include "systemctl.h"
+ 
+ static int normalize_filenames(char **names) {
+-        char **u;
+         int r;
+ 
+         STRV_FOREACH(u, names)
+@@ -40,7 +39,6 @@ static int normalize_filenames(char **names) {
+ }
+ 
+ static int normalize_names(char **names, bool warn_if_path) {
+-        char **u;
+         bool was_path = false;
+ 
+         STRV_FOREACH(u, names) {
+@@ -139,7 +137,6 @@ int enable_unit(int argc, char *argv[], void *userdata) {
+                 sd_bus *bus;
+ 
+                 if (STR_IN_SET(verb, "mask", "unmask")) {
+-                        char **name;
+                         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+ 
+                         r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
+diff --git a/src/systemctl/systemctl-is-active.c b/src/systemctl/systemctl-is-active.c
+index d83736e94a..e7c8431ac6 100644
+--- a/src/systemctl/systemctl-is-active.c
++++ b/src/systemctl/systemctl-is-active.c
+@@ -13,7 +13,6 @@ static int check_unit_generic(int code, const UnitActiveState good_states[], int
+         _cleanup_strv_free_ char **names = NULL;
+         UnitActiveState active_state;
+         sd_bus *bus;
+-        char **name;
+         int r;
+         bool found = false;
+ 
+diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c
+index e33dffaf29..eaf25217a8 100644
+--- a/src/systemctl/systemctl-is-enabled.c
++++ b/src/systemctl/systemctl-is-enabled.c
+@@ -59,7 +59,6 @@ static int show_installation_targets(sd_bus *bus, const char *name) {
+ int unit_is_enabled(int argc, char *argv[], void *userdata) {
+         _cleanup_strv_free_ char **names = NULL;
+         bool enabled;
+-        char **name;
+         int r;
+ 
+         r = mangle_names("to check", strv_skip(argv, 1), &names);
+diff --git a/src/systemctl/systemctl-kill.c b/src/systemctl/systemctl-kill.c
+index 489e754752..94489423e8 100644
+--- a/src/systemctl/systemctl-kill.c
++++ b/src/systemctl/systemctl-kill.c
+@@ -8,7 +8,7 @@
+ 
+ int kill_unit(int argc, char *argv[], void *userdata) {
+         _cleanup_strv_free_ char **names = NULL;
+-        char *kill_who = NULL, **name;
++        char *kill_who = NULL;
+         sd_bus *bus;
+         int r, q;
+ 
+diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c
+index a536240a9f..4d58869416 100644
+--- a/src/systemctl/systemctl-list-dependencies.c
++++ b/src/systemctl/systemctl-list-dependencies.c
+@@ -63,7 +63,6 @@ static int list_dependencies_one(
+                 unsigned branches) {
+ 
+         _cleanup_strv_free_ char **deps = NULL;
+-        char **c;
+         int r;
+ 
+         assert(bus);
+@@ -138,7 +137,7 @@ static int list_dependencies_one(
+ 
+ int list_dependencies(int argc, char *argv[], void *userdata) {
+         _cleanup_strv_free_ char **units = NULL, **done = NULL;
+-        char **u, **patterns;
++        char **patterns;
+         sd_bus *bus;
+         int r;
+ 
+diff --git a/src/systemctl/systemctl-list-machines.c b/src/systemctl/systemctl-list-machines.c
+index b4eb0bd4b6..6d0acc4d50 100644
+--- a/src/systemctl/systemctl-list-machines.c
++++ b/src/systemctl/systemctl-list-machines.c
+@@ -93,7 +93,6 @@ static int get_machine_list(
+         struct machine_info *machine_infos = NULL;
+         _cleanup_strv_free_ char **m = NULL;
+         _cleanup_free_ char *hn = NULL;
+-        char **i;
+         int c = 0, r;
+ 
+         hn = gethostname_malloc();
+diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c
+index 0c405fb7e8..35037d29ba 100644
+--- a/src/systemctl/systemctl-list-units.c
++++ b/src/systemctl/systemctl-list-units.c
+@@ -49,7 +49,6 @@ static int get_unit_list_recursive(
+ 
+         if (arg_recursive) {
+                 _cleanup_strv_free_ char **machines = NULL;
+-                char **i;
+ 
+                 r = sd_get_machine_names(&machines);
+                 if (r < 0)
+diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c
+index 114641cdc7..843f6141ab 100644
+--- a/src/systemctl/systemctl-logind.c
++++ b/src/systemctl/systemctl-logind.c
+@@ -112,7 +112,6 @@ int logind_check_inhibitors(enum action a) {
+         uint32_t uid, pid;
+         sd_bus *bus;
+         unsigned c = 0;
+-        char **s;
+         int r;
+ 
+         if (arg_check_inhibitors == 0 || arg_force > 0)
+@@ -412,7 +411,6 @@ int help_boot_loader_entry(void) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+         _cleanup_strv_free_ char **l = NULL;
+         sd_bus *bus;
+-        char **i;
+         int r;
+ 
+         r = acquire_bus(BUS_FULL, &bus);
+diff --git a/src/systemctl/systemctl-reset-failed.c b/src/systemctl/systemctl-reset-failed.c
+index eee7586465..0b7e01429f 100644
+--- a/src/systemctl/systemctl-reset-failed.c
++++ b/src/systemctl/systemctl-reset-failed.c
+@@ -10,7 +10,6 @@
+ int reset_failed(int argc, char *argv[], void *userdata) {
+         _cleanup_strv_free_ char **names = NULL;
+         sd_bus *bus;
+-        char **name;
+         int r, q;
+ 
+         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
+diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c
+index aab0fe5fd0..8c529181da 100644
+--- a/src/systemctl/systemctl-set-environment.c
++++ b/src/systemctl/systemctl-set-environment.c
+@@ -172,7 +172,6 @@ int import_environment(int argc, char *argv[], void *userdata) {
+ 
+                 strv_env_clean_with_callback(copy, invalid_callback, NULL);
+ 
+-                char **e;
+                 STRV_FOREACH(e, copy)
+                         if (string_has_cc(*e, NULL))
+                                 log_notice("Environment variable $%.*s contains control characters, importing anyway.",
+@@ -181,8 +180,6 @@ int import_environment(int argc, char *argv[], void *userdata) {
+                 r = sd_bus_message_append_strv(m, copy);
+ 
+         } else {
+-                char **a, **b;
+-
+                 r = sd_bus_message_open_container(m, 'a', "s");
+                 if (r < 0)
+                         return bus_log_create_error(r);
+diff --git a/src/systemctl/systemctl-set-property.c b/src/systemctl/systemctl-set-property.c
+index 5739bac070..4407c2354d 100644
+--- a/src/systemctl/systemctl-set-property.c
++++ b/src/systemctl/systemctl-set-property.c
+@@ -46,7 +46,6 @@ static int set_property_one(sd_bus *bus, const char *name, char **properties) {
+ int set_property(int argc, char *argv[], void *userdata) {
+         sd_bus *bus;
+         _cleanup_strv_free_ char **names = NULL;
+-        char **name;
+         int r, k;
+ 
+         r = acquire_bus(BUS_MANAGER, &bus);
+diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
+index 7a6655da74..ee96dac457 100644
+--- a/src/systemctl/systemctl-show.c
++++ b/src/systemctl/systemctl-show.c
+@@ -308,7 +308,6 @@ static void print_status_info(
+         ExecStatusInfo *p;
+         usec_t timestamp;
+         const char *path;
+-        char **t, **t2;
+         int r;
+ 
+         assert(i);
+@@ -367,7 +366,6 @@ static void print_status_info(
+         if (!strv_isempty(i->dropin_paths)) {
+                 _cleanup_free_ char *dir = NULL;
+                 bool last = false;
+-                char ** dropin;
+ 
+                 STRV_FOREACH(dropin, i->dropin_paths) {
+                         _cleanup_free_ char *dropin_formatted = NULL;
+@@ -774,8 +772,6 @@ static void print_status_info(
+ }
+ 
+ static void show_unit_help(UnitStatusInfo *i) {
+-        char **p;
+-
+         assert(i);
+ 
+         if (!i->documentation) {
+@@ -1078,7 +1074,6 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m
+ 
+                         if (FLAGS_SET(flags, BUS_PRINT_PROPERTY_SHOW_EMPTY) || allow_list || !strv_isempty(l)) {
+                                 bool first = true;
+-                                char **i;
+ 
+                                 if (!FLAGS_SET(flags, BUS_PRINT_PROPERTY_ONLY_VALUE)) {
+                                         fputs(name, stdout);
+@@ -1970,7 +1965,6 @@ static int show_one(
+                 .io_read_bytes = UINT64_MAX,
+                 .io_write_bytes = UINT64_MAX,
+         };
+-        char **pp;
+         int r;
+ 
+         assert(path);
+@@ -2194,7 +2188,6 @@ int show(int argc, char *argv[], void *userdata) {
+                         ret = show_all(bus, &new_line, &ellipsized);
+         } else {
+                 _cleanup_free_ char **patterns = NULL;
+-                char **name;
+ 
+                 STRV_FOREACH(name, strv_skip(argv, 1)) {
+                         _cleanup_free_ char *path = NULL, *unit = NULL;
+diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c
+index 274b278d2d..b45495d51d 100644
+--- a/src/systemctl/systemctl-start-unit.c
++++ b/src/systemctl/systemctl-start-unit.c
+@@ -199,16 +199,13 @@ static int enqueue_marked_jobs(
+         if (r < 0)
+                 return bus_log_parse_error(r);
+ 
+-        if (w) {
+-                char **path;
+-
++        if (w)
+                 STRV_FOREACH(path, paths) {
+                         log_debug("Adding %s to the set", *path);
+                         r = bus_wait_for_jobs_add(w, *path);
+                         if (r < 0)
+                                 return log_error_errno(r, "Failed to watch job %s: %m", *path);
+                 }
+-        }
+ 
+         return 0;
+ }
+@@ -269,7 +266,6 @@ int start_unit(int argc, char *argv[], void *userdata) {
+         _cleanup_strv_free_ char **names = NULL;
+         int r, ret = EXIT_SUCCESS;
+         sd_bus *bus;
+-        char **name;
+ 
+         if (arg_wait && !STR_IN_SET(argv[0], "start", "restart"))
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c
+index ae02af280e..db40154943 100644
+--- a/src/systemctl/systemctl-util.c
++++ b/src/systemctl/systemctl-util.c
+@@ -234,7 +234,6 @@ int get_unit_list(
+ 
+ int expand_unit_names(sd_bus *bus, char **names, const char* suffix, char ***ret, bool *ret_expanded) {
+         _cleanup_strv_free_ char **mangled = NULL, **globs = NULL;
+-        char **name;
+         int r;
+ 
+         assert(bus);
+@@ -294,7 +293,6 @@ int check_triggering_units(sd_bus *bus, const char *unit) {
+         _cleanup_strv_free_ char **triggered_by = NULL;
+         bool print_warning_label = true;
+         UnitActiveState active_state;
+-        char **i;
+         int r;
+ 
+         r = unit_name_mangle(unit, 0, &n);
+@@ -386,8 +384,6 @@ void warn_unit_file_changed(const char *unit) {
+ }
+ 
+ int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) {
+-        char **p;
+-
+         assert(lp);
+         assert(unit_name);
+ 
+@@ -666,7 +662,6 @@ int unit_exists(LookupPaths *lp, const char *unit) {
+ 
+ int append_unit_dependencies(sd_bus *bus, char **names, char ***ret) {
+         _cleanup_strv_free_ char **with_deps = NULL;
+-        char **name;
+ 
+         assert(bus);
+         assert(ret);
+@@ -860,7 +855,7 @@ UnitFileFlags unit_file_flags_from_args(void) {
+ 
+ int mangle_names(const char *operation, char **original_names, char ***ret_mangled_names) {
+         _cleanup_strv_free_ char **l = NULL;
+-        char **i, **name;
++        char **i;
+         int r;
+ 
+         assert(ret_mangled_names);
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 07a65a2ebc..6a2ca1afbb 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -312,7 +312,6 @@ static int putgrent_with_members(const struct group *gr, FILE *group) {
+         if (a) {
+                 _cleanup_strv_free_ char **l = NULL;
+                 bool added = false;
+-                char **i;
+ 
+                 l = strv_copy(gr->gr_mem);
+                 if (!l)
+@@ -357,7 +356,6 @@ static int putsgent_with_members(const struct sgrp *sg, FILE *gshadow) {
+         if (a) {
+                 _cleanup_strv_free_ char **l = NULL;
+                 bool added = false;
+-                char **i;
+ 
+                 l = strv_copy(sg->sg_mem);
+                 if (!l)
+@@ -1406,8 +1404,6 @@ static int add_implicit(void) {
+ 
+         /* Implicitly create additional users and groups, if they were listed in "m" lines */
+         ORDERED_HASHMAP_FOREACH_KEY(l, g, members) {
+-                char **m;
+-
+                 STRV_FOREACH(m, l)
+                         if (!ordered_hashmap_get(users, *m)) {
+                                 _cleanup_(item_freep) Item *j = NULL;
+@@ -1977,7 +1973,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+ 
+ static int parse_arguments(char **args) {
+-        char **arg;
+         unsigned pos = 1;
+         int r;
+ 
+@@ -1999,7 +1994,6 @@ static int parse_arguments(char **args) {
+ static int read_config_files(char **args) {
+         _cleanup_strv_free_ char **files = NULL;
+         _cleanup_free_ char *p = NULL;
+-        char **f;
+         int r;
+ 
+         r = conf_files_list_with_replacement(arg_root, CONF_PATHS_STRV("sysusers.d"), arg_replace, &files, &p);
+diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
+index bb74b486be..428509f4ce 100644
+--- a/src/sysv-generator/sysv-generator.c
++++ b/src/sysv-generator/sysv-generator.c
+@@ -103,7 +103,6 @@ static int generate_unit_file(SysvStub *s) {
+         _cleanup_free_ char *path_escaped = NULL;
+         _cleanup_fclose_ FILE *f = NULL;
+         const char *unit;
+-        char **p;
+         int r;
+ 
+         assert(s);
+@@ -707,7 +706,6 @@ static int acquire_search_path(const char *def, const char *envvar, char ***ret)
+ 
+ static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) {
+         _cleanup_strv_free_ char **sysvinit_path = NULL;
+-        char **path;
+         int r;
+ 
+         assert(lp);
+@@ -791,7 +789,6 @@ static int set_dependencies_from_rcnd(const LookupPaths *lp, Hashmap *all_servic
+         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
+         _cleanup_strv_free_ char **sysvrcnd_path = NULL;
+         SysvStub *service;
+-        char **p;
+         int r;
+ 
+         assert(lp);
+diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c
+index 1765dc7a9b..56933c87bf 100644
+--- a/src/test/test-bpf-foreign-programs.c
++++ b/src/test/test-bpf-foreign-programs.c
+@@ -133,8 +133,6 @@ static int bpf_foreign_test_to_string(enum bpf_attach_type attach_type, const ch
+ }
+ 
+ static char **unlink_paths_and_free(char **paths) {
+-        char **i;
+-
+         STRV_FOREACH(i, paths)
+                 (void) unlink(*i);
+ 
+diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c
+index 258c2e575e..4a3b327a3f 100644
+--- a/src/test/test-bpf-lsm.c
++++ b/src/test/test-bpf-lsm.c
+@@ -16,7 +16,6 @@ static int test_restrict_filesystems(Manager *m, const char *unit_name, const ch
+         _cleanup_free_ char *exec_start = NULL;
+         _cleanup_(unit_freep) Unit *u = NULL;
+         ExecContext *ec = NULL;
+-        char **allow_filesystem;
+         int cld_code, r;
+ 
+         assert_se(u = unit_new(m, sizeof(Service)));
+diff --git a/src/test/test-copy.c b/src/test/test-copy.c
+index c7ed054207..01c6638dcf 100644
+--- a/src/test/test-copy.c
++++ b/src/test/test-copy.c
+@@ -83,7 +83,6 @@ TEST(copy_tree) {
+         char **hardlinks = STRV_MAKE("hlink", "file",
+                                      "hlink2", "dir1/file");
+         const char *unixsockp;
+-        char **p, **ll;
+         struct stat st;
+         int xattr_worked = -1; /* xattr support is optional in temporary directories, hence use it if we can,
+                                 * but don't fail if we can't */
+diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
+index 19523aa0d9..4d5f39b5b7 100644
+--- a/src/test/test-env-util.c
++++ b/src/test/test-env-util.c
+@@ -412,7 +412,6 @@ TEST(unsetenv_erase) {
+         r = safe_fork("(sd-unsetenverase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+         if (r == 0) {
+                 _cleanup_strv_free_ char **l = NULL;
+-                char **e;
+ 
+                 /* child */
+ 
+diff --git a/src/test/test-exec-util.c b/src/test/test-exec-util.c
+index 47a82eb969..d6ee16b1fe 100644
+--- a/src/test/test-exec-util.c
++++ b/src/test/test-exec-util.c
+@@ -217,7 +217,7 @@ static int gather_stdout_one(int fd, void *arg) {
+         return 0;
+ }
+ static int gather_stdout_two(int fd, void *arg) {
+-        char ***s = arg, **t;
++        char ***s = arg;
+ 
+         STRV_FOREACH(t, *s)
+                 assert_se(write(fd, *t, strlen(*t)) == (ssize_t) strlen(*t));
+@@ -287,7 +287,7 @@ TEST(stdout_gathering) {
+ }
+ 
+ TEST(environment_gathering) {
+-        char template[] = "/tmp/test-exec-util.XXXXXXX", **p;
++        char template[] = "/tmp/test-exec-util.XXXXXXX";
+         const char *dirs[] = {template, NULL};
+         const char *name, *name2, *name3, *old;
+         int r;
+diff --git a/src/test/test-execute.c b/src/test/test-execute.c
+index 0760df6603..3b4b02184c 100644
+--- a/src/test/test-execute.c
++++ b/src/test/test-execute.c
+@@ -606,7 +606,6 @@ static int find_libraries(const char *exec, char ***ret) {
+         _cleanup_strv_free_ char **v = NULL;
+         assert_se(strv_split_newlines_full(&v, result, 0) >= 0);
+ 
+-        char **q;
+         STRV_FOREACH(q, v) {
+                 _cleanup_free_ char *word = NULL;
+                 const char *p = *q;
+@@ -674,7 +673,6 @@ static void test_exec_mount_apivfs(Manager *m) {
+         assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_touch, "\n"));
+         assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_test, "\n"));
+ 
+-        char **p;
+         STRV_FOREACH(p, libraries)
+                 assert_se(strextend(&data, "BindReadOnlyPaths=", *p, "\n"));
+ 
+diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
+index 238ae8f586..3e98d94019 100644
+--- a/src/test/test-fileio.c
++++ b/src/test/test-fileio.c
+@@ -35,7 +35,6 @@ TEST(parse_env_file) {
+                         *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL,
+                         *eleven = NULL, *twelve = NULL, *thirteen = NULL;
+         _cleanup_strv_free_ char **a = NULL, **b = NULL;
+-        char **i;
+         unsigned k;
+         int r;
+ 
+@@ -171,7 +170,6 @@ TEST(parse_multiline_env_file) {
+                 p[] = "/tmp/test-fileio-out-XXXXXX";
+         FILE *f;
+         _cleanup_strv_free_ char **a = NULL, **b = NULL;
+-        char **i;
+         int r;
+ 
+         assert_se(fmkostemp_safe(t, "w", &f) == 0);
+@@ -221,7 +219,6 @@ TEST(merge_env_file) {
+         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_strv_free_ char **a = NULL;
+-        char **i;
+         int r;
+ 
+         assert_se(fmkostemp_safe(t, "w", &f) == 0);
+@@ -285,7 +282,6 @@ TEST(merge_env_file_invalid) {
+         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_strv_free_ char **a = NULL;
+-        char **i;
+         int r;
+ 
+         assert_se(fmkostemp_safe(t, "w", &f) == 0);
+@@ -486,7 +482,6 @@ TEST(load_env_file_pairs) {
+         int fd, r;
+         _cleanup_fclose_ FILE *f = NULL;
+         _cleanup_strv_free_ char **l = NULL;
+-        char **k, **v;
+ 
+         fd = mkostemp_safe(fn);
+         assert_se(fd >= 0);
+diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
+index f53a3ebf59..67b6996907 100644
+--- a/src/test/test-fs-util.c
++++ b/src/test/test-fs-util.c
+@@ -692,7 +692,6 @@ TEST(rename_noreplace) {
+ 
+         _cleanup_(rm_rf_physical_and_freep) char *z = NULL;
+         const char *j = NULL;
+-        char **a, **b;
+ 
+         if (arg_test_dir)
+                 j = strjoina(arg_test_dir, "/testXXXXXX");
+diff --git a/src/test/test-kbd-util.c b/src/test/test-kbd-util.c
+index f15cff4794..0a166c6e1f 100644
+--- a/src/test/test-kbd-util.c
++++ b/src/test/test-kbd-util.c
+@@ -7,7 +7,6 @@
+ 
+ int main(int argc, char *argv[]) {
+         _cleanup_strv_free_ char **maps = NULL;
+-        char **m;
+         int r;
+ 
+         log_show_color(true);
+diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c
+index 55f86f7c2f..3243e3c567 100644
+--- a/src/test/test-locale-util.c
++++ b/src/test/test-locale-util.c
+@@ -10,7 +10,6 @@
+ 
+ TEST(get_locales) {
+         _cleanup_strv_free_ char **locales = NULL;
+-        char **p;
+         int r;
+ 
+         r = get_locales(&locales);
+@@ -58,7 +57,6 @@ TEST(locale_is_installed) {
+ 
+ TEST(keymaps) {
+         _cleanup_strv_free_ char **kmaps = NULL;
+-        char **p;
+         int r;
+ 
+         assert_se(!keymap_is_valid(""));
+diff --git a/src/test/test-nss-hosts.c b/src/test/test-nss-hosts.c
+index eac2c74f4c..70dbb30ed4 100644
+--- a/src/test/test-nss-hosts.c
++++ b/src/test/test-nss-hosts.c
+@@ -67,8 +67,6 @@ static int print_gaih_addrtuples(const struct gaih_addrtuple *tuples) {
+ }
+ 
+ static void print_struct_hostent(struct hostent *host, const char *canon) {
+-        char **s;
+-
+         log_info("        \"%s\"", host->h_name);
+         STRV_FOREACH(s, host->h_aliases)
+                 log_info("        alias \"%s\"", *s);
+@@ -376,7 +374,6 @@ static int test_one_module(const char *dir,
+         if (!handle)
+                 return -EINVAL;
+ 
+-        char **name;
+         STRV_FOREACH(name, names)
+                 test_byname(handle, module, *name);
+ 
+@@ -424,7 +421,6 @@ static int parse_argv(int argc, char **argv,
+         assert_se(modules);
+ 
+         if (argc > 2) {
+-                char **name;
+                 int family;
+                 union in_addr_union address;
+ 
+@@ -463,7 +459,6 @@ static int run(int argc, char **argv) {
+         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
+         _cleanup_free_ struct local_address *addresses = NULL;
+         int n_addresses = 0;
+-        char **module;
+         int r;
+ 
+         test_setup_logging(LOG_INFO);
+diff --git a/src/test/test-nss-users.c b/src/test/test-nss-users.c
+index c415c0ca3b..70c5f25e08 100644
+--- a/src/test/test-nss-users.c
++++ b/src/test/test-nss-users.c
+@@ -170,7 +170,6 @@ static int test_one_module(const char *dir,
+         if (!handle)
+                 return -EINVAL;
+ 
+-        char **name;
+         STRV_FOREACH(name, names)
+                 test_byname(handle, module, *name);
+ 
+@@ -235,7 +234,6 @@ static int parse_argv(int argc, char **argv,
+ static int run(int argc, char **argv) {
+         _cleanup_free_ char *dir = NULL;
+         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
+-        char **module;
+         int r;
+ 
+         test_setup_logging(LOG_INFO);
+diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c
+index a19a33c64b..2c30260f7b 100644
+--- a/src/test/test-path-lookup.c
++++ b/src/test/test-path-lookup.c
+@@ -43,7 +43,7 @@ TEST(paths) {
+ 
+ TEST(user_and_global_paths) {
+         _cleanup_(lookup_paths_free) LookupPaths lp_global = {}, lp_user = {};
+-        char **u, **g, **p;
++        char **u, **g;
+         unsigned k = 0;
+ 
+         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
+@@ -81,7 +81,6 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
+         _cleanup_strv_free_ char **env_gp_with_env = NULL;
+         char *systemd_generator_path = NULL;
+         char *systemd_env_generator_path = NULL;
+-        char **dir;
+ 
+         assert_se(mkdtemp(template));
+ 
+diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
+index b9c4ef4126..d40febef5f 100644
+--- a/src/test/test-path-util.c
++++ b/src/test/test-path-util.c
+@@ -481,7 +481,6 @@ TEST(path_strv_resolve) {
+         char tmp_dir[] = "/tmp/test-path-util-XXXXXX";
+         _cleanup_strv_free_ char **search_dirs = NULL;
+         _cleanup_strv_free_ char **absolute_dirs = NULL;
+-        char **d;
+ 
+         assert_se(mkdtemp(tmp_dir) != NULL);
+ 
+diff --git a/src/test/test-path.c b/src/test/test-path.c
+index 529487d1ad..2690dc0aa4 100644
+--- a/src/test/test-path.c
++++ b/src/test/test-path.c
+@@ -24,7 +24,6 @@ typedef void (*test_function_t)(Manager *m);
+ static int setup_test(Manager **m) {
+         char **tests_path = STRV_MAKE("exists", "existsglobFOOBAR", "changed", "modified", "unit",
+                                       "directorynotempty", "makedirectory");
+-        char **test_path;
+         Manager *tmp = NULL;
+         int r;
+ 
+diff --git a/src/test/test-sd-path.c b/src/test/test-sd-path.c
+index 10a8a4a63f..4f23e3bb69 100644
+--- a/src/test/test-sd-path.c
++++ b/src/test/test-sd-path.c
+@@ -32,7 +32,6 @@ TEST(sd_path_lookup) {
+ TEST(sd_path_lookup_strv) {
+         for (uint64_t i = 0; i < _SD_PATH_MAX; i++) {
+                 _cleanup_strv_free_ char **t = NULL, **s = NULL;
+-                char **item;
+                 int r;
+ 
+                 r = sd_path_lookup_strv(i, NULL, &t);
+diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c
+index ecad86baeb..c5c5477f69 100644
+--- a/src/test/test-socket-bind.c
++++ b/src/test/test-socket-bind.c
+@@ -13,7 +13,7 @@
+ #include "virt.h"
+ 
+ static int find_netcat_executable(char **ret_path) {
+-        char **candidates = STRV_MAKE("ncat", "nc", "netcat"), **c;
++        char **candidates = STRV_MAKE("ncat", "nc", "netcat");
+         int r = 0;
+ 
+         STRV_FOREACH(c, candidates) {
+@@ -36,7 +36,6 @@ static int test_socket_bind(
+         _cleanup_(unit_freep) Unit *u = NULL;
+         CGroupSocketBindItem *bi;
+         CGroupContext *cc = NULL;
+-        char **rule;
+         int cld_code, r;
+ 
+         assert_se(u = unit_new(m, sizeof(Service)));
+diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
+index 071b391361..93b674baab 100644
+--- a/src/test/test-string-util.c
++++ b/src/test/test-string-util.c
+@@ -865,7 +865,6 @@ TEST(strverscmp_improved) {
+                 "124",
+                 NULL,
+         };
+-        const char * const *p, * const *q;
+ 
+         STRV_FOREACH(p, versions)
+                 STRV_FOREACH(q, p + 1)
+diff --git a/src/test/test-strv.c b/src/test/test-strv.c
+index 0ece342521..e6aa2e793e 100644
+--- a/src/test/test-strv.c
++++ b/src/test/test-strv.c
+@@ -204,7 +204,6 @@ static void test_strv_unquote_one(const char *quoted, char **list) {
+         _cleanup_strv_free_ char **s;
+         _cleanup_free_ char *j;
+         unsigned i = 0;
+-        char **t;
+         int r;
+ 
+         log_info("/* %s */", __func__);
+@@ -446,7 +445,6 @@ TEST(strv_split_colon_pairs) {
+ 
+ TEST(strv_split_newlines) {
+         unsigned i = 0;
+-        char **s;
+         _cleanup_strv_free_ char **l = NULL;
+         const char str[] = "one\ntwo\nthree";
+ 
+@@ -619,7 +617,6 @@ TEST(strv_extendf) {
+ TEST(strv_foreach) {
+         _cleanup_strv_free_ char **a;
+         unsigned i = 0;
+-        char **check;
+ 
+         a = strv_new("one", "two", "three");
+         assert_se(a);
+@@ -631,7 +628,6 @@ TEST(strv_foreach) {
+ TEST(strv_foreach_backwards) {
+         _cleanup_strv_free_ char **a;
+         unsigned i = 2;
+-        char **check;
+ 
+         a = strv_new("one", "two", "three");
+ 
+@@ -649,7 +645,6 @@ TEST(strv_foreach_backwards) {
+ 
+ TEST(strv_foreach_pair) {
+         _cleanup_strv_free_ char **a = NULL;
+-        char **x, **y;
+ 
+         a = strv_new("pair_one",   "pair_one",
+                      "pair_two",   "pair_two",
+diff --git a/src/test/test-sysctl-util.c b/src/test/test-sysctl-util.c
+index 8bd3c26152..02180dc4be 100644
+--- a/src/test/test-sysctl-util.c
++++ b/src/test/test-sysctl-util.c
+@@ -27,7 +27,6 @@ static const char* const cases[] = {
+ };
+ 
+ TEST(sysctl_normalize) {
+-        const char **s, **expected;
+         STRV_FOREACH_PAIR(s, expected, (const char**) cases) {
+                 _cleanup_free_ char *t;
+ 
+diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
+index 799d271a44..15f4a0c169 100644
+--- a/src/test/test-time-util.c
++++ b/src/test/test-time-util.c
+@@ -258,7 +258,6 @@ TEST(timezone_is_valid) {
+ TEST(get_timezones) {
+         _cleanup_strv_free_ char **zones = NULL;
+         int r;
+-        char **zone;
+ 
+         r = get_timezones(&zones);
+         assert_se(r == 0);
+diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
+index 8ed56ad3b8..261bd7412f 100644
+--- a/src/test/test-unit-file.c
++++ b/src/test/test-unit-file.c
+@@ -55,7 +55,6 @@ TEST(unit_file_build_name_map) {
+         if (r == 0)
+                 log_debug("Cache rebuild skipped based on mtime.");
+ 
+-        char **id;
+         STRV_FOREACH(id, ids) {
+                  const char *fragment, *name;
+                  _cleanup_set_free_free_ Set *names = NULL;
+diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
+index 66b454269d..874ff773e1 100644
+--- a/src/timedate/timedated.c
++++ b/src/timedate/timedated.c
+@@ -190,7 +190,6 @@ static int context_parse_ntp_services_from_environment(Context *c) {
+ 
+ static int context_parse_ntp_services_from_disk(Context *c) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         r = conf_files_list_strv(&files, ".list", NULL, CONF_FILES_FILTER_MASKED, UNIT_LIST_DIRS);
+diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c
+index 918da195d8..67f9a33993 100644
+--- a/src/timesync/timesyncd-manager.c
++++ b/src/timesync/timesyncd-manager.c
+@@ -961,7 +961,6 @@ Manager* manager_free(Manager *m) {
+ static int manager_network_read_link_servers(Manager *m) {
+         _cleanup_strv_free_ char **ntp = NULL;
+         ServerName *n, *nx;
+-        char **i;
+         bool changed = false;
+         int r;
+ 
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index aa7ff73a36..17b9c6ab9a 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -1019,8 +1019,6 @@ static int parse_xattrs_from_arg(Item *i) {
+ }
+ 
+ static int fd_set_xattrs(Item *i, int fd, const char *path, const struct stat *st) {
+-        char **name, **value;
+-
+         assert(i);
+         assert(fd >= 0);
+         assert(path);
+@@ -1939,7 +1937,6 @@ static int glob_item(Item *i, action_t action) {
+                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
+         };
+         int r = 0, k;
+-        char **fn;
+ 
+         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
+         if (k < 0 && k != -ENOENT)
+@@ -1959,7 +1956,6 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
+                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
+         };
+         int r = 0, k;
+-        char **fn;
+ 
+         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
+         if (k < 0 && k != -ENOENT)
+@@ -2695,8 +2691,6 @@ static bool item_compatible(Item *a, Item *b) {
+ }
+ 
+ static bool should_include_path(const char *path) {
+-        char **prefix;
+-
+         STRV_FOREACH(prefix, arg_exclude_prefixes)
+                 if (path_startswith(path, *prefix)) {
+                         log_debug("Entry \"%s\" matches exclude prefix \"%s\", skipping.",
+@@ -2746,8 +2740,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *
+                 return free_and_replace(i->argument, resolved);
+         }
+         case SET_XATTR:
+-        case RECURSIVE_SET_XATTR: {
+-                char **xattr;
++        case RECURSIVE_SET_XATTR:
+                 STRV_FOREACH(xattr, i->xattrs) {
+                         _cleanup_free_ char *resolved = NULL;
+ 
+@@ -2758,7 +2751,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *
+                         free_and_replace(*xattr, resolved);
+                 }
+                 return 0;
+-        }
++
+         default:
+                 return 0;
+         }
+@@ -3611,7 +3604,6 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe
+ }
+ 
+ static int parse_arguments(char **config_dirs, char **args, bool *invalid_config) {
+-        char **arg;
+         int r;
+ 
+         STRV_FOREACH(arg, args) {
+@@ -3626,7 +3618,6 @@ static int parse_arguments(char **config_dirs, char **args, bool *invalid_config
+ static int read_config_files(char **config_dirs, char **args, bool *invalid_config) {
+         _cleanup_strv_free_ char **files = NULL;
+         _cleanup_free_ char *p = NULL;
+-        char **f;
+         int r;
+ 
+         r = conf_files_list_with_replacement(arg_root, config_dirs, arg_replace, &files, &p);
+@@ -3733,7 +3724,6 @@ static int run(int argc, char *argv[]) {
+ 
+         if (DEBUG_LOGGING) {
+                 _cleanup_free_ char *t = NULL;
+-                char **i;
+ 
+                 STRV_FOREACH(i, config_dirs) {
+                         _cleanup_free_ char *j = NULL;
+diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c
+index 54a03af082..15a1faedce 100644
+--- a/src/tty-ask-password-agent/tty-ask-password-agent.c
++++ b/src/tty-ask-password-agent/tty-ask-password-agent.c
+@@ -59,7 +59,7 @@ static int send_passwords(const char *socket_name, char **passwords) {
+         union sockaddr_union sa;
+         socklen_t sa_len;
+         size_t packet_length = 1;
+-        char **p, *d;
++        char *d;
+         ssize_t n;
+         int r;
+ 
+@@ -554,8 +554,6 @@ static int ask_on_this_console(const char *tty, pid_t *ret_pid, char **arguments
+         if (r < 0)
+                 return r;
+         if (r == 0) {
+-                char **i;
+-
+                 assert_se(prctl(PR_SET_PDEATHSIG, SIGHUP) >= 0);
+ 
+                 STRV_FOREACH(i, arguments) {
+@@ -635,7 +633,6 @@ static int ask_on_consoles(char *argv[]) {
+         _cleanup_set_free_ Set *pids = NULL;
+         _cleanup_strv_free_ char **consoles = NULL, **arguments = NULL;
+         siginfo_t status = {};
+-        char **tty;
+         pid_t pid;
+         int r;
+ 
+diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
+index 05f0f2e0a6..1ac89496c9 100644
+--- a/src/udev/net/link-config.c
++++ b/src/udev/net/link-config.c
+@@ -315,7 +315,6 @@ static int device_unsigned_attribute(sd_device *device, const char *attr, unsign
+ 
+ int link_config_load(LinkConfigContext *ctx) {
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         link_configs_free(ctx);
+@@ -816,7 +815,6 @@ static int link_apply_alternative_names(Link *link, sd_netlink **rtnl) {
+         if (r < 0)
+                 log_link_debug_errno(link, r, "Failed to get alternative names, ignoring: %m");
+ 
+-        char **p;
+         STRV_FOREACH(p, current_altnames)
+                 strv_remove(altnames, *p);
+ 
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index a60e4f294c..e3065ee923 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -573,7 +573,6 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd
+         /* Log output only if we watch stderr. */
+         if (l > 0 && spawn->fd_stderr >= 0) {
+                 _cleanup_strv_free_ char **v = NULL;
+-                char **q;
+ 
+                 r = strv_split_newlines_full(&v, p, EXTRACT_RETAIN_ESCAPE);
+                 if (r < 0)
+diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
+index 243a792662..29b6ae3961 100644
+--- a/src/udev/udev-rules.c
++++ b/src/udev/udev-rules.c
+@@ -1348,7 +1348,6 @@ UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing) {
+ int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
+         _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
+         _cleanup_strv_free_ char **files = NULL;
+-        char **f;
+         int r;
+ 
+         rules = udev_rules_new(resolve_name_timing);
+@@ -1823,7 +1822,7 @@ static int udev_rule_apply_token_to_event(
+         }
+         case TK_M_IMPORT_PROGRAM: {
+                 _cleanup_strv_free_ char **lines = NULL;
+-                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE], **line;
++                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE];
+ 
+                 (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
+                 log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf);
+@@ -2422,7 +2421,6 @@ static int apply_static_dev_perms(const char *devnode, uid_t uid, gid_t gid, mod
+         char device_node[UDEV_PATH_SIZE], tags_dir[UDEV_PATH_SIZE], tag_symlink[UDEV_PATH_SIZE];
+         _cleanup_free_ char *unescaped_filename = NULL;
+         struct stat stats;
+-        char **t;
+         int r;
+ 
+         assert(devnode);
+diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
+index 740434bb41..b985961c62 100644
+--- a/src/udev/udevadm-info.c
++++ b/src/udev/udevadm-info.c
+@@ -522,7 +522,6 @@ int info_main(int argc, char *argv[], void *userdata) {
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "-x/--export or -P/--export-prefix cannot be used with --value");
+ 
+-        char **p;
+         STRV_FOREACH(p, devices) {
+                 _cleanup_(sd_device_unrefp) sd_device *device = NULL;
+ 
+diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c
+index c2acd85742..85aa6c752c 100644
+--- a/src/userdb/userdbctl.c
++++ b/src/userdb/userdbctl.c
+@@ -119,9 +119,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
+                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6);
+         }
+ 
+-        if (argc > 1) {
+-                char **i;
+-
++        if (argc > 1)
+                 STRV_FOREACH(i, argv + 1) {
+                         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
+                         uid_t uid;
+@@ -151,7 +149,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
+                                 draw_separator = true;
+                         }
+                 }
+-        } else {
++        else {
+                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
+ 
+                 r = userdb_all(arg_userdb_flags, &iterator);
+@@ -283,9 +281,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
+                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3);
+         }
+ 
+-        if (argc > 1) {
+-                char **i;
+-
++        if (argc > 1)
+                 STRV_FOREACH(i, argv + 1) {
+                         _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
+                         gid_t gid;
+@@ -315,8 +311,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
+                                 draw_separator = true;
+                         }
+                 }
+-
+-        } else {
++        else {
+                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
+ 
+                 r = groupdb_all(arg_userdb_flags, &iterator);
+@@ -435,9 +430,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
+                 (void) table_set_sort(table, (size_t) 0, (size_t) 1);
+         }
+ 
+-        if (argc > 1) {
+-                char **i;
+-
++        if (argc > 1)
+                 STRV_FOREACH(i, argv + 1) {
+                         _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
+ 
+@@ -468,7 +461,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
+                                         return r;
+                         }
+                 }
+-        } else {
++        else {
+                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
+ 
+                 r = membershipdb_all(arg_userdb_flags, &iterator);
+@@ -630,12 +623,9 @@ static int ssh_authorized_keys(int argc, char *argv[], void *userdata) {
+         else {
+                 if (strv_isempty(ur->ssh_authorized_keys))
+                         log_debug("User record for %s has no public SSH keys.", argv[1]);
+-                else {
+-                        char **i;
+-
++                else
+                         STRV_FOREACH(i, ur->ssh_authorized_keys)
+                                 printf("%s\n", *i);
+-                }
+ 
+                 if (ur->incomplete) {
+                         fflush(stdout);
+diff --git a/src/xdg-autostart-generator/xdg-autostart-condition.c b/src/xdg-autostart-generator/xdg-autostart-condition.c
+index c4485cf625..9ceea61547 100644
+--- a/src/xdg-autostart-generator/xdg-autostart-condition.c
++++ b/src/xdg-autostart-generator/xdg-autostart-condition.c
+@@ -13,7 +13,6 @@
+ static int run(int argc, char *argv[]) {
+         _cleanup_strv_free_ char **only_show_in = NULL, **not_show_in = NULL, **desktops = NULL;
+         const char *xdg_current_desktop;
+-        char **d;
+ 
+         if (argc != 3)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+diff --git a/src/xdg-autostart-generator/xdg-autostart-generator.c b/src/xdg-autostart-generator/xdg-autostart-generator.c
+index c5c6b54fdc..39ab81c1f2 100644
+--- a/src/xdg-autostart-generator/xdg-autostart-generator.c
++++ b/src/xdg-autostart-generator/xdg-autostart-generator.c
+@@ -24,7 +24,6 @@ static int enumerate_xdg_autostart(Hashmap *all_services) {
+         _cleanup_strv_free_ char **config_dirs = NULL;
+         _unused_ _cleanup_strv_free_ char **data_dirs = NULL;
+         _cleanup_free_ char *user_config_autostart_dir = NULL;
+-        char **path;
+         int r;
+ 
+         r = xdg_user_config_dir(&user_config_autostart_dir, "/autostart");
diff --git a/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch b/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch
new file mode 100644
index 0000000..a36deb0
--- /dev/null
+++ b/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch
@@ -0,0 +1,29 @@
+From 607c82526a5085885f4af96f1979572c72c300a4 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Thu, 17 Mar 2022 03:42:41 +0900
+Subject: [PATCH] core: ExecContext::restrict_filesystems is set of string
+
+(cherry picked from commit 8fe84dc8de60ae8995e53e4d47b44c61626c0526)
+
+Related: #2082131
+---
+ src/core/execute.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 306e563e4f..34b0478ead 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -5916,9 +5916,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
+ 
+ #if HAVE_LIBBPF
+         if (exec_context_restrict_filesystems_set(c)) {
+-                char **e;
+-                SET_FOREACH(e, c->restrict_filesystems)
+-                        fprintf(f, "%sRestrictFileSystems: %s\n", prefix, *e);
++                char *fs;
++                SET_FOREACH(fs, c->restrict_filesystems)
++                        fprintf(f, "%sRestrictFileSystems: %s\n", prefix, fs);
+         }
+ #endif
+ 
diff --git a/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch b/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch
new file mode 100644
index 0000000..6b88602
--- /dev/null
+++ b/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch
@@ -0,0 +1,67 @@
+From 9b655d805e78a314a24b8493c6c116a4d943beb9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 11 Mar 2022 14:27:46 +0100
+Subject: [PATCH] install: when linking a file, create the link first or abort
+
+We'd create aliases and other symlinks first, and only then try to create
+the main link. Since that can fail, let's do things in opposite order, and
+abort immediately if we can't link the file itself.
+
+(cherry picked from commit 20d68b3aec62110351bdc695fd1a55adcf3a6ee5)
+
+Related: #2082131
+---
+ src/shared/install.c          | 12 +++++++-----
+ test/test-systemctl-enable.sh |  9 +++------
+ 2 files changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 785ef55dbd..fadd2be248 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1985,6 +1985,13 @@ static int install_info_apply(
+ 
+         bool force = file_flags & UNIT_FILE_FORCE;
+ 
++        r = install_info_symlink_link(info, lp, config_path, force, changes, n_changes);
++        /* Do not count links to the unit file towards the "carries_install_info" count */
++        if (r < 0)
++                /* If linking of the file failed, do not try to create other symlinks,
++                 * because they might would pointing to a non-existent or wrong unit. */
++                return r;
++
+         r = install_info_symlink_alias(scope, info, lp, config_path, force, changes, n_changes);
+ 
+         q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->wanted_by, ".wants/", changes, n_changes);
+@@ -1995,11 +2002,6 @@ static int install_info_apply(
+         if (r == 0)
+                 r = q;
+ 
+-        q = install_info_symlink_link(info, lp, config_path, force, changes, n_changes);
+-        /* Do not count links to the unit file towards the "carries_install_info" count */
+-        if (r == 0 && q < 0)
+-                r = q;
+-
+         return r;
+ }
+ 
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 3aa61222a8..c1fb9626ab 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -173,12 +173,9 @@ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : -------enable already linked different path-----------------
+-# FIXME
+-# "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
+-# test -h "$root/etc/systemd/system/link1.path"
+-# readlink "$root/etc/systemd/system/link1.path"
+-# test -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+-# readlink "$root/etc/systemd/system/paths.target.wants/link1.path"
++"$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : -------enable bad suffix------------------------------------
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
diff --git a/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch b/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch
new file mode 100644
index 0000000..5b7ca2b
--- /dev/null
+++ b/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch
@@ -0,0 +1,199 @@
+From caaea62c2c32e6aedb24288d5f51e6c35187e14c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 14 Mar 2022 12:09:31 +0100
+Subject: [PATCH] shared/install: split unit_file_{disable,enable}() so
+ _reenable doesn't do setup twice
+
+It was pretty ugly that we were creating LookupPaths twice.
+
+(cherry picked from commit ec7eaff3c2abf3048f3fba98bfbe08a0c7c898b0)
+
+Related: #2082131
+---
+ src/shared/install.c | 105 +++++++++++++++++++++++++++++--------------
+ 1 file changed, 72 insertions(+), 33 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index fadd2be248..1018e4fbf3 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2596,33 +2596,21 @@ int unit_file_add_dependency(
+                                      SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes);
+ }
+ 
+-int unit_file_enable(
++static int do_unit_file_enable(
++                const LookupPaths *lp,
+                 UnitFileScope scope,
+-                UnitFileFlags file_flags,
+-                const char *root_dir,
++                UnitFileFlags flags,
++                const char *config_path,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+-        const char *config_path;
+         UnitFileInstallInfo *info;
+         int r;
+ 
+-        assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
+-
+-        r = lookup_paths_init_or_warn(&lp, scope, 0, root_dir);
+-        if (r < 0)
+-                return r;
+-
+-        config_path = config_path_from_flags(&lp, file_flags);
+-        if (!config_path)
+-                return -ENXIO;
+-
+         STRV_FOREACH(f, files) {
+-                r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
++                r = install_info_discover_and_check(&ctx, lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
+                                                     &info, changes, n_changes);
+                 if (r < 0)
+                         return r;
+@@ -2635,11 +2623,11 @@ int unit_file_enable(
+            is useful to determine whether the passed files had any
+            installation data at all. */
+ 
+-        return install_context_apply(&ctx, &lp, file_flags, config_path,
++        return install_context_apply(&ctx, lp, flags, config_path,
+                                      SEARCH_LOAD, changes, n_changes);
+ }
+ 
+-int unit_file_disable(
++int unit_file_enable(
+                 UnitFileScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+@@ -2648,9 +2636,6 @@ int unit_file_disable(
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
+-        _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
+-        const char *config_path;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2660,27 +2645,44 @@ int unit_file_disable(
+         if (r < 0)
+                 return r;
+ 
+-        config_path = config_path_from_flags(&lp, flags);
++        const char *config_path = config_path_from_flags(&lp, flags);
+         if (!config_path)
+                 return -ENXIO;
+ 
++        return do_unit_file_enable(&lp, scope, flags, config_path, files, changes, n_changes);
++}
++
++static int do_unit_file_disable(
++                const LookupPaths *lp,
++                UnitFileScope scope,
++                UnitFileFlags flags,
++                const char *config_path,
++                char **files,
++                UnitFileChange **changes,
++                size_t *n_changes) {
++
++        _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++        _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
++        int r;
++
+         STRV_FOREACH(i, files) {
+                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
+                         return -EINVAL;
+ 
+-                r = install_info_add(&ctx, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL);
++                r = install_info_add(&ctx, *i, NULL, lp->root_dir, /* auxiliary= */ false, NULL);
+                 if (r < 0)
+                         return r;
+         }
+ 
+-        r = install_context_mark_for_removal(&ctx, &lp, &remove_symlinks_to, config_path, changes, n_changes);
++        r = install_context_mark_for_removal(&ctx, lp, &remove_symlinks_to, config_path, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+-        return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes);
++        return remove_marked_symlinks(remove_symlinks_to, config_path, lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes);
+ }
+ 
+-int unit_file_reenable(
++
++int unit_file_disable(
+                 UnitFileScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+@@ -2688,23 +2690,60 @@ int unit_file_reenable(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        char **n;
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         int r;
++
++        assert(scope >= 0);
++        assert(scope < _UNIT_FILE_SCOPE_MAX);
++
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
++        if (r < 0)
++                return r;
++
++        const char *config_path = config_path_from_flags(&lp, flags);
++        if (!config_path)
++                return -ENXIO;
++
++        return do_unit_file_disable(&lp, scope, flags, config_path, files, changes, n_changes);
++}
++
++int unit_file_reenable(
++                UnitFileScope scope,
++                UnitFileFlags flags,
++                const char *root_dir,
++                char **files,
++                UnitFileChange **changes,
++                size_t *n_changes) {
++
++        _cleanup_(lookup_paths_free) LookupPaths lp = {};
+         size_t l, i;
++        char **names;
++        int r;
++
++        assert(scope >= 0);
++        assert(scope < _UNIT_FILE_SCOPE_MAX);
++
++        r = lookup_paths_init(&lp, scope, 0, root_dir);
++        if (r < 0)
++                return r;
++
++        const char *config_path = config_path_from_flags(&lp, flags);
++        if (!config_path)
++                return -ENXIO;
+ 
+         /* First, we invoke the disable command with only the basename... */
+         l = strv_length(files);
+-        n = newa(char*, l+1);
++        names = newa(char*, l+1);
+         for (i = 0; i < l; i++)
+-                n[i] = basename(files[i]);
+-        n[i] = NULL;
++                names[i] = basename(files[i]);
++        names[i] = NULL;
+ 
+-        r = unit_file_disable(scope, flags, root_dir, n, changes, n_changes);
++        r = do_unit_file_disable(&lp, scope, flags, config_path, names, changes, n_changes);
+         if (r < 0)
+                 return r;
+ 
+         /* But the enable command with the full name */
+-        return unit_file_enable(scope, flags, root_dir, files, changes, n_changes);
++        return do_unit_file_enable(&lp, scope, flags, config_path, files, changes, n_changes);
+ }
+ 
+ int unit_file_set_default(
diff --git a/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch b/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch
new file mode 100644
index 0000000..d5bdcb5
--- /dev/null
+++ b/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch
@@ -0,0 +1,146 @@
+From f88f7c68264f9cfef78f4a4e2f68e45de8f1f055 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 15 Mar 2022 09:44:39 +0100
+Subject: [PATCH] shared/install: fix reenable on linked unit files
+
+(cherry picked from commit 29a7c59abbe594422f1ed7602263420745339a3e)
+
+Related: #2082131
+---
+ src/shared/install.c          | 73 ++++++++++++++++++++++++++++++-----
+ src/shared/install.h          |  2 +-
+ test/test-systemctl-enable.sh |  8 ++--
+ 3 files changed, 68 insertions(+), 15 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 1018e4fbf3..bf11e5bdce 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2707,17 +2707,74 @@ int unit_file_disable(
+         return do_unit_file_disable(&lp, scope, flags, config_path, files, changes, n_changes);
+ }
+ 
++static int normalize_linked_files(
++                UnitFileScope scope,
++                const LookupPaths *lp,
++                char **names_or_paths,
++                char ***ret_names,
++                char ***ret_files) {
++
++        /* This is similar to normalize_filenames()/normalize_names() in src/systemctl/,
++         * but operates on real unit names. For each argument we we look up the actual path
++         * where the unit is found. This way linked units can be reenabled successfully. */
++
++        _cleanup_free_ char **files = NULL, **names = NULL;
++        int r;
++
++        STRV_FOREACH(a, names_or_paths) {
++                _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
++                UnitFileInstallInfo *i = NULL;
++                _cleanup_free_ char *n = NULL;
++
++                r = path_extract_filename(*a, &n);
++                if (r < 0)
++                        return r;
++                if (r == O_DIRECTORY)
++                        return log_debug_errno(SYNTHETIC_ERRNO(EISDIR),
++                                               "Unexpected path to a directory \"%s\", refusing.", *a);
++
++                if (!is_path(*a)) {
++                        r = install_info_discover(&ctx, lp, n, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, &i, NULL, NULL);
++                        if (r < 0)
++                                log_debug_errno(r, "Failed to discover unit \"%s\", operating on name: %m", n);
++                }
++
++                r = strv_consume(&names, TAKE_PTR(n));
++                if (r < 0)
++                        return r;
++
++                const char *p = NULL;
++                if (i && i->path)
++                        /* Use startswith here, because we know that paths are normalized, and
++                         * path_startswith() would give us a relative path, but we need an absolute path
++                         * relative to i->root.
++                         *
++                         * In other words: /var/tmp/instroot.1234/etc/systemd/system/frobnicator.service
++                         * is replaced by /etc/systemd/system/frobnicator.service, which is "absolute"
++                         * in a sense, but only makes sense "relative" to /var/tmp/instroot.1234/.
++                         */
++                        p = startswith(i->path, i->root);
++
++                r = strv_extend(&files, p ?: *a);
++                if (r < 0)
++                        return r;
++        }
++
++        *ret_names = TAKE_PTR(names);
++        *ret_files = TAKE_PTR(files);
++        return 0;
++}
++
+ int unit_file_reenable(
+                 UnitFileScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+-                char **files,
++                char **names_or_paths,
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-        size_t l, i;
+-        char **names;
++        _cleanup_strv_free_ char **names = NULL, **files = NULL;
+         int r;
+ 
+         assert(scope >= 0);
+@@ -2731,13 +2788,11 @@ int unit_file_reenable(
+         if (!config_path)
+                 return -ENXIO;
+ 
+-        /* First, we invoke the disable command with only the basename... */
+-        l = strv_length(files);
+-        names = newa(char*, l+1);
+-        for (i = 0; i < l; i++)
+-                names[i] = basename(files[i]);
+-        names[i] = NULL;
++        r = normalize_linked_files(scope, &lp, names_or_paths, &names, &files);
++        if (r < 0)
++                return r;
+ 
++        /* First, we invoke the disable command with only the basename... */
+         r = do_unit_file_disable(&lp, scope, flags, config_path, names, changes, n_changes);
+         if (r < 0)
+                 return r;
+diff --git a/src/shared/install.h b/src/shared/install.h
+index d21e2aaa45..dba6987406 100644
+--- a/src/shared/install.h
++++ b/src/shared/install.h
+@@ -111,7 +111,7 @@ int unit_file_reenable(
+                 UnitFileScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+-                char **files,
++                char **names_or_paths,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_preset(
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index c1fb9626ab..0ed08a9da3 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -206,11 +206,9 @@ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+-# FIXME
+-# "$systemctl" --root="$root" reenable 'link1.path'
+-# islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-# islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+-
++"$systemctl" --root="$root" reenable 'link1.path'
++islink "$root/etc/systemd/system/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : -------manual link------------------------------------------
+ cat >"$root/link3.suffix" <<EOF
diff --git a/SOURCES/0187-test-systemctl-enable-extend-the-test-for-repeated-W.patch b/SOURCES/0187-test-systemctl-enable-extend-the-test-for-repeated-W.patch
new file mode 100644
index 0000000..aeea0e3
--- /dev/null
+++ b/SOURCES/0187-test-systemctl-enable-extend-the-test-for-repeated-W.patch
@@ -0,0 +1,84 @@
+From 8bd34d04ce8ca0ec4a501973771634083180ecc0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 15 Mar 2022 10:13:18 +0100
+Subject: [PATCH] test-systemctl-enable: extend the test for repeated
+ WantedBy/RequiredBy
+
+I was considering deduplicating the list of target units in
+WantedBy/RequiredBy. But to do this meaningfully, we'd need to do alias
+expansion first, i.e. after the initial parsing is done. This seems to be
+more trouble than it would be worth.
+
+Instead, I added tests that we're doing the right thing and creating symlinks
+as expected. For duplicate links, we create the link, and on the second time we
+see that the link is already there, so the output is correct.
+
+(cherry picked from commit 0c003e8305188f25429938c7c4d09c0a5dfc961b)
+
+Related: #2082131
+---
+ test/test-systemctl-enable.sh | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 0ed08a9da3..0a0123b9d7 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -285,39 +285,53 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ 
+ : -------template enablement w/ default instance--------------
+-cat >>"$root/etc/systemd/system/templ1@.service" <<EOF
++cat >"$root/etc/systemd/system/templ1@.service" <<EOF
++[Install]
++# check enablement with
++WantedBy=services.target services.target
++RequiredBy=other@templ1.target other@%p.target
+ DefaultInstance=333
+ EOF
+-# FIXME: should we deduplicate the target? Right now we warn twice if WantedBy= is repeated.
+-# WantedBy=services.target services.target
+ 
+ "$systemctl" --root="$root" enable 'templ1@.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
+ islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+-# disable both remaining links here
++# disable remaining links here
+ "$systemctl" --root="$root" disable 'templ1@.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service"
++test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
++test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service"
+ 
+ : -------template enablement for another template-------------
+ cat >"$root/etc/systemd/system/templ2@.service" <<EOF
diff --git a/SOURCES/0188-shared-install-when-we-fail-to-chase-a-symlink-show-.patch b/SOURCES/0188-shared-install-when-we-fail-to-chase-a-symlink-show-.patch
new file mode 100644
index 0000000..f7fc1b0
--- /dev/null
+++ b/SOURCES/0188-shared-install-when-we-fail-to-chase-a-symlink-show-.patch
@@ -0,0 +1,41 @@
+From 144887f20bb2dc9f46060091db03d4f517f1d518 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 2 Mar 2022 16:53:54 +0100
+Subject: [PATCH] shared/install: when we fail to chase a symlink, show some
+ logs
+
+When chase_symlinks() fails, we'd get the generic error:
+
+  Failed to disable: Permission denied.
+
+Let's at least add the failure to changes list, so the user gets
+a slightly better message. Ideally, we'd say where exactly the permission
+failure occured, but chase_symlinks() is a library level function and I don't
+think we should add logging there. The output looks like this now:
+
+  Failed to resolve symlink "/tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias2.service": Permission denied
+  Failed to resolve symlink "/tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias.service": Permission denied
+  Failed to disable unit, file /tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias2.service: Permission denied.
+  Failed to disable unit, file /tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias.service: Permission denied.
+
+(cherry picked from commit 212a24f0bbe4c54183d3b0ad9579a995007e29a8)
+
+Related: #2082131
+---
+ src/shared/install.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index bf11e5bdce..ce045d02be 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -616,6 +616,9 @@ static int remove_marked_symlinks_fd(
+                         if (q == -ENOENT)
+                                 continue;
+                         if (q < 0) {
++                                log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p);
++                                unit_file_changes_add(changes, n_changes, q, p, NULL);
++
+                                 if (r == 0)
+                                         r = q;
+                                 continue;
diff --git a/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch b/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch
new file mode 100644
index 0000000..1dee0c7
--- /dev/null
+++ b/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch
@@ -0,0 +1,42 @@
+From 64fa6f059ae0b491fdb52c7375d59774ff9c237a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 15 Mar 2022 16:35:47 +0100
+Subject: [PATCH] shared/install: do not try to resolve symlinks outside of
+ root directory
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+I linked a file as root, so I had a symlink /root/test.service ← /etc/systemd/system/test.service.
+To my surpise, when running test-systemctl-enable, it failed with a cryptic EACCES.
+The previous commit made the logs a bit better. Strace shows that we
+were trying to follow the symlink without taking --root into account.
+
+It seems that this bug was introduced in 66a19d85a533b15ed32f4066ec880b5a8c06babd:
+before it, we'd do readlink_malloc(), which returned a path relative to root. But
+we only used that path for checking if the path is in remove_symlinks_to set, which
+contains relative paths. So if the path was relative, we'd get a false-negative
+answer, but we didn't go outside of the root. (We need to canonicalize the symlink
+to get a consistent answer.) But after 66a19 we use chase_symlinks(), without taking
+root into account which is completely bogus.
+
+(cherry picked from commit 40276314afc4fb5c35c6b3da3e6185af6ed3886b)
+
+Related: #2082131
+---
+ src/shared/install.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index ce045d02be..ad0238ab50 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -612,7 +612,7 @@ static int remove_marked_symlinks_fd(
+                                 return -ENOMEM;
+                         path_simplify(p);
+ 
+-                        q = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &dest, NULL);
++                        q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL);
+                         if (q == -ENOENT)
+                                 continue;
+                         if (q < 0) {
diff --git a/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch b/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch
new file mode 100644
index 0000000..a74db25
--- /dev/null
+++ b/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch
@@ -0,0 +1,79 @@
+From 2a11a51491d3113f8d198c7d30ead8b555e60a61 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 15 Mar 2022 17:45:34 +0100
+Subject: [PATCH] test-systemctl-enable: enhance the test for unit file linking
+
+Current behaviour is wrong, but it cannot be shown in this test, because we
+don't have a running systemd instance here.
+
+(cherry picked from commit 85516075a24fd2f1316575570d7d5f5a37f43dbd)
+
+Related: #2082131
+---
+ test/test-systemctl-enable.sh | 39 ++++++++++++++++++++++++++++++++---
+ 1 file changed, 36 insertions(+), 3 deletions(-)
+
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 0a0123b9d7..220ebfdab7 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -401,7 +401,7 @@ test ! -h "$root/etc/systemd/system/link4.service"
+ test ! -h "$root/etc/systemd/system/link4alias.service"
+ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ 
+-: -------issue 661: link and enable on unit file--------------
++: -------issue 661: enable on unit file--------------
+ test ! -e "$root/etc/systemd/system/link5.service"
+ cat >"$root/etc/systemd/system/link5.service" <<EOF
+ [Install]
+@@ -412,8 +412,6 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5.service"  # this is our file
+-# FIXME/CLARIFYME: will systemd think that link5alias2, link5alias, link5 are all aliases?
+-# https://github.com/systemd/systemd/issues/661#issuecomment-1057931149
+ islink "$root/etc/systemd/system/link5alias.service" "/etc/systemd/system/link5.service"
+ islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5.service"
+ 
+@@ -421,6 +419,41 @@ islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
++: -------issue 661: link and enable on unit file--------------
++test ! -e "$root/etc/systemd/system/link5copy.service"
++cat >"$root/link5copy.service" <<EOF
++[Install]
++Alias=link5copy.service
++Alias=link5alias.service
++Alias=link5alias2.service
++EOF
++
++test ! -e "$root/etc/systemd/system/link5copy.service"
++
++"$systemctl" --root="$root" link '/link5copy.service'
++islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
++test ! -h "$root/etc/systemd/system/link5alias.service"
++test ! -h "$root/etc/systemd/system/link5alias2.service"
++
++# FIXME: we must create link5alias2 and link5alias as relative links to link5.service
++# When they are independent links to /link5.service, systemd doesn't know that
++# they are aliases, because we do not follow symlinks outside of the search paths.
++
++"$systemctl" --root="$root" disable 'link5copy.service'
++test ! -h "$root/etc/systemd/system/link5copy.service"
++test ! -h "$root/etc/systemd/system/link5alias.service"
++test ! -h "$root/etc/systemd/system/link5alias2.service"
++
++"$systemctl" --root="$root" enable '/link5copy.service'
++islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
++islink "$root/etc/systemd/system/link5alias.service" '/link5copy.service'
++islink "$root/etc/systemd/system/link5alias2.service" '/link5copy.service'
++
++"$systemctl" --root="$root" disable 'link5copy.service'
++test ! -h "$root/etc/systemd/system/link5copy.service"
++test ! -h "$root/etc/systemd/system/link5alias.service"
++test ! -h "$root/etc/systemd/system/link5alias2.service"
++
+ : ----issue 19437: plain templates in .wants/ or .requires/---
+ test ! -e "$root/etc/systemd/system/link5@.path"
+ cat >"$root/etc/systemd/system/link5@.path" <<EOF
diff --git a/SOURCES/0191-shared-install-skip-unnecessary-chasing-of-symlinks-.patch b/SOURCES/0191-shared-install-skip-unnecessary-chasing-of-symlinks-.patch
new file mode 100644
index 0000000..b2bfa00
--- /dev/null
+++ b/SOURCES/0191-shared-install-skip-unnecessary-chasing-of-symlinks-.patch
@@ -0,0 +1,89 @@
+From 78105a206a21133f87f5982f29d7aa3c4cc72b0d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 16 Mar 2022 09:28:46 +0100
+Subject: [PATCH] shared/install: skip unnecessary chasing of symlinks in
+ disable
+
+We use the symlink source name and destination names to decide whether to remove
+the symlink. But if the source name is enough to decide to remove the symlink,
+we'd still look up the destination for no good reason. This is a slow operation,
+let's skip it.
+
+(cherry picked from commit 7a6c73dabf6451d6ef22d0cdfbb1749a77450d5b)
+
+Related: #2082131
+---
+ src/shared/install.c | 43 +++++++++++++++++++++++++------------------
+ 1 file changed, 25 insertions(+), 18 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index ad0238ab50..08a9892260 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -599,8 +599,7 @@ static int remove_marked_symlinks_fd(
+                                 r = q;
+ 
+                 } else if (de->d_type == DT_LNK) {
+-                        _cleanup_free_ char *p = NULL, *dest = NULL;
+-                        const char *rp;
++                        _cleanup_free_ char *p = NULL;
+                         bool found;
+                         int q;
+ 
+@@ -612,24 +611,32 @@ static int remove_marked_symlinks_fd(
+                                 return -ENOMEM;
+                         path_simplify(p);
+ 
+-                        q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL);
+-                        if (q == -ENOENT)
+-                                continue;
+-                        if (q < 0) {
+-                                log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p);
+-                                unit_file_changes_add(changes, n_changes, q, p, NULL);
++                        /* We remove all links pointing to a file or path that is marked, as well as all
++                         * files sharing the same name as a file that is marked. Do path chasing only if
++                         * we don't already know that we want to remove the symlink. */
++                        found = set_contains(remove_symlinks_to, de->d_name);
+ 
+-                                if (r == 0)
+-                                        r = q;
+-                                continue;
+-                        }
++                        if (!found) {
++                                _cleanup_free_ char *dest = NULL;
++
++
++                                q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL);
++                                if (q == -ENOENT)
++                                        continue;
++                                if (q < 0) {
++                                        log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p);
++                                        unit_file_changes_add(changes, n_changes, q, p, NULL);
+ 
+-                        /* We remove all links pointing to a file or path that is marked, as well as all files sharing
+-                         * the same name as a file that is marked. */
++                                        if (r == 0)
++                                                r = q;
++                                        continue;
++                                }
++
++                                found = set_contains(remove_symlinks_to, dest) ||
++                                        set_contains(remove_symlinks_to, basename(dest));
++
++                        }
+ 
+-                        found = set_contains(remove_symlinks_to, dest) ||
+-                                set_contains(remove_symlinks_to, basename(dest)) ||
+-                                set_contains(remove_symlinks_to, de->d_name);
+ 
+                         if (!found)
+                                 continue;
+@@ -650,7 +657,7 @@ static int remove_marked_symlinks_fd(
+                         /* Now, remember the full path (but with the root prefix removed) of
+                          * the symlink we just removed, and remove any symlinks to it, too. */
+ 
+-                        rp = skip_root(lp->root_dir, p);
++                        const char *rp = skip_root(lp->root_dir, p);
+                         q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p);
+                         if (q < 0)
+                                 return q;
diff --git a/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch b/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch
new file mode 100644
index 0000000..3682ca1
--- /dev/null
+++ b/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch
@@ -0,0 +1,116 @@
+From 5aa2be25e7de16f4d3ff3b322cf8c35574e712c5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 16 Mar 2022 09:51:24 +0100
+Subject: [PATCH] =?UTF-8?q?shared/install:=20also=20remove=20symlinks=20li?=
+ =?UTF-8?q?ke=20.wants/foo@one.service=20=E2=86=92=20../foo@one.service?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+So far 'systemctl enable' would create absolute links to the target template
+name. And we would remove such symlinks just fine. But the user may create
+symlinks manually in a different form. In particular, symlinks for instanced
+units *must* have the instance in the source name, and then it is natural to
+also include it in the target name (.wants/foo@one.service → ../foo@one.service
+rather than .wants/foo@one.service → ../foo@.service). We would choke on such
+links, or not remove them at all. A test is added:
+
+before:
+
++ build-rawhide/systemctl --root=/tmp/systemctl-test.001xda disable templ1@.service
+Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@seven.service".
+Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@six.service".
+Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@five.service".
+Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@four.service".
+Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@three.service".
+Failed to disable unit, refusing to operate on linked unit file /tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@two.service.
+Failed to disable unit, refusing to operate on linked unit file /tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@two.service.
+
+after:
+
++ build-rawhide/systemctl --root=/tmp/systemctl-test.QVP0ev disable templ1@.service
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@seven.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@six.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@five.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@four.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@three.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@two.service".
+Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@one.service".
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@one.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@two.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@three.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@four.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@five.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@six.service
++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@seven.service
+
+(cherry picked from commit 9f61c9f79e0f77044b71ef2ba5edde20e15c6ad2)
+
+Related: #2082131
+---
+ src/shared/install.c          | 16 +++++++++++++---
+ test/test-systemctl-enable.sh | 20 ++++++++++++++++++++
+ 2 files changed, 33 insertions(+), 3 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 08a9892260..43955519ae 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -612,13 +612,23 @@ static int remove_marked_symlinks_fd(
+                         path_simplify(p);
+ 
+                         /* We remove all links pointing to a file or path that is marked, as well as all
+-                         * files sharing the same name as a file that is marked. Do path chasing only if
+-                         * we don't already know that we want to remove the symlink. */
++                         * files sharing the same name as a file that is marked, and files sharing the same
++                         * name after the instance has been removed. Do path chasing only if we don't already
++                         * know that we want to remove the symlink. */
+                         found = set_contains(remove_symlinks_to, de->d_name);
+ 
+                         if (!found) {
+-                                _cleanup_free_ char *dest = NULL;
++                                _cleanup_free_ char *template = NULL;
++
++                                q = unit_name_template(de->d_name, &template);
++                                if (q < 0 && q != -EINVAL)
++                                        return q;
++                                if (q >= 0)
++                                        found = set_contains(remove_symlinks_to, template);
++                        }
+ 
++                        if (!found) {
++                                _cleanup_free_ char *dest = NULL;
+ 
+                                 q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL);
+                                 if (q == -ENOENT)
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 220ebfdab7..4462fb386e 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -333,6 +333,26 @@ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.serv
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service"
+ 
++: -------removal of relative enablement symlinks--------------
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
++ln -s '../templ1@one.service' "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++ln -s 'templ1@two.service' "$root/etc/systemd/system/services.target.wants/templ1@two.service"
++ln -s '../templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@three.service"
++ln -s 'templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@four.service"
++ln -s '/usr/lib/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@five.service"
++ln -s '/etc/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@six.service"
++ln -s '/run/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@seven.service"
++
++# this should remove all links
++"$systemctl" --root="$root" disable 'templ1@.service'
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@three.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@four.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@five.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@six.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@seven.service"
++
+ : -------template enablement for another template-------------
+ cat >"$root/etc/systemd/system/templ2@.service" <<EOF
+ [Install]
diff --git a/SOURCES/0193-shared-install-create-relative-symlinks-for-enableme.patch b/SOURCES/0193-shared-install-create-relative-symlinks-for-enableme.patch
new file mode 100644
index 0000000..b704e6f
--- /dev/null
+++ b/SOURCES/0193-shared-install-create-relative-symlinks-for-enableme.patch
@@ -0,0 +1,633 @@
+From a7e70c5699a663cf14e9358648698667bd320db7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 16 Mar 2022 10:17:32 +0100
+Subject: [PATCH] shared/install: create relative symlinks for enablement and
+ aliasing
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This is a fairly noticable change, but I think it needs to be done.
+So far we'd create an absolute symlink to the target unit file:
+  .wants/foo.service → /usr/lib/systemd/system/foo.service
+or
+  alias.service → /etc/systemd/system/aliased.service.
+
+This works reasonably well, except in one case: where the unit file
+is linked. When we look at a file link, the name of the physical file
+isn't used, and we only take the account the symlink source name.
+(In fact, the destination filename may not even be a well-formed unit name,
+so we couldn't use it, even if we wanted to.) But this means that if
+a file is linked, and specifies aliases, we'd create absolute links for
+those aliases, and systemd would consider each "alias" to be a separate
+unit. This isn't checked by the tests here, because we don't have a running
+systemd instance, but it is easy enough to check manually.
+
+The most reasonable way to fix this is to create relative links to the
+unit file:
+  .wants/foo.service → ../foo.service
+  alias.service → aliased.service.
+
+I opted to use no prefix for aliases, both normal and 'default.target',
+and to add "../" for .wants/ and .requires/. Note that the link that is
+created doesn't necessarily point to the file. E.g. if we're enabling
+a file under /usr/lib/systemd/system, and create a symlink in /etc/systemd/system,
+it'll still be "../foo.service", not "../../usr/lib/systemd/system/foo.service".
+For our unit loading logic this doesn't matter, and figuring out a path
+that actually leads somewhere would be more work. Since the user is allowed
+to move the unit file, or add a new unit file in a different location, and
+we don't actually follow the symlink, I think it's OK to create a dangling
+symlink. The prefix of "../" is useful to give a hint that the link points
+to files that are conceptually "one level up" in the directory hierarchy.
+
+With the relative symlinks, systemd knows that those are aliases.
+
+The tests are adjusted to use the new forms. There were a few tests that
+weren't really testing something useful: 'test -e x' fails if 'x' is a
+a dangling symlink. Absolute links in the chroot would be dangling, even
+though the target existed in the expected path, but become non-dangling
+when made relative and the test fails.
+
+This should be described in NEWS, but I'm not adding that here, because
+it'd likely result in conflicts.
+
+(cherry picked from commit d6c9411072901556176ac130f2ce71a33107aa93)
+
+Related: #2082131
+---
+ src/shared/install.c          |  14 ++--
+ src/test/test-install-root.c  |  65 +++++++++--------
+ test/test-systemctl-enable.sh | 128 ++++++++++++++++------------------
+ 3 files changed, 105 insertions(+), 102 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 43955519ae..1a2b0ccf24 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1842,7 +1842,7 @@ static int install_info_symlink_alias(
+                 if (!alias_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(lp, info->path, alias_path, force, changes, n_changes);
++                q = create_symlink(lp, info->name, alias_path, force, changes, n_changes);
+                 r = r < 0 ? r : q;
+         }
+ 
+@@ -1911,7 +1911,7 @@ static int install_info_symlink_wants(
+         }
+ 
+         STRV_FOREACH(s, list) {
+-                _cleanup_free_ char *path = NULL, *dst = NULL;
++                _cleanup_free_ char *dst = NULL;
+ 
+                 q = install_name_printf(scope, info, *s, info->root, &dst);
+                 if (q < 0) {
+@@ -1941,11 +1941,15 @@ static int install_info_symlink_wants(
+                         continue;
+                 }
+ 
+-                path = strjoin(config_path, "/", dst, suffix, n);
++                _cleanup_free_ char *path = strjoin(config_path, "/", dst, suffix, n);
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(lp, info->path, path, true, changes, n_changes);
++                _cleanup_free_ char *target = strjoin("../", info->name);
++                if (!target)
++                        return -ENOMEM;
++
++                q = create_symlink(lp, target, path, true, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+ 
+@@ -2853,7 +2857,7 @@ int unit_file_set_default(
+                 return r;
+ 
+         new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
+-        return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
++        return create_symlink(&lp, info->name, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
+ }
+ 
+ int unit_file_get_default(
+diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
+index 4f66c12655..dca695d124 100644
+--- a/src/test/test-install-root.c
++++ b/src/test/test-install-root.c
+@@ -88,7 +88,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
++        assert_se(streq(changes[0].source, "../a.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -128,7 +128,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
++        assert_se(streq(changes[0].source, "../a.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -147,7 +147,7 @@ TEST(basic_mask_and_enable) {
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
++        assert_se(streq(changes[1].source, "../a.service"));
+         assert_se(streq(changes[1].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+@@ -186,7 +186,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service"));
++        assert_se(streq(changes[0].source, "../f.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service");
+         assert_se(streq(changes[0].path, p));
+         assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT);
+@@ -280,7 +280,8 @@ TEST(linked_units) {
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
+         for (i = 0 ; i < n_changes; i++) {
+                 assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+-                assert_se(streq(changes[i].source, "/opt/linked.service"));
++                assert_se(STR_IN_SET(changes[i].source,
++                                     "../linked.service", "/opt/linked.service"));
+ 
+                 if (p && streq(changes[i].path, p))
+                         p = NULL;
+@@ -322,7 +323,8 @@ TEST(linked_units) {
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
+         for (i = 0 ; i < n_changes; i++) {
+                 assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+-                assert_se(streq(changes[i].source, "/opt/linked2.service"));
++                assert_se(STR_IN_SET(changes[i].source,
++                                     "../linked2.service", "/opt/linked2.service"));
+ 
+                 if (p && streq(changes[i].path, p))
+                         p = NULL;
+@@ -340,7 +342,7 @@ TEST(linked_units) {
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(startswith(changes[0].path, root));
+         assert_se(endswith(changes[0].path, "linked3.service"));
+-        assert_se(streq(changes[0].source, "/opt/linked3.service"));
++        assert_se(streq(changes[0].source, "../linked3.service"));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ }
+@@ -371,7 +373,7 @@ TEST(default) {
+         assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
++        assert_se(streq(changes[0].source, "test-default-real.target"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -401,7 +403,7 @@ TEST(add_dependency) {
+         assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
++        assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -442,7 +444,7 @@ TEST(template_enable) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
++        assert_se(streq(changes[0].source, "../template@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -473,13 +475,14 @@ TEST(template_enable) {
+ 
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
++        assert_se(streq(changes[0].source, "../template@foo.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
++        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0);
++        assert_se(state == UNIT_FILE_INDIRECT);
+         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+@@ -506,7 +509,7 @@ TEST(template_enable) {
+ 
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
++        assert_se(streq(changes[0].source, "../template@quux.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -552,7 +555,7 @@ TEST(indirect) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
++        assert_se(streq(changes[0].source, "../indirectb.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -604,7 +607,7 @@ TEST(preset_and_list) {
+         assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
++        assert_se(streq(changes[0].source, "../preset-yes.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -641,7 +644,7 @@ TEST(preset_and_list) {
+         for (i = 0; i < n_changes; i++) {
+ 
+                 if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) {
+-                        assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
++                        assert_se(streq(changes[i].source, "../preset-yes.service"));
+                         assert_se(streq(changes[i].path, p));
+                 } else
+                         assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
+@@ -757,7 +760,7 @@ TEST(preset_order) {
+         assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
++        assert_se(streq(changes[0].source, "../prefix-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -866,8 +869,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-1.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service");
+@@ -880,8 +883,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
+-        assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-2.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-2.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service");
+@@ -894,8 +897,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-3.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-3.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service");
+@@ -908,8 +911,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-4a.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-4b.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service");
+@@ -975,8 +978,8 @@ TEST(with_dropin_template) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-1@instance-1.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-1@instance-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service");
+@@ -988,8 +991,8 @@ TEST(with_dropin_template) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
+-        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-2@instance-1.service"));
++        assert_se(streq(changes[1].source, "../with-dropin-2@instance-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service");
+@@ -1000,7 +1003,7 @@ TEST(with_dropin_template) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -1009,7 +1012,7 @@ TEST(with_dropin_template) {
+         assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
++        assert_se(streq(changes[0].source, "../with-dropin-3@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 4462fb386e..9463433c5b 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -68,27 +68,27 @@ EOF
+ "$systemctl" --root="$root" enable test1 && { echo "Expected failure" >&2; exit 1; }
+ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+-test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++test -e "$root/etc/systemd/system/test1-goodalias.service"
+ test -h "$root/etc/systemd/system/test1-goodalias.service"
+-test ! -e "$root/etc/systemd/system/test1@badalias.service"
+-test ! -e "$root/etc/systemd/system/test1-badalias.target"
+-test ! -e "$root/etc/systemd/system/test1-badalias.socket"
++test ! -h "$root/etc/systemd/system/test1@badalias.service"
++test ! -h "$root/etc/systemd/system/test1-badalias.target"
++test ! -h "$root/etc/systemd/system/test1-badalias.socket"
++test -e "$root/etc/systemd/system/test1-goodalias2.service"
+ test -h "$root/etc/systemd/system/test1-goodalias2.service"
+ 
+ : -------aliases in reeanble----------------------------------
+ "$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; }
+-test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+-test ! -e "$root/etc/systemd/system/test1-goodalias.service"
+-test -h "$root/etc/systemd/system/test1-goodalias.service"
++islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service"
++islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service"
+ 
+-test ! -e "$root/etc/systemd/system/test1@badalias.service"
+-test ! -e "$root/etc/systemd/system/test1-badalias.target"
+-test ! -e "$root/etc/systemd/system/test1-badalias.socket"
++test ! -h "$root/etc/systemd/system/test1@badalias.service"
++test ! -h "$root/etc/systemd/system/test1-badalias.target"
++test ! -h "$root/etc/systemd/system/test1-badalias.socket"
+ 
+ "$systemctl" --root="$root" disable test1
+-test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
+-test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
+-test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
++test ! -h "$root/etc/systemd/system/test1-goodalias.service"
+ 
+ : -------also units-------------------------------------------
+ cat >"$root/etc/systemd/system/test2.socket" <<EOF
+@@ -165,17 +165,17 @@ test ! -e "$root/etc/systemd/system/link1.path"
+ : -------link and enable--------------------------------------
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : -------enable already linked same path----------------------
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : -------enable already linked different path-----------------
+ "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : -------enable bad suffix------------------------------------
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+@@ -204,11 +204,11 @@ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+ 
+ "$systemctl" --root="$root" enable 'link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ "$systemctl" --root="$root" reenable 'link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : -------manual link------------------------------------------
+ cat >"$root/link3.suffix" <<EOF
+@@ -253,7 +253,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service"
+ 
+ "$systemctl" --root="$root" enable 'link5-also.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
+-islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "/etc/systemd/system/link5-also.service"
++islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "../link5-also.service"
+ 
+ : -------template enablement----------------------------------
+ cat >"$root/etc/systemd/system/templ1@.service" <<EOF
+@@ -267,17 +267,17 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+@@ -295,33 +295,33 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'templ1@.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service"
+ 
+ # disable remaining links here
+ "$systemctl" --root="$root" disable 'templ1@.service'
+@@ -360,18 +360,18 @@ RequiredBy=another-template@.target
+ EOF
+ 
+ "$systemctl" --root="$root" enable 'templ2@.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ2@two.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@other.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@two.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
+ test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@.service'
+@@ -393,8 +393,8 @@ EOF
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+ test ! -h "$root/etc/systemd/system/link4@.service"
+ test ! -h "$root/etc/systemd/system/link4@inst.service"
+-islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
+-islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias.service" "link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "link4.service"
+ 
+ "$systemctl" --root="$root" disable 'link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"
+@@ -413,8 +413,8 @@ EOF
+ # Apparently this works. I'm not sure what to think.
+ "$systemctl" --root="$root" enable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+-islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
+-islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias.service" "link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "link4.service"
+ 
+ "$systemctl" --root="$root" disable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"
+@@ -432,8 +432,8 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5.service"  # this is our file
+-islink "$root/etc/systemd/system/link5alias.service" "/etc/systemd/system/link5.service"
+-islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5.service"
++islink "$root/etc/systemd/system/link5alias.service" "link5.service"
++islink "$root/etc/systemd/system/link5alias2.service" "link5.service"
+ 
+ "$systemctl" --root="$root" disable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+@@ -455,10 +455,6 @@ islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+-# FIXME: we must create link5alias2 and link5alias as relative links to link5.service
+-# When they are independent links to /link5.service, systemd doesn't know that
+-# they are aliases, because we do not follow symlinks outside of the search paths.
+-
+ "$systemctl" --root="$root" disable 'link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5copy.service"
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+@@ -466,8 +462,8 @@ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+ "$systemctl" --root="$root" enable '/link5copy.service'
+ islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
+-islink "$root/etc/systemd/system/link5alias.service" '/link5copy.service'
+-islink "$root/etc/systemd/system/link5alias2.service" '/link5copy.service'
++islink "$root/etc/systemd/system/link5alias.service" 'link5copy.service'
++islink "$root/etc/systemd/system/link5alias2.service" 'link5copy.service'
+ 
+ "$systemctl" --root="$root" disable 'link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5copy.service"
+@@ -486,10 +482,10 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5@.path'
+ test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
+-islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
+-islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
+-islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
+-islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "../link5@.path"
++islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "../link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "../link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "../link5@.path"
+ 
+ "$systemctl" --root="$root" disable 'link5@.path'
+ test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
+@@ -528,7 +524,7 @@ check_alias() {
+ Alias=target@$1:%$1.socket
+ EOF
+     SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" enable 'some-some-link6@.socket' || return 1
+-    islink "$root/etc/systemd/system/target@$1:$2.socket" "/etc/systemd/system/some-some-link6@.socket" || return 2
++    islink "$root/etc/systemd/system/target@$1:$2.socket" "some-some-link6@.socket" || return 2
+ }
+ 
+ check_alias a "$(uname -m | tr '_' '-')"
+@@ -629,10 +625,10 @@ RequiredBy=another-target2@.target
+ EOF
+ 
+ "$systemctl" --root="$root" enable 'some-some-link7.socket'
+-islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
+-islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
+-islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
+-islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "../some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "../some-some-link7.socket"
++islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "../some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "../some-some-link7.socket"
+ 
+ "$systemctl" --root="$root" disable 'some-some-link7.socket'
+ test ! -h "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket"
diff --git a/SOURCES/0194-shared-install-when-looking-for-symlinks-in-.wants-..patch b/SOURCES/0194-shared-install-when-looking-for-symlinks-in-.wants-..patch
new file mode 100644
index 0000000..54f955e
--- /dev/null
+++ b/SOURCES/0194-shared-install-when-looking-for-symlinks-in-.wants-..patch
@@ -0,0 +1,177 @@
+From 43f62843fbc5e5d085874393c24cf52ebb6658eb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 16 Mar 2022 17:37:58 +0100
+Subject: [PATCH] shared/install: when looking for symlinks in
+ .wants/.requires, ignore symlink target
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We'd say that file is enabled indirectly if we had a symlink like:
+  foo@.service ← bar.target.wants/foo@one.service
+but not when we had
+  foo@one.service ← bar.target.wants/foo@one.service
+
+The effect of both link types is the same. In fact we don't care
+about the symlink target. (We'll warn if it is mismatched, but we honour
+it anyway.)
+
+So let's use the original match logic only for aliases.
+For .wants/.requires we instead look for a matching source name,
+or a source name that matches after stripping of instance.
+
+(cherry picked from commit 466f6979c90aaee62c33723392cc49c6638a3f46)
+
+Related: #2082131
+---
+ src/shared/install.c | 93 ++++++++++++++++++++++++++++----------------
+ 1 file changed, 60 insertions(+), 33 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 1a2b0ccf24..a864039f44 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -748,7 +748,8 @@ static int find_symlinks_in_directory(
+                 const char *dir_path,
+                 const char *root_dir,
+                 const UnitFileInstallInfo *info,
+-                bool match_aliases,
++                bool ignore_destination,
++                bool match_name,
+                 bool ignore_same_name,
+                 const char *config_path,
+                 bool *same_name_link) {
+@@ -756,51 +757,67 @@ static int find_symlinks_in_directory(
+         int r = 0;
+ 
+         FOREACH_DIRENT(de, dir, return -errno) {
+-                _cleanup_free_ char *dest = NULL;
+-                bool found_path = false, found_dest, b = false;
++                bool found_path = false, found_dest = false, b = false;
+                 int q;
+ 
+                 if (de->d_type != DT_LNK)
+                         continue;
+ 
+-                /* Acquire symlink destination */
+-                q = readlinkat_malloc(dirfd(dir), de->d_name, &dest);
+-                if (q == -ENOENT)
+-                        continue;
+-                if (q < 0) {
+-                        if (r == 0)
+-                                r = q;
+-                        continue;
+-                }
++                if (!ignore_destination) {
++                        _cleanup_free_ char *dest = NULL;
++
++                        /* Acquire symlink destination */
++                        q = readlinkat_malloc(dirfd(dir), de->d_name, &dest);
++                        if (q == -ENOENT)
++                                continue;
++                        if (q < 0) {
++                                if (r == 0)
++                                        r = q;
++                                continue;
++                        }
+ 
+-                /* Make absolute */
+-                if (!path_is_absolute(dest)) {
+-                        char *x;
++                        /* Make absolute */
++                        if (!path_is_absolute(dest)) {
++                                char *x;
+ 
+-                        x = path_join(dir_path, dest);
+-                        if (!x)
+-                                return -ENOMEM;
++                                x = path_join(dir_path, dest);
++                                if (!x)
++                                        return -ENOMEM;
+ 
+-                        free_and_replace(dest, x);
++                                free_and_replace(dest, x);
++                        }
++
++                        /* Check if what the symlink points to matches what we are looking for */
++                        found_dest = streq(basename(dest), info->name);
+                 }
+ 
+                 assert(unit_name_is_valid(info->name, UNIT_NAME_ANY));
+-                if (!ignore_same_name)
+-                               /* Check if the symlink itself matches what we are looking for.
+-                                *
+-                                * If ignore_same_name is specified, we are in one of the directories which
+-                                * have lower priority than the unit file, and even if a file or symlink with
+-                                * this name was found, we should ignore it. */
+-                                found_path = streq(de->d_name, info->name);
+ 
+-                /* Check if what the symlink points to matches what we are looking for */
+-                found_dest = streq(basename(dest), info->name);
++                /* Check if the symlink itself matches what we are looking for.
++                 *
++                 * If ignore_destination is specified, we only look at the source name.
++                 *
++                 * If ignore_same_name is specified, we are in one of the directories which
++                 * have lower priority than the unit file, and even if a file or symlink with
++                 * this name was found, we should ignore it. */
++
++                if (ignore_destination || !ignore_same_name)
++                        found_path = streq(de->d_name, info->name);
++
++                if (!found_path && ignore_destination) {
++                        _cleanup_free_ char *template = NULL;
++
++                        q = unit_name_template(de->d_name, &template);
++                        if (q < 0 && q != -EINVAL)
++                                return q;
++                        if (q >= 0)
++                                found_dest = streq(template, info->name);
++                }
+ 
+                 if (found_path && found_dest) {
+                         _cleanup_free_ char *p = NULL, *t = NULL;
+ 
+-                        /* Filter out same name links in the main
+-                         * config path */
++                        /* Filter out same name links in the main config path */
+                         p = path_make_absolute(de->d_name, dir_path);
+                         t = path_make_absolute(info->name, config_path);
+ 
+@@ -813,7 +830,7 @@ static int find_symlinks_in_directory(
+                 if (b)
+                         *same_name_link = true;
+                 else if (found_path || found_dest) {
+-                        if (!match_aliases)
++                        if (!match_name)
+                                 return 1;
+ 
+                         /* Check if symlink name is in the set of names used by [Install] */
+@@ -872,7 +889,12 @@ static int find_symlinks(
+                         continue;
+                 }
+ 
+-                r = find_symlinks_in_directory(d, path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link);
++                r = find_symlinks_in_directory(d, path, root_dir, i,
++                                               /* ignore_destination= */ true,
++                                               /* match_name= */ match_name,
++                                               /* ignore_same_name= */ ignore_same_name,
++                                               config_path,
++                                               same_name_link);
+                 if (r > 0)
+                         return 1;
+                 else if (r < 0)
+@@ -881,7 +903,12 @@ static int find_symlinks(
+ 
+         /* We didn't find any suitable symlinks in .wants or .requires directories, let's look for linked unit files in this directory. */
+         rewinddir(config_dir);
+-        return find_symlinks_in_directory(config_dir, config_path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link);
++        return find_symlinks_in_directory(config_dir, config_path, root_dir, i,
++                                          /* ignore_destination= */ false,
++                                          /* match_name= */ match_name,
++                                          /* ignore_same_name= */ ignore_same_name,
++                                          config_path,
++                                          same_name_link);
+ }
+ 
+ static int find_symlinks_in_scope(
diff --git a/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch b/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch
new file mode 100644
index 0000000..29bd4e3
--- /dev/null
+++ b/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch
@@ -0,0 +1,111 @@
+From 0d19f19be9a93642f10b4c039aafd9e62f35e8fc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 17 Mar 2022 10:16:30 +0100
+Subject: [PATCH] shared/install: stop passing duplicate root argument to
+ install_name_printf()
+
+All callers were just passing info + info->root, we can simplify this.
+
+(cherry picked from commit 38e8a6c7fdffd3389cb3596139b1309579193946)
+
+Related: #2082131
+---
+ src/shared/install-printf.c   | 7 +++----
+ src/shared/install-printf.h   | 3 +--
+ src/shared/install.c          | 8 ++++----
+ src/test/test-load-fragment.c | 2 +-
+ 4 files changed, 9 insertions(+), 11 deletions(-)
+
+diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
+index 963102674b..7aad1b7443 100644
+--- a/src/shared/install-printf.c
++++ b/src/shared/install-printf.c
+@@ -105,9 +105,8 @@ static int specifier_last_component(char specifier, const void *data, const char
+ 
+ int install_name_printf(
+                 UnitFileScope scope,
+-                const UnitFileInstallInfo *i,
++                const UnitFileInstallInfo *info,
+                 const char *format,
+-                const char *root,
+                 char **ret) {
+         /* This is similar to unit_name_printf() */
+ 
+@@ -124,9 +123,9 @@ int install_name_printf(
+                 {}
+         };
+ 
+-        assert(i);
++        assert(info);
+         assert(format);
+         assert(ret);
+ 
+-        return specifier_printf(format, UNIT_NAME_MAX, table, root, i, ret);
++        return specifier_printf(format, UNIT_NAME_MAX, table, info->root, info, ret);
+ }
+diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
+index d2cccdf66d..60d3a9fc55 100644
+--- a/src/shared/install-printf.h
++++ b/src/shared/install-printf.h
+@@ -6,7 +6,6 @@
+ 
+ int install_name_printf(
+                 UnitFileScope scope,
+-                const UnitFileInstallInfo *i,
++                const UnitFileInstallInfo *info,
+                 const char *format,
+-                const char *root,
+                 char **ret);
+diff --git a/src/shared/install.c b/src/shared/install.c
+index a864039f44..f911d527df 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1205,7 +1205,7 @@ static int config_parse_also(
+                 if (r == 0)
+                         break;
+ 
+-                r = install_name_printf(ctx->scope, info, word, info->root, &printed);
++                r = install_name_printf(ctx->scope, info, word, &printed);
+                 if (r < 0)
+                         return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                           "Failed to resolve unit name in Also=\"%s\": %m", word);
+@@ -1254,7 +1254,7 @@ static int config_parse_default_instance(
+                 return log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "DefaultInstance= only makes sense for template units, ignoring.");
+ 
+-        r = install_name_printf(ctx->scope, info, rvalue, info->root, &printed);
++        r = install_name_printf(ctx->scope, info, rvalue, &printed);
+         if (r < 0)
+                 return log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue);
+@@ -1850,7 +1850,7 @@ static int install_info_symlink_alias(
+         STRV_FOREACH(s, info->aliases) {
+                 _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL;
+ 
+-                q = install_name_printf(scope, info, *s, info->root, &dst);
++                q = install_name_printf(scope, info, *s, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         r = r < 0 ? r : q;
+@@ -1940,7 +1940,7 @@ static int install_info_symlink_wants(
+         STRV_FOREACH(s, list) {
+                 _cleanup_free_ char *dst = NULL;
+ 
+-                q = install_name_printf(scope, info, *s, info->root, &dst);
++                q = install_name_printf(scope, info, *s, &dst);
+                 if (q < 0) {
+                         unit_file_changes_add(changes, n_changes, q, *s, NULL);
+                         return q;
+diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
+index 9df53cec2b..a87c654f4e 100644
+--- a/src/test/test-load-fragment.c
++++ b/src/test/test-load-fragment.c
+@@ -531,7 +531,7 @@ TEST(install_printf, .sd_booted = true) {
+                 _cleanup_free_ char *t = NULL,                          \
+                         *d1 = ASSERT_PTR(strdup(i.name)),               \
+                         *d2 = ASSERT_PTR(strdup(i.path));               \
+-                int r = install_name_printf(scope, &src, pattern, NULL, &t); \
++                int r = install_name_printf(scope, &src, pattern, &t);  \
+                 assert_se(result ? r >= 0 : r < 0);                     \
+                 memzero(i.name, strlen(i.name));                        \
+                 memzero(i.path, strlen(i.path));                        \
diff --git a/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch b/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch
new file mode 100644
index 0000000..633fcd4
--- /dev/null
+++ b/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch
@@ -0,0 +1,70 @@
+From 4ac4cc6e4b17dea8f071e260cd8d3eae68ba883d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 17 Mar 2022 11:46:03 +0100
+Subject: [PATCH] basic/unit-file: reverse negative conditional
+
+Having the reverse condition first makes changes that I want to do
+later awkward, so reverse it as a separate step first.
+
+(cherry picked from commit bd177c62158df97785af0d360c4fc9c266311d88)
+
+Related: #2082131
+---
+ src/basic/unit-file.c | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 6cf66b45cf..2474648ceb 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -326,27 +326,16 @@ int unit_file_resolve_symlink(
+ 
+         assert(path_is_absolute(simplified));
+ 
+-        /* Check if the symlink goes outside of our search path.
+-         * If yes, it's a linked unit file or mask, and we don't care about the target name
++        /* Check if the symlink remain inside of of our search path.
++         * If yes, it is an alias. Verify that it is valid.
++         *
++         * If no, then this is a linked unit file or mask, and we don't care about the target name
+          * when loading units, and we return the link *source* (resolve_destination_target == false);
+          * When this is called for installation purposes, we want the final destination,
+          * so we return the *target*.
+-         *
+-         * Otherwise, let's verify that it's a good alias.
+          */
+         const char *tail = path_startswith_strv(simplified, search_path);
+-        if (!tail) {
+-                log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified);
+-
+-                if (resolve_destination_target)
+-                        dst = TAKE_PTR(simplified);
+-                else {
+-                        dst = path_join(dir, filename);
+-                        if (!dst)
+-                                return log_oom();
+-                }
+-
+-        } else {
++        if (tail) {  /* An alias */
+                 _cleanup_free_ char *target_name = NULL;
+ 
+                 r = path_extract_filename(simplified, &target_name);
+@@ -361,6 +350,17 @@ int unit_file_resolve_symlink(
+                                     dir, filename, simplified);
+ 
+                 dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name);
++
++        } else {
++                log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified);
++
++                if (resolve_destination_target)
++                        dst = TAKE_PTR(simplified);
++                else {
++                        dst = path_join(dir, filename);
++                        if (!dst)
++                                return log_oom();
++                }
+         }
+ 
+         *ret_destination = TAKE_PTR(dst);
diff --git a/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch b/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch
new file mode 100644
index 0000000..f5b972c
--- /dev/null
+++ b/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch
@@ -0,0 +1,109 @@
+From e2d699c92944c6251f9de161c9e3ae93d915c4e0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 17 Mar 2022 15:50:16 +0100
+Subject: [PATCH] shared/install: split UNIT_FILE_SYMLINK into two states
+
+The two states are distinguished, but are treated everywhere identically,
+so there is no difference in behaviour except for slighlty different log
+output.
+
+(cherry picked from commit 48ed75adabef3427767038fa155e55b3b0d48f35)
+
+Related: #2082131
+---
+ src/basic/unit-file.c |  6 ++++--
+ src/shared/install.c  | 14 +++++++++-----
+ src/shared/install.h  |  3 ++-
+ 3 files changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 2474648ceb..7c1ae515e1 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -282,7 +282,9 @@ int unit_file_resolve_symlink(
+          *
+          * If resolve_destination_target is true, an absolute path will be returned.
+          * If not, an absolute path is returned for linked unit files, and a relative
+-         * path otherwise. */
++         * path otherwise.
++         *
++         * Returns an error, false if this is an alias, true if it's a linked unit file. */
+ 
+         assert(filename);
+         assert(ret_destination);
+@@ -364,7 +366,7 @@ int unit_file_resolve_symlink(
+         }
+ 
+         *ret_destination = TAKE_PTR(dst);
+-        return 0;
++        return !tail;  /* true if linked unit file */
+ }
+ 
+ int unit_file_build_name_map(
+diff --git a/src/shared/install.c b/src/shared/install.c
+index f911d527df..b33f7d4bc1 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -93,8 +93,9 @@ void unit_file_presets_freep(UnitFilePresets *p) {
+ 
+ static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = {
+         [UNIT_FILE_TYPE_REGULAR] = "regular",
+-        [UNIT_FILE_TYPE_SYMLINK] = "symlink",
+-        [UNIT_FILE_TYPE_MASKED] = "masked",
++        [UNIT_FILE_TYPE_LINKED]  = "linked",
++        [UNIT_FILE_TYPE_ALIAS]   = "alias",
++        [UNIT_FILE_TYPE_MASKED]  = "masked",
+ };
+ 
+ DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType);
+@@ -1404,14 +1405,17 @@ static int unit_file_load_or_readlink(
+                                       true, &info->symlink_target);
+         if (r < 0)
+                 return r;
++        bool outside_search_path = r > 0;
+ 
+         r = null_or_empty_path_with_root(info->symlink_target, lp->root_dir);
+         if (r < 0 && r != -ENOENT)
+                 return log_debug_errno(r, "Failed to stat %s: %m", info->symlink_target);
+         if (r > 0)
+                 info->type = UNIT_FILE_TYPE_MASKED;
++        else if (outside_search_path)
++                info->type = UNIT_FILE_TYPE_LINKED;
+         else
+-                info->type = UNIT_FILE_TYPE_SYMLINK;
++                info->type = UNIT_FILE_TYPE_ALIAS;
+ 
+         return 0;
+ }
+@@ -1550,7 +1554,7 @@ static int install_info_follow(
+         assert(ctx);
+         assert(info);
+ 
+-        if (info->type != UNIT_FILE_TYPE_SYMLINK)
++        if (!IN_SET(info->type, UNIT_FILE_TYPE_ALIAS, UNIT_FILE_TYPE_LINKED))
+                 return -EINVAL;
+         if (!info->symlink_target)
+                 return -EINVAL;
+@@ -1591,7 +1595,7 @@ static int install_info_traverse(
+                 return r;
+ 
+         i = start;
+-        while (i->type == UNIT_FILE_TYPE_SYMLINK) {
++        while (IN_SET(i->type, UNIT_FILE_TYPE_ALIAS, UNIT_FILE_TYPE_LINKED)) {
+                 /* Follow the symlink */
+ 
+                 if (++k > UNIT_FILE_FOLLOW_SYMLINK_MAX)
+diff --git a/src/shared/install.h b/src/shared/install.h
+index dba6987406..95427537f2 100644
+--- a/src/shared/install.h
++++ b/src/shared/install.h
+@@ -70,7 +70,8 @@ struct UnitFileList {
+ 
+ enum UnitFileType {
+         UNIT_FILE_TYPE_REGULAR,
+-        UNIT_FILE_TYPE_SYMLINK,
++        UNIT_FILE_TYPE_LINKED,
++        UNIT_FILE_TYPE_ALIAS,
+         UNIT_FILE_TYPE_MASKED,
+         _UNIT_FILE_TYPE_MAX,
+         _UNIT_FILE_TYPE_INVALID = -EINVAL,
diff --git a/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch b/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch
new file mode 100644
index 0000000..b22a45a
--- /dev/null
+++ b/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch
@@ -0,0 +1,57 @@
+From 13c099caa9ae0389423c403152952c3c548fd146 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 17 Mar 2022 16:02:10 +0100
+Subject: [PATCH] shared/install: fix handling of a linked unit file
+
+When we have a symlink that goes outside of our search path, we should just
+ignore the target file name. But we were verifying it, and rejecting in
+the case where a symlink was created manually.
+
+(cherry picked from commit 48eadb9d9b66f302cda09cdf6d35fead31aaa968)
+
+Related: #2082131
+---
+ src/shared/install.c          |  4 +++-
+ test/test-systemctl-enable.sh | 12 ++++++++----
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index b33f7d4bc1..d6951b805d 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1609,7 +1609,9 @@ static int install_info_traverse(
+                                 return -ELOOP;
+                 }
+ 
+-                r = install_info_follow(ctx, i, lp, flags, false);
++                r = install_info_follow(ctx, i, lp, flags,
++                                        /* If linked, don't look at the target name */
++                                        /* ignore_different_name= */ i->type == UNIT_FILE_TYPE_LINKED);
+                 if (r == -EXDEV) {
+                         _cleanup_free_ char *buffer = NULL;
+                         const char *bn;
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 9463433c5b..45f3513de3 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -216,12 +216,16 @@ cat >"$root/link3.suffix" <<EOF
+ WantedBy=services.target
+ EOF
+ 
++# We wouldn't create such a link ourselves, but it should accept it when present.
+ ln -s "/link3.suffix" "$root/etc/systemd/system/link3.service"
+ 
+-# SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" enable 'link3.service'
+-# islink "$root/etc/systemd/system/link3.service" "/link3.suffix"
+-# islink "$root/etc/systemd/system/services.target.wants/link3.service" "../link3.service"
+-# unit_file_load_or_readlink() needs to be fixed to not follow links
++SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" enable 'link3.service'
++islink "$root/etc/systemd/system/link3.service" "/link3.suffix"
++islink "$root/etc/systemd/system/services.target.wants/link3.service" "../link3.service"
++
++SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" disable 'link3.service'
++test ! -h "$root/etc/systemd/system/link3.service"
++test ! -h "$root/etc/systemd/system/services.target.wants/link3.service"
+ 
+ : -------enable on masked-------------------------------------
+ ln -s "/dev/null" "$root/etc/systemd/system/masked.service"
diff --git a/SOURCES/0199-test-systemctl-enable-make-shellcheck-happy.patch b/SOURCES/0199-test-systemctl-enable-make-shellcheck-happy.patch
new file mode 100644
index 0000000..b97796b
--- /dev/null
+++ b/SOURCES/0199-test-systemctl-enable-make-shellcheck-happy.patch
@@ -0,0 +1,318 @@
+From 71a8029607b54259f28ac1fc0627c7f1e6db586a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 24 Mar 2022 11:52:35 +0100
+Subject: [PATCH] test-systemctl-enable: make shellcheck happy
+
+Quoting is not necessary in many places, but I think it's nicer
+to use it consistently.
+
+(cherry picked from commit 84fdced62c740a3b07656e84747dd721ad6a30c5)
+
+Related: #2082131
+---
+ test/test-systemctl-enable.sh | 76 +++++++++++++++++------------------
+ 1 file changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 45f3513de3..3b30f090a5 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -19,10 +19,10 @@ islink() {
+     test "$(readlink "$1")" = "$2" || return 2
+ }
+ 
+-: ------enablement nonexistent--------------------------------
++: '------enable nonexistent------------------------------------'
+ "$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; }
+ 
+-: ------basic enablement--------------------------------------
++: '------basic enablement--------------------------------------'
+ mkdir -p "$root/etc/systemd/system"
+ cat >"$root/etc/systemd/system/test1.service" <<EOF
+ [Install]
+@@ -42,7 +42,7 @@ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
+ 
+-: ------suffix guessing---------------------------------------
++: '------suffix guessing---------------------------------------'
+ "$systemctl" --root="$root" enable test1
+ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+@@ -55,7 +55,7 @@ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
+ 
+-: -------aliases----------------------------------------------
++: '-------aliases----------------------------------------------'
+ cat >>"$root/etc/systemd/system/test1.service" <<EOF
+ Alias=test1-goodalias.service
+ Alias=test1@badalias.service
+@@ -76,7 +76,7 @@ test ! -h "$root/etc/systemd/system/test1-badalias.socket"
+ test -e "$root/etc/systemd/system/test1-goodalias2.service"
+ test -h "$root/etc/systemd/system/test1-goodalias2.service"
+ 
+-: -------aliases in reeanble----------------------------------
++: '-------aliases in reeanble----------------------------------'
+ "$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; }
+ islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service"
+ islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service"
+@@ -90,7 +90,7 @@ test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ test ! -h "$root/etc/systemd/system/test1-goodalias.service"
+ 
+-: -------also units-------------------------------------------
++: '-------also units-------------------------------------------'
+ cat >"$root/etc/systemd/system/test2.socket" <<EOF
+ [Install]
+ WantedBy=sockets.target
+@@ -116,7 +116,7 @@ test ! -e "$root/etc/systemd/system/default.target.wants/test2.service"
+ test ! -e "$root/etc/systemd/system/sockets.target.wants/test2.socket"
+ 
+ 
+-: -------link-------------------------------------------------
++: '-------link-------------------------------------------------'
+ # File doesn't exist yet
+ test ! -e "$root/link1.path"
+ "$systemctl" --root="$root" link '/link1.path' && { echo "Expected failure" >&2; exit 1; }
+@@ -130,65 +130,65 @@ EOF
+ "$systemctl" --root="$root" link '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ 
+-: -------link already linked same path------------------------
++: '-------link already linked same path------------------------'
+ SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" link '/link1.path'  # this passes
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ 
+-: -------link already linked different path-------------------
++: '-------link already linked different path-------------------'
+ mkdir "$root/subdir"
+ cp "$root/link1.path" "$root/subdir/"
+ "$systemctl" --root="$root" link '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ 
+-: -------link bad suffix--------------------------------------
++: '-------link bad suffix--------------------------------------'
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+ "$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
+ test ! -e "$root/etc/systemd/system/link1.suffix"
+ 
+-: -------unlink by unit name----------------------------------
++: '-------unlink by unit name----------------------------------'
+ "$systemctl" --root="$root" disable 'link1.path'
+ test ! -e "$root/etc/systemd/system/link1.path"
+ 
+-: -------unlink by path---------------------------------------
++: '-------unlink by path---------------------------------------'
+ "$systemctl" --root="$root" link '/link1.path'
+ test -h "$root/etc/systemd/system/link1.path"
+ "$systemctl" --root="$root" disable '/link1.path'
+ test ! -e "$root/etc/systemd/system/link1.path"
+ 
+-: -------unlink by wrong path---------------------------------
++: '-------unlink by wrong path---------------------------------'
+ "$systemctl" --root="$root" link '/link1.path'
+ test -h "$root/etc/systemd/system/link1.path"
+ "$systemctl" --root="$root" disable '/subdir/link1.path'  # we only care about the name
+ test ! -e "$root/etc/systemd/system/link1.path"
+ 
+ 
+-: -------link and enable--------------------------------------
++: '-------link and enable--------------------------------------'
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+-: -------enable already linked same path----------------------
++: '-------enable already linked same path----------------------'
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+-: -------enable already linked different path-----------------
++: '-------enable already linked different path-----------------'
+ "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+-: -------enable bad suffix------------------------------------
++: '-------enable bad suffix------------------------------------'
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+ "$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
+ test ! -e "$root/etc/systemd/system/link1.suffix"
+ test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix"
+ 
+-: -------disable by unit name---------------------------------
++: '-------disable by unit name---------------------------------'
+ "$systemctl" --root="$root" disable 'link1.path'
+ test ! -e "$root/etc/systemd/system/link1.path"
+ test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path"
+ 
+-: -------disable by path--------------------------------------
++: '-------disable by path--------------------------------------'
+ "$systemctl" --root="$root" enable '/link1.path'
+ test -h "$root/etc/systemd/system/link1.path"
+ test -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+@@ -197,7 +197,7 @@ test ! -e "$root/etc/systemd/system/link1.path"
+ test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path"
+ 
+ 
+-: -------link then enable-------------------------------------
++: '-------link and enable-------------------------------------'
+ "$systemctl" --root="$root" link '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+@@ -210,7 +210,7 @@ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+-: -------manual link------------------------------------------
++: '-------manual link------------------------------------------'
+ cat >"$root/link3.suffix" <<EOF
+ [Install]
+ WantedBy=services.target
+@@ -227,18 +227,18 @@ SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" disab
+ test ! -h "$root/etc/systemd/system/link3.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/link3.service"
+ 
+-: -------enable on masked-------------------------------------
++: '-------enable on masked-------------------------------------'
+ ln -s "/dev/null" "$root/etc/systemd/system/masked.service"
+ "$systemctl" --root="$root" enable 'masked.service' && { echo "Expected failure" >&2; exit 1; }
+ "$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; }
+ 
+-: -------enable on masked alias-------------------------------
++: '-------enable on masked alias-------------------------------'
+ test -h "$root/etc/systemd/system/masked.service"
+ ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service"
+ "$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
+ "$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
+ 
+-: -------issue 22000: link in subdirectory--------------------
++: '-------issue 22000: link in subdirectory--------------------'
+ mkdir -p "$root/etc/systemd/system/myown.d"
+ cat >"$root/etc/systemd/system/link5-also.service" <<EOF
+ [Install]
+@@ -259,7 +259,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
+ islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "../link5-also.service"
+ 
+-: -------template enablement----------------------------------
++: '-------template enablement----------------------------------'
+ cat >"$root/etc/systemd/system/templ1@.service" <<EOF
+ [Install]
+ WantedBy=services.target
+@@ -288,7 +288,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ 
+-: -------template enablement w/ default instance--------------
++: '-------template enablement w/ default instance--------------'
+ cat >"$root/etc/systemd/system/templ1@.service" <<EOF
+ [Install]
+ # check enablement with
+@@ -337,7 +337,7 @@ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.serv
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service"
+ 
+-: -------removal of relative enablement symlinks--------------
++: '-------removal of relative enablement symlinks--------------'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ ln -s '../templ1@one.service' "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ ln -s 'templ1@two.service' "$root/etc/systemd/system/services.target.wants/templ1@two.service"
+@@ -357,7 +357,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@five.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@six.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@seven.service"
+ 
+-: -------template enablement for another template-------------
++: '-------template enablement for another template-------------'
+ cat >"$root/etc/systemd/system/templ2@.service" <<EOF
+ [Install]
+ RequiredBy=another-template@.target
+@@ -382,7 +382,7 @@ test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two
+ test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@.service"
+ test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service"
+ 
+-: -------aliases w/ and w/o instance--------------------------
++: '-------aliases w/ and w/o instance--------------------------'
+ test ! -e "$root/etc/systemd/system/link4.service"
+ cat >"$root/etc/systemd/system/link4.service" <<EOF
+ [Install]
+@@ -407,7 +407,7 @@ test ! -h "$root/etc/systemd/system/link4@inst.service"
+ test ! -h "$root/etc/systemd/system/link4alias.service"
+ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ 
+-: -------systemctl enable on path to unit file----------------
++: '-------systemctl enable on path to unit file----------------'
+ cat >"$root/etc/systemd/system/link4.service" <<EOF
+ [Install]
+ Alias=link4alias.service
+@@ -425,7 +425,7 @@ test ! -h "$root/etc/systemd/system/link4.service"
+ test ! -h "$root/etc/systemd/system/link4alias.service"
+ test ! -h "$root/etc/systemd/system/link4alias2.service"
+ 
+-: -------issue 661: enable on unit file--------------
++: '-------issue 661: enable on unit file--------------'
+ test ! -e "$root/etc/systemd/system/link5.service"
+ cat >"$root/etc/systemd/system/link5.service" <<EOF
+ [Install]
+@@ -443,7 +443,7 @@ islink "$root/etc/systemd/system/link5alias2.service" "link5.service"
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+-: -------issue 661: link and enable on unit file--------------
++: '-------issue 661: link and enable on unit file--------------'
+ test ! -e "$root/etc/systemd/system/link5copy.service"
+ cat >"$root/link5copy.service" <<EOF
+ [Install]
+@@ -474,7 +474,7 @@ test ! -h "$root/etc/systemd/system/link5copy.service"
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+-: ----issue 19437: plain templates in .wants/ or .requires/---
++: '----issue 19437: plain templates in .wants/ or .requires/---'
+ test ! -e "$root/etc/systemd/system/link5@.path"
+ cat >"$root/etc/systemd/system/link5@.path" <<EOF
+ [Install]
+@@ -498,7 +498,7 @@ test ! -h "$root/etc/systemd/system/target5@.target.requires/link5@.path"
+ test ! -h "$root/etc/systemd/system/target5@inst.target.wants/link5@.path"
+ test ! -h "$root/etc/systemd/system/target5@inst.target.requires/link5@.path"
+ 
+-: -------removal of symlinks not listed in [Install]----------
++: '-------removal of symlinks not listed in [Install]----------'
+ # c.f. 66a19d85a533b15ed32f4066ec880b5a8c06babd
+ test ! -e "$root/etc/systemd/system/multilink.mount"
+ cat >"$root/etc/systemd/system/multilink.mount" <<EOF
+@@ -517,12 +517,12 @@ test ! -h "$root/etc/systemd/system/default.target.wants/"
+ test ! -h "$root/etc/systemd/system/multilink-alias.mount"
+ test ! -h "$root/etc/systemd/system/multilink-badalias.service"
+ 
+-: -------merge 20017: specifiers in the unit file-------------
++: '-------merge 20017: specifiers in the unit file-------------'
+ test ! -e "$root/etc/systemd/system/some-some-link6@.socket"
+ # c.f. de61a04b188f81a85cdb5c64ddb4987dcd9d30d3
+ 
+ check_alias() {
+-    : ------------------ %$1 -------------------------------------
++    : "------------------ %$1 -------------------------------------"
+     cat >"$root/etc/systemd/system/some-some-link6@.socket" <<EOF
+ [Install]
+ Alias=target@$1:%$1.socket
+@@ -616,7 +616,7 @@ check_alias % '%' && { echo "Expected failure because % is not legal in unit nam
+ 
+ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
+ 
+-: -------specifiers in WantedBy-------------------------------
++: '-------specifiers in WantedBy-------------------------------'
+ # We don't need to repeat all the tests. Let's do a basic check that specifier
+ # expansion is performed.
+ 
+@@ -642,7 +642,7 @@ test ! -h "$root/etc/systemd/system/another-target2@.target.requires/some-some-l
+ 
+ # TODO: repeat the tests above for presets
+ 
+-: -------SYSTEMD_OS_RELEASE relative to root------------------
++: '-------SYSTEMD_OS_RELEASE relative to root-------------------'
+ # check that os-release overwriting works as expected with root
+ test -e "$root/etc/os-release"
+ 
diff --git a/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch b/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch
new file mode 100644
index 0000000..ced8871
--- /dev/null
+++ b/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch
@@ -0,0 +1,176 @@
+From 56bc8e8eef5fcbfcf72dd1b3caa56b9186e1011d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 25 Mar 2022 15:43:27 +0100
+Subject: [PATCH] shared/install: when creating symlinks, accept different but
+ equivalent symlinks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We would only accept "identical" links, but having e.g. a symlink
+/usr/lib/systemd/system/foo-alias.service → /usr/lib/systemd/system/foo.service
+when we're trying to create /usr/lib/systemd/system/foo-alias.service →
+./foo.service is OK. This fixes an issue found in ubuntuautopkg package
+installation, where we'd fail when enabling systemd-resolved.service, because
+the existing alias was absolute, and (with the recent patches) we were trying
+to create a relative one.
+
+A test is added.
+(For .wants/.requires symlinks we were already doing OK. A test is also
+added, to verify.)
+
+(cherry picked from commit 3fc53351dc8f37355f5a4ee8f922d3e13a5182c2)
+
+Related: #2082131
+---
+ src/shared/install.c          | 59 ++++++++++++++++++++++++++---------
+ test/test-systemctl-enable.sh | 39 +++++++++++++++++++++--
+ 2 files changed, 81 insertions(+), 17 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index d6951b805d..22b16ad453 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -423,21 +423,54 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+ }
+ 
+ /**
+- * Checks if two paths or symlinks from wd are the same, when root is the root of the filesystem.
+- * wc should be the full path in the host file system.
++ * Checks if two symlink targets (starting from src) are equivalent as far as the unit enablement logic is
++ * concerned. If the target is in the unit search path, then anything with the same name is equivalent.
++ * If outside the unit search path, paths must be identical.
+  */
+-static bool chroot_symlinks_same(const char *root, const char *wd, const char *a, const char *b) {
+-        assert(path_is_absolute(wd));
++static int chroot_unit_symlinks_equivalent(
++                const LookupPaths *lp,
++                const char *src,
++                const char *target_a,
++                const char *target_b) {
++
++        assert(lp);
++        assert(src);
++        assert(target_a);
++        assert(target_b);
+ 
+         /* This will give incorrect results if the paths are relative and go outside
+          * of the chroot. False negatives are possible. */
+ 
+-        if (!root)
+-                root = "/";
++        const char *root = lp->root_dir ?: "/";
++        _cleanup_free_ char *dirname = NULL;
++        int r;
++
++        if (!path_is_absolute(target_a) || !path_is_absolute(target_b)) {
++                r = path_extract_directory(src, &dirname);
++                if (r < 0)
++                        return r;
++        }
+ 
+-        a = strjoina(path_is_absolute(a) ? root : wd, "/", a);
+-        b = strjoina(path_is_absolute(b) ? root : wd, "/", b);
+-        return path_equal_or_files_same(a, b, 0);
++        _cleanup_free_ char *a = path_join(path_is_absolute(target_a) ? root : dirname, target_a);
++        _cleanup_free_ char *b = path_join(path_is_absolute(target_b) ? root : dirname, target_b);
++        if (!a || !b)
++                return log_oom();
++
++        r = path_equal_or_files_same(a, b, 0);
++        if (r != 0)
++                return r;
++
++        _cleanup_free_ char *a_name = NULL, *b_name = NULL;
++        r = path_extract_filename(a, &a_name);
++        if (r < 0)
++                return r;
++        r = path_extract_filename(b, &b_name);
++        if (r < 0)
++                return r;
++
++        return streq(a_name, b_name) &&
++               path_startswith_strv(a, lp->search_path) &&
++               path_startswith_strv(b, lp->search_path);
+ }
+ 
+ static int create_symlink(
+@@ -448,7 +481,7 @@ static int create_symlink(
+                 UnitFileChange **changes,
+                 size_t *n_changes) {
+ 
+-        _cleanup_free_ char *dest = NULL, *dirname = NULL;
++        _cleanup_free_ char *dest = NULL;
+         const char *rp;
+         int r;
+ 
+@@ -489,11 +522,7 @@ static int create_symlink(
+                 return r;
+         }
+ 
+-        dirname = dirname_malloc(new_path);
+-        if (!dirname)
+-                return -ENOMEM;
+-
+-        if (chroot_symlinks_same(lp->root_dir, dirname, dest, old_path)) {
++        if (chroot_unit_symlinks_equivalent(lp, new_path, dest, old_path)) {
+                 log_debug("Symlink %s → %s already exists", new_path, dest);
+                 return 1;
+         }
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 3b30f090a5..0f66af309a 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -39,8 +39,29 @@ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ 
+ "$systemctl" --root="$root" disable test1.service
+-test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
+-test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++: '------enable when link already exists-----------------------'
++# We don't read the symlink target, so it's OK for the symlink to point
++# to something else. We should just silently accept this.
++
++mkdir -p "$root/etc/systemd/system/default.target.wants"
++mkdir -p "$root/etc/systemd/system/special.target.requires"
++ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/default.target.wants/test1.service"
++ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" enable test1.service
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" reenable test1.service
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test -h "$root/etc/systemd/system/special.target.requires/test1.service"
++
++"$systemctl" --root="$root" disable test1.service
++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ 
+ : '------suffix guessing---------------------------------------'
+ "$systemctl" --root="$root" enable test1
+@@ -90,6 +111,20 @@ test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ test ! -h "$root/etc/systemd/system/test1-goodalias.service"
+ 
++: '-------aliases when link already exists---------------------'
++cat >"$root/etc/systemd/system/test1a.service" <<EOF
++[Install]
++Alias=test1a-alias.service
++EOF
++
++ln -s /usr/lib/systemd/system/test1a.service "$root/etc/systemd/system/test1a-alias.service"
++
++"$systemctl" --root="$root" enable test1a.service
++test -h "$root/etc/systemd/system/test1a-alias.service"
++
++"$systemctl" --root="$root" disable test1a.service
++test ! -h "$root/etc/systemd/system/test1a-alias.service"
++
+ : '-------also units-------------------------------------------'
+ cat >"$root/etc/systemd/system/test2.socket" <<EOF
+ [Install]
diff --git a/SOURCES/0201-test-systemctl-enable-use-magic-syntax-to-allow-inve.patch b/SOURCES/0201-test-systemctl-enable-use-magic-syntax-to-allow-inve.patch
new file mode 100644
index 0000000..5703da0
--- /dev/null
+++ b/SOURCES/0201-test-systemctl-enable-use-magic-syntax-to-allow-inve.patch
@@ -0,0 +1,216 @@
+From 3c469acda5f5d62d56a16f075475c3b4f1da75e1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Fri, 25 Mar 2022 15:56:16 +0100
+Subject: [PATCH] test-systemctl-enable: use magic syntax to allow inverted
+ tests
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Inspired by 7910ec3bcde2ee0086b3e49f8aaa2a9f13f58d97.
+'! true' passes, because it's a conditional expression.
+But '( ! true )' fails, because '( … )' creates a subshell, i.e. a separate
+program, and '! true' becomes the return value of that program, and the whole
+thing apparently is not a conditional expression for the outer shell.
+
+This is shorter, so let's just do this.
+
+(cherry picked from commit d6c51c485abe0026a5da654fca5d6c1457c4587d)
+
+Related: #2082131
+---
+ test/test-systemctl-enable.sh | 76 ++++++++++++++++++-----------------
+ 1 file changed, 39 insertions(+), 37 deletions(-)
+
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 0f66af309a..ecb433380e 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -20,7 +20,7 @@ islink() {
+ }
+ 
+ : '------enable nonexistent------------------------------------'
+-"$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable test1.service )
+ 
+ : '------basic enablement--------------------------------------'
+ mkdir -p "$root/etc/systemd/system"
+@@ -86,7 +86,7 @@ Alias=test1-badalias.socket
+ Alias=test1-goodalias2.service
+ EOF
+ 
+-"$systemctl" --root="$root" enable test1 && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable test1 )
+ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+ test -e "$root/etc/systemd/system/test1-goodalias.service"
+@@ -98,7 +98,7 @@ test -e "$root/etc/systemd/system/test1-goodalias2.service"
+ test -h "$root/etc/systemd/system/test1-goodalias2.service"
+ 
+ : '-------aliases in reeanble----------------------------------'
+-"$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" reenable test1 )
+ islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service"
+ islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service"
+ 
+@@ -154,7 +154,7 @@ test ! -e "$root/etc/systemd/system/sockets.target.wants/test2.socket"
+ : '-------link-------------------------------------------------'
+ # File doesn't exist yet
+ test ! -e "$root/link1.path"
+-"$systemctl" --root="$root" link '/link1.path' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" link '/link1.path' )
+ test ! -e "$root/etc/systemd/system/link1.path"
+ 
+ cat >"$root/link1.path" <<EOF
+@@ -172,12 +172,12 @@ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ : '-------link already linked different path-------------------'
+ mkdir "$root/subdir"
+ cp "$root/link1.path" "$root/subdir/"
+-"$systemctl" --root="$root" link '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" link '/subdir/link1.path' )
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ 
+ : '-------link bad suffix--------------------------------------'
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+-"$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" link '/subdir/link1.suffix' )
+ test ! -e "$root/etc/systemd/system/link1.suffix"
+ 
+ : '-------unlink by unit name----------------------------------'
+@@ -208,13 +208,13 @@ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : '-------enable already linked different path-----------------'
+-"$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable '/subdir/link1.path' )
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
+ 
+ : '-------enable bad suffix------------------------------------'
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+-"$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable '/subdir/link1.suffix' )
+ test ! -e "$root/etc/systemd/system/link1.suffix"
+ test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix"
+ 
+@@ -264,14 +264,14 @@ test ! -h "$root/etc/systemd/system/services.target.wants/link3.service"
+ 
+ : '-------enable on masked-------------------------------------'
+ ln -s "/dev/null" "$root/etc/systemd/system/masked.service"
+-"$systemctl" --root="$root" enable 'masked.service' && { echo "Expected failure" >&2; exit 1; }
+-"$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable 'masked.service' )
++( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' )
+ 
+ : '-------enable on masked alias-------------------------------'
+ test -h "$root/etc/systemd/system/masked.service"
+ ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service"
+-"$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
+-"$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable 'masked-alias.service' )
++( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' )
+ 
+ : '-------issue 22000: link in subdirectory--------------------'
+ mkdir -p "$root/etc/systemd/system/myown.d"
+@@ -286,7 +286,7 @@ WantedBy=services.target
+ Also=link5-also.service
+ EOF
+ 
+-"$systemctl" --root="$root" enable 'link5.service' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable 'link5.service' )
+ test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service"
+ 
+@@ -301,7 +301,7 @@ WantedBy=services.target
+ EOF
+ 
+ # No instance here — this can't succeed.
+-"$systemctl" --root="$root" enable 'templ1@.service' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable 'templ1@.service' )
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+@@ -428,7 +428,7 @@ Alias=link4alias.service
+ Alias=link4alias2.service
+ EOF
+ 
+-"$systemctl" --root="$root" enable 'link4.service' && { echo "Expected failure" >&2; exit 1; }
++( ! "$systemctl" --root="$root" enable 'link4.service' )
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+ test ! -h "$root/etc/systemd/system/link4@.service"
+ test ! -h "$root/etc/systemd/system/link4@inst.service"
+@@ -571,12 +571,12 @@ check_alias a "$(uname -m | tr '_' '-')"
+ test ! -e "$root/etc/os-release"
+ test ! -e "$root/usr/lib/os-release"
+ 
+-check_alias A '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias B '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias M '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias o '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias w '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias W '' && { echo "Expected failure" >&2; exit 1; }
++( ! check_alias A '' )
++( ! check_alias B '' )
++( ! check_alias M '' )
++( ! check_alias o '' )
++( ! check_alias w '' )
++( ! check_alias W '' )
+ 
+ cat >"$root/etc/os-release" <<EOF
+ # empty
+@@ -609,19 +609,19 @@ check_alias W 'right'
+ check_alias b "$(systemd-id128 boot-id)"
+ 
+ # Specifiers not available for [Install]
+-check_alias C '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias E '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias f '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias h '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias I '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias J '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias L '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias P '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias s '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias S '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias t '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias T '' && { echo "Expected failure" >&2; exit 1; }
+-check_alias V '' && { echo "Expected failure" >&2; exit 1; }
++( ! check_alias C '' )
++( ! check_alias E '' )
++( ! check_alias f '' )
++( ! check_alias h '' )
++( ! check_alias I '' )
++( ! check_alias J '' )
++( ! check_alias L '' )
++( ! check_alias P '' )
++( ! check_alias s '' )
++( ! check_alias S '' )
++( ! check_alias t '' )
++( ! check_alias T '' )
++( ! check_alias V '' )
+ 
+ check_alias g root
+ check_alias G 0
+@@ -635,7 +635,7 @@ check_alias j 'link6'
+ check_alias l "$(uname -n | sed 's/\..*//')"
+ 
+ test ! -e "$root/etc/machine-id"
+-check_alias m '' && { echo "Expected failure" >&2; exit 1; }
++( ! check_alias m '' )
+ 
+ systemd-id128 new >"$root/etc/machine-id"
+ check_alias m "$(cat "$root/etc/machine-id")"
+@@ -647,9 +647,11 @@ check_alias p 'some-some-link6'
+ 
+ check_alias v "$(uname -r)"
+ 
+-check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; }
++# % is not legal in unit name
++( ! check_alias % '%' )
+ 
+-check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; }
++# %z is not defined
++( ! check_alias z 'z' )
+ 
+ : '-------specifiers in WantedBy-------------------------------'
+ # We don't need to repeat all the tests. Let's do a basic check that specifier
diff --git a/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch b/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch
new file mode 100644
index 0000000..369d9d3
--- /dev/null
+++ b/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch
@@ -0,0 +1,97 @@
+From 90fb011c43410958e5bda6f470137522f536adb4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 28 Mar 2022 20:03:37 +0200
+Subject: [PATCH] test-systemctl-enable: also use freshly-built systemd-id128
+
+Tests were failing on centos7 because systemd-id128 is not in path.
+
+(cherry picked from commit 2a2d002fb0913fe931b4ac903ca425a725aa79c0)
+
+Related: #2082131
+---
+ meson.build                   | 21 ++++++++++++---------
+ test/test-systemctl-enable.sh |  5 +++--
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 005af872cf..4fc3e64e54 100644
+--- a/meson.build
++++ b/meson.build
+@@ -2371,7 +2371,7 @@ public_programs += executable(
+         install_rpath : rootlibexecdir,
+         install : true)
+ 
+-exe = executable(
++systemctl = executable(
+         'systemctl',
+         systemctl_sources,
+         include_directories : includes,
+@@ -2385,13 +2385,7 @@ exe = executable(
+         install_rpath : rootlibexecdir,
+         install : true,
+         install_dir : rootbindir)
+-public_programs += exe
+-if want_tests != 'false'
+-        test('test-systemctl-enable',
+-             test_systemctl_enable_sh,
+-             # https://github.com/mesonbuild/meson/issues/2681
+-             args : exe.full_path())
+-endif
++public_programs += systemctl
+ 
+ if conf.get('ENABLE_PORTABLED') == 1
+         dbus_programs += executable(
+@@ -3188,13 +3182,22 @@ executable(
+         install : true,
+         install_dir : rootlibexecdir)
+ 
+-public_programs += executable(
++systemd_id128 = executable(
+         'systemd-id128',
+         'src/id128/id128.c',
+         include_directories : includes,
+         link_with : [libshared],
+         install_rpath : rootlibexecdir,
+         install : true)
++public_programs += systemd_id128
++
++if want_tests != 'false'
++        test('test-systemctl-enable',
++             test_systemctl_enable_sh,
++             # https://github.com/mesonbuild/meson/issues/2681
++             args : [systemctl.full_path(),
++                     systemd_id128.full_path()])
++endif
+ 
+ public_programs += executable(
+         'systemd-path',
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index ecb433380e..8eb2828e35 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -6,6 +6,7 @@ set -ex
+ export SYSTEMD_IGNORE_CHROOT=1
+ 
+ systemctl=${1:-systemctl}
++systemd_id128=${2:-systemd-id128}
+ 
+ unset root
+ cleanup() {
+@@ -606,7 +607,7 @@ check_alias o 'the-id'
+ check_alias w '39a'
+ check_alias W 'right'
+ 
+-check_alias b "$(systemd-id128 boot-id)"
++check_alias b "$("$systemd_id128" boot-id)"
+ 
+ # Specifiers not available for [Install]
+ ( ! check_alias C '' )
+@@ -637,7 +638,7 @@ check_alias l "$(uname -n | sed 's/\..*//')"
+ test ! -e "$root/etc/machine-id"
+ ( ! check_alias m '' )
+ 
+-systemd-id128 new >"$root/etc/machine-id"
++"$systemd_id128" new >"$root/etc/machine-id"
+ check_alias m "$(cat "$root/etc/machine-id")"
+ 
+ check_alias n 'some-some-link6@.socket'
diff --git a/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch b/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch
new file mode 100644
index 0000000..8c95ce6
--- /dev/null
+++ b/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch
@@ -0,0 +1,27 @@
+From 9b0a2632fd060e0c7b13eabb5ad87f623237eef9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 28 Mar 2022 20:20:09 +0200
+Subject: [PATCH] test-systemctl-enable: disable the test for %a for now
+
+(cherry picked from commit 5c29de29b43829ba09967b05ae2f136356c8c0d2)
+
+Related: #2082131
+---
+ test/test-systemctl-enable.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index 8eb2828e35..ac1bcc1cc7 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -567,7 +567,9 @@ EOF
+     islink "$root/etc/systemd/system/target@$1:$2.socket" "some-some-link6@.socket" || return 2
+ }
+ 
+-check_alias a "$(uname -m | tr '_' '-')"
++# TODO: our architecture names are different than what uname -m returns.
++# Add something like 'systemd-detect-virt --print-architecture' and use it here.
++check_alias a "$(uname -m | tr '_' '-')" || :
+ 
+ test ! -e "$root/etc/os-release"
+ test ! -e "$root/usr/lib/os-release"
diff --git a/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch b/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch
new file mode 100644
index 0000000..5088923
--- /dev/null
+++ b/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch
@@ -0,0 +1,3454 @@
+From c499122cb7ba5fe2f76760844cbc2e34cc3a5626 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 29 Mar 2022 15:55:59 +0200
+Subject: [PATCH] Rename UnitFileScope to LookupScope
+
+As suggested in
+https://github.com/systemd/systemd/pull/22649/commits/8b3ad3983f5440eef812b34e5ed862ca59fdf7f7#r837345892
+
+The define is generalized and moved to path-lookup.h, where it seems to fit
+better. This allows a recursive include to be removed and in general makes
+things simpler.
+
+(cherry picked from commit b380b6438361e39ad5076bfa58d2021621a957af)
+
+Related: #2082131
+---
+ src/analyze/analyze-condition.c         |   2 +-
+ src/analyze/analyze-condition.h         |   2 +-
+ src/analyze/analyze-security.c          |   4 +-
+ src/analyze/analyze-security.h          |   2 +-
+ src/analyze/analyze-verify.c            |   2 +-
+ src/analyze/analyze-verify.h            |   2 +-
+ src/analyze/analyze.c                   |  24 +-
+ src/basic/path-lookup.c                 |  64 ++--
+ src/basic/path-lookup.h                 |  21 +-
+ src/basic/unit-file.h                   |  11 +-
+ src/core/dbus-manager.c                 |   8 +-
+ src/core/fuzz-unit-file.c               |   2 +-
+ src/core/main.c                         |   2 +-
+ src/core/manager.c                      |   6 +-
+ src/core/manager.h                      |   8 +-
+ src/libsystemd/sd-path/sd-path.c        |   8 +-
+ src/portable/portable.c                 |  14 +-
+ src/shared/install-printf.c             |   2 +-
+ src/shared/install-printf.h             |   2 +-
+ src/shared/install.c                    |  92 ++---
+ src/shared/install.h                    |  35 +-
+ src/shared/specifier.c                  |  26 +-
+ src/systemctl/systemctl-edit.c          |   6 +-
+ src/systemctl/systemctl-is-enabled.c    |   2 +-
+ src/systemctl/systemctl-show.c          |   2 +-
+ src/systemctl/systemctl-start-special.c |   4 +-
+ src/systemctl/systemctl-start-unit.c    |   6 +-
+ src/systemctl/systemctl-sysv-compat.c   |   2 +-
+ src/systemctl/systemctl-util.c          |  10 +-
+ src/systemctl/systemctl.c               |  12 +-
+ src/systemctl/systemctl.h               |   2 +-
+ src/sysv-generator/sysv-generator.c     |   4 +-
+ src/test/test-bpf-firewall.c            |   2 +-
+ src/test/test-bpf-foreign-programs.c    |   2 +-
+ src/test/test-bpf-lsm.c                 |   2 +-
+ src/test/test-cgroup-mask.c             |   2 +-
+ src/test/test-cgroup-unit-default.c     |   2 +-
+ src/test/test-engine.c                  |   2 +-
+ src/test/test-execute.c                 |  10 +-
+ src/test/test-install-root.c            | 448 ++++++++++++------------
+ src/test/test-install.c                 |  72 ++--
+ src/test/test-load-fragment.c           |  96 ++---
+ src/test/test-path-lookup.c             |  30 +-
+ src/test/test-path.c                    |   2 +-
+ src/test/test-sched-prio.c              |   2 +-
+ src/test/test-socket-bind.c             |   2 +-
+ src/test/test-specifier.c               |   2 +-
+ src/test/test-unit-file.c               |   2 +-
+ src/test/test-unit-name.c               |   2 +-
+ src/test/test-unit-serialize.c          |   2 +-
+ src/test/test-watch-pid.c               |   2 +-
+ src/tmpfiles/tmpfiles.c                 |   2 +-
+ 52 files changed, 536 insertions(+), 539 deletions(-)
+
+diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c
+index a7ad085f46..248fe01448 100644
+--- a/src/analyze/analyze-condition.c
++++ b/src/analyze/analyze-condition.c
+@@ -73,7 +73,7 @@ static int log_helper(void *userdata, int level, int error, const char *file, in
+         return r;
+ }
+ 
+-int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const char *root) {
++int verify_conditions(char **lines, LookupScope scope, const char *unit, const char *root) {
+         _cleanup_(manager_freep) Manager *m = NULL;
+         Unit *u;
+         int r, q = 1;
+diff --git a/src/analyze/analyze-condition.h b/src/analyze/analyze-condition.h
+index 9ebd205b6d..04bd853c4f 100644
+--- a/src/analyze/analyze-condition.h
++++ b/src/analyze/analyze-condition.h
+@@ -3,4 +3,4 @@
+ 
+ #include "install.h"
+ 
+-int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const char *root);
++int verify_conditions(char **lines, LookupScope scope, const char *unit, const char *root);
+diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
+index d8ccbf8c54..e112922cbf 100644
+--- a/src/analyze/analyze-security.c
++++ b/src/analyze/analyze-security.c
+@@ -2643,7 +2643,7 @@ static int offline_security_check(Unit *u,
+ 
+ static int offline_security_checks(char **filenames,
+                                    JsonVariant *policy,
+-                                   UnitFileScope scope,
++                                   LookupScope scope,
+                                    bool check_man,
+                                    bool run_generators,
+                                    unsigned threshold,
+@@ -2755,7 +2755,7 @@ static int offline_security_checks(char **filenames,
+ int analyze_security(sd_bus *bus,
+                      char **units,
+                      JsonVariant *policy,
+-                     UnitFileScope scope,
++                     LookupScope scope,
+                      bool check_man,
+                      bool run_generators,
+                      bool offline,
+diff --git a/src/analyze/analyze-security.h b/src/analyze/analyze-security.h
+index 07483248ee..99bc1fabe4 100644
+--- a/src/analyze/analyze-security.h
++++ b/src/analyze/analyze-security.h
+@@ -18,7 +18,7 @@ typedef enum AnalyzeSecurityFlags {
+ int analyze_security(sd_bus *bus,
+                      char **units,
+                      JsonVariant *policy,
+-                     UnitFileScope scope,
++                     LookupScope scope,
+                      bool check_man,
+                      bool run_generators,
+                      bool offline,
+diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c
+index 39eb5cf93b..6680b9768d 100644
+--- a/src/analyze/analyze-verify.c
++++ b/src/analyze/analyze-verify.c
+@@ -243,7 +243,7 @@ static void set_destroy_ignore_pointer_max(Set** s) {
+         set_free_free(*s);
+ }
+ 
+-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root) {
++int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root) {
+         const ManagerTestRunFlags flags =
+                 MANAGER_TEST_RUN_MINIMAL |
+                 MANAGER_TEST_RUN_ENV_GENERATORS |
+diff --git a/src/analyze/analyze-verify.h b/src/analyze/analyze-verify.h
+index 47b78a8158..385d635e33 100644
+--- a/src/analyze/analyze-verify.h
++++ b/src/analyze/analyze-verify.h
+@@ -17,7 +17,7 @@ typedef enum RecursiveErrors {
+ int verify_generate_path(char **var, char **filenames);
+ int verify_prepare_filename(const char *filename, char **ret);
+ int verify_executable(Unit *u, const ExecCommand *exec, const char *root);
+-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root);
++int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root);
+ 
+ const char* recursive_errors_to_string(RecursiveErrors i) _const_;
+ RecursiveErrors recursive_errors_from_string(const char *s) _pure_;
+diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
+index 846acf31d3..7520134880 100644
+--- a/src/analyze/analyze.c
++++ b/src/analyze/analyze.c
+@@ -92,7 +92,7 @@ static usec_t arg_fuzz = 0;
+ static PagerFlags arg_pager_flags = 0;
+ static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
+ static const char *arg_host = NULL;
+-static UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
++static LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM;
+ static RecursiveErrors arg_recursive_errors = RECURSIVE_ERRORS_YES;
+ static bool arg_man = true;
+ static bool arg_generators = false;
+@@ -171,7 +171,7 @@ typedef struct HostInfo {
+ } HostInfo;
+ 
+ static int acquire_bus(sd_bus **bus, bool *use_full_bus) {
+-        bool user = arg_scope != UNIT_FILE_SYSTEM;
++        bool user = arg_scope != LOOKUP_SCOPE_SYSTEM;
+         int r;
+ 
+         if (use_full_bus && *use_full_bus) {
+@@ -349,9 +349,9 @@ static int acquire_boot_times(sd_bus *bus, BootTimes **bt) {
+                                        "Please try again later.\n"
+                                        "Hint: Use 'systemctl%s list-jobs' to see active jobs",
+                                        times.finish_time,
+-                                       arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
++                                       arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user");
+ 
+-        if (arg_scope == UNIT_FILE_SYSTEM && times.security_start_time > 0) {
++        if (arg_scope == LOOKUP_SCOPE_SYSTEM && times.security_start_time > 0) {
+                 /* security_start_time is set when systemd is not running under container environment. */
+                 if (times.initrd_time > 0)
+                         times.kernel_done_time = times.initrd_time;
+@@ -506,7 +506,7 @@ static int acquire_host_info(sd_bus *bus, HostInfo **hi) {
+         if (!host)
+                 return log_oom();
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM) {
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM) {
+                 r = bus_connect_transport(arg_transport, arg_host, false, &system_bus);
+                 if (r < 0) {
+                         log_debug_errno(r, "Failed to connect to system bus, ignoring: %m");
+@@ -684,7 +684,7 @@ static int analyze_plot(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+         _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL;
+         _cleanup_free_ char *pretty_times = NULL;
+-        bool use_full_bus = arg_scope == UNIT_FILE_SYSTEM;
++        bool use_full_bus = arg_scope == LOOKUP_SCOPE_SYSTEM;
+         BootTimes *boot;
+         UnitTimes *u;
+         int n, m = 1, y = 0, r;
+@@ -702,7 +702,7 @@ static int analyze_plot(int argc, char *argv[], void *userdata) {
+         if (n < 0)
+                 return n;
+ 
+-        if (use_full_bus || arg_scope != UNIT_FILE_SYSTEM) {
++        if (use_full_bus || arg_scope != LOOKUP_SCOPE_SYSTEM) {
+                 n = acquire_host_info(bus, &host);
+                 if (n < 0)
+                         return n;
+@@ -2607,15 +2607,15 @@ static int parse_argv(int argc, char *argv[]) {
+                         break;
+ 
+                 case ARG_SYSTEM:
+-                        arg_scope = UNIT_FILE_SYSTEM;
++                        arg_scope = LOOKUP_SCOPE_SYSTEM;
+                         break;
+ 
+                 case ARG_USER:
+-                        arg_scope = UNIT_FILE_USER;
++                        arg_scope = LOOKUP_SCOPE_USER;
+                         break;
+ 
+                 case ARG_GLOBAL:
+-                        arg_scope = UNIT_FILE_GLOBAL;
++                        arg_scope = LOOKUP_SCOPE_GLOBAL;
+                         break;
+ 
+                 case ARG_ORDER:
+@@ -2756,12 +2756,12 @@ static int parse_argv(int argc, char *argv[]) {
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Option --threshold= is only supported for security right now.");
+ 
+-        if (arg_scope == UNIT_FILE_GLOBAL &&
++        if (arg_scope == LOOKUP_SCOPE_GLOBAL &&
+             !STR_IN_SET(argv[optind] ?: "time", "dot", "unit-paths", "verify"))
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Option --global only makes sense with verbs dot, unit-paths, verify.");
+ 
+-        if (streq_ptr(argv[optind], "cat-config") && arg_scope == UNIT_FILE_USER)
++        if (streq_ptr(argv[optind], "cat-config") && arg_scope == LOOKUP_SCOPE_USER)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Option --user is not supported for cat-config right now.");
+ 
+diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
+index b699756658..1f4331a8bf 100644
+--- a/src/basic/path-lookup.c
++++ b/src/basic/path-lookup.c
+@@ -232,7 +232,7 @@ bool path_is_user_config_dir(const char *path) {
+ }
+ 
+ static int acquire_generator_dirs(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *tempdir,
+                 char **generator,
+                 char **generator_early,
+@@ -244,17 +244,17 @@ static int acquire_generator_dirs(
+         assert(generator);
+         assert(generator_early);
+         assert(generator_late);
+-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL));
++        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL));
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EOPNOTSUPP;
+ 
+         if (tempdir)
+                 prefix = tempdir;
+-        else if (scope == UNIT_FILE_SYSTEM)
++        else if (scope == LOOKUP_SCOPE_SYSTEM)
+                 prefix = "/run/systemd";
+         else {
+-                /* UNIT_FILE_USER */
++                /* LOOKUP_SCOPE_USER */
+                 const char *e;
+ 
+                 e = getenv("XDG_RUNTIME_DIR");
+@@ -288,21 +288,21 @@ static int acquire_generator_dirs(
+ }
+ 
+ static int acquire_transient_dir(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *tempdir,
+                 char **ret) {
+ 
+         char *transient;
+ 
+         assert(ret);
+-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL));
++        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL));
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EOPNOTSUPP;
+ 
+         if (tempdir)
+                 transient = path_join(tempdir, "transient");
+-        else if (scope == UNIT_FILE_SYSTEM)
++        else if (scope == LOOKUP_SCOPE_SYSTEM)
+                 transient = strdup("/run/systemd/transient");
+         else
+                 return xdg_user_runtime_dir(ret, "/systemd/transient");
+@@ -313,7 +313,7 @@ static int acquire_transient_dir(
+         return 0;
+ }
+ 
+-static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **runtime) {
++static int acquire_config_dirs(LookupScope scope, char **persistent, char **runtime) {
+         _cleanup_free_ char *a = NULL, *b = NULL;
+         int r;
+ 
+@@ -322,17 +322,17 @@ static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **ru
+ 
+         switch (scope) {
+ 
+-        case UNIT_FILE_SYSTEM:
++        case LOOKUP_SCOPE_SYSTEM:
+                 a = strdup(SYSTEM_CONFIG_UNIT_DIR);
+                 b = strdup("/run/systemd/system");
+                 break;
+ 
+-        case UNIT_FILE_GLOBAL:
++        case LOOKUP_SCOPE_GLOBAL:
+                 a = strdup(USER_CONFIG_UNIT_DIR);
+                 b = strdup("/run/systemd/user");
+                 break;
+ 
+-        case UNIT_FILE_USER:
++        case LOOKUP_SCOPE_USER:
+                 r = xdg_user_config_dir(&a, "/systemd/user");
+                 if (r < 0 && r != -ENXIO)
+                         return r;
+@@ -364,7 +364,7 @@ static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **ru
+         return 0;
+ }
+ 
+-static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **runtime) {
++static int acquire_control_dirs(LookupScope scope, char **persistent, char **runtime) {
+         _cleanup_free_ char *a = NULL;
+         int r;
+ 
+@@ -373,7 +373,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r
+ 
+         switch (scope) {
+ 
+-        case UNIT_FILE_SYSTEM:  {
++        case LOOKUP_SCOPE_SYSTEM:  {
+                 _cleanup_free_ char *b = NULL;
+ 
+                 a = strdup("/etc/systemd/system.control");
+@@ -389,7 +389,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r
+                 break;
+         }
+ 
+-        case UNIT_FILE_USER:
++        case LOOKUP_SCOPE_USER:
+                 r = xdg_user_config_dir(&a, "/systemd/user.control");
+                 if (r < 0 && r != -ENXIO)
+                         return r;
+@@ -406,7 +406,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r
+ 
+                 break;
+ 
+-        case UNIT_FILE_GLOBAL:
++        case LOOKUP_SCOPE_GLOBAL:
+                 return -EOPNOTSUPP;
+ 
+         default:
+@@ -419,7 +419,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r
+ }
+ 
+ static int acquire_attached_dirs(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 char **ret_persistent,
+                 char **ret_runtime) {
+ 
+@@ -429,7 +429,7 @@ static int acquire_attached_dirs(
+         assert(ret_runtime);
+ 
+         /* Portable services are not available to regular users for now. */
+-        if (scope != UNIT_FILE_SYSTEM)
++        if (scope != LOOKUP_SCOPE_SYSTEM)
+                 return -EOPNOTSUPP;
+ 
+         a = strdup("/etc/systemd/system.attached");
+@@ -509,7 +509,7 @@ static int get_paths_from_environ(const char *var, char ***paths, bool *append)
+ 
+ int lookup_paths_init(
+                 LookupPaths *lp,
+-                UnitFileScope scope,
++                LookupScope scope,
+                 LookupPathsFlags flags,
+                 const char *root_dir) {
+ 
+@@ -528,14 +528,14 @@ int lookup_paths_init(
+ 
+         assert(lp);
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+ #if HAVE_SPLIT_USR
+         flags |= LOOKUP_PATHS_SPLIT_USR;
+ #endif
+ 
+         if (!empty_or_root(root_dir)) {
+-                if (scope == UNIT_FILE_USER)
++                if (scope == LOOKUP_SCOPE_USER)
+                         return -EINVAL;
+ 
+                 r = is_dir(root_dir, true);
+@@ -560,8 +560,8 @@ int lookup_paths_init(
+         if (r < 0)
+                 return r;
+ 
+-        if (scope == UNIT_FILE_USER) {
+-                r = acquire_config_dirs(UNIT_FILE_GLOBAL, &global_persistent_config, &global_runtime_config);
++        if (scope == LOOKUP_SCOPE_USER) {
++                r = acquire_config_dirs(LOOKUP_SCOPE_GLOBAL, &global_persistent_config, &global_runtime_config);
+                 if (r < 0)
+                         return r;
+         }
+@@ -606,7 +606,7 @@ int lookup_paths_init(
+ 
+                 switch (scope) {
+ 
+-                case UNIT_FILE_SYSTEM:
++                case LOOKUP_SCOPE_SYSTEM:
+                         add = strv_new(
+                                         /* If you modify this you also want to modify
+                                          * systemdsystemunitpath= in systemd.pc.in! */
+@@ -629,7 +629,7 @@ int lookup_paths_init(
+                                         STRV_IFNOTNULL(generator_late));
+                         break;
+ 
+-                case UNIT_FILE_GLOBAL:
++                case LOOKUP_SCOPE_GLOBAL:
+                         add = strv_new(
+                                         /* If you modify this you also want to modify
+                                          * systemduserunitpath= in systemd.pc.in, and
+@@ -652,7 +652,7 @@ int lookup_paths_init(
+                                         STRV_IFNOTNULL(generator_late));
+                         break;
+ 
+-                case UNIT_FILE_USER:
++                case LOOKUP_SCOPE_USER:
+                         add = user_dirs(persistent_config, runtime_config,
+                                         global_persistent_config, global_runtime_config,
+                                         generator, generator_early, generator_late,
+@@ -741,7 +741,7 @@ int lookup_paths_init(
+         return 0;
+ }
+ 
+-int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir) {
++int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir) {
+         int r;
+ 
+         r = lookup_paths_init(lp, scope, flags, root_dir);
+@@ -790,7 +790,7 @@ void lookup_paths_log(LookupPaths *lp) {
+         }
+ }
+ 
+-char **generator_binary_paths(UnitFileScope scope) {
++char **generator_binary_paths(LookupScope scope) {
+         bool append = false; /* Add items from SYSTEMD_GENERATOR_PATH before normal directories */
+         _cleanup_strv_free_ char **paths = NULL;
+         int r;
+@@ -805,15 +805,15 @@ char **generator_binary_paths(UnitFileScope scope) {
+ 
+                 switch (scope) {
+ 
+-                case UNIT_FILE_SYSTEM:
++                case LOOKUP_SCOPE_SYSTEM:
+                         add = strv_new("/run/systemd/system-generators",
+                                        "/etc/systemd/system-generators",
+                                        "/usr/local/lib/systemd/system-generators",
+                                        SYSTEM_GENERATOR_DIR);
+                         break;
+ 
+-                case UNIT_FILE_GLOBAL:
+-                case UNIT_FILE_USER:
++                case LOOKUP_SCOPE_GLOBAL:
++                case LOOKUP_SCOPE_USER:
+                         add = strv_new("/run/systemd/user-generators",
+                                        "/etc/systemd/user-generators",
+                                        "/usr/local/lib/systemd/user-generators",
+diff --git a/src/basic/path-lookup.h b/src/basic/path-lookup.h
+index 1f0e5ea271..aed72defe7 100644
+--- a/src/basic/path-lookup.h
++++ b/src/basic/path-lookup.h
+@@ -3,10 +3,7 @@
+ 
+ #include <stdbool.h>
+ 
+-typedef struct LookupPaths LookupPaths;
+-
+ #include "def.h"
+-#include "unit-file.h"
+ #include "macro.h"
+ 
+ typedef enum LookupPathsFlags {
+@@ -15,7 +12,15 @@ typedef enum LookupPathsFlags {
+         LOOKUP_PATHS_SPLIT_USR           = 1 << 2,
+ } LookupPathsFlags;
+ 
+-struct LookupPaths {
++typedef enum LookupScope {
++        LOOKUP_SCOPE_SYSTEM,
++        LOOKUP_SCOPE_GLOBAL,
++        LOOKUP_SCOPE_USER,
++        _LOOKUP_SCOPE_MAX,
++        _LOOKUP_SCOPE_INVALID = -EINVAL,
++} LookupScope;
++
++typedef struct LookupPaths {
+         /* Where we look for unit files. This includes the individual special paths below, but also any vendor
+          * supplied, static unit file paths. */
+         char **search_path;
+@@ -52,10 +57,10 @@ struct LookupPaths {
+ 
+         /* A temporary directory when running in test mode, to be nuked */
+         char *temporary_dir;
+-};
++} LookupPaths;
+ 
+-int lookup_paths_init(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
+-int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir);
++int lookup_paths_init(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir);
++int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir);
+ 
+ int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs);
+ int xdg_user_runtime_dir(char **ret, const char *suffix);
+@@ -68,7 +73,7 @@ bool path_is_user_config_dir(const char *path);
+ void lookup_paths_log(LookupPaths *p);
+ void lookup_paths_free(LookupPaths *p);
+ 
+-char **generator_binary_paths(UnitFileScope scope);
++char **generator_binary_paths(LookupScope scope);
+ char **env_generator_binary_paths(bool is_system);
+ 
+ #define NETWORK_DIRS ((const char* const*) CONF_PATHS_STRV("systemd/network"))
+diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h
+index b7c03e9c2c..1c43861f00 100644
+--- a/src/basic/unit-file.h
++++ b/src/basic/unit-file.h
+@@ -4,12 +4,11 @@
+ #include <stdbool.h>
+ 
+ #include "hashmap.h"
++#include "path-lookup.h"
+ #include "time-util.h"
+ #include "unit-name.h"
+ 
+ typedef enum UnitFileState UnitFileState;
+-typedef enum UnitFileScope UnitFileScope;
+-typedef struct LookupPaths LookupPaths;
+ 
+ enum UnitFileState {
+         UNIT_FILE_ENABLED,
+@@ -29,14 +28,6 @@ enum UnitFileState {
+         _UNIT_FILE_STATE_INVALID = -EINVAL,
+ };
+ 
+-enum UnitFileScope {
+-        UNIT_FILE_SYSTEM,
+-        UNIT_FILE_GLOBAL,
+-        UNIT_FILE_USER,
+-        _UNIT_FILE_SCOPE_MAX,
+-        _UNIT_FILE_SCOPE_INVALID = -EINVAL,
+-};
+-
+ bool unit_type_may_alias(UnitType type) _const_;
+ bool unit_type_may_template(UnitType type) _const_;
+ 
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 0e3590d1c9..efba6331b9 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -2215,7 +2215,7 @@ fail:
+ static int method_enable_unit_files_generic(
+                 sd_bus_message *message,
+                 Manager *m,
+-                int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
++                int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
+                 bool carries_install_info,
+                 sd_bus_error *error) {
+ 
+@@ -2279,7 +2279,7 @@ static int method_link_unit_files(sd_bus_message *message, void *userdata, sd_bu
+         return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error);
+ }
+ 
+-static int unit_file_preset_without_mode(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) {
++static int unit_file_preset_without_mode(LookupScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) {
+         return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes);
+ }
+ 
+@@ -2339,7 +2339,7 @@ static int method_preset_unit_files_with_mode(sd_bus_message *message, void *use
+ static int method_disable_unit_files_generic(
+                 sd_bus_message *message,
+                 Manager *m,
+-                int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
++                int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
+                 sd_bus_error *error) {
+ 
+         _cleanup_strv_free_ char **l = NULL;
+@@ -2565,7 +2565,7 @@ static int method_get_unit_file_links(sd_bus_message *message, void *userdata, s
+         flags = UNIT_FILE_DRY_RUN |
+                 (runtime ? UNIT_FILE_RUNTIME : 0);
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, flags, NULL, p, &changes, &n_changes);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to get file links for %s: %m", name);
+ 
+diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c
+index 780dd3988d..c12e874e2d 100644
+--- a/src/core/fuzz-unit-file.c
++++ b/src/core/fuzz-unit-file.c
+@@ -62,7 +62,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         if (!getenv("SYSTEMD_LOG_LEVEL"))
+                 log_set_max_level(LOG_CRIT);
+ 
+-        assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0);
+ 
+         name = strjoina("a.", unit_type_to_string(t));
+         assert_se(unit_new_for_name(m, unit_vtable[t]->object_size, name, &u) >= 0);
+diff --git a/src/core/main.c b/src/core/main.c
+index 4bad2e84a0..667e972364 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -2970,7 +2970,7 @@ int main(int argc, char *argv[]) {
+         if (r < 0)
+                 goto finish;
+ 
+-        r = manager_new(arg_system ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
++        r = manager_new(arg_system ? LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER,
+                         arg_action == ACTION_TEST ? MANAGER_TEST_FULL : 0,
+                         &m);
+         if (r < 0) {
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 60846a66e6..c01128adb4 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -781,13 +781,13 @@ static int manager_setup_sigchld_event_source(Manager *m) {
+         return 0;
+ }
+ 
+-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) {
++int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) {
+         _cleanup_(manager_freep) Manager *m = NULL;
+         const char *e;
+         int r;
+ 
+         assert(_m);
+-        assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER));
++        assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER));
+ 
+         m = new(Manager, 1);
+         if (!m)
+@@ -1705,7 +1705,7 @@ static void manager_preset_all(Manager *m) {
+                 return;
+ 
+         /* If this is the first boot, and we are in the host system, then preset everything */
+-        r = unit_file_preset_all(UNIT_FILE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0);
++        r = unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0);
+         if (r < 0)
+                 log_full_errno(r == -EEXIST ? LOG_NOTICE : LOG_WARNING, r,
+                                "Failed to populate /etc with preset unit settings, ignoring: %m");
+diff --git a/src/core/manager.h b/src/core/manager.h
+index e445e4d751..281d2a2138 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -235,7 +235,7 @@ struct Manager {
+         int user_lookup_fds[2];
+         sd_event_source *user_lookup_event_source;
+ 
+-        UnitFileScope unit_file_scope;
++        LookupScope unit_file_scope;
+         LookupPaths lookup_paths;
+         Hashmap *unit_id_map;
+         Hashmap *unit_name_map;
+@@ -461,8 +461,8 @@ static inline usec_t manager_default_timeout_abort_usec(Manager *m) {
+         return m->default_timeout_abort_set ? m->default_timeout_abort_usec : m->default_timeout_stop_usec;
+ }
+ 
+-#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == UNIT_FILE_SYSTEM)
+-#define MANAGER_IS_USER(m) ((m)->unit_file_scope != UNIT_FILE_SYSTEM)
++#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == LOOKUP_SCOPE_SYSTEM)
++#define MANAGER_IS_USER(m) ((m)->unit_file_scope != LOOKUP_SCOPE_SYSTEM)
+ 
+ #define MANAGER_IS_RELOADING(m) ((m)->n_reloading > 0)
+ 
+@@ -473,7 +473,7 @@ static inline usec_t manager_default_timeout_abort_usec(Manager *m) {
+ 
+ #define MANAGER_IS_TEST_RUN(m) ((m)->test_run_flags != 0)
+ 
+-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
++int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
+ Manager* manager_free(Manager *m);
+ DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
+ 
+diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
+index 8d9cfbc0af..385cfd3006 100644
+--- a/src/libsystemd/sd-path/sd-path.c
++++ b/src/libsystemd/sd-path/sd-path.c
+@@ -601,8 +601,8 @@ static int get_search(uint64_t type, char ***list) {
+         case SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT:
+         case SD_PATH_SYSTEMD_SEARCH_USER_UNIT: {
+                 _cleanup_(lookup_paths_free) LookupPaths lp = {};
+-                const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ?
+-                                                    UNIT_FILE_SYSTEM : UNIT_FILE_USER;
++                const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ?
++                                                    LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER;
+ 
+                 r = lookup_paths_init(&lp, scope, 0, NULL);
+                 if (r < 0)
+@@ -615,8 +615,8 @@ static int get_search(uint64_t type, char ***list) {
+         case SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR:
+         case SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR: {
+                 char **t;
+-                const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ?
+-                                                    UNIT_FILE_SYSTEM : UNIT_FILE_USER;
++                const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ?
++                                                    LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER;
+ 
+                 t = generator_binary_paths(scope);
+                 if (!t)
+diff --git a/src/portable/portable.c b/src/portable/portable.c
+index 5be7ea854d..4c75dc0e0c 100644
+--- a/src/portable/portable.c
++++ b/src/portable/portable.c
+@@ -231,7 +231,7 @@ static int extract_now(
+         /* Then, send unit file data to the parent (or/and add it to the hashmap). For that we use our usual unit
+          * discovery logic. Note that we force looking inside of /lib/systemd/system/ for units too, as we mightbe
+          * compiled for a split-usr system but the image might be a legacy-usr one. */
+-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where);
++        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where);
+         if (r < 0)
+                 return log_debug_errno(r, "Failed to acquire lookup paths: %m");
+ 
+@@ -1302,12 +1302,12 @@ int portable_attach(
+                                 strempty(extensions_joined));
+         }
+ 
+-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
++        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+         if (r < 0)
+                 return r;
+ 
+         HASHMAP_FOREACH(item, unit_files) {
+-                r = unit_file_exists(UNIT_FILE_SYSTEM, &paths, item->name);
++                r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, &paths, item->name);
+                 if (r < 0)
+                         return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name);
+                 if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
+@@ -1489,7 +1489,7 @@ int portable_detach(
+ 
+         assert(name_or_path);
+ 
+-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
++        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+         if (r < 0)
+                 return r;
+ 
+@@ -1523,7 +1523,7 @@ int portable_detach(
+                 if (r == 0)
+                         continue;
+ 
+-                r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state);
++                r = unit_file_lookup_state(LOOKUP_SCOPE_SYSTEM, &paths, de->d_name, &state);
+                 if (r < 0)
+                         return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name);
+                 if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_RUNTIME, UNIT_FILE_LINKED_RUNTIME))
+@@ -1657,7 +1657,7 @@ static int portable_get_state_internal(
+         assert(name_or_path);
+         assert(ret);
+ 
+-        r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
++        r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL);
+         if (r < 0)
+                 return r;
+ 
+@@ -1693,7 +1693,7 @@ static int portable_get_state_internal(
+                 if (r == 0)
+                         continue;
+ 
+-                r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state);
++                r = unit_file_lookup_state(LOOKUP_SCOPE_SYSTEM, &paths, de->d_name, &state);
+                 if (r < 0)
+                         return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name);
+                 if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_LINKED_RUNTIME))
+diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
+index 7aad1b7443..fdb8e021ac 100644
+--- a/src/shared/install-printf.c
++++ b/src/shared/install-printf.c
+@@ -104,7 +104,7 @@ static int specifier_last_component(char specifier, const void *data, const char
+ }
+ 
+ int install_name_printf(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const UnitFileInstallInfo *info,
+                 const char *format,
+                 char **ret) {
+diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
+index 60d3a9fc55..6a9ab24e15 100644
+--- a/src/shared/install-printf.h
++++ b/src/shared/install-printf.h
+@@ -5,7 +5,7 @@
+ #include "unit-name.h"
+ 
+ int install_name_printf(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const UnitFileInstallInfo *info,
+                 const char *format,
+                 char **ret);
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 22b16ad453..fa7bbdd93a 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -47,7 +47,7 @@ typedef enum SearchFlags {
+ } SearchFlags;
+ 
+ typedef struct {
+-        UnitFileScope scope;
++        LookupScope scope;
+         OrderedHashmap *will_process;
+         OrderedHashmap *have_processed;
+ } InstallContext;
+@@ -942,7 +942,7 @@ static int find_symlinks(
+ }
+ 
+ static int find_symlinks_in_scope(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const LookupPaths *lp,
+                 const UnitFileInstallInfo *info,
+                 bool match_name,
+@@ -976,7 +976,7 @@ static int find_symlinks_in_scope(
+                         }
+ 
+                         /* look for global enablement of user units */
+-                        if (scope == UNIT_FILE_USER && path_is_user_config_dir(*p)) {
++                        if (scope == LOOKUP_SCOPE_USER && path_is_user_config_dir(*p)) {
+                                 *state = UNIT_FILE_ENABLED;
+                                 return 1;
+                         }
+@@ -1868,7 +1868,7 @@ int unit_file_verify_alias(
+ }
+ 
+ static int install_info_symlink_alias(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+                 const char *config_path,
+@@ -1912,7 +1912,7 @@ static int install_info_symlink_alias(
+ }
+ 
+ static int install_info_symlink_wants(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags file_flags,
+                 UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+@@ -2052,7 +2052,7 @@ static int install_info_symlink_link(
+ }
+ 
+ static int install_info_apply(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags file_flags,
+                 UnitFileInstallInfo *info,
+                 const LookupPaths *lp,
+@@ -2225,7 +2225,7 @@ static int install_context_mark_for_removal(
+ }
+ 
+ int unit_file_mask(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2237,7 +2237,7 @@ int unit_file_mask(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2270,7 +2270,7 @@ int unit_file_mask(
+ }
+ 
+ int unit_file_unmask(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2285,7 +2285,7 @@ int unit_file_unmask(
+         int r, q;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2362,7 +2362,7 @@ int unit_file_unmask(
+ }
+ 
+ int unit_file_link(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2376,7 +2376,7 @@ int unit_file_link(
+         int r, q;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2462,7 +2462,7 @@ static int path_shall_revert(const LookupPaths *lp, const char *path) {
+ }
+ 
+ int unit_file_revert(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+@@ -2613,7 +2613,7 @@ int unit_file_revert(
+ }
+ 
+ int unit_file_add_dependency(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags file_flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2629,7 +2629,7 @@ int unit_file_add_dependency(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(target);
+ 
+         if (!IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES))
+@@ -2684,7 +2684,7 @@ int unit_file_add_dependency(
+ 
+ static int do_unit_file_enable(
+                 const LookupPaths *lp,
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *config_path,
+                 char **files,
+@@ -2714,7 +2714,7 @@ static int do_unit_file_enable(
+ }
+ 
+ int unit_file_enable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2725,7 +2725,7 @@ int unit_file_enable(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2740,7 +2740,7 @@ int unit_file_enable(
+ 
+ static int do_unit_file_disable(
+                 const LookupPaths *lp,
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *config_path,
+                 char **files,
+@@ -2769,7 +2769,7 @@ static int do_unit_file_disable(
+ 
+ 
+ int unit_file_disable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -2780,7 +2780,7 @@ int unit_file_disable(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2794,7 +2794,7 @@ int unit_file_disable(
+ }
+ 
+ static int normalize_linked_files(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const LookupPaths *lp,
+                 char **names_or_paths,
+                 char ***ret_names,
+@@ -2852,7 +2852,7 @@ static int normalize_linked_files(
+ }
+ 
+ int unit_file_reenable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **names_or_paths,
+@@ -2864,7 +2864,7 @@ int unit_file_reenable(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+         if (r < 0)
+@@ -2888,7 +2888,7 @@ int unit_file_reenable(
+ }
+ 
+ int unit_file_set_default(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 const char *name,
+@@ -2902,7 +2902,7 @@ int unit_file_set_default(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(name);
+ 
+         if (unit_name_to_type(name) != UNIT_TARGET) /* this also validates the name */
+@@ -2923,7 +2923,7 @@ int unit_file_set_default(
+ }
+ 
+ int unit_file_get_default(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 char **name) {
+ 
+@@ -2934,7 +2934,7 @@ int unit_file_get_default(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(name);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+@@ -2958,7 +2958,7 @@ int unit_file_get_default(
+ }
+ 
+ int unit_file_lookup_state(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const LookupPaths *lp,
+                 const char *name,
+                 UnitFileState *ret) {
+@@ -3056,7 +3056,7 @@ int unit_file_lookup_state(
+ }
+ 
+ int unit_file_get_state(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 const char *name,
+                 UnitFileState *ret) {
+@@ -3065,7 +3065,7 @@ int unit_file_get_state(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(name);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+@@ -3075,7 +3075,7 @@ int unit_file_get_state(
+         return unit_file_lookup_state(scope, &lp, name, ret);
+ }
+ 
+-int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) {
++int unit_file_exists(LookupScope scope, const LookupPaths *lp, const char *name) {
+         _cleanup_(install_context_done) InstallContext c = { .scope = scope };
+         int r;
+ 
+@@ -3127,17 +3127,17 @@ static int split_pattern_into_name_and_instances(const char *pattern, char **out
+         return 0;
+ }
+ 
+-static int presets_find_config(UnitFileScope scope, const char *root_dir, char ***files) {
++static int presets_find_config(LookupScope scope, const char *root_dir, char ***files) {
+         static const char* const system_dirs[] = {CONF_PATHS("systemd/system-preset"), NULL};
+         static const char* const user_dirs[] = {CONF_PATHS_USR("systemd/user-preset"), NULL};
+         const char* const* dirs;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+ 
+-        if (scope == UNIT_FILE_SYSTEM)
++        if (scope == LOOKUP_SCOPE_SYSTEM)
+                 dirs = system_dirs;
+-        else if (IN_SET(scope, UNIT_FILE_GLOBAL, UNIT_FILE_USER))
++        else if (IN_SET(scope, LOOKUP_SCOPE_GLOBAL, LOOKUP_SCOPE_USER))
+                 dirs = user_dirs;
+         else
+                 assert_not_reached();
+@@ -3145,13 +3145,13 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char *
+         return conf_files_list_strv(files, ".preset", root_dir, 0, dirs);
+ }
+ 
+-static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) {
++static int read_presets(LookupScope scope, const char *root_dir, UnitFilePresets *presets) {
+         _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {};
+         _cleanup_strv_free_ char **files = NULL;
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(presets);
+ 
+         r = presets_find_config(scope, root_dir, &files);
+@@ -3325,7 +3325,7 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char
+         }
+ }
+ 
+-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) {
++int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) {
+         _cleanup_(unit_file_presets_freep) UnitFilePresets tmp = {};
+         int r;
+ 
+@@ -3389,7 +3389,7 @@ static int execute_preset(
+ }
+ 
+ static int preset_prepare_one(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 InstallContext *plus,
+                 InstallContext *minus,
+                 LookupPaths *lp,
+@@ -3442,7 +3442,7 @@ static int preset_prepare_one(
+ }
+ 
+ int unit_file_preset(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags file_flags,
+                 const char *root_dir,
+                 char **files,
+@@ -3457,7 +3457,7 @@ int unit_file_preset(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(mode < _UNIT_FILE_PRESET_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+@@ -3482,7 +3482,7 @@ int unit_file_preset(
+ }
+ 
+ int unit_file_preset_all(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags file_flags,
+                 const char *root_dir,
+                 UnitFilePresetMode mode,
+@@ -3496,7 +3496,7 @@ int unit_file_preset_all(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(mode < _UNIT_FILE_PRESET_MAX);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+@@ -3557,7 +3557,7 @@ Hashmap* unit_file_list_free(Hashmap *h) {
+ DEFINE_TRIVIAL_CLEANUP_FUNC(UnitFileList*, unit_file_list_free_one);
+ 
+ int unit_file_get_list(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 Hashmap *h,
+                 char **states,
+@@ -3567,7 +3567,7 @@ int unit_file_get_list(
+         int r;
+ 
+         assert(scope >= 0);
+-        assert(scope < _UNIT_FILE_SCOPE_MAX);
++        assert(scope < _LOOKUP_SCOPE_MAX);
+         assert(h);
+ 
+         r = lookup_paths_init(&lp, scope, 0, root_dir);
+diff --git a/src/shared/install.h b/src/shared/install.h
+index 95427537f2..2ba7e8aea0 100644
+--- a/src/shared/install.h
++++ b/src/shared/install.h
+@@ -15,6 +15,7 @@ typedef struct UnitFileInstallInfo UnitFileInstallInfo;
+ #include "macro.h"
+ #include "path-lookup.h"
+ #include "strv.h"
++#include "unit-file.h"
+ #include "unit-name.h"
+ 
+ enum UnitFilePresetMode {
+@@ -95,28 +96,28 @@ struct UnitFileInstallInfo {
+ };
+ 
+ int unit_file_enable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_disable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_reenable(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **names_or_paths,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_preset(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -124,52 +125,52 @@ int unit_file_preset(
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_preset_all(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 UnitFilePresetMode mode,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_mask(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_unmask(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_link(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_revert(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 char **files,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_set_default(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 const char *file,
+                 UnitFileChange **changes,
+                 size_t *n_changes);
+ int unit_file_get_default(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const char *root_dir,
+                 char **name);
+ int unit_file_add_dependency(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 UnitFileFlags flags,
+                 const char *root_dir,
+                 char **files,
+@@ -179,15 +180,15 @@ int unit_file_add_dependency(
+                 size_t *n_changes);
+ 
+ int unit_file_lookup_state(
+-                UnitFileScope scope,
++                LookupScope scope,
+                 const LookupPaths *paths,
+                 const char *name,
+                 UnitFileState *ret);
+ 
+-int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
+-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name);
++int unit_file_get_state(LookupScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
++int unit_file_exists(LookupScope scope, const LookupPaths *paths, const char *name);
+ 
+-int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
++int unit_file_get_list(LookupScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
+ Hashmap* unit_file_list_free(Hashmap *h);
+ 
+ int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type, const char *path, const char *source);
+@@ -210,7 +211,7 @@ typedef struct {
+ } UnitFilePresets;
+ 
+ void unit_file_presets_freep(UnitFilePresets *p);
+-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached);
++int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached);
+ 
+ const char *unit_file_state_to_string(UnitFileState s) _const_;
+ UnitFileState unit_file_state_from_string(const char *s) _pure_;
+diff --git a/src/shared/specifier.c b/src/shared/specifier.c
+index ac353a651c..cfa60abc7b 100644
+--- a/src/shared/specifier.c
++++ b/src/shared/specifier.c
+@@ -18,10 +18,10 @@
+ #include "id128-util.h"
+ #include "macro.h"
+ #include "os-util.h"
++#include "path-lookup.h"
+ #include "specifier.h"
+ #include "string-util.h"
+ #include "strv.h"
+-#include "unit-file.h"
+ #include "user-util.h"
+ 
+ /*
+@@ -254,15 +254,15 @@ int specifier_os_image_version(char specifier, const void *data, const char *roo
+ }
+ 
+ int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        UnitFileScope scope = PTR_TO_INT(data);
++        LookupScope scope = PTR_TO_INT(data);
+         char *t;
+ 
+         assert(ret);
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EINVAL;
+ 
+-        t = gid_to_name(scope == UNIT_FILE_USER ? getgid() : 0);
++        t = gid_to_name(scope == LOOKUP_SCOPE_USER ? getgid() : 0);
+         if (!t)
+                 return -ENOMEM;
+ 
+@@ -271,15 +271,15 @@ int specifier_group_name(char specifier, const void *data, const char *root, con
+ }
+ 
+ int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        UnitFileScope scope = PTR_TO_INT(data);
++        LookupScope scope = PTR_TO_INT(data);
+         gid_t gid;
+ 
+         assert(ret);
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EINVAL;
+ 
+-        gid = scope == UNIT_FILE_USER ? getgid() : 0;
++        gid = scope == LOOKUP_SCOPE_USER ? getgid() : 0;
+ 
+         if (asprintf(ret, UID_FMT, gid) < 0)
+                 return -ENOMEM;
+@@ -288,16 +288,16 @@ int specifier_group_id(char specifier, const void *data, const char *root, const
+ }
+ 
+ int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        UnitFileScope scope = PTR_TO_INT(data);
++        LookupScope scope = PTR_TO_INT(data);
+         uid_t uid;
+         char *t;
+ 
+         assert(ret);
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EINVAL;
+ 
+-        uid = scope == UNIT_FILE_USER ? getuid() : 0;
++        uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0;
+ 
+         /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want
+          * to be able to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed.
+@@ -315,15 +315,15 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons
+ }
+ 
+ int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
+-        UnitFileScope scope = PTR_TO_INT(data);
++        LookupScope scope = PTR_TO_INT(data);
+         uid_t uid;
+ 
+         assert(ret);
+ 
+-        if (scope == UNIT_FILE_GLOBAL)
++        if (scope == LOOKUP_SCOPE_GLOBAL)
+                 return -EINVAL;
+ 
+-        uid = scope == UNIT_FILE_USER ? getuid() : 0;
++        uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0;
+ 
+         if (asprintf(ret, UID_FMT, uid) < 0)
+                 return -ENOMEM;
+diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
+index 328168e4bb..1d9e8dc5d2 100644
+--- a/src/systemctl/systemctl-edit.c
++++ b/src/systemctl/systemctl-edit.c
+@@ -99,7 +99,7 @@ int cat(int argc, char *argv[], void *userdata) {
+                                 ansi_highlight_red(),
+                                 ansi_highlight_red(),
+                                 ansi_highlight_red(),
+-                                arg_scope == UNIT_FILE_SYSTEM ? "" : " --user",
++                                arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user",
+                                 ansi_normal());
+ 
+                 r = cat_files(fragment_path, dropin_paths, 0);
+@@ -406,8 +406,8 @@ static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) {
+                 if (!path) {
+                         if (!arg_force) {
+                                 log_info("Run 'systemctl edit%s --force --full %s' to create a new unit.",
+-                                         arg_scope == UNIT_FILE_GLOBAL ? " --global" :
+-                                         arg_scope == UNIT_FILE_USER ? " --user" : "",
++                                         arg_scope == LOOKUP_SCOPE_GLOBAL ? " --global" :
++                                         arg_scope == LOOKUP_SCOPE_USER ? " --user" : "",
+                                          *name);
+                                 return -ENOENT;
+                         }
+diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c
+index eaf25217a8..db8f9e8cc4 100644
+--- a/src/systemctl/systemctl-is-enabled.c
++++ b/src/systemctl/systemctl-is-enabled.c
+@@ -18,7 +18,7 @@ static int show_installation_targets_client_side(const char *name) {
+         flags = UNIT_FILE_DRY_RUN |
+                 (arg_runtime ? UNIT_FILE_RUNTIME : 0);
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, flags, NULL, p, &changes, &n_changes);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to get file links for %s: %m", name);
+ 
+diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
+index ee96dac457..d472e1759d 100644
+--- a/src/systemctl/systemctl-show.c
++++ b/src/systemctl/systemctl-show.c
+@@ -764,7 +764,7 @@ static void print_status_info(
+                                 getuid(),
+                                 get_output_flags() | OUTPUT_BEGIN_NEWLINE,
+                                 SD_JOURNAL_LOCAL_ONLY,
+-                                arg_scope == UNIT_FILE_SYSTEM,
++                                arg_scope == LOOKUP_SCOPE_SYSTEM,
+                                 ellipsized);
+ 
+         if (i->need_daemon_reload)
+diff --git a/src/systemctl/systemctl-start-special.c b/src/systemctl/systemctl-start-special.c
+index 6ece700a9b..9c88e7910c 100644
+--- a/src/systemctl/systemctl-start-special.c
++++ b/src/systemctl/systemctl-start-special.c
+@@ -242,10 +242,10 @@ int start_special(int argc, char *argv[], void *userdata) {
+ int start_system_special(int argc, char *argv[], void *userdata) {
+         /* Like start_special above, but raises an error when running in user mode */
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Bad action for %s mode.",
+-                                       arg_scope == UNIT_FILE_GLOBAL ? "--global" : "--user");
++                                       arg_scope == LOOKUP_SCOPE_GLOBAL ? "--global" : "--user");
+ 
+         return start_special(argc, argv, userdata);
+ }
+diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c
+index b45495d51d..88b2b7a53d 100644
+--- a/src/systemctl/systemctl-start-unit.c
++++ b/src/systemctl/systemctl-start-unit.c
+@@ -168,8 +168,8 @@ fail:
+                                            BUS_ERROR_UNIT_MASKED,
+                                            BUS_ERROR_JOB_TYPE_NOT_APPLICABLE))
+                 log_error("See %s logs and 'systemctl%s status%s %s' for details.",
+-                          arg_scope == UNIT_FILE_SYSTEM ? "system" : "user",
+-                          arg_scope == UNIT_FILE_SYSTEM ? "" : " --user",
++                          arg_scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user",
++                          arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user",
+                           name[0] == '-' ? " --" : "",
+                           name);
+ 
+@@ -242,7 +242,7 @@ static const char** make_extra_args(const char *extra_args[static 4]) {
+ 
+         assert(extra_args);
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 extra_args[n++] = "--user";
+ 
+         if (arg_transport == BUS_TRANSPORT_REMOTE) {
+diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c
+index c6e8defd1b..f6889993ed 100644
+--- a/src/systemctl/systemctl-sysv-compat.c
++++ b/src/systemctl/systemctl-sysv-compat.c
+@@ -116,7 +116,7 @@ int enable_sysv_units(const char *verb, char **args) {
+ 
+         /* Processes all SysV units, and reshuffles the array so that afterwards only the native units remain */
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 return 0;
+ 
+         if (getenv_bool("SYSTEMCTL_SKIP_SYSV") > 0)
+diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c
+index db40154943..c39e0b7d5d 100644
+--- a/src/systemctl/systemctl-util.c
++++ b/src/systemctl/systemctl-util.c
+@@ -46,7 +46,7 @@ int acquire_bus(BusFocus focus, sd_bus **ret) {
+         if (!buses[focus]) {
+                 bool user;
+ 
+-                user = arg_scope != UNIT_FILE_SYSTEM;
++                user = arg_scope != LOOKUP_SCOPE_SYSTEM;
+ 
+                 if (focus == BUS_MANAGER)
+                         r = bus_connect_transport_systemd(arg_transport, arg_host, user, &buses[focus]);
+@@ -73,7 +73,7 @@ void ask_password_agent_open_maybe(void) {
+         if (arg_dry_run)
+                 return;
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 return;
+ 
+         ask_password_agent_open_if_enabled(arg_transport, arg_ask_password);
+@@ -82,7 +82,7 @@ void ask_password_agent_open_maybe(void) {
+ void polkit_agent_open_maybe(void) {
+         /* Open the polkit agent as a child process if necessary */
+ 
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 return;
+ 
+         polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
+@@ -380,7 +380,7 @@ void warn_unit_file_changed(const char *unit) {
+                     ansi_highlight_red(),
+                     ansi_normal(),
+                     unit,
+-                    arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
++                    arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user");
+ }
+ 
+ int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) {
+@@ -814,7 +814,7 @@ bool install_client_side(void) {
+         if (!isempty(arg_root))
+                 return true;
+ 
+-        if (arg_scope == UNIT_FILE_GLOBAL)
++        if (arg_scope == LOOKUP_SCOPE_GLOBAL)
+                 return true;
+ 
+         /* Unsupported environment variable, mostly for debugging purposes */
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 0489796a75..094cceebd6 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -66,7 +66,7 @@ char **arg_properties = NULL;
+ bool arg_all = false;
+ enum dependency arg_dependency = DEPENDENCY_FORWARD;
+ const char *_arg_job_mode = NULL;
+-UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
++LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM;
+ bool arg_wait = false;
+ bool arg_no_block = false;
+ int arg_legend = -1; /* -1: true, unless --quiet is passed, 1: true */
+@@ -616,15 +616,15 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+                         break;
+ 
+                 case ARG_USER:
+-                        arg_scope = UNIT_FILE_USER;
++                        arg_scope = LOOKUP_SCOPE_USER;
+                         break;
+ 
+                 case ARG_SYSTEM:
+-                        arg_scope = UNIT_FILE_SYSTEM;
++                        arg_scope = LOOKUP_SCOPE_SYSTEM;
+                         break;
+ 
+                 case ARG_GLOBAL:
+-                        arg_scope = UNIT_FILE_GLOBAL;
++                        arg_scope = LOOKUP_SCOPE_GLOBAL;
+                         break;
+ 
+                 case ARG_WAIT:
+@@ -924,10 +924,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+ 
+         /* If we are in --user mode, there's no point in talking to PolicyKit or the infra to query system
+          * passwords */
+-        if (arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 arg_ask_password = false;
+ 
+-        if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != UNIT_FILE_SYSTEM)
++        if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != LOOKUP_SCOPE_SYSTEM)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Cannot access user instance remotely.");
+ 
+diff --git a/src/systemctl/systemctl.h b/src/systemctl/systemctl.h
+index d6b9d7495c..7507398c4a 100644
+--- a/src/systemctl/systemctl.h
++++ b/src/systemctl/systemctl.h
+@@ -51,7 +51,7 @@ extern char **arg_properties;
+ extern bool arg_all;
+ extern enum dependency arg_dependency;
+ extern const char *_arg_job_mode;
+-extern UnitFileScope arg_scope;
++extern LookupScope arg_scope;
+ extern bool arg_wait;
+ extern bool arg_no_block;
+ extern int arg_legend;
+diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
+index 428509f4ce..14ae873dc0 100644
+--- a/src/sysv-generator/sysv-generator.c
++++ b/src/sysv-generator/sysv-generator.c
+@@ -747,7 +747,7 @@ static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) {
+                         if (hashmap_contains(all_services, name))
+                                 continue;
+ 
+-                        r = unit_file_exists(UNIT_FILE_SYSTEM, lp, name);
++                        r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, lp, name);
+                         if (r < 0 && !IN_SET(r, -ELOOP, -ERFKILL, -EADDRNOTAVAIL)) {
+                                 log_debug_errno(r, "Failed to detect whether %s exists, skipping: %m", name);
+                                 continue;
+@@ -891,7 +891,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
+ 
+         assert_se(arg_dest = dest_late);
+ 
+-        r = lookup_paths_init_or_warn(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
++        r = lookup_paths_init_or_warn(&lp, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/test/test-bpf-firewall.c b/src/test/test-bpf-firewall.c
+index 2e19db600e..cebd7d8a8b 100644
+--- a/src/test/test-bpf-firewall.c
++++ b/src/test/test-bpf-firewall.c
+@@ -97,7 +97,7 @@ int main(int argc, char *argv[]) {
+ 
+         /* The simple tests succeeded. Now let's try full unit-based use-case. */
+ 
+-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+         assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+ 
+         assert_se(u = unit_new(m, sizeof(Service)));
+diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c
+index 56933c87bf..45b685d219 100644
+--- a/src/test/test-bpf-foreign-programs.c
++++ b/src/test/test-bpf-foreign-programs.c
+@@ -301,7 +301,7 @@ int main(int argc, char *argv[]) {
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+         assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+ 
+         assert_se(test_bpf_cgroup_programs(m,
+diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c
+index 4a3b327a3f..812f7e99fb 100644
+--- a/src/test/test-bpf-lsm.c
++++ b/src/test/test-bpf-lsm.c
+@@ -92,7 +92,7 @@ int main(int argc, char *argv[]) {
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+         assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+ 
+         /* We need to enable access to the filesystem where the binary is so we
+diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c
+index 6058f32b0e..57483f72c2 100644
+--- a/src/test/test-cgroup-mask.c
++++ b/src/test/test-cgroup-mask.c
+@@ -42,7 +42,7 @@ TEST_RET(cgroup_mask, .sd_booted = true) {
+         assert_se(get_testdata_dir("units", &unit_dir) >= 0);
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
+         if (IN_SET(r, -EPERM, -EACCES)) {
+                 log_error_errno(r, "manager_new: %m");
+                 return log_tests_skipped("cannot create manager");
+diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c
+index 4c8de1e382..94201a3ccc 100644
+--- a/src/test/test-cgroup-unit-default.c
++++ b/src/test/test-cgroup-unit-default.c
+@@ -26,7 +26,7 @@ TEST_RET(default_memory_low, .sd_booted = true) {
+         assert_se(get_testdata_dir("units", &unit_dir) >= 0);
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
+         if (IN_SET(r, -EPERM, -EACCES)) {
+                 log_error_errno(r, "manager_new: %m");
+                 return log_tests_skipped("cannot create manager");
+diff --git a/src/test/test-engine.c b/src/test/test-engine.c
+index 673c665612..70f727d91c 100644
+--- a/src/test/test-engine.c
++++ b/src/test/test-engine.c
+@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) {
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
+         if (manager_errno_skip_test(r))
+                 return log_tests_skipped_errno(r, "manager_new");
+         assert_se(r >= 0);
+diff --git a/src/test/test-execute.c b/src/test/test-execute.c
+index 3b4b02184c..3505e81a43 100644
+--- a/src/test/test-execute.c
++++ b/src/test/test-execute.c
+@@ -1116,7 +1116,7 @@ typedef struct test_entry {
+ 
+ #define entry(x) {x, #x}
+ 
+-static int run_tests(UnitFileScope scope, const test_entry tests[], char **patterns) {
++static int run_tests(LookupScope scope, const test_entry tests[], char **patterns) {
+         _cleanup_(manager_freep) Manager *m = NULL;
+         int r;
+ 
+@@ -1238,11 +1238,11 @@ int main(int argc, char *argv[]) {
+         assert_se(unsetenv("VAR2") == 0);
+         assert_se(unsetenv("VAR3") == 0);
+ 
+-        r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
++        r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
+         if (r != 0)
+                 return r;
+ 
+-        r = run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
++        r = run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
+         if (r != 0)
+                 return r;
+ 
+@@ -1264,11 +1264,11 @@ int main(int argc, char *argv[]) {
+ 
+         can_unshare = false;
+ 
+-        r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
++        r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
+         if (r != 0)
+                 return r;
+ 
+-        return run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
++        return run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
+ #else
+         return 0;
+ #endif
+diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
+index dca695d124..a36536b85b 100644
+--- a/src/test/test-install-root.c
++++ b/src/test/test-install-root.c
+@@ -23,41 +23,41 @@ TEST(basic_mask_and_enable) {
+         UnitFileChange *changes = NULL;
+         size_t n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/a.service");
+         assert_se(write_string_file(p,
+                                     "[Install]\n"
+                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/b.service");
+         assert_se(symlink("a.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/c.service");
+         assert_se(symlink("/usr/lib/systemd/system/a.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/d.service");
+         assert_se(symlink("c.service", p) >= 0);
+ 
+         /* This one is interesting, as d follows a relative, then an absolute symlink */
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+-        assert_se(unit_file_mask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "/dev/null"));
+@@ -67,17 +67,17 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+ 
+         /* Enabling a masked unit should fail! */
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_unmask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
+@@ -85,7 +85,7 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../a.service"));
+@@ -94,18 +94,18 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         /* Enabling it again should succeed but be a NOP */
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 0);
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+@@ -113,19 +113,19 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         /* Disabling a disabled unit must succeed but be a NOP */
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 0);
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+         /* Let's enable this indirectly via a symlink */
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../a.service"));
+@@ -134,14 +134,14 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         /* Let's try to reenable */
+ 
+-        assert_se(unit_file_reenable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+@@ -152,24 +152,24 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+         /* Test masking with relative symlinks */
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/e.service");
+         assert_se(symlink("../../../../../../dev/null", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+ 
+         assert_se(unlink(p) == 0);
+         assert_se(symlink("/usr/../dev/null", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+ 
+         assert_se(unlink(p) == 0);
+ 
+@@ -180,10 +180,10 @@ TEST(basic_mask_and_enable) {
+                                     "[Install]\n"
+                                     "WantedBy=x.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../f.service"));
+@@ -196,7 +196,7 @@ TEST(basic_mask_and_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ }
+ 
+ TEST(linked_units) {
+@@ -236,9 +236,9 @@ TEST(linked_units) {
+                                     "[Install]\n"
+                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", NULL) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/linked2.service");
+         assert_se(symlink("/opt/linked2.service", p) >= 0);
+@@ -246,12 +246,12 @@ TEST(linked_units) {
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked3.service");
+         assert_se(symlink("/opt/linked3.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED);
+ 
+         /* First, let's link the unit into the search path */
+-        assert_se(unit_file_link(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "/opt/linked.service"));
+@@ -260,10 +260,10 @@ TEST(linked_units) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
+ 
+         /* Let's unlink it from the search path again */
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
+@@ -271,10 +271,10 @@ TEST(linked_units) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+ 
+         /* Now, let's not just link it, but also enable it */
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 2);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
+@@ -294,10 +294,10 @@ TEST(linked_units) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ 
+         /* And let's unlink it again */
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 2);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
+@@ -315,9 +315,9 @@ TEST(linked_units) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 2);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service");
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
+@@ -337,7 +337,7 @@ TEST(linked_units) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(startswith(changes[0].path, root));
+@@ -359,18 +359,18 @@ TEST(default) {
+         p = strjoina(root, "/usr/lib/systemd/system/test-default.target");
+         assert_se(symlink("test-default-real.target", p) >= 0);
+ 
+-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT);
++        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
+ 
+-        assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
++        assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == -ENOENT);
+         assert_se(streq_ptr(changes[0].path, "idontexist.target"));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT);
++        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
+ 
+-        assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
++        assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "test-default-real.target"));
+@@ -379,7 +379,7 @@ TEST(default) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) >= 0);
++        assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) >= 0);
+         assert_se(streq_ptr(def, "test-default-real.target"));
+ }
+ 
+@@ -400,7 +400,7 @@ TEST(add_dependency) {
+         p = strjoina(root, "/usr/lib/systemd/system/add-dependency-test-service.service");
+         assert_se(symlink("real-add-dependency-test-service.service", p) >= 0);
+ 
+-        assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
++        assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service"));
+@@ -418,10 +418,10 @@ TEST(template_enable) {
+ 
+         log_info("== %s ==", __func__);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/template@.service");
+         assert_se(write_string_file(p,
+@@ -432,16 +432,16 @@ TEST(template_enable) {
+         p = strjoina(root, "/usr/lib/systemd/system/template-symlink@.service");
+         assert_se(symlink("template@.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         log_info("== %s with template@.service enabled ==", __func__);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../template@.service"));
+@@ -450,30 +450,30 @@ TEST(template_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         log_info("== %s with template@foo.service enabled ==", __func__);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../template@foo.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
+@@ -481,33 +481,33 @@ TEST(template_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0);
+         assert_se(state == UNIT_FILE_INDIRECT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         log_info("== %s with template-symlink@quux.service enabled ==", __func__);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../template@quux.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
+@@ -515,14 +515,14 @@ TEST(template_enable) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ }
+ 
+ TEST(indirect) {
+@@ -531,9 +531,9 @@ TEST(indirect) {
+         UnitFileState state;
+         const char *p;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/indirecta.service");
+         assert_se(write_string_file(p,
+@@ -548,11 +548,11 @@ TEST(indirect) {
+         p = strjoina(root, "/usr/lib/systemd/system/indirectc.service");
+         assert_se(symlink("indirecta.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../indirectb.service"));
+@@ -561,11 +561,11 @@ TEST(indirect) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
+@@ -583,8 +583,8 @@ TEST(preset_and_list) {
+         UnitFileList *fl;
+         Hashmap *h;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service");
+         assert_se(write_string_file(p,
+@@ -601,10 +601,10 @@ TEST(preset_and_list) {
+                                     "enable *-yes.*\n"
+                                     "disable *\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../preset-yes.service"));
+@@ -613,10 +613,10 @@ TEST(preset_and_list) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
+@@ -624,18 +624,18 @@ TEST(preset_and_list) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 0);
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+ 
+         assert_se(n_changes > 0);
+ 
+@@ -653,17 +653,17 @@ TEST(preset_and_list) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         assert_se(h = hashmap_new(&string_hash_ops));
+-        assert_se(unit_file_get_list(UNIT_FILE_SYSTEM, root, h, NULL, NULL) >= 0);
++        assert_se(unit_file_get_list(LOOKUP_SCOPE_SYSTEM, root, h, NULL, NULL) >= 0);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service");
+         q = strjoina(root, "/usr/lib/systemd/system/preset-no.service");
+ 
+         HASHMAP_FOREACH(fl, h) {
+-                assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, basename(fl->path), &state) >= 0);
++                assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, basename(fl->path), &state) >= 0);
+                 assert_se(fl->state == state);
+ 
+                 if (streq(fl->path, p)) {
+@@ -687,17 +687,17 @@ TEST(revert) {
+         UnitFileChange *changes = NULL;
+         size_t n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "yy.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "yy.service", NULL) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/xx.service");
+         assert_se(write_string_file(p, "# Empty\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC);
+ 
+         /* Initially there's nothing to revert */
+-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 0);
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+@@ -706,7 +706,7 @@ TEST(revert) {
+         assert_se(write_string_file(p, "# Empty override\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+         /* Revert the override file */
+-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         assert_se(streq(changes[0].path, p));
+@@ -717,7 +717,7 @@ TEST(revert) {
+         assert_se(write_string_file(p, "# Empty dropin\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+         /* Revert the dropin file */
+-        assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         assert_se(streq(changes[0].path, p));
+@@ -735,8 +735,8 @@ TEST(preset_order) {
+         const char *p;
+         UnitFileState state;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/prefix-1.service");
+         assert_se(write_string_file(p,
+@@ -754,10 +754,10 @@ TEST(preset_order) {
+                                     "disable prefix-*.service\n"
+                                     "enable prefix-2.service\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../prefix-1.service"));
+@@ -766,36 +766,36 @@ TEST(preset_order) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ }
+ 
+ TEST(static_instance) {
+         UnitFileState state;
+         const char *p;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/static-instance@.service");
+         assert_se(write_string_file(p,
+                                     "[Install]\n"
+                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/static-instance@foo.service");
+         assert_se(symlink("static-instance@.service", p) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC);
+ }
+ 
+ TEST(with_dropin) {
+@@ -804,11 +804,11 @@ TEST(with_dropin) {
+         UnitFileChange *changes = NULL;
+         size_t n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1.service");
+         assert_se(write_string_file(p,
+@@ -820,7 +820,7 @@ TEST(with_dropin) {
+                                     "[Install]\n"
+                                     "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service");
+         assert_se(write_string_file(p,
+@@ -832,7 +832,7 @@ TEST(with_dropin) {
+                                     "[Install]\n"
+                                     "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3.service");
+         assert_se(write_string_file(p,
+@@ -844,7 +844,7 @@ TEST(with_dropin) {
+                                     "[Install]\n"
+                                     "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4a.service");
+         assert_se(write_string_file(p,
+@@ -856,16 +856,16 @@ TEST(with_dropin) {
+                                     "[Install]\n"
+                                     "Also=with-dropin-4b.service\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4b.service");
+         assert_se(write_string_file(p,
+                                     "[Install]\n"
+                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -878,8 +878,8 @@ TEST(with_dropin) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -892,8 +892,8 @@ TEST(with_dropin) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -906,8 +906,8 @@ TEST(with_dropin) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -920,11 +920,11 @@ TEST(with_dropin) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ }
+ 
+ TEST(with_dropin_template) {
+@@ -933,9 +933,9 @@ TEST(with_dropin_template) {
+         UnitFileChange *changes = NULL;
+         size_t n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1@.service");
+         assert_se(write_string_file(p,
+@@ -947,7 +947,7 @@ TEST(with_dropin_template) {
+                                     "[Install]\n"
+                                     "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-2@.service");
+         assert_se(write_string_file(p,
+@@ -959,7 +959,7 @@ TEST(with_dropin_template) {
+                                     "[Install]\n"
+                                     "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3@.service");
+         assert_se(write_string_file(p,
+@@ -972,9 +972,9 @@ TEST(with_dropin_template) {
+                                     "[Install]\n"
+                                     "DefaultInstance=instance-2\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -987,7 +987,7 @@ TEST(with_dropin_template) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+@@ -1000,7 +1000,7 @@ TEST(with_dropin_template) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service"));
+@@ -1009,7 +1009,7 @@ TEST(with_dropin_template) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
++        assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(streq(changes[0].source, "../with-dropin-3@.service"));
+@@ -1018,11 +1018,11 @@ TEST(with_dropin_template) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ }
+ 
+ TEST(preset_multiple_instances) {
+@@ -1038,7 +1038,7 @@ TEST(preset_multiple_instances) {
+                                     "DefaultInstance=def\n"
+                                     "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         p = strjoina(root, "/usr/lib/systemd/system-preset/test.preset");
+         assert_se(write_string_file(p,
+@@ -1046,11 +1046,11 @@ TEST(preset_multiple_instances) {
+                                     "enable emptylist@.service\n" /* This line ensures the old functionality for templated unit still works */
+                                     "disable *\n" , WRITE_STRING_FILE_CREATE) >= 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+         /* Preset a single instantiated unit specified in the list */
+-        assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
+@@ -1058,7 +1058,7 @@ TEST(preset_multiple_instances) {
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
++        assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
+@@ -1067,17 +1067,17 @@ TEST(preset_multiple_instances) {
+         changes = NULL; n_changes = 0;
+ 
+         /* Check for preset-all case, only instances on the list should be enabled, not including the default instance */
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+ 
+-        assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
++        assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes > 0);
+ 
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+-        assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+ 
+         unit_file_changes_free(changes, n_changes);
+ }
+diff --git a/src/test/test-install.c b/src/test/test-install.c
+index 7a0beb2d24..6c5a036465 100644
+--- a/src/test/test-install.c
++++ b/src/test/test-install.c
+@@ -32,13 +32,13 @@ int main(int argc, char* argv[]) {
+         test_setup_logging(LOG_DEBUG);
+ 
+         h = hashmap_new(&string_hash_ops);
+-        r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
++        r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
+         assert_se(r == 0);
+ 
+         HASHMAP_FOREACH(p, h) {
+                 UnitFileState s = _UNIT_FILE_STATE_INVALID;
+ 
+-                r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s);
++                r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(p->path), &s);
+ 
+                 assert_se((r < 0 && p->state == UNIT_FILE_BAD) ||
+                           (p->state == s));
+@@ -52,18 +52,18 @@ int main(int argc, char* argv[]) {
+ 
+         log_info("/*** enable **/");
+ 
+-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         log_info("/*** enable2 **/");
+ 
+-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_ENABLED);
+ 
+@@ -71,13 +71,13 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_DISABLED);
+ 
+@@ -85,16 +85,16 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+         log_info("/*** mask2 ***/");
+-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_MASKED);
+ 
+@@ -102,16 +102,16 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+         log_info("/*** unmask2 ***/");
+-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_DISABLED);
+ 
+@@ -119,13 +119,13 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_MASKED);
+ 
+@@ -133,16 +133,16 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+         log_info("/*** disable2 ***/");
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_MASKED);
+ 
+@@ -150,13 +150,13 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
++        r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_DISABLED);
+ 
+@@ -164,13 +164,13 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
++        r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_ENABLED);
+ 
+@@ -178,26 +178,26 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r < 0);
+ 
+         log_info("/*** link files2 ***/");
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
++        r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_LINKED);
+ 
+@@ -205,26 +205,26 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r < 0);
+ 
+         log_info("/*** link files2 ***/");
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
++        r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_LINKED);
+ 
+@@ -232,13 +232,13 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
++        r = unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_ENABLED);
+ 
+@@ -246,25 +246,25 @@ int main(int argc, char* argv[]) {
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
++        r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
+         assert_se(r < 0);
+         log_info("/*** preset files ***/");
+         changes = NULL;
+         n_changes = 0;
+ 
+-        r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
++        r = unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
+         assert_se(r >= 0);
+ 
+         dump_changes(changes, n_changes);
+         unit_file_changes_free(changes, n_changes);
+ 
+-        r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0]), &state);
++        r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files[0]), &state);
+         assert_se(r >= 0);
+         assert_se(state == UNIT_FILE_ENABLED);
+ 
+diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
+index a87c654f4e..46ba108266 100644
+--- a/src/test/test-load-fragment.c
++++ b/src/test/test-load-fragment.c
+@@ -43,7 +43,7 @@ TEST_RET(unit_file_get_set) {
+         h = hashmap_new(&string_hash_ops);
+         assert_se(h);
+ 
+-        r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
++        r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
+         if (IN_SET(r, -EPERM, -EACCES))
+                 return log_tests_skipped_errno(r, "unit_file_get_list");
+ 
+@@ -102,7 +102,7 @@ TEST(config_parse_exec) {
+         _cleanup_(manager_freep) Manager *m = NULL;
+         _cleanup_(unit_freep) Unit *u = NULL;
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r)) {
+                 log_notice_errno(r, "Skipping test: manager_new: %m");
+                 return;
+@@ -461,7 +461,7 @@ TEST(config_parse_log_extra_fields) {
+         _cleanup_(unit_freep) Unit *u = NULL;
+         ExecContext c = {};
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r)) {
+                 log_notice_errno(r, "Skipping test: manager_new: %m");
+                 return;
+@@ -544,56 +544,56 @@ TEST(install_printf, .sd_booted = true) {
+                 strcpy(i.path, d2);                                     \
+         } while (false)
+ 
+-        expect(UNIT_FILE_SYSTEM, i, "%n", "name.service");
+-        expect(UNIT_FILE_SYSTEM, i, "%N", "name");
+-        expect(UNIT_FILE_SYSTEM, i, "%p", "name");
+-        expect(UNIT_FILE_SYSTEM, i, "%i", "");
+-        expect(UNIT_FILE_SYSTEM, i, "%j", "name");
+-        expect(UNIT_FILE_SYSTEM, i, "%g", "root");
+-        expect(UNIT_FILE_SYSTEM, i, "%G", "0");
+-        expect(UNIT_FILE_SYSTEM, i, "%u", "root");
+-        expect(UNIT_FILE_SYSTEM, i, "%U", "0");
+-
+-        expect(UNIT_FILE_SYSTEM, i, "%m", mid);
+-        expect(UNIT_FILE_SYSTEM, i, "%b", bid);
+-        expect(UNIT_FILE_SYSTEM, i, "%H", host);
+-
+-        expect(UNIT_FILE_SYSTEM, i2, "%g", "root");
+-        expect(UNIT_FILE_SYSTEM, i2, "%G", "0");
+-        expect(UNIT_FILE_SYSTEM, i2, "%u", "root");
+-        expect(UNIT_FILE_SYSTEM, i2, "%U", "0");
+-
+-        expect(UNIT_FILE_USER, i2, "%g", group);
+-        expect(UNIT_FILE_USER, i2, "%G", gid);
+-        expect(UNIT_FILE_USER, i2, "%u", user);
+-        expect(UNIT_FILE_USER, i2, "%U", uid);
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%n", "name.service");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%N", "name");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%p", "name");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%i", "");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%j", "name");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%g", "root");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%G", "0");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%u", "root");
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%U", "0");
++
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%m", mid);
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%b", bid);
++        expect(LOOKUP_SCOPE_SYSTEM, i, "%H", host);
++
++        expect(LOOKUP_SCOPE_SYSTEM, i2, "%g", "root");
++        expect(LOOKUP_SCOPE_SYSTEM, i2, "%G", "0");
++        expect(LOOKUP_SCOPE_SYSTEM, i2, "%u", "root");
++        expect(LOOKUP_SCOPE_SYSTEM, i2, "%U", "0");
++
++        expect(LOOKUP_SCOPE_USER, i2, "%g", group);
++        expect(LOOKUP_SCOPE_USER, i2, "%G", gid);
++        expect(LOOKUP_SCOPE_USER, i2, "%u", user);
++        expect(LOOKUP_SCOPE_USER, i2, "%U", uid);
+ 
+         /* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called,
+          * even though the call is inside of a conditional where the pointer is checked. :( */
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wnonnull"
+-        expect(UNIT_FILE_GLOBAL, i2, "%g", NULL);
+-        expect(UNIT_FILE_GLOBAL, i2, "%G", NULL);
+-        expect(UNIT_FILE_GLOBAL, i2, "%u", NULL);
+-        expect(UNIT_FILE_GLOBAL, i2, "%U", NULL);
++        expect(LOOKUP_SCOPE_GLOBAL, i2, "%g", NULL);
++        expect(LOOKUP_SCOPE_GLOBAL, i2, "%G", NULL);
++        expect(LOOKUP_SCOPE_GLOBAL, i2, "%u", NULL);
++        expect(LOOKUP_SCOPE_GLOBAL, i2, "%U", NULL);
+ #pragma GCC diagnostic pop
+ 
+-        expect(UNIT_FILE_SYSTEM, i3, "%n", "name@inst.service");
+-        expect(UNIT_FILE_SYSTEM, i3, "%N", "name@inst");
+-        expect(UNIT_FILE_SYSTEM, i3, "%p", "name");
+-        expect(UNIT_FILE_USER, i3, "%g", group);
+-        expect(UNIT_FILE_USER, i3, "%G", gid);
+-        expect(UNIT_FILE_USER, i3, "%u", user);
+-        expect(UNIT_FILE_USER, i3, "%U", uid);
+-
+-        expect(UNIT_FILE_SYSTEM, i3, "%m", mid);
+-        expect(UNIT_FILE_SYSTEM, i3, "%b", bid);
+-        expect(UNIT_FILE_SYSTEM, i3, "%H", host);
+-
+-        expect(UNIT_FILE_USER, i4, "%g", group);
+-        expect(UNIT_FILE_USER, i4, "%G", gid);
+-        expect(UNIT_FILE_USER, i4, "%u", user);
+-        expect(UNIT_FILE_USER, i4, "%U", uid);
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%n", "name@inst.service");
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%N", "name@inst");
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%p", "name");
++        expect(LOOKUP_SCOPE_USER, i3, "%g", group);
++        expect(LOOKUP_SCOPE_USER, i3, "%G", gid);
++        expect(LOOKUP_SCOPE_USER, i3, "%u", user);
++        expect(LOOKUP_SCOPE_USER, i3, "%U", uid);
++
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%m", mid);
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%b", bid);
++        expect(LOOKUP_SCOPE_SYSTEM, i3, "%H", host);
++
++        expect(LOOKUP_SCOPE_USER, i4, "%g", group);
++        expect(LOOKUP_SCOPE_USER, i4, "%G", gid);
++        expect(LOOKUP_SCOPE_USER, i4, "%u", user);
++        expect(LOOKUP_SCOPE_USER, i4, "%U", uid);
+ }
+ 
+ static uint64_t make_cap(int cap) {
+@@ -822,7 +822,7 @@ TEST(config_parse_unit_env_file) {
+         _cleanup_strv_free_ char **files = NULL;
+         int r;
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r)) {
+                 log_notice_errno(r, "Skipping test: manager_new: %m");
+                 return;
+@@ -955,7 +955,7 @@ TEST(unit_is_recursive_template_dependency) {
+         Unit *u;
+         int r;
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r)) {
+                 log_notice_errno(r, "Skipping test: manager_new: %m");
+                 return;
+diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c
+index 2c30260f7b..8d25e5f7b7 100644
+--- a/src/test/test-path-lookup.c
++++ b/src/test/test-path-lookup.c
+@@ -10,7 +10,7 @@
+ #include "strv.h"
+ #include "tests.h"
+ 
+-static void test_paths_one(UnitFileScope scope) {
++static void test_paths_one(LookupScope scope) {
+         char template[] = "/tmp/test-path-lookup.XXXXXXX";
+ 
+         _cleanup_(lookup_paths_free) LookupPaths lp_without_env = {};
+@@ -36,9 +36,9 @@ static void test_paths_one(UnitFileScope scope) {
+ }
+ 
+ TEST(paths) {
+-        test_paths_one(UNIT_FILE_SYSTEM);
+-        test_paths_one(UNIT_FILE_USER);
+-        test_paths_one(UNIT_FILE_GLOBAL);
++        test_paths_one(LOOKUP_SCOPE_SYSTEM);
++        test_paths_one(LOOKUP_SCOPE_USER);
++        test_paths_one(LOOKUP_SCOPE_GLOBAL);
+ }
+ 
+ TEST(user_and_global_paths) {
+@@ -50,8 +50,8 @@ TEST(user_and_global_paths) {
+         assert_se(unsetenv("XDG_DATA_DIRS") == 0);
+         assert_se(unsetenv("XDG_CONFIG_DIRS") == 0);
+ 
+-        assert_se(lookup_paths_init(&lp_global, UNIT_FILE_GLOBAL, 0, NULL) == 0);
+-        assert_se(lookup_paths_init(&lp_user, UNIT_FILE_USER, 0, NULL) == 0);
++        assert_se(lookup_paths_init(&lp_global, LOOKUP_SCOPE_GLOBAL, 0, NULL) == 0);
++        assert_se(lookup_paths_init(&lp_user, LOOKUP_SCOPE_USER, 0, NULL) == 0);
+         g = lp_global.search_path;
+         u = lp_user.search_path;
+ 
+@@ -72,7 +72,7 @@ TEST(user_and_global_paths) {
+                 log_info("+ %s", *p);
+ }
+ 
+-static void test_generator_binary_paths_one(UnitFileScope scope) {
++static void test_generator_binary_paths_one(LookupScope scope) {
+         char template[] = "/tmp/test-path-lookup.XXXXXXX";
+ 
+         _cleanup_strv_free_ char **gp_without_env = NULL;
+@@ -88,13 +88,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
+         assert_se(unsetenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH") == 0);
+ 
+         gp_without_env = generator_binary_paths(scope);
+-        env_gp_without_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
++        env_gp_without_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
+ 
+-        log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
++        log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
+         STRV_FOREACH(dir, gp_without_env)
+                 log_info("        %s", *dir);
+ 
+-        log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
++        log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
+         STRV_FOREACH(dir, env_gp_without_env)
+                 log_info("        %s", *dir);
+ 
+@@ -107,13 +107,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
+         assert_se(setenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH", systemd_env_generator_path, 1) == 0);
+ 
+         gp_with_env = generator_binary_paths(scope);
+-        env_gp_with_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
++        env_gp_with_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
+ 
+-        log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
++        log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
+         STRV_FOREACH(dir, gp_with_env)
+                 log_info("        %s", *dir);
+ 
+-        log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
++        log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
+         STRV_FOREACH(dir, env_gp_with_env)
+                 log_info("        %s", *dir);
+ 
+@@ -122,8 +122,8 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
+ }
+ 
+ TEST(generator_binary_paths) {
+-        test_generator_binary_paths_one(UNIT_FILE_SYSTEM);
+-        test_generator_binary_paths_one(UNIT_FILE_USER);
++        test_generator_binary_paths_one(LOOKUP_SCOPE_SYSTEM);
++        test_generator_binary_paths_one(LOOKUP_SCOPE_USER);
+ }
+ 
+ DEFINE_TEST_MAIN(LOG_DEBUG);
+diff --git a/src/test/test-path.c b/src/test/test-path.c
+index 2690dc0aa4..7fb1f7363c 100644
+--- a/src/test/test-path.c
++++ b/src/test/test-path.c
+@@ -33,7 +33,7 @@ static int setup_test(Manager **m) {
+         if (r == -ENOMEDIUM)
+                 return log_tests_skipped("cgroupfs not available");
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
+         if (manager_errno_skip_test(r))
+                 return log_tests_skipped_errno(r, "manager_new");
+         assert_se(r >= 0);
+diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c
+index 35f7be491a..721c4b61a1 100644
+--- a/src/test/test-sched-prio.c
++++ b/src/test/test-sched-prio.c
+@@ -30,7 +30,7 @@ int main(int argc, char *argv[]) {
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
+         if (manager_errno_skip_test(r))
+                 return log_tests_skipped_errno(r, "manager_new");
+         assert_se(r >= 0);
+diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c
+index c5c5477f69..b5f8eb9357 100644
+--- a/src/test/test-socket-bind.c
++++ b/src/test/test-socket-bind.c
+@@ -136,7 +136,7 @@ int main(int argc, char *argv[]) {
+         assert_se(set_unit_path(unit_dir) >= 0);
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+         assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+ 
+         assert_se(test_socket_bind(m, "socket_bind_test.service", netcat_path, "2000", STRV_MAKE("2000"), STRV_MAKE("any")) >= 0);
+diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c
+index dd47f0285e..71fb06963c 100644
+--- a/src/test/test-specifier.c
++++ b/src/test/test-specifier.c
+@@ -46,7 +46,7 @@ TEST(specifier_escape_strv) {
+ static const Specifier specifier_table[] = {
+         COMMON_SYSTEM_SPECIFIERS,
+ 
+-        COMMON_CREDS_SPECIFIERS(UNIT_FILE_USER),
++        COMMON_CREDS_SPECIFIERS(LOOKUP_SCOPE_USER),
+         { 'h', specifier_user_home,       NULL },
+ 
+         COMMON_TMP_SPECIFIERS,
+diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
+index 261bd7412f..dffa2822e6 100644
+--- a/src/test/test-unit-file.c
++++ b/src/test/test-unit-file.c
+@@ -35,7 +35,7 @@ TEST(unit_file_build_name_map) {
+ 
+         ids = strv_skip(saved_argv, 1);
+ 
+-        assert_se(lookup_paths_init(&lp, UNIT_FILE_SYSTEM, 0, NULL) >= 0);
++        assert_se(lookup_paths_init(&lp, LOOKUP_SCOPE_SYSTEM, 0, NULL) >= 0);
+ 
+         assert_se(unit_file_build_name_map(&lp, &mtime, &unit_ids, &unit_names, NULL) == 1);
+ 
+diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
+index b6137333aa..90539f108f 100644
+--- a/src/test/test-unit-name.c
++++ b/src/test/test-unit-name.c
+@@ -248,7 +248,7 @@ TEST_RET(unit_printf, .sd_booted = true) {
+         assert_se(get_home_dir(&home) >= 0);
+         assert_se(get_shell(&shell) >= 0);
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r))
+                 return log_tests_skipped_errno(r, "manager_new");
+         assert_se(r == 0);
+diff --git a/src/test/test-unit-serialize.c b/src/test/test-unit-serialize.c
+index 3ef15f3b1e..f84435f480 100644
+--- a/src/test/test-unit-serialize.c
++++ b/src/test/test-unit-serialize.c
+@@ -31,7 +31,7 @@ TEST(deserialize_exec_command) {
+         _cleanup_(manager_freep) Manager *m = NULL;
+         int r;
+ 
+-        r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
++        r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
+         if (manager_errno_skip_test(r)) {
+                 log_notice_errno(r, "Skipping test: manager_new: %m");
+                 return;
+diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c
+index 885ed802d4..8c355c1d5f 100644
+--- a/src/test/test-watch-pid.c
++++ b/src/test/test-watch-pid.c
+@@ -26,7 +26,7 @@ int main(int argc, char *argv[]) {
+ 
+         assert_se(runtime_dir = setup_fake_runtime_dir());
+ 
+-        assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
++        assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+         assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
+ 
+         assert_se(a = unit_new(m, sizeof(Service)));
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 17b9c6ab9a..023207bc60 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -2938,7 +2938,7 @@ static int parse_line(
+                 { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE)   },
+                 { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
+ 
+-                COMMON_CREDS_SPECIFIERS(arg_user ? UNIT_FILE_USER : UNIT_FILE_SYSTEM),
++                COMMON_CREDS_SPECIFIERS(arg_user ? LOOKUP_SCOPE_USER : LOOKUP_SCOPE_SYSTEM),
+                 COMMON_TMP_SPECIFIERS,
+                 {}
+         };
diff --git a/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch b/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch
new file mode 100644
index 0000000..295b41d
--- /dev/null
+++ b/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch
@@ -0,0 +1,89 @@
+From dc017e5c51e61ddd96d2a94f35223ac7788c8454 Mon Sep 17 00:00:00 2001
+From: Andreas Rammhold <andreas@rammhold.de>
+Date: Wed, 18 Aug 2021 19:10:08 +0200
+Subject: [PATCH] core: handle lookup paths being symlinks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With a recent change paths leaving the statically known lookup paths would be
+treated differently then those that remained within those. That was done
+(AFAIK) to consistently handle alias names. Unfortunately that means that on
+some distributions, especially those where /etc/ consists mostly of symlinks,
+would trigger that new detection for every single unit in /etc/systemd/system.
+The reason for that is that the units directory itself is already a symlink.
+
+Rebased-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
+(cherry picked from commit 66c38cd0536c50769eba6abccf383bbaceb268ca)
+
+Resolves: #2082131
+---
+ src/basic/unit-file.c | 41 ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 40 insertions(+), 1 deletion(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 7c1ae515e1..83c29bb25f 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -388,6 +388,7 @@ int unit_file_build_name_map(
+ 
+         _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL;
+         _cleanup_set_free_free_ Set *paths = NULL;
++        _cleanup_strv_free_ char **expanded_search_path = NULL;
+         uint64_t timestamp_hash;
+         int r;
+ 
+@@ -406,6 +407,44 @@ int unit_file_build_name_map(
+                         return log_oom();
+         }
+ 
++        /* Go over all our search paths, chase their symlinks and store the result in the
++         * expanded_search_path list.
++         *
++         * This is important for cases where any of the unit directories itself are symlinks into other
++         * directories and would therefore cause all of the unit files to be recognized as linked units.
++         *
++         * This is important for distributions such as NixOS where most paths in /etc/ are symlinks to some
++         * other location on the filesystem (e.g.  into /nix/store/).
++         *
++         * Search paths are ordered by priority (highest first), and we need to maintain this order.
++         * If a resolved path is already in the list, we don't need to include.
++         *
++         * Note that we build a list that contains both the original paths and the resolved symlinks:
++         * we need the latter for the case where the directory is symlinked, as described above, and
++         * the former for the case where some unit file alias is a dangling symlink that points to one
++         * of the "original" directories (and can't be followed).
++         */
++        STRV_FOREACH(dir, lp->search_path) {
++                _cleanup_free_ char *resolved_dir = NULL;
++
++                r = strv_extend(&expanded_search_path, *dir);
++                if (r < 0)
++                        return log_oom();
++
++                r = chase_symlinks(*dir, NULL, 0, &resolved_dir, NULL);
++                if (r < 0) {
++                        if (r != -ENOENT)
++                                log_warning_errno(r, "Failed to resolve symlink %s, ignoring: %m", *dir);
++                        continue;
++                }
++
++                if (strv_contains(expanded_search_path, resolved_dir))
++                        continue;
++
++                if (strv_consume(&expanded_search_path, TAKE_PTR(resolved_dir)) < 0)
++                        return log_oom();
++        }
++
+         STRV_FOREACH(dir, lp->search_path) {
+                 _cleanup_closedir_ DIR *d = NULL;
+ 
+@@ -504,7 +543,7 @@ int unit_file_build_name_map(
+                                 /* We don't explicitly check for alias loops here. unit_ids_map_get() which
+                                  * limits the number of hops should be used to access the map. */
+ 
+-                                r = unit_file_resolve_symlink(lp->root_dir, lp->search_path,
++                                r = unit_file_resolve_symlink(lp->root_dir, expanded_search_path,
+                                                               *dir, dirfd(d), de->d_name,
+                                                               /* resolve_destination_target= */ false,
+                                                               &dst);
diff --git a/SOURCES/0206-shared-install-use-correct-cleanup-function.patch b/SOURCES/0206-shared-install-use-correct-cleanup-function.patch
new file mode 100644
index 0000000..5a0e3e3
--- /dev/null
+++ b/SOURCES/0206-shared-install-use-correct-cleanup-function.patch
@@ -0,0 +1,27 @@
+From dc7ddca892c329ef24b7e9098134f5cae50e09a0 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 3 May 2022 01:09:21 +0900
+Subject: [PATCH] shared/install: use correct cleanup function
+
+Fixes #23250.
+
+(cherry picked from commit 0b6bf4b674a63e9951dcffbd0b95de7377038690)
+
+Related: #2082131
+---
+ src/shared/install.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index fa7bbdd93a..96d64d32bb 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2804,7 +2804,7 @@ static int normalize_linked_files(
+          * but operates on real unit names. For each argument we we look up the actual path
+          * where the unit is found. This way linked units can be reenabled successfully. */
+ 
+-        _cleanup_free_ char **files = NULL, **names = NULL;
++        _cleanup_strv_free_ char **files = NULL, **names = NULL;
+         int r;
+ 
+         STRV_FOREACH(a, names_or_paths) {
diff --git a/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch b/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
new file mode 100644
index 0000000..1714906
--- /dev/null
+++ b/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
@@ -0,0 +1,109 @@
+From 07a2159c8dc575745c967499b068209e8926ea79 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 23 Mar 2022 17:34:12 +0100
+Subject: [PATCH] udev/net_id: avoid slot based names only for single function
+ devices
+
+If we have two or more devices that share the same slot but they are
+also multifunction then it is OK to use the slot information even if it
+is the same for all of them. Name conflict will be avoided because we
+will append function number and form names like, ens1f1, ens1f2...
+
+(cherry picked from commit 66425daf2c68793adf24a48a26d58add8662e83f)
+
+Resolves: #2073003
+---
+ man/systemd.net-naming-scheme.xml |  7 ++++++-
+ src/shared/netif-naming-scheme.h  | 31 ++++++++++++++++---------------
+ src/udev/udev-builtin-net_id.c    | 11 +++++++++--
+ 3 files changed, 31 insertions(+), 18 deletions(-)
+
+diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
+index 942ef572ff..73d08b681d 100644
+--- a/man/systemd.net-naming-scheme.xml
++++ b/man/systemd.net-naming-scheme.xml
+@@ -406,7 +406,12 @@
+         <varlistentry>
+           <term><constant>rhel-9.0</constant></term>
+ 
+-          <listitem><para>Same as naming scheme <constant>v250</constant>.</para>
++          <listitem><para>Since version <constant>v247</constant> we no longer set
++          <varname>ID_NET_NAME_SLOT</varname> if we detect that a PCI device associated with a slot is a PCI
++          bridge as that would create naming conflict when there are more child devices on that bridge. Now,
++          this is relaxed and we will use slot information to generate the name based on it but only if
++          the PCI device has multiple functions. This is safe because distinct function number is a part of
++          the device name for multifunction devices.</para>
+           </listitem>
+         </varlistentry>
+ 
+diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
+index f765db6ef2..5c86cb4545 100644
+--- a/src/shared/netif-naming-scheme.h
++++ b/src/shared/netif-naming-scheme.h
+@@ -22,20 +22,21 @@
+  * OS versions, but not fully stabilize them. */
+ typedef enum NamingSchemeFlags {
+         /* First, the individual features */
+-        NAMING_SR_IOV_V            = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
+-        NAMING_NPAR_ARI            = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
+-        NAMING_INFINIBAND          = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
+-        NAMING_ZERO_ACPI_INDEX     = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
+-        NAMING_ALLOW_RERENAMES     = 1 << 4, /* Allow re-renaming of devices, see #9006 */
+-        NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
+-        NAMING_NETDEVSIM           = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
+-        NAMING_LABEL_NOPREFIX      = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
+-        NAMING_NSPAWN_LONG_HASH    = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
+-        NAMING_BRIDGE_NO_SLOT      = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
+-        NAMING_SLOT_FUNCTION_ID    = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
+-        NAMING_16BIT_INDEX         = 1 << 11, /* Allow full 16-bit for the onboard index */
+-        NAMING_REPLACE_STRICTLY    = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
+-        NAMING_XEN_VIF             = 1 << 13, /* GEnerate names for Xen netfront devices */
++        NAMING_SR_IOV_V                  = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */
++        NAMING_NPAR_ARI                  = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */
++        NAMING_INFINIBAND                = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */
++        NAMING_ZERO_ACPI_INDEX           = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */
++        NAMING_ALLOW_RERENAMES           = 1 << 4, /* Allow re-renaming of devices, see #9006 */
++        NAMING_STABLE_VIRTUAL_MACS       = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */
++        NAMING_NETDEVSIM                 = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */
++        NAMING_LABEL_NOPREFIX            = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */
++        NAMING_NSPAWN_LONG_HASH          = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation  */
++        NAMING_BRIDGE_NO_SLOT            = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */
++        NAMING_SLOT_FUNCTION_ID          = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */
++        NAMING_16BIT_INDEX               = 1 << 11, /* Allow full 16-bit for the onboard index */
++        NAMING_REPLACE_STRICTLY          = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */
++        NAMING_XEN_VIF                   = 1 << 13, /* Generate names for Xen netfront devices */
++        NAMING_BRIDGE_MULTIFUNCTION_SLOT = 1 << 14, /* Use PCI hotplug slot information associated with bridge, but only if PCI device is multifunction */
+ 
+         /* And now the masks that combine the features above */
+         NAMING_V238 = 0,
+@@ -47,7 +48,7 @@ typedef enum NamingSchemeFlags {
+         NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT,
+         NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
+         NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF,
+-        NAMING_RHEL_9_0 = NAMING_V250,
++        NAMING_RHEL_9_0 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT,
+ 
+         EXTRA_NET_NAMING_SCHEMES
+ 
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 65e003eb15..673ed7a7ca 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -451,8 +451,15 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) {
+                                  * devices that will try to claim the same index and that would create name
+                                  * collision. */
+                                 if (naming_scheme_has(NAMING_BRIDGE_NO_SLOT) && is_pci_bridge(hotplug_slot_dev)) {
+-                                        log_device_debug(dev, "Not using slot information because the PCI device is a bridge.");
+-                                        return 0;
++                                        if (naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT) && !is_pci_multifunction(names->pcidev)) {
++                                                log_device_debug(dev, "Not using slot information because the PCI device associated with the hotplug slot is a bridge and the PCI device has single function.");
++                                                return 0;
++                                        }
++
++                                        if (!naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT)) {
++                                                log_device_debug(dev, "Not using slot information because the PCI device is a bridge.");
++                                                return 0;
++                                        }
+                                 }
+ 
+                                 break;
diff --git a/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch b/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch
new file mode 100644
index 0000000..b406c4a
--- /dev/null
+++ b/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch
@@ -0,0 +1,489 @@
+From 40806a5f552c8d223d1d7ff1878dcf57e4d817c5 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 1 Jun 2022 08:56:08 +0900
+Subject: [PATCH] test: import logind test from debian/ubuntu test suite
+
+(cherry picked from commit 9c94ab0f6ff22da4278a6e9a93ddc480607c55ac)
+
+Related: #2087652
+---
+ test/TEST-35-LOGIN/Makefile     |   1 +
+ test/TEST-35-LOGIN/test.sh      |  10 +
+ test/test-functions             |   8 +
+ test/units/testsuite-35.service |  10 +
+ test/units/testsuite-35.sh      | 379 ++++++++++++++++++++++++++++++++
+ 5 files changed, 408 insertions(+)
+ create mode 120000 test/TEST-35-LOGIN/Makefile
+ create mode 100755 test/TEST-35-LOGIN/test.sh
+ create mode 100644 test/units/testsuite-35.service
+ create mode 100755 test/units/testsuite-35.sh
+
+diff --git a/test/TEST-35-LOGIN/Makefile b/test/TEST-35-LOGIN/Makefile
+new file mode 120000
+index 0000000000..e9f93b1104
+--- /dev/null
++++ b/test/TEST-35-LOGIN/Makefile
+@@ -0,0 +1 @@
++../TEST-01-BASIC/Makefile
+\ No newline at end of file
+diff --git a/test/TEST-35-LOGIN/test.sh b/test/TEST-35-LOGIN/test.sh
+new file mode 100755
+index 0000000000..9762410fa3
+--- /dev/null
++++ b/test/TEST-35-LOGIN/test.sh
+@@ -0,0 +1,10 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="LOGIN"
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++do_test "$@"
+diff --git a/test/test-functions b/test/test-functions
+index 98efd047d7..d71e2a3328 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -165,10 +165,12 @@ BASICTOOLS=(
+     mv
+     nc
+     nproc
++    pkill
+     readlink
+     rev
+     rm
+     rmdir
++    rmmod
+     sed
+     seq
+     setfattr
+@@ -193,6 +195,8 @@ BASICTOOLS=(
+     umount
+     uname
+     unshare
++    useradd
++    userdel
+     wc
+     xargs
+     xzcat
+@@ -921,6 +925,8 @@ install_modules() {
+     instmods vfat
+     instmods nls_ascii =nls
+     instmods dummy
++    # for TEST-35-LOGIN
++    instmods scsi_debug uinput
+ 
+     if get_bool "$LOOKS_LIKE_SUSE"; then
+         instmods ext4
+@@ -1702,6 +1708,8 @@ install_basic_tools() {
+     image_install -o sushell
+     # in Debian ldconfig is just a shell script wrapper around ldconfig.real
+     image_install -o ldconfig.real
++    # for TEST-35-LOGIN
++    image_install -o evemu-device evemu-event
+ }
+ 
+ install_debug_tools() {
+diff --git a/test/units/testsuite-35.service b/test/units/testsuite-35.service
+new file mode 100644
+index 0000000000..556a57a384
+--- /dev/null
++++ b/test/units/testsuite-35.service
+@@ -0,0 +1,10 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=TEST-35-LOGIN
++
++[Service]
++ExecStartPre=rm -f /failed /testok
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
++StandardOutput=journal+console
++StandardError=journal+console
++Type=oneshot
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+new file mode 100755
+index 0000000000..0a7198c3fe
+--- /dev/null
++++ b/test/units/testsuite-35.sh
+@@ -0,0 +1,379 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -eux
++set -o pipefail
++
++test_enable_debug() {
++    mkdir -p /run/systemd/system/systemd-logind.service.d
++    cat >/run/systemd/system/systemd-logind.service.d/debug.conf <<EOF
++[Service]
++Environment=SYSTEMD_LOG_LEVEL=debug
++EOF
++    systemctl daemon-reload
++}
++
++test_properties() {
++    mkdir -p /run/systemd/logind.conf.d
++
++    cat >/run/systemd/logind.conf.d/kill-user-processes.conf <<EOF
++[Login]
++KillUserProcesses=no
++EOF
++
++    systemctl restart systemd-logind.service
++    r=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)
++    if [[ "$r" != "b false" ]]; then
++        echo "Unexpected KillUserProcesses property '$r', expected='b false'" >&2
++        exit 1
++    fi
++
++    cat >/run/systemd/logind.conf.d/kill-user-processes.conf <<EOF
++[Login]
++KillUserProcesses=yes
++EOF
++
++    systemctl restart systemd-logind.service
++    r=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)
++    if [[ "$r" != "b true" ]]; then
++        echo "Unexpected KillUserProcesses property '$r', expected='b true'" >&2
++        exit 1
++    fi
++
++    rm -rf /run/systemd/logind.conf.d
++}
++
++test_started() {
++    systemctl restart systemd-logind.service
++
++    # should start at boot, not with D-BUS activation
++    LOGINDPID=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++
++    # loginctl should succeed
++    loginctl --no-pager
++}
++
++# args: <timeout>
++wait_suspend() {
++    timeout="$1"
++    while [[ $timeout -gt 0 && ! -e /run/suspend.flag ]]; do
++        sleep 1
++        timeout=$((timeout - 1))
++    done
++    if [[ ! -e /run/suspend.flag ]]; then
++        echo "closing lid did not cause suspend" >&2
++        exit 1
++    fi
++    rm /run/suspend.flag
++}
++
++test_suspend_tear_down() {
++    set +e
++
++    kill "$KILL_PID"
++}
++
++test_suspend_on_lid() {
++    if systemd-detect-virt --quiet --container; then
++        echo "Skipping suspend test in container"
++        return
++    fi
++    if ! grep -s -q mem /sys/power/state; then
++        echo "suspend not supported on this testbed, skipping"
++        return
++    fi
++    if ! command -v evemu-device &>/dev/null; then
++        echo "command evemu-device not found, skipping"
++        return
++    fi
++    if ! command -v evemu-event &>/dev/null; then
++        echo "command evemu-event not found, skipping"
++        return
++    fi
++
++    KILL_PID=
++    trap test_suspend_tear_down EXIT
++
++    # create fake suspend
++    mkdir -p /run/systemd/system/systemd-suspend.service.d
++    cat >/run/systemd/system/systemd-suspend.service.d/override.conf <<EOF
++[Service]
++ExecStart=
++ExecStart=touch /run/suspend.flag
++EOF
++    systemctl daemon-reload
++
++    # create fake lid switch
++    mkdir -p /run/udev/rules.d
++    cat >/run/udev/rules.d/70-logindtest-lid.rules <<EOF
++SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="Fake Lid Switch", TAG+="power-switch"
++EOF
++    udevadm control --reload
++
++    cat >/run/lidswitch.evemu <<EOF
++# EVEMU 1.2
++# Input device name: "Lid Switch"
++# Input device ID: bus 0x19 vendor 0000 product 0x05 version 0000
++# Supported events:
++#   Event type 0 (EV_SYN)
++#     Event code 0 (SYN_REPORT)
++#     Event code 5 (FF_STATUS_MAX)
++#   Event type 5 (EV_SW)
++#     Event code 0 (SW_LID)
++# Properties:
++N: Fake Lid Switch
++I: 0019 0000 0005 0000
++P: 00 00 00 00 00 00 00 00
++B: 00 21 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 01 00 00 00 00 00 00 00 00
++B: 02 00 00 00 00 00 00 00 00
++B: 03 00 00 00 00 00 00 00 00
++B: 04 00 00 00 00 00 00 00 00
++B: 05 01 00 00 00 00 00 00 00
++B: 11 00 00 00 00 00 00 00 00
++B: 12 00 00 00 00 00 00 00 00
++B: 15 00 00 00 00 00 00 00 00
++B: 15 00 00 00 00 00 00 00 00
++EOF
++
++    evemu-device /run/lidswitch.evemu &
++    KILL_PID="$!"
++
++    for ((i=0;i<20;i++)); do
++        if (( i != 0 )); then sleep .5; fi
++
++        INPUT_NAME=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :)
++        if [[ -n "$INPUT_NAME" ]]; then break; fi
++    done
++    if [[ -z "$INPUT_NAME" ]]; then
++        echo "cannot find fake lid switch." >&2
++        exit 1
++    fi
++    INPUT_NAME=${INPUT_NAME%/device/name}
++    LID_DEV=/dev/${INPUT_NAME#/sys/class/}
++    udevadm info --wait-for-initialization=10s "$LID_DEV"
++    udevadm settle
++
++    # close lid
++    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1
++    # need to wait for 30s suspend inhibition after boot
++    wait_suspend 31
++    # open lid again
++    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0
++
++    # waiting for 30s inhibition time between suspends
++    sleep 30
++
++    # now closing lid should cause instant suspend
++    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1
++    wait_suspend 2
++    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0
++
++    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++    if [[ "$P" != "$LOGINDPID" ]]; then
++        echo "logind crashed" >&2
++        exit 1
++    fi
++
++    test_suspend_tear_down
++    trap - EXIT
++}
++
++test_shutdown() {
++    # scheduled shutdown with wall message
++    shutdown 2>&1
++    sleep 5
++    shutdown -c || :
++    # logind should still be running
++    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++    if [[ "$P" != "$LOGINDPID" ]]; then
++        echo "logind crashed" >&2
++        exit 1
++    fi
++
++    # scheduled shutdown without wall message
++    shutdown --no-wall 2>&1
++    sleep 5
++    shutdown -c --no-wall || true
++    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++    if [[ "$P" != "$LOGINDPID" ]]; then
++        echo "logind crashed" >&2
++        exit 1
++    fi
++}
++
++test_session_tear_down() {
++    set +e
++
++    rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
++    udevadm control --reload
++
++    systemctl stop getty@tty2.service
++    rm -rf /run/systemd/system/getty@tty2.service.d
++    systemctl daemon-reload
++
++    pkill -u logind-test-user
++    userdel logind-test-user
++
++    rmmod scsi_debug
++}
++
++check_session() {
++    loginctl
++    if [[ $(loginctl --no-legend | grep -c "logind-test-user") != 1 ]]; then
++        echo "no session or multile sessions for logind-test-user." >&2
++        return 1
++    fi
++
++    SEAT=$(loginctl --no-legend | grep 'logind-test-user *seat' | awk '{ print $4 }')
++    if [[ -z "$SEAT" ]]; then
++        echo "no seat found for user logind-test-user" >&2
++        return 1
++    fi
++
++    SESSION=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')
++    if [[ -z "$SESSION" ]]; then
++        echo "no session found for user logind-test-user" >&2
++        return 1
++    fi
++
++    loginctl session-status "$SESSION"
++    loginctl session-status "$SESSION" | grep -q "Unit: session-${SESSION}\.scope"
++    LEADER_PID=$(loginctl session-status "$SESSION" | grep "Leader:" | awk '{ print $2 }')
++    if [[ -z "$LEADER_PID" ]]; then
++        echo "cannot found leader process for session $SESSION" >&2
++        return 1
++    fi
++
++    # cgroup v1: "1:name=systemd:/user.slice/..."; unified hierarchy: "0::/user.slice"
++    if ! grep -q -E '(name=systemd|^0:):.*session.*scope' /proc/"$LEADER_PID"/cgroup; then
++        echo "FAIL: process $LEADER_PID is not in the session cgroup" >&2
++        cat /proc/self/cgroup
++        return 1
++    fi
++}
++
++test_session() {
++    if systemd-detect-virt --quiet --container; then
++        echo " * Skipping ACL tests in container"
++        return
++    fi
++
++    trap test_session_tear_down EXIT
++
++    # add user
++    useradd -s /bin/bash logind-test-user
++
++    # login with the test user to start a session
++    mkdir -p /run/systemd/system/getty@tty2.service.d
++    cat >/run/systemd/system/getty@tty2.service.d/override.conf <<EOF
++[Service]
++Type=simple
++ExecStart=
++ExecStart=-/sbin/agetty --autologin logind-test-user --noclear %I $TERM
++EOF
++    systemctl daemon-reload
++    systemctl start getty@tty2.service
++
++    # check session
++    ret=1
++    for ((i=0;i<30;i++)); do
++        if (( i != 0)); then sleep 1; fi
++        if check_session; then
++            ret=0
++            break
++        fi
++    done
++    if [[ "$ret" == "1" ]]; then
++        exit 1
++    fi
++
++    # scsi_debug should not be loaded yet
++    if [[ -d /sys/bus/pseudo/drivers/scsi_debug ]]; then
++        echo "scsi_debug module is already loaded." >&2
++        exit 1
++    fi
++
++    # we use scsi_debug to create new devices which we can put ACLs on
++    # tell udev about the tagging, so that logind can pick it up
++    mkdir -p /run/udev/rules.d
++    cat >/run/udev/rules.d/70-logindtest-scsi_debug-user.rules <<EOF
++SUBSYSTEM=="block", ATTRS{model}=="scsi_debug*", TAG+="uaccess"
++EOF
++    udevadm control --reload
++
++    # coldplug: logind started with existing device
++    systemctl stop systemd-logind.service
++    modprobe scsi_debug
++    for ((i=0;i<30;i++)); do
++        if (( i != 0)); then sleep 1; fi
++        if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
++            break
++        fi
++    done
++    if [[ ! -b "$dev" ]]; then
++        echo "cannot find suitable scsi block device" >&2
++        exit 1
++    fi
++    udevadm settle
++    udevadm info "$dev"
++
++    # trigger logind and activate session
++    loginctl activate "$SESSION"
++
++    # check ACL
++    sleep 1
++    if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then
++        echo "$dev has no ACL for user logind-test-user" >&2
++        getfacl -p "$dev" >&2
++        exit 1
++    fi
++
++    # hotplug: new device appears while logind is running
++    rmmod scsi_debug
++    modprobe scsi_debug
++    for ((i=0;i<30;i++)); do
++        if (( i != 0)); then sleep 1; fi
++        if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
++            break
++        fi
++    done
++    if [[ ! -b "$dev" ]]; then
++        echo "cannot find suitable scsi block device" >&2
++        exit 1
++    fi
++    udevadm settle
++
++    # check ACL
++    sleep 1
++    if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then
++        echo "$dev has no ACL for user logind-test-user" >&2
++        getfacl -p "$dev" >&2
++        exit 1
++    fi
++
++    test_session_tear_down
++    trap - EXIT
++}
++
++: >/failed
++
++test_enable_debug
++test_properties
++test_started
++test_suspend_on_lid
++test_shutdown
++test_session
++
++touch /testok
++rm /failed
diff --git a/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch b/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch
new file mode 100644
index 0000000..0e46999
--- /dev/null
+++ b/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch
@@ -0,0 +1,52 @@
+From 41f1f6e87bd9bed458e5391587f1e1b671d383bd Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 10 Jun 2022 12:31:10 +0900
+Subject: [PATCH] test: drop redundant IMAGE_NAME=
+
+If it is not specified, then "default" will be used.
+
+(cherry picked from commit 3d52219390fa2d87938d99ec3bf71e10e101ded6)
+
+Related: #2087652
+---
+ test/TEST-03-JOBS/test.sh         | 1 -
+ test/TEST-17-UDEV/test.sh         | 1 -
+ test/TEST-64-UDEV-STORAGE/test.sh | 1 -
+ 3 files changed, 3 deletions(-)
+
+diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh
+index f827f90865..6a8d3a8a11 100755
+--- a/test/TEST-03-JOBS/test.sh
++++ b/test/TEST-03-JOBS/test.sh
+@@ -4,7 +4,6 @@ set -e
+ 
+ TEST_DESCRIPTION="Job-related tests"
+ TEST_NO_QEMU=1
+-IMAGE_NAME="default"
+ 
+ # shellcheck source=test/test-functions
+ . "${TEST_BASE_DIR:?}/test-functions"
+diff --git a/test/TEST-17-UDEV/test.sh b/test/TEST-17-UDEV/test.sh
+index 079ecfd629..9d91eee204 100755
+--- a/test/TEST-17-UDEV/test.sh
++++ b/test/TEST-17-UDEV/test.sh
+@@ -3,7 +3,6 @@
+ set -e
+ 
+ TEST_DESCRIPTION="UDEV"
+-IMAGE_NAME="default"
+ TEST_NO_NSPAWN=1
+ 
+ # shellcheck source=test/test-functions
+diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh
+index c360c8b661..2a5b5b2dd3 100755
+--- a/test/TEST-64-UDEV-STORAGE/test.sh
++++ b/test/TEST-64-UDEV-STORAGE/test.sh
+@@ -9,7 +9,6 @@
+ set -e
+ 
+ TEST_DESCRIPTION="systemd-udev storage tests"
+-IMAGE_NAME="default"
+ TEST_NO_NSPAWN=1
+ # Save only journals of failing test cases by default (to conserve space)
+ TEST_SAVE_JOURNAL="${TEST_SAVE_JOURNAL:-fail}"
diff --git a/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch b/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch
new file mode 100644
index 0000000..5e6fad5
--- /dev/null
+++ b/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch
@@ -0,0 +1,363 @@
+From 014a660c937c1c5ebfc05667466a16b44e446c60 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 10 Jun 2022 13:55:54 +0900
+Subject: [PATCH] test: import timedated test from debian/ubuntu test suite
+
+(cherry picked from commit 759ed0a2533da8840dea315d07f92e6bb0272cdd)
+
+Related: #2087652
+---
+ test/TEST-45-TIMEDATE/Makefile  |   1 +
+ test/TEST-45-TIMEDATE/test.sh   |  10 ++
+ test/units/assert.sh            |  44 ++++++
+ test/units/testsuite-45.service |  10 ++
+ test/units/testsuite-45.sh      | 246 ++++++++++++++++++++++++++++++++
+ 5 files changed, 311 insertions(+)
+ create mode 120000 test/TEST-45-TIMEDATE/Makefile
+ create mode 100755 test/TEST-45-TIMEDATE/test.sh
+ create mode 100644 test/units/assert.sh
+ create mode 100644 test/units/testsuite-45.service
+ create mode 100755 test/units/testsuite-45.sh
+
+diff --git a/test/TEST-45-TIMEDATE/Makefile b/test/TEST-45-TIMEDATE/Makefile
+new file mode 120000
+index 0000000000..e9f93b1104
+--- /dev/null
++++ b/test/TEST-45-TIMEDATE/Makefile
+@@ -0,0 +1 @@
++../TEST-01-BASIC/Makefile
+\ No newline at end of file
+diff --git a/test/TEST-45-TIMEDATE/test.sh b/test/TEST-45-TIMEDATE/test.sh
+new file mode 100755
+index 0000000000..27edf4a3b9
+--- /dev/null
++++ b/test/TEST-45-TIMEDATE/test.sh
+@@ -0,0 +1,10 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="test timedated"
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++do_test "$@"
+diff --git a/test/units/assert.sh b/test/units/assert.sh
+new file mode 100644
+index 0000000000..db67dad268
+--- /dev/null
++++ b/test/units/assert.sh
+@@ -0,0 +1,44 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++
++# utility functions for shell tests
++
++assert_true() {
++    local rc
++
++    set +e
++    "$@"
++    rc=$?
++    set -e
++    if [[ "$rc" != "0" ]]; then
++        echo "FAIL: command '$*' failed with exit code $rc" >&2
++        exit 1
++    fi
++}
++
++
++assert_eq() {
++    if [[ "$1" != "$2" ]]; then
++        echo "FAIL: expected: '$2' actual: '$1'" >&2
++        exit 1
++    fi
++}
++
++assert_in() {
++    if ! echo "$2" | grep -q "$1"; then
++        echo "FAIL: '$1' not found in:" >&2
++        echo "$2" >&2
++        exit 1
++    fi
++}
++
++assert_rc() {
++    local exp=$1
++    local rc
++    shift
++    set +e
++    "$@"
++    rc=$?
++    set -e
++    assert_eq "$rc" "$exp"
++}
+diff --git a/test/units/testsuite-45.service b/test/units/testsuite-45.service
+new file mode 100644
+index 0000000000..79c0a6f117
+--- /dev/null
++++ b/test/units/testsuite-45.service
+@@ -0,0 +1,10 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=TEST-45-TIMEDATE
++
++[Service]
++ExecStartPre=rm -f /failed /testok
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
++StandardOutput=journal+console
++StandardError=journal+console
++Type=oneshot
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+new file mode 100755
+index 0000000000..ac7860dccd
+--- /dev/null
++++ b/test/units/testsuite-45.sh
+@@ -0,0 +1,246 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++
++set -eux
++set -o pipefail
++
++# shellcheck source=test/units/assert.sh
++. "$(dirname "$0")"/assert.sh
++
++test_timezone() {
++    local ORIG_TZ=
++
++    if [[ -L /etc/localtime ]]; then
++        ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')
++        echo "original tz: $ORIG_TZ"
++    fi
++
++    echo 'timedatectl works'
++    assert_in "Local time:" "$(timedatectl --no-pager)"
++
++    echo 'change timezone'
++    assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" ""
++    assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev"
++    assert_in "Time.*zone: Europe/Kiev (EEST, +" "$(timedatectl --no-pager)"
++
++    if [[ -n "$ORIG_TZ" ]]; then
++        echo 'reset timezone to original'
++        assert_eq "$(timedatectl --no-pager set-timezone "$ORIG_TZ" 2>&1)" ""
++        assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ"
++    fi
++}
++
++restore_adjtime() {
++    if [[ -e /etc/adjtime.bak ]]; then
++        mv /etc/adjtime.bak /etc/adjtime
++    else
++        rm /etc/adjtime
++    fi
++}
++
++check_adjtime_not_exist() {
++    if [[ -e /etc/adjtime ]]; then
++        echo "/etc/adjtime unexpectedly exists." >&2
++        exit 1
++    fi
++}
++
++test_adjtime() {
++    # test setting UTC vs. LOCAL in /etc/adjtime
++    if [[ -e /etc/adjtime ]]; then
++        mv /etc/adjtime /etc/adjtime.bak
++    fi
++
++    trap restore_adjtime EXIT
++
++    echo 'no adjtime file'
++    rm -f /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++
++    echo 'UTC set in adjtime file'
++    printf '0.0 0 0\n0\nUTC\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++UTC"
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'non-zero values in adjtime file'
++    printf '0.1 123 0\n0\nLOCAL\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    assert_eq "$(cat /etc/adjtime)" "0.1 123 0
++0
++UTC"
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.1 123 0
++0
++LOCAL"
++
++    echo 'fourth line adjtime file'
++    printf '0.0 0 0\n0\nLOCAL\nsomethingelse\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++UTC
++somethingelse"
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL
++somethingelse"
++
++    echo 'no final newline in adjtime file'
++    printf '0.0 0 0\n0\nUTC' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0\n0\nUTC' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'only one line in adjtime file'
++    printf '0.0 0 0\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0\n' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'only one line in adjtime file, no final newline'
++    printf '0.0 0 0' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'only two lines in adjtime file'
++    printf '0.0 0 0\n0\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0\n0\n' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'only two lines in adjtime file, no final newline'
++    printf '0.0 0 0\n0' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0\n0' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    echo 'unknown value in 3rd line of adjtime file'
++    printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime
++    timedatectl set-local-rtc 0
++    check_adjtime_not_exist
++    printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime
++    timedatectl set-local-rtc 1
++    assert_eq "$(cat /etc/adjtime)" "0.0 0 0
++0
++LOCAL"
++
++    restore_adjtime
++    trap - EXIT
++}
++
++assert_ntp() {
++    assert_eq "$(busctl get-property org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1 NTP)" "b $1"
++}
++
++start_mon() {
++    busctl monitor --match="type='signal',sender=org.freedesktop.timedate1,member='PropertiesChanged',path=/org/freedesktop/timedate1" >"$mon" &
++    MONPID=$!
++}
++
++wait_mon() {
++    for ((i=0;i<10;i++)); do
++        if (( i != 0 )); then sleep 1; fi
++        if grep -q "$1" "$mon"; then break; fi
++    done
++    assert_in "$2" "$(cat "$mon")"
++    kill "$MONPID"
++    wait "$MONPID" 2>/dev/null || true
++}
++
++test_ntp() {
++    # timesyncd has ConditionVirtualization=!container by default; drop/mock that for testing
++    if systemd-detect-virt --container --quiet; then
++        systemctl disable --quiet --now systemd-timesyncd
++        mkdir -p /run/systemd/system/systemd-timesyncd.service.d
++        cat >/run/systemd/system/systemd-timesyncd.service.d/container.conf <<EOF
++[Unit]
++ConditionVirtualization=
++
++[Service]
++Type=simple
++AmbientCapabilities=
++ExecStart=
++ExecStart=/bin/sleep infinity
++EOF
++        systemctl daemon-reload
++    fi
++
++    mon=$(mktemp -t dbusmon.XXXXXX)
++
++    echo 'disable NTP'
++    timedatectl set-ntp false
++    for ((i=0;i<10;i++)); do
++        if (( i != 0 )); then sleep 1; fi
++        if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then
++            break;
++        fi
++    done
++    assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=inactive"
++    assert_ntp "false"
++    assert_rc 3 systemctl is-active --quiet systemd-timesyncd
++
++    echo 'enable NTP'
++    start_mon
++    timedatectl set-ntp true
++    wait_mon "NTP" "BOOLEAN true"
++    assert_ntp "true"
++    for ((i=0;i<10;i++)); do
++        if (( i != 0 )); then sleep 1; fi
++        if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then
++            break;
++        fi
++    done
++    assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=active"
++    assert_rc 0 systemctl is-active --quiet systemd-timesyncd
++
++    echo 're-disable NTP'
++    start_mon
++    timedatectl set-ntp false
++    wait_mon "NTP" "BOOLEAN false"
++    assert_ntp "false"
++    assert_rc 3 systemctl is-active --quiet systemd-timesyncd
++}
++
++: >/failed
++
++test_timezone
++test_adjtime
++test_ntp
++
++touch /testok
++rm /failed
diff --git a/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch b/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch
new file mode 100644
index 0000000..e712fb8
--- /dev/null
+++ b/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch
@@ -0,0 +1,107 @@
+From e7b657694adbd03403f2ebbe089a6d5baa58d7d5 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:00:00 +0900
+Subject: [PATCH] test: introduce assert_not_in() helper function
+
+This also silence assertions, and replace grep with bash's regular
+expression match.
+
+(cherry picked from commit d170b47535e2acc8abd1af85ff8685107fdd490f)
+
+Related: #2087652
+---
+ test/units/assert.sh       | 48 ++++++++++++++++++++++++--------------
+ test/units/testsuite-45.sh |  2 +-
+ 2 files changed, 32 insertions(+), 18 deletions(-)
+
+diff --git a/test/units/assert.sh b/test/units/assert.sh
+index db67dad268..66357ab688 100644
+--- a/test/units/assert.sh
++++ b/test/units/assert.sh
+@@ -3,42 +3,56 @@
+ 
+ # utility functions for shell tests
+ 
+-assert_true() {
++assert_true() {(
+     local rc
+ 
+-    set +e
++    set +ex
++
+     "$@"
+     rc=$?
+-    set -e
+-    if [[ "$rc" != "0" ]]; then
++    if [[ $rc -ne 0 ]]; then
+         echo "FAIL: command '$*' failed with exit code $rc" >&2
+         exit 1
+     fi
+-}
++)}
++
+ 
++assert_eq() {(
++    set +ex
+ 
+-assert_eq() {
+-    if [[ "$1" != "$2" ]]; then
++    if [[ "${1?}" != "${2?}" ]]; then
+         echo "FAIL: expected: '$2' actual: '$1'" >&2
+         exit 1
+     fi
+-}
++)}
++
++assert_in() {(
++    set +ex
+ 
+-assert_in() {
+-    if ! echo "$2" | grep -q "$1"; then
++    if ! [[ "${2?}" =~ ${1?} ]]; then
+         echo "FAIL: '$1' not found in:" >&2
+         echo "$2" >&2
+         exit 1
+     fi
+-}
++)}
++
++assert_not_in() {(
++    set +ex
++
++    if [[ "${2?}" =~ ${1?} ]]; then
++        echo "FAIL: '$1' found in:" >&2
++        echo "$2" >&2
++        exit 1
++    fi
++)}
++
++assert_rc() {(
++    local rc exp="${1?}"
++
++    set +ex
+ 
+-assert_rc() {
+-    local exp=$1
+-    local rc
+     shift
+-    set +e
+     "$@"
+     rc=$?
+-    set -e
+     assert_eq "$rc" "$exp"
+-}
++)}
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index ac7860dccd..d0d1ef2eb4 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -21,7 +21,7 @@ test_timezone() {
+     echo 'change timezone'
+     assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" ""
+     assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev"
+-    assert_in "Time.*zone: Europe/Kiev (EEST, +" "$(timedatectl --no-pager)"
++    assert_in "Time zone: Europe/Kiev \(EEST, \+0[0-9]00\)" "$(timedatectl)"
+ 
+     if [[ -n "$ORIG_TZ" ]]; then
+         echo 'reset timezone to original'
diff --git a/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch b/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch
new file mode 100644
index 0000000..fc75c97
--- /dev/null
+++ b/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch
@@ -0,0 +1,53 @@
+From 740dd8e0a0c503980894968006a43fa05039e299 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:01:00 +0900
+Subject: [PATCH] test: drop unnecessary --no-pager option
+
+(cherry picked from commit 8ed2103306fa6b3dcaf8d810e65e8957553ef752)
+
+Related: #2087652
+---
+ test/units/testsuite-45.sh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index d0d1ef2eb4..2069d2437f 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -25,7 +25,7 @@ test_timezone() {
+ 
+     if [[ -n "$ORIG_TZ" ]]; then
+         echo 'reset timezone to original'
+-        assert_eq "$(timedatectl --no-pager set-timezone "$ORIG_TZ" 2>&1)" ""
++        assert_eq "$(timedatectl set-timezone "$ORIG_TZ" 2>&1)" ""
+         assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ"
+     fi
+ }
+@@ -206,11 +206,11 @@ EOF
+     timedatectl set-ntp false
+     for ((i=0;i<10;i++)); do
+         if (( i != 0 )); then sleep 1; fi
+-        if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then
++        if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then
+             break;
+         fi
+     done
+-    assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=inactive"
++    assert_eq "$(systemctl show systemd-timesyncd --property ActiveState)" "ActiveState=inactive"
+     assert_ntp "false"
+     assert_rc 3 systemctl is-active --quiet systemd-timesyncd
+ 
+@@ -221,11 +221,11 @@ EOF
+     assert_ntp "true"
+     for ((i=0;i<10;i++)); do
+         if (( i != 0 )); then sleep 1; fi
+-        if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then
++        if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then
+             break;
+         fi
+     done
+-    assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=active"
++    assert_eq "$(systemctl show systemd-timesyncd --property ActiveState)" "ActiveState=active"
+     assert_rc 0 systemctl is-active --quiet systemd-timesyncd
+ 
+     echo 're-disable NTP'
diff --git a/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch b/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch
new file mode 100644
index 0000000..a82f54a
--- /dev/null
+++ b/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch
@@ -0,0 +1,64 @@
+From ce027f67d29066f188891c94447e50c12168a693 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:02:00 +0900
+Subject: [PATCH] test: support debian/ubuntu specific timezone config file
+
+(cherry picked from commit aab61a8c990a54703ae70ca951d0502860010267)
+
+Related: #2087652
+---
+ test/units/testsuite-45.sh | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index 2069d2437f..d0f9dd9461 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -7,9 +7,24 @@ set -o pipefail
+ # shellcheck source=test/units/assert.sh
+ . "$(dirname "$0")"/assert.sh
+ 
++restore_timezone() {
++    if [[ -f /tmp/timezone.bak ]]; then
++        mv /tmp/timezone.bak /etc/timezone
++    else
++        rm -f /etc/timezone
++    fi
++}
++
+ test_timezone() {
+     local ORIG_TZ=
+ 
++    # Debian/Ubuntu specific file
++    if [[ -f /etc/timezone ]]; then
++        mv /etc/timezone /tmp/timezone.bak
++    fi
++
++    trap restore_timezone EXIT
++
+     if [[ -L /etc/localtime ]]; then
+         ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')
+         echo "original tz: $ORIG_TZ"
+@@ -21,13 +36,22 @@ test_timezone() {
+     echo 'change timezone'
+     assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" ""
+     assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev"
++    if [[ -f /etc/timezone ]]; then
++        assert_eq "$(cat /etc/timezone)" "Europe/Kiev"
++    fi
+     assert_in "Time zone: Europe/Kiev \(EEST, \+0[0-9]00\)" "$(timedatectl)"
+ 
+     if [[ -n "$ORIG_TZ" ]]; then
+         echo 'reset timezone to original'
+         assert_eq "$(timedatectl set-timezone "$ORIG_TZ" 2>&1)" ""
+         assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ"
++        if [[ -f /etc/timezone ]]; then
++            assert_eq "$(cat /etc/timezone)" "$ORIG_TZ"
++        fi
+     fi
++
++    restore_timezone
++    trap - EXIT
+ }
+ 
+ restore_adjtime() {
diff --git a/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch b/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch
new file mode 100644
index 0000000..86206a1
--- /dev/null
+++ b/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch
@@ -0,0 +1,117 @@
+From b9724ced388bef0a53be49c4ce45db2c8352f186 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:03:00 +0900
+Subject: [PATCH] test: import hostnamed tests from debian/ubuntu test suite
+
+(cherry picked from commit 39f4546199d6394014cf79b76b9ff22d3c149c54)
+
+Related: #2087652
+---
+ test/TEST-71-HOSTNAME/Makefile  |  1 +
+ test/TEST-71-HOSTNAME/test.sh   | 10 +++++++
+ test/units/testsuite-71.service | 10 +++++++
+ test/units/testsuite-71.sh      | 52 +++++++++++++++++++++++++++++++++
+ 4 files changed, 73 insertions(+)
+ create mode 120000 test/TEST-71-HOSTNAME/Makefile
+ create mode 100755 test/TEST-71-HOSTNAME/test.sh
+ create mode 100644 test/units/testsuite-71.service
+ create mode 100755 test/units/testsuite-71.sh
+
+diff --git a/test/TEST-71-HOSTNAME/Makefile b/test/TEST-71-HOSTNAME/Makefile
+new file mode 120000
+index 0000000000..e9f93b1104
+--- /dev/null
++++ b/test/TEST-71-HOSTNAME/Makefile
+@@ -0,0 +1 @@
++../TEST-01-BASIC/Makefile
+\ No newline at end of file
+diff --git a/test/TEST-71-HOSTNAME/test.sh b/test/TEST-71-HOSTNAME/test.sh
+new file mode 100755
+index 0000000000..7b3d2d12d4
+--- /dev/null
++++ b/test/TEST-71-HOSTNAME/test.sh
+@@ -0,0 +1,10 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="test hostnamed"
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++do_test "$@"
+diff --git a/test/units/testsuite-71.service b/test/units/testsuite-71.service
+new file mode 100644
+index 0000000000..019e8bff24
+--- /dev/null
++++ b/test/units/testsuite-71.service
+@@ -0,0 +1,10 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=TEST-71-HOSTNAME
++
++[Service]
++ExecStartPre=rm -f /failed /testok
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
++StandardOutput=journal+console
++StandardError=journal+console
++Type=oneshot
+diff --git a/test/units/testsuite-71.sh b/test/units/testsuite-71.sh
+new file mode 100755
+index 0000000000..34fcaad961
+--- /dev/null
++++ b/test/units/testsuite-71.sh
+@@ -0,0 +1,52 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++
++set -eux
++set -o pipefail
++
++# shellcheck source=test/units/assert.sh
++. "$(dirname "$0")"/assert.sh
++
++restore_hostname() {
++    if [[ -e /tmp/hostname.bak ]]; then
++        mv /tmp/hostname.bak /etc/hostname
++    else
++        rm -f /etc/hostname
++    fi
++}
++
++test_hostname() {
++    local orig=
++
++    if [[ -f /etc/hostname ]]; then
++        cp /etc/hostname /tmp/hostname.bak
++        orig=$(cat /etc/hostname)
++    fi
++
++    trap restore_hostname RETURN
++
++    # should activate daemon and work
++    if [[ -n "$orig" ]]; then
++        assert_in "Static hostname: $orig" "$(hostnamectl)"
++    fi
++    assert_in "Kernel: $(uname -s) $(uname -r)" "$(hostnamectl)"
++
++    # change hostname
++    assert_rc 0 hostnamectl set-hostname testhost
++    assert_eq "$(cat /etc/hostname)" "testhost"
++    assert_in "Static hostname: testhost" "$(hostnamectl)"
++
++    if [[ -n "$orig" ]]; then
++        # reset to original
++        assert_rc 0 hostnamectl set-hostname "$orig"
++        assert_eq "$(cat /etc/hostname)" "$orig"
++        assert_in "Static hostname: $orig" "$(hostnamectl)"
++    fi
++}
++
++: >/failed
++
++test_hostname
++
++touch /testok
++rm /failed
diff --git a/SOURCES/0215-locale-util-fix-memleak-on-failure.patch b/SOURCES/0215-locale-util-fix-memleak-on-failure.patch
new file mode 100644
index 0000000..13a03f5
--- /dev/null
+++ b/SOURCES/0215-locale-util-fix-memleak-on-failure.patch
@@ -0,0 +1,44 @@
+From 97c96647418ffbadf3d964d76a5f54a9c54535c1 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:04:00 +0900
+Subject: [PATCH] locale-util: fix memleak on failure
+
+(cherry picked from commit 065058e63b566e21af737150ecd12bff57b97124)
+
+Related: #2087652
+---
+ src/basic/locale-util.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
+index 7f1a2f15f7..abbebc7666 100644
+--- a/src/basic/locale-util.c
++++ b/src/basic/locale-util.c
+@@ -156,7 +156,7 @@ static int add_locales_from_archive(Set *locales) {
+         return r;
+ }
+ 
+-static int add_locales_from_libdir (Set *locales) {
++static int add_locales_from_libdir(Set *locales) {
+         _cleanup_closedir_ DIR *dir = NULL;
+         int r;
+ 
+@@ -183,7 +183,7 @@ static int add_locales_from_libdir (Set *locales) {
+ }
+ 
+ int get_locales(char ***ret) {
+-        _cleanup_set_free_ Set *locales = NULL;
++        _cleanup_set_free_free_ Set *locales = NULL;
+         _cleanup_strv_free_ char **l = NULL;
+         int r;
+ 
+@@ -203,6 +203,9 @@ int get_locales(char ***ret) {
+         if (!l)
+                 return -ENOMEM;
+ 
++        /* Now, all elements are owned by strv 'l'. Hence, do not call set_free_free(). */
++        locales = set_free(locales);
++
+         r = getenv_bool("SYSTEMD_LIST_NON_UTF8_LOCALES");
+         if (r == -ENXIO || r == 0) {
+                 char **a, **b;
diff --git a/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch b/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch
new file mode 100644
index 0000000..039d97c
--- /dev/null
+++ b/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch
@@ -0,0 +1,32 @@
+From c10efc8164dcdf8596315ce98f60405f8c2e17c0 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:05:00 +0900
+Subject: [PATCH] locale-util: check if enumerated locales are valid
+
+(cherry picked from commit a2f7937747f12634d93049f645cdae88f89ff233)
+
+Related: #2087652
+---
+ src/basic/locale-util.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
+index abbebc7666..bd36cdd1cd 100644
+--- a/src/basic/locale-util.c
++++ b/src/basic/locale-util.c
+@@ -199,6 +199,15 @@ int get_locales(char ***ret) {
+         if (r < 0)
+                 return r;
+ 
++        char *locale;
++        SET_FOREACH(locale, locales) {
++                r = locale_is_installed(locale);
++                if (r < 0)
++                        return r;
++                if (r == 0)
++                        free(set_remove(locales, locale));
++        }
++
+         l = set_get_strv(locales);
+         if (!l)
+                 return -ENOMEM;
diff --git a/SOURCES/0217-locale-util-align-locale-entries.patch b/SOURCES/0217-locale-util-align-locale-entries.patch
new file mode 100644
index 0000000..4e167dd
--- /dev/null
+++ b/SOURCES/0217-locale-util-align-locale-entries.patch
@@ -0,0 +1,49 @@
+From 1fb9fa1c16f46ce830324173dd0920eddf13c9d6 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:06:00 +0900
+Subject: [PATCH] locale-util: align locale entries
+
+(cherry picked from commit d2e96a4f87f814f3d5c8be986a4d4f616bfd67f4)
+
+Related: #2087652
+---
+ src/basic/locale-util.c | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
+
+diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
+index bd36cdd1cd..8098369db5 100644
+--- a/src/basic/locale-util.c
++++ b/src/basic/locale-util.c
+@@ -336,19 +336,19 @@ void locale_variables_free(char *l[_VARIABLE_LC_MAX]) {
+ }
+ 
+ static const char * const locale_variable_table[_VARIABLE_LC_MAX] = {
+-        [VARIABLE_LANG] = "LANG",
+-        [VARIABLE_LANGUAGE] = "LANGUAGE",
+-        [VARIABLE_LC_CTYPE] = "LC_CTYPE",
+-        [VARIABLE_LC_NUMERIC] = "LC_NUMERIC",
+-        [VARIABLE_LC_TIME] = "LC_TIME",
+-        [VARIABLE_LC_COLLATE] = "LC_COLLATE",
+-        [VARIABLE_LC_MONETARY] = "LC_MONETARY",
+-        [VARIABLE_LC_MESSAGES] = "LC_MESSAGES",
+-        [VARIABLE_LC_PAPER] = "LC_PAPER",
+-        [VARIABLE_LC_NAME] = "LC_NAME",
+-        [VARIABLE_LC_ADDRESS] = "LC_ADDRESS",
+-        [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE",
+-        [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT",
++        [VARIABLE_LANG]              = "LANG",
++        [VARIABLE_LANGUAGE]          = "LANGUAGE",
++        [VARIABLE_LC_CTYPE]          = "LC_CTYPE",
++        [VARIABLE_LC_NUMERIC]        = "LC_NUMERIC",
++        [VARIABLE_LC_TIME]           = "LC_TIME",
++        [VARIABLE_LC_COLLATE]        = "LC_COLLATE",
++        [VARIABLE_LC_MONETARY]       = "LC_MONETARY",
++        [VARIABLE_LC_MESSAGES]       = "LC_MESSAGES",
++        [VARIABLE_LC_PAPER]          = "LC_PAPER",
++        [VARIABLE_LC_NAME]           = "LC_NAME",
++        [VARIABLE_LC_ADDRESS]        = "LC_ADDRESS",
++        [VARIABLE_LC_TELEPHONE]      = "LC_TELEPHONE",
++        [VARIABLE_LC_MEASUREMENT]    = "LC_MEASUREMENT",
+         [VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION"
+ };
+ 
diff --git a/SOURCES/0218-core-inline-an-iterator-variable.patch b/SOURCES/0218-core-inline-an-iterator-variable.patch
new file mode 100644
index 0000000..ec4a4cd
--- /dev/null
+++ b/SOURCES/0218-core-inline-an-iterator-variable.patch
@@ -0,0 +1,33 @@
+From bc5efb385f238fc7b9cbf552c61269fd680e2c94 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 7 Apr 2022 11:22:08 +0200
+Subject: [PATCH] core: inline an iterator variable
+
+(cherry picked from commit 32adc3a7cab85ce543d6895d644a52c6965a274c)
+
+Related: #2087652
+---
+ src/core/locale-setup.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
+index 59ddb9c487..716febbefa 100644
+--- a/src/core/locale-setup.c
++++ b/src/core/locale-setup.c
+@@ -16,7 +16,6 @@
+ int locale_setup(char ***environment) {
+         _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
+         _cleanup_strv_free_ char **add = NULL;
+-        LocaleVariable i;
+         int r;
+ 
+         r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX,
+@@ -58,7 +57,7 @@ int locale_setup(char ***environment) {
+                         log_warning_errno(r, "Failed to read /etc/locale.conf: %m");
+         }
+ 
+-        for (i = 0; i < _VARIABLE_LC_MAX; i++) {
++        for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++) {
+                 char *s;
+ 
+                 if (!variables[i])
diff --git a/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch b/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch
new file mode 100644
index 0000000..b303053
--- /dev/null
+++ b/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch
@@ -0,0 +1,884 @@
+From cdcbd56d4eacba3b3ee4d8b0c38d6509a307a2b7 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:07:00 +0900
+Subject: [PATCH] locale-setup: merge locale handling in PID1 and localed
+
+Related: #2087652
+---
+ src/basic/locale-util.c   |  11 ++
+ src/basic/locale-util.h   |   1 +
+ src/core/locale-setup.c   |  95 --------------
+ src/core/locale-setup.h   |   4 -
+ src/core/meson.build      |   2 -
+ src/locale/keymap-util.c  | 102 +--------------
+ src/locale/keymap-util.h  |   7 +-
+ src/locale/localectl.c    |  47 +++----
+ src/locale/localed.c      |  87 +++----------
+ src/shared/locale-setup.c | 256 ++++++++++++++++++++++++++++++++++++++
+ src/shared/locale-setup.h |  28 +++++
+ src/shared/meson.build    |   2 +
+ 12 files changed, 333 insertions(+), 309 deletions(-)
+ delete mode 100644 src/core/locale-setup.c
+ delete mode 100644 src/core/locale-setup.h
+ create mode 100644 src/shared/locale-setup.c
+ create mode 100644 src/shared/locale-setup.h
+
+diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
+index 8098369db5..21f0982bb5 100644
+--- a/src/basic/locale-util.c
++++ b/src/basic/locale-util.c
+@@ -335,6 +335,17 @@ void locale_variables_free(char *l[_VARIABLE_LC_MAX]) {
+                 l[i] = mfree(l[i]);
+ }
+ 
++void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]) {
++        assert(l);
++
++        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
++                if (p == VARIABLE_LANG)
++                        continue;
++                if (isempty(l[p]) || streq_ptr(l[VARIABLE_LANG], l[p]))
++                        l[p] = mfree(l[p]);
++        }
++}
++
+ static const char * const locale_variable_table[_VARIABLE_LC_MAX] = {
+         [VARIABLE_LANG]              = "LANG",
+         [VARIABLE_LANGUAGE]          = "LANGUAGE",
+diff --git a/src/basic/locale-util.h b/src/basic/locale-util.h
+index bab927146b..8990cb6a75 100644
+--- a/src/basic/locale-util.h
++++ b/src/basic/locale-util.h
+@@ -53,3 +53,4 @@ void locale_variables_free(char* l[_VARIABLE_LC_MAX]);
+ static inline void locale_variables_freep(char*(*l)[_VARIABLE_LC_MAX]) {
+         locale_variables_free(*l);
+ }
++void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]);
+diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
+deleted file mode 100644
+index 716febbefa..0000000000
+--- a/src/core/locale-setup.c
++++ /dev/null
+@@ -1,95 +0,0 @@
+-/* SPDX-License-Identifier: LGPL-2.1-or-later */
+-
+-#include <errno.h>
+-#include <stdlib.h>
+-
+-#include "env-file.h"
+-#include "env-util.h"
+-#include "locale-setup.h"
+-#include "locale-util.h"
+-#include "proc-cmdline.h"
+-#include "string-util.h"
+-#include "strv.h"
+-#include "util.h"
+-#include "virt.h"
+-
+-int locale_setup(char ***environment) {
+-        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
+-        _cleanup_strv_free_ char **add = NULL;
+-        int r;
+-
+-        r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX,
+-                                      "locale.LANG",              &variables[VARIABLE_LANG],
+-                                      "locale.LANGUAGE",          &variables[VARIABLE_LANGUAGE],
+-                                      "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
+-                                      "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
+-                                      "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
+-                                      "locale.LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
+-                                      "locale.LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
+-                                      "locale.LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
+-                                      "locale.LC_PAPER",          &variables[VARIABLE_LC_PAPER],
+-                                      "locale.LC_NAME",           &variables[VARIABLE_LC_NAME],
+-                                      "locale.LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
+-                                      "locale.LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
+-                                      "locale.LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
+-                                      "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
+-        if (r < 0 && r != -ENOENT)
+-                log_warning_errno(r, "Failed to read /proc/cmdline: %m");
+-
+-        /* Hmm, nothing set on the kernel cmd line? Then let's try /etc/locale.conf */
+-        if (r <= 0) {
+-                r = parse_env_file(NULL, "/etc/locale.conf",
+-                                   "LANG",              &variables[VARIABLE_LANG],
+-                                   "LANGUAGE",          &variables[VARIABLE_LANGUAGE],
+-                                   "LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
+-                                   "LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
+-                                   "LC_TIME",           &variables[VARIABLE_LC_TIME],
+-                                   "LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
+-                                   "LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
+-                                   "LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
+-                                   "LC_PAPER",          &variables[VARIABLE_LC_PAPER],
+-                                   "LC_NAME",           &variables[VARIABLE_LC_NAME],
+-                                   "LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
+-                                   "LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
+-                                   "LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
+-                                   "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
+-                if (r < 0 && r != -ENOENT)
+-                        log_warning_errno(r, "Failed to read /etc/locale.conf: %m");
+-        }
+-
+-        for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++) {
+-                char *s;
+-
+-                if (!variables[i])
+-                        continue;
+-
+-                s = strjoin(locale_variable_to_string(i), "=", variables[i]);
+-                if (!s)
+-                        return -ENOMEM;
+-
+-                if (strv_consume(&add, s) < 0)
+-                        return -ENOMEM;
+-        }
+-
+-        if (strv_isempty(add)) {
+-                /* If no locale is configured then default to compile-time default. */
+-
+-                add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE);
+-                if (!add)
+-                        return -ENOMEM;
+-        }
+-
+-        if (strv_isempty(*environment))
+-                strv_free_and_replace(*environment, add);
+-        else {
+-                char **merged;
+-
+-                merged = strv_env_merge(*environment, add);
+-                if (!merged)
+-                        return -ENOMEM;
+-
+-                strv_free_and_replace(*environment, merged);
+-        }
+-
+-        return 0;
+-}
+diff --git a/src/core/locale-setup.h b/src/core/locale-setup.h
+deleted file mode 100644
+index d554ad3060..0000000000
+--- a/src/core/locale-setup.h
++++ /dev/null
+@@ -1,4 +0,0 @@
+-/* SPDX-License-Identifier: LGPL-2.1-or-later */
+-#pragma once
+-
+-int locale_setup(char ***environment);
+diff --git a/src/core/meson.build b/src/core/meson.build
+index 97ac431763..7704478d43 100644
+--- a/src/core/meson.build
++++ b/src/core/meson.build
+@@ -83,8 +83,6 @@ libcore_sources = '''
+         load-dropin.h
+         load-fragment.c
+         load-fragment.h
+-        locale-setup.c
+-        locale-setup.h
+         manager-dump.c
+         manager-dump.h
+         manager-serialize.c
+diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
+index 10d2ed7aec..a3af396ebe 100644
+--- a/src/locale/keymap-util.c
++++ b/src/locale/keymap-util.c
+@@ -65,13 +65,8 @@ static void context_free_vconsole(Context *c) {
+         c->vc_keymap_toggle = mfree(c->vc_keymap_toggle);
+ }
+ 
+-static void context_free_locale(Context *c) {
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+-                c->locale[p] = mfree(c->locale[p]);
+-}
+-
+ void context_clear(Context *c) {
+-        context_free_locale(c);
++        locale_context_clear(&c->locale_context);
+         context_free_x11(c);
+         context_free_vconsole(c);
+ 
+@@ -82,15 +77,8 @@ void context_clear(Context *c) {
+         bus_verify_polkit_async_registry_free(c->polkit_registry);
+ };
+ 
+-void locale_simplify(char *locale[_VARIABLE_LC_MAX]) {
+-        for (LocaleVariable p = VARIABLE_LANG+1; p < _VARIABLE_LC_MAX; p++)
+-                if (isempty(locale[p]) || streq_ptr(locale[VARIABLE_LANG], locale[p]))
+-                        locale[p] = mfree(locale[p]);
+-}
+-
+ int locale_read_data(Context *c, sd_bus_message *m) {
+-        struct stat st;
+-        int r;
++        assert(c);
+ 
+         /* Do not try to re-read the file within single bus operation. */
+         if (m) {
+@@ -101,57 +89,7 @@ int locale_read_data(Context *c, sd_bus_message *m) {
+                 c->locale_cache = sd_bus_message_ref(m);
+         }
+ 
+-        r = stat("/etc/locale.conf", &st);
+-        if (r < 0 && errno != ENOENT)
+-                return -errno;
+-
+-        if (r >= 0) {
+-                usec_t t;
+-
+-                /* If mtime is not changed, then we do not need to re-read the file. */
+-                t = timespec_load(&st.st_mtim);
+-                if (c->locale_mtime != USEC_INFINITY && t == c->locale_mtime)
+-                        return 0;
+-
+-                c->locale_mtime = t;
+-                context_free_locale(c);
+-
+-                r = parse_env_file(NULL, "/etc/locale.conf",
+-                                   "LANG",              &c->locale[VARIABLE_LANG],
+-                                   "LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
+-                                   "LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
+-                                   "LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
+-                                   "LC_TIME",           &c->locale[VARIABLE_LC_TIME],
+-                                   "LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
+-                                   "LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
+-                                   "LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
+-                                   "LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
+-                                   "LC_NAME",           &c->locale[VARIABLE_LC_NAME],
+-                                   "LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
+-                                   "LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
+-                                   "LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
+-                                   "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
+-                if (r < 0)
+-                        return r;
+-        } else {
+-                c->locale_mtime = USEC_INFINITY;
+-                context_free_locale(c);
+-
+-                /* Fill in what we got passed from systemd. */
+-                for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
+-                        const char *name;
+-
+-                        name = locale_variable_to_string(p);
+-                        assert(name);
+-
+-                        r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name)));
+-                        if (r < 0)
+-                                return r;
+-                }
+-        }
+-
+-        locale_simplify(c->locale);
+-        return 0;
++        return locale_context_load(&c->locale_context, LOCALE_LOAD_LOCALE_CONF | LOCALE_LOAD_ENVIRONMENT | LOCALE_LOAD_SIMPLIFY);
+ }
+ 
+ int vconsole_read_data(Context *c, sd_bus_message *m) {
+@@ -285,40 +223,6 @@ int x11_read_data(Context *c, sd_bus_message *m) {
+         return 0;
+ }
+ 
+-int locale_write_data(Context *c, char ***settings) {
+-        _cleanup_strv_free_ char **l = NULL;
+-        struct stat st;
+-        int r;
+-
+-        /* Set values will be returned as strv in *settings on success. */
+-
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+-                if (!isempty(c->locale[p])) {
+-                        r = strv_env_assign(&l, locale_variable_to_string(p), c->locale[p]);
+-                        if (r < 0)
+-                                return r;
+-                }
+-
+-        if (strv_isempty(l)) {
+-                if (unlink("/etc/locale.conf") < 0)
+-                        return errno == ENOENT ? 0 : -errno;
+-
+-                c->locale_mtime = USEC_INFINITY;
+-                return 0;
+-        }
+-
+-        r = write_env_file_label("/etc/locale.conf", l);
+-        if (r < 0)
+-                return r;
+-
+-        *settings = TAKE_PTR(l);
+-
+-        if (stat("/etc/locale.conf", &st) >= 0)
+-                c->locale_mtime = timespec_load(&st.st_mtim);
+-
+-        return 0;
+-}
+-
+ int vconsole_write_data(Context *c) {
+         _cleanup_strv_free_ char **l = NULL;
+         struct stat st;
+diff --git a/src/locale/keymap-util.h b/src/locale/keymap-util.h
+index c087dbcbbe..5470d1bb9b 100644
+--- a/src/locale/keymap-util.h
++++ b/src/locale/keymap-util.h
+@@ -4,13 +4,12 @@
+ #include "sd-bus.h"
+ 
+ #include "hashmap.h"
+-#include "locale-util.h"
++#include "locale-setup.h"
+ #include "time-util.h"
+ 
+ typedef struct Context {
+         sd_bus_message *locale_cache;
+-        usec_t locale_mtime;
+-        char *locale[_VARIABLE_LC_MAX];
++        LocaleContext locale_context;
+ 
+         sd_bus_message *x11_cache;
+         usec_t x11_mtime;
+@@ -40,8 +39,6 @@ int vconsole_convert_to_x11(Context *c);
+ int vconsole_write_data(Context *c);
+ int x11_convert_to_vconsole(Context *c);
+ int x11_write_data(Context *c);
+-void locale_simplify(char *locale[_VARIABLE_LC_MAX]);
+-int locale_write_data(Context *c, char ***settings);
+ 
+ bool locale_gen_check_available(void);
+ int locale_gen_enable_locale(const char *locale);
+diff --git a/src/locale/localectl.c b/src/locale/localectl.c
+index 661d54c27d..6bfb564f97 100644
+--- a/src/locale/localectl.c
++++ b/src/locale/localectl.c
+@@ -12,7 +12,7 @@
+ #include "fd-util.h"
+ #include "fileio.h"
+ #include "kbd-util.h"
+-#include "locale-util.h"
++#include "locale-setup.h"
+ #include "main-func.h"
+ #include "memory-util.h"
+ #include "pager.h"
+@@ -52,44 +52,25 @@ static void status_info_clear(StatusInfo *info) {
+ }
+ 
+ static void print_overridden_variables(void) {
+-        _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {};
+-        bool print_warning = true;
++        _cleanup_(locale_context_clear) LocaleContext c = { .mtime = USEC_INFINITY };
++        _cleanup_strv_free_ char **env = NULL;
+         int r;
+ 
+         if (arg_transport != BUS_TRANSPORT_LOCAL)
+                 return;
+ 
+-        r = proc_cmdline_get_key_many(
+-                        PROC_CMDLINE_STRIP_RD_PREFIX,
+-                        "locale.LANG",              &variables[VARIABLE_LANG],
+-                        "locale.LANGUAGE",          &variables[VARIABLE_LANGUAGE],
+-                        "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
+-                        "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
+-                        "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
+-                        "locale.LC_COLLATE",        &variables[VARIABLE_LC_COLLATE],
+-                        "locale.LC_MONETARY",       &variables[VARIABLE_LC_MONETARY],
+-                        "locale.LC_MESSAGES",       &variables[VARIABLE_LC_MESSAGES],
+-                        "locale.LC_PAPER",          &variables[VARIABLE_LC_PAPER],
+-                        "locale.LC_NAME",           &variables[VARIABLE_LC_NAME],
+-                        "locale.LC_ADDRESS",        &variables[VARIABLE_LC_ADDRESS],
+-                        "locale.LC_TELEPHONE",      &variables[VARIABLE_LC_TELEPHONE],
+-                        "locale.LC_MEASUREMENT",    &variables[VARIABLE_LC_MEASUREMENT],
+-                        "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]);
+-        if (r < 0 && r != -ENOENT) {
+-                log_warning_errno(r, "Failed to read /proc/cmdline: %m");
+-                return;
+-        }
+-
+-        for (LocaleVariable j = 0; j < _VARIABLE_LC_MAX; j++)
+-                if (variables[j]) {
+-                        if (print_warning) {
+-                                log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.\n"
+-                                            "    Command Line: %s=%s", locale_variable_to_string(j), variables[j]);
++        (void) locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE);
+ 
+-                                print_warning = false;
+-                        } else
+-                                log_warning("                  %s=%s", locale_variable_to_string(j), variables[j]);
+-                }
++        r = locale_context_build_env(&c, &env, NULL);
++        if (r < 0)
++                return (void) log_warning_errno(r, "Failed to build locale settings from kernel command line, ignoring: %m");
++
++        STRV_FOREACH(p, env)
++                if (p == env)
++                        log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.\n"
++                                    "    Command Line: %s", *p);
++                else
++                        log_warning("                  %s", *p);
+ }
+ 
+ static void print_status_info(StatusInfo *i) {
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index 89bf9c6fba..9718c5b95f 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -21,7 +21,6 @@
+ #include "dlfcn-util.h"
+ #include "kbd-util.h"
+ #include "keymap-util.h"
+-#include "locale-util.h"
+ #include "macro.h"
+ #include "main-func.h"
+ #include "missing_capability.h"
+@@ -33,44 +32,13 @@
+ #include "strv.h"
+ #include "user-util.h"
+ 
+-static int locale_update_system_manager(Context *c, sd_bus *bus) {
+-        _cleanup_free_ char **l_unset = NULL;
+-        _cleanup_strv_free_ char **l_set = NULL;
++static int locale_update_system_manager(sd_bus *bus, char **l_set, char **l_unset) {
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+-        size_t c_set = 0, c_unset = 0;
+         int r;
+ 
+         assert(bus);
+ 
+-        l_unset = new0(char*, _VARIABLE_LC_MAX);
+-        if (!l_unset)
+-                return log_oom();
+-
+-        l_set = new0(char*, _VARIABLE_LC_MAX);
+-        if (!l_set)
+-                return log_oom();
+-
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
+-                const char *name;
+-
+-                name = locale_variable_to_string(p);
+-                assert(name);
+-
+-                if (isempty(c->locale[p]))
+-                        l_unset[c_set++] = (char*) name;
+-                else {
+-                        char *s;
+-
+-                        s = strjoin(name, "=", c->locale[p]);
+-                        if (!s)
+-                                return log_oom();
+-
+-                        l_set[c_unset++] = s;
+-                }
+-        }
+-
+-        assert(c_set + c_unset == _VARIABLE_LC_MAX);
+         r = sd_bus_message_new_method_call(bus, &m,
+                         "org.freedesktop.systemd1",
+                         "/org/freedesktop/systemd1",
+@@ -188,21 +156,9 @@ static int property_get_locale(
+         if (!l)
+                 return -ENOMEM;
+ 
+-        for (LocaleVariable p = 0, q = 0; p < _VARIABLE_LC_MAX; p++) {
+-                char *t;
+-                const char *name;
+-
+-                name = locale_variable_to_string(p);
+-                assert(name);
+-
+-                if (isempty(c->locale[p]))
+-                        continue;
+-
+-                if (asprintf(&t, "%s=%s", name, c->locale[p]) < 0)
+-                        return -ENOMEM;
+-
+-                l[q++] = t;
+-        }
++        r = locale_context_build_env(&c->locale_context, &l, NULL);
++        if (r < 0)
++                return r;
+ 
+         return sd_bus_message_append_strv(reply, l);
+ }
+@@ -342,9 +298,8 @@ static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX],
+ 
+ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *error) {
+         _cleanup_(locale_variables_freep) char *new_locale[_VARIABLE_LC_MAX] = {};
+-        _cleanup_strv_free_ char **settings = NULL, **l = NULL;
++        _cleanup_strv_free_ char **l = NULL, **l_set = NULL, **l_unset = NULL;
+         Context *c = userdata;
+-        bool modified = false;
+         int interactive, r;
+         bool use_localegen;
+ 
+@@ -402,22 +357,13 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
+         }
+ 
+         /* Merge with the current settings */
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+-                if (!isempty(c->locale[p]) && isempty(new_locale[p])) {
+-                        new_locale[p] = strdup(c->locale[p]);
+-                        if (!new_locale[p])
+-                                return -ENOMEM;
+-                }
+-
+-        locale_simplify(new_locale);
++        r = locale_context_merge(&c->locale_context, new_locale);
++        if (r < 0)
++                return r;
+ 
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+-                if (!streq_ptr(c->locale[p], new_locale[p])) {
+-                        modified = true;
+-                        break;
+-                }
++        locale_variables_simplify(new_locale);
+ 
+-        if (!modified) {
++        if (locale_context_equal(&c->locale_context, new_locale)) {
+                 log_debug("Locale settings were not modified.");
+                 return sd_bus_reply_method_return(m, NULL);
+         }
+@@ -443,22 +389,21 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
+                         return r;
+         }
+ 
+-        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
+-                free_and_replace(c->locale[p], new_locale[p]);
++        locale_context_take(&c->locale_context, new_locale);
+ 
+         /* Write locale configuration */
+-        r = locale_write_data(c, &settings);
++        r = locale_context_save(&c->locale_context, &l_set, &l_unset);
+         if (r < 0) {
+                 log_error_errno(r, "Failed to set locale: %m");
+                 return sd_bus_error_set_errnof(error, r, "Failed to set locale: %m");
+         }
+ 
+-        (void) locale_update_system_manager(c, sd_bus_message_get_bus(m));
++        (void) locale_update_system_manager(sd_bus_message_get_bus(m), l_set, l_unset);
+ 
+-        if (settings) {
++        if (!strv_isempty(l_set)) {
+                 _cleanup_free_ char *line = NULL;
+ 
+-                line = strv_join(settings, ", ");
++                line = strv_join(l_set, ", ");
+                 log_info("Changed locale to %s.", strnull(line));
+         } else
+                 log_info("Changed locale to unset.");
+@@ -827,7 +772,7 @@ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
+ 
+ static int run(int argc, char *argv[]) {
+         _cleanup_(context_clear) Context context = {
+-                .locale_mtime = USEC_INFINITY,
++                .locale_context.mtime = USEC_INFINITY,
+                 .vc_mtime = USEC_INFINITY,
+                 .x11_mtime = USEC_INFINITY,
+         };
+diff --git a/src/shared/locale-setup.c b/src/shared/locale-setup.c
+new file mode 100644
+index 0000000000..b8c6647e7c
+--- /dev/null
++++ b/src/shared/locale-setup.c
+@@ -0,0 +1,256 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++
++#include <errno.h>
++#include <sys/stat.h>
++
++#include "env-file-label.h"
++#include "env-file.h"
++#include "env-util.h"
++#include "locale-setup.h"
++#include "proc-cmdline.h"
++#include "strv.h"
++
++void locale_context_clear(LocaleContext *c) {
++        assert(c);
++
++        c->mtime = USEC_INFINITY;
++
++        for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++)
++                c->locale[i] = mfree(c->locale[i]);
++}
++
++int locale_context_load(LocaleContext *c, LocaleLoadFlag flag) {
++        int r;
++
++        assert(c);
++
++        if (FLAGS_SET(flag, LOCALE_LOAD_PROC_CMDLINE)) {
++                locale_context_clear(c);
++
++                r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX,
++                                              "locale.LANG",              &c->locale[VARIABLE_LANG],
++                                              "locale.LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
++                                              "locale.LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
++                                              "locale.LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
++                                              "locale.LC_TIME",           &c->locale[VARIABLE_LC_TIME],
++                                              "locale.LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
++                                              "locale.LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
++                                              "locale.LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
++                                              "locale.LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
++                                              "locale.LC_NAME",           &c->locale[VARIABLE_LC_NAME],
++                                              "locale.LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
++                                              "locale.LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
++                                              "locale.LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
++                                              "locale.LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
++                if (r < 0 && r != -ENOENT)
++                        log_debug_errno(r, "Failed to read /proc/cmdline, ignoring: %m");
++                if (r > 0)
++                        goto finalize;
++        }
++
++        if (FLAGS_SET(flag, LOCALE_LOAD_LOCALE_CONF)) {
++                struct stat st;
++                usec_t t;
++
++                r = stat("/etc/locale.conf", &st);
++                if (r < 0 && errno != ENOENT)
++                        return log_debug_errno(errno, "Failed to stat /etc/locale.conf: %m");
++
++                if (r >= 0) {
++                        /* If mtime is not changed, then we do not need to re-read the file. */
++                        t = timespec_load(&st.st_mtim);
++                        if (c->mtime != USEC_INFINITY && t == c->mtime)
++                                return 0;
++
++                        locale_context_clear(c);
++                        c->mtime = t;
++
++                        r = parse_env_file(NULL, "/etc/locale.conf",
++                                           "LANG",              &c->locale[VARIABLE_LANG],
++                                           "LANGUAGE",          &c->locale[VARIABLE_LANGUAGE],
++                                           "LC_CTYPE",          &c->locale[VARIABLE_LC_CTYPE],
++                                           "LC_NUMERIC",        &c->locale[VARIABLE_LC_NUMERIC],
++                                           "LC_TIME",           &c->locale[VARIABLE_LC_TIME],
++                                           "LC_COLLATE",        &c->locale[VARIABLE_LC_COLLATE],
++                                           "LC_MONETARY",       &c->locale[VARIABLE_LC_MONETARY],
++                                           "LC_MESSAGES",       &c->locale[VARIABLE_LC_MESSAGES],
++                                           "LC_PAPER",          &c->locale[VARIABLE_LC_PAPER],
++                                           "LC_NAME",           &c->locale[VARIABLE_LC_NAME],
++                                           "LC_ADDRESS",        &c->locale[VARIABLE_LC_ADDRESS],
++                                           "LC_TELEPHONE",      &c->locale[VARIABLE_LC_TELEPHONE],
++                                           "LC_MEASUREMENT",    &c->locale[VARIABLE_LC_MEASUREMENT],
++                                           "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]);
++                        if (r < 0)
++                                return log_debug_errno(r, "Failed to read /etc/locale.conf: %m");
++
++                        goto finalize;
++                }
++        }
++
++        if (FLAGS_SET(flag, LOCALE_LOAD_ENVIRONMENT)) {
++                locale_context_clear(c);
++
++                /* Fill in what we got passed from systemd. */
++                for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
++                        const char *name = ASSERT_PTR(locale_variable_to_string(p));
++
++                        r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name)));
++                        if (r < 0)
++                                return log_oom_debug();
++                }
++
++                goto finalize;
++        }
++
++        /* Nothing loaded. */
++        locale_context_clear(c);
++        return 0;
++
++finalize:
++        if (FLAGS_SET(flag, LOCALE_LOAD_SIMPLIFY))
++                locale_variables_simplify(c->locale);
++
++        return 0;
++}
++
++int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset) {
++        _cleanup_strv_free_ char **set = NULL, **unset = NULL;
++        int r;
++
++        assert(c);
++
++        if (!ret_set && !ret_unset)
++                return 0;
++
++        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) {
++                const char *name = ASSERT_PTR(locale_variable_to_string(p));
++
++                if (isempty(c->locale[p])) {
++                        if (!ret_unset)
++                                continue;
++                        r = strv_extend(&unset, name);
++                } else {
++                        if (!ret_set)
++                                continue;
++                        r = strv_env_assign(&set, name, c->locale[p]);
++                }
++                if (r < 0)
++                        return r;
++        }
++
++        if (ret_set)
++                *ret_set = TAKE_PTR(set);
++        if (ret_unset)
++                *ret_unset = TAKE_PTR(unset);
++        return 0;
++}
++
++int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset) {
++        _cleanup_strv_free_ char **set = NULL, **unset = NULL;
++        struct stat st;
++        int r;
++
++        assert(c);
++
++        /* Set values will be returned as strv in *ret on success. */
++
++        r = locale_context_build_env(c, &set, ret_unset ? &unset : NULL);
++        if (r < 0)
++                return r;
++
++        if (strv_isempty(set)) {
++                if (unlink("/etc/locale.conf") < 0)
++                        return errno == ENOENT ? 0 : -errno;
++
++                c->mtime = USEC_INFINITY;
++                if (ret_set)
++                        *ret_set = NULL;
++                if (ret_unset)
++                        *ret_unset = NULL;
++                return 0;
++        }
++
++        r = write_env_file_label("/etc/locale.conf", set);
++        if (r < 0)
++                return r;
++
++        if (stat("/etc/locale.conf", &st) >= 0)
++                c->mtime = timespec_load(&st.st_mtim);
++
++        if (ret_set)
++                *ret_set = TAKE_PTR(set);
++        if (ret_unset)
++                *ret_unset = TAKE_PTR(unset);
++        return 0;
++}
++
++int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
++        assert(c);
++        assert(l);
++
++        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
++                if (!isempty(c->locale[p]) && isempty(l[p])) {
++                        l[p] = strdup(c->locale[p]);
++                        if (!l[p])
++                                return -ENOMEM;
++                }
++
++        return 0;
++}
++
++void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
++        assert(c);
++        assert(l);
++
++        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
++                free_and_replace(c->locale[p], l[p]);
++}
++
++bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) {
++        assert(c);
++        assert(l);
++
++        for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++)
++                if (!streq_ptr(c->locale[p], l[p]))
++                        return false;
++
++        return true;
++}
++
++int locale_setup(char ***environment) {
++        _cleanup_(locale_context_clear) LocaleContext c = { .mtime = USEC_INFINITY };
++        _cleanup_strv_free_ char **add = NULL;
++        int r;
++
++        assert(environment);
++
++        r = locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE | LOCALE_LOAD_LOCALE_CONF);
++        if (r < 0)
++                return r;
++
++        r = locale_context_build_env(&c, &add, NULL);
++        if (r < 0)
++                return r;
++
++        if (strv_isempty(add)) {
++                /* If no locale is configured then default to compile-time default. */
++
++                add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE);
++                if (!add)
++                        return -ENOMEM;
++        }
++
++        if (strv_isempty(*environment))
++                strv_free_and_replace(*environment, add);
++        else {
++                char **merged;
++
++                merged = strv_env_merge(*environment, add);
++                if (!merged)
++                        return -ENOMEM;
++
++                strv_free_and_replace(*environment, merged);
++        }
++
++        return 0;
++}
+diff --git a/src/shared/locale-setup.h b/src/shared/locale-setup.h
+new file mode 100644
+index 0000000000..ec3fc8c364
+--- /dev/null
++++ b/src/shared/locale-setup.h
+@@ -0,0 +1,28 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++#pragma once
++
++#include "locale-util.h"
++#include "time-util.h"
++
++typedef struct LocaleContext {
++        usec_t mtime;
++        char *locale[_VARIABLE_LC_MAX];
++} LocaleContext;
++
++typedef enum LocaleLoadFlag {
++        LOCALE_LOAD_PROC_CMDLINE = 1 << 0,
++        LOCALE_LOAD_LOCALE_CONF  = 1 << 1,
++        LOCALE_LOAD_ENVIRONMENT  = 1 << 2,
++        LOCALE_LOAD_SIMPLIFY     = 1 << 3,
++} LocaleLoadFlag;
++
++void locale_context_clear(LocaleContext *c);
++int locale_context_load(LocaleContext *c, LocaleLoadFlag flag);
++int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset);
++int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset);
++
++int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
++void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
++bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
++
++int locale_setup(char ***environment);
+diff --git a/src/shared/meson.build b/src/shared/meson.build
+index 006310a917..62365682cf 100644
+--- a/src/shared/meson.build
++++ b/src/shared/meson.build
+@@ -195,6 +195,8 @@ shared_sources = files('''
+         linux/ethtool.h
+         local-addresses.c
+         local-addresses.h
++        locale-setup.c
++        locale-setup.h
+         lockfile-util.c
+         lockfile-util.h
+         log-link.h
diff --git a/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch b/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch
new file mode 100644
index 0000000..10a8057
--- /dev/null
+++ b/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch
@@ -0,0 +1,98 @@
+From 8cfe7b6243660a5f1b43fe7217a678317284c430 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:08:00 +0900
+Subject: [PATCH] locale: rename keymap-util.[ch] -> localed-util.[ch]
+
+As the file contains not only keymap related functions.
+
+(cherry picked from commit 3e5203b3eb2b06ef346eef13d64430542bbfb5c4)
+
+Related: #2087652
+---
+ src/locale/{keymap-util.c => localed-util.c}           |  3 +--
+ src/locale/{keymap-util.h => localed-util.h}           |  0
+ src/locale/localed.c                                   |  2 +-
+ src/locale/meson.build                                 | 10 +++++-----
+ src/locale/{test-keymap-util.c => test-localed-util.c} |  2 +-
+ 5 files changed, 8 insertions(+), 9 deletions(-)
+ rename src/locale/{keymap-util.c => localed-util.c} (99%)
+ rename src/locale/{keymap-util.h => localed-util.h} (100%)
+ rename src/locale/{test-keymap-util.c => test-localed-util.c} (99%)
+
+diff --git a/src/locale/keymap-util.c b/src/locale/localed-util.c
+similarity index 99%
+rename from src/locale/keymap-util.c
+rename to src/locale/localed-util.c
+index a3af396ebe..f4f8e5d168 100644
+--- a/src/locale/keymap-util.c
++++ b/src/locale/localed-util.c
+@@ -15,8 +15,7 @@
+ #include "fileio.h"
+ #include "fs-util.h"
+ #include "kbd-util.h"
+-#include "keymap-util.h"
+-#include "locale-util.h"
++#include "localed-util.h"
+ #include "macro.h"
+ #include "mkdir-label.h"
+ #include "nulstr-util.h"
+diff --git a/src/locale/keymap-util.h b/src/locale/localed-util.h
+similarity index 100%
+rename from src/locale/keymap-util.h
+rename to src/locale/localed-util.h
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index 9718c5b95f..2c324efb14 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -20,7 +20,7 @@
+ #include "def.h"
+ #include "dlfcn-util.h"
+ #include "kbd-util.h"
+-#include "keymap-util.h"
++#include "localed-util.h"
+ #include "macro.h"
+ #include "main-func.h"
+ #include "missing_capability.h"
+diff --git a/src/locale/meson.build b/src/locale/meson.build
+index 0ccf71583d..2d8c48cf3a 100644
+--- a/src/locale/meson.build
++++ b/src/locale/meson.build
+@@ -1,9 +1,9 @@
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+ 
+ systemd_localed_sources = files('''
++        localed-util.c
++        localed-util.h
+         localed.c
+-        keymap-util.c
+-        keymap-util.h
+ '''.split())
+ 
+ localectl_sources = files('localectl.c')
+@@ -30,7 +30,7 @@ if conf.get('ENABLE_LOCALED') == 1
+ endif
+ 
+ tests += [
+-        [files('test-keymap-util.c',
+-               'keymap-util.c',
+-               'keymap-util.h')],
++        [files('test-localed-util.c',
++               'localed-util.c',
++               'localed-util.h')],
+ ]
+diff --git a/src/locale/test-keymap-util.c b/src/locale/test-localed-util.c
+similarity index 99%
+rename from src/locale/test-keymap-util.c
+rename to src/locale/test-localed-util.c
+index f726e8e524..f658d271dc 100644
+--- a/src/locale/test-keymap-util.c
++++ b/src/locale/test-localed-util.c
+@@ -1,7 +1,7 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
+-#include "keymap-util.h"
++#include "localed-util.h"
+ #include "log.h"
+ #include "string-util.h"
+ #include "tests.h"
diff --git a/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch b/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch
new file mode 100644
index 0000000..a0d36d0
--- /dev/null
+++ b/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch
@@ -0,0 +1,85 @@
+From 380a3b2b2d38f08ac84d3ac521b205960059d99c Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:10:00 +0900
+Subject: [PATCH] test: add one more path to search keymaps
+
+Now it also supports split-usr.
+
+(cherry picked from commit 569c6fd1b7c7946fa853d558fcbb23e4a45f957f)
+
+Related: #2087652
+---
+ test/test-functions | 59 ++++++++++++++++++++++++++++++---------------
+ 1 file changed, 40 insertions(+), 19 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index d71e2a3328..01fc90fbf5 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1844,26 +1844,47 @@ install_pam() {
+ 
+ # shellcheck disable=SC2120
+ install_keymaps() {
+-    dinfo "Install keymaps"
+-    # The first three paths may be deprecated.
+-    # It seems now the last two paths are used by many distributions.
+-    for i in \
+-        /usr/lib/kbd/keymaps/include/* \
+-        /usr/lib/kbd/keymaps/i386/include/* \
+-        /usr/lib/kbd/keymaps/i386/qwerty/us.* \
+-        /usr/lib/kbd/keymaps/legacy/include/* \
+-        /usr/lib/kbd/keymaps/legacy/i386/qwerty/us.*; do
+-            [[ -f "$i" ]] || continue
+-            inst "$i"
+-    done
++    local i p
++    local -a prefix=(
++        "/usr"
++    )
+ 
+-    # When it takes any argument, then install more keymaps.
+-    if [[ $# -gt 1 ]]; then
+-        for i in \
+-        /usr/lib/kbd/keymaps/i386/*/* \
+-        /usr/lib/kbd/keymaps/legacy/i386/*/*; do
+-            [[ -f "$i" ]] || continue
+-            inst "$i"
++    dinfo "Install console keymaps"
++
++    if command -v meson >/dev/null \
++            && [[ "$(meson configure "${BUILD_DIR:?}" | grep 'split-usr' | awk '{ print $2 }')" == "true" ]] \
++            || [[ ! -L /lib ]]; then
++        prefix+=(
++            ""
++        )
++    fi
++
++    if (( $# == 0 )); then
++        for p in "${prefix[@]}"; do
++            # The first three paths may be deprecated.
++            # It seems now the last three paths are used by many distributions.
++            for i in \
++                "$p"/lib/kbd/keymaps/include/* \
++                "$p"/lib/kbd/keymaps/i386/include/* \
++                "$p"/lib/kbd/keymaps/i386/qwerty/us.* \
++                "$p"/lib/kbd/keymaps/legacy/include/* \
++                "$p"/lib/kbd/keymaps/legacy/i386/qwerty/us.* \
++                "$p"/lib/kbd/keymaps/xkb/us*; do
++                    [[ -f "$i" ]] || continue
++                    inst "$i"
++            done
++        done
++    else
++        # When it takes any argument, then install more keymaps.
++        for p in "${prefix[@]}"; do
++            for i in \
++                "$p"/lib/kbd/keymaps/include/* \
++                "$p"/lib/kbd/keymaps/i386/*/* \
++                "$p"/lib/kbd/keymaps/legacy/i386/*/* \
++                "$p"/lib/kbd/keymaps/xkb/*; do
++                    [[ -f "$i" ]] || continue
++                    inst "$i"
++            done
+         done
+     fi
+ }
diff --git a/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch b/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch
new file mode 100644
index 0000000..54cd4fb
--- /dev/null
+++ b/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch
@@ -0,0 +1,37 @@
+From a8e7b3e863bc34f4b6aa0a61be1706dcc65392bc Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:11:00 +0900
+Subject: [PATCH] test: introduce inst_recursive() helper function
+
+(cherry picked from commit da0465dc95388afc15598357452afef85035c639)
+
+Related: #2087652
+---
+ test/test-functions | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/test/test-functions b/test/test-functions
+index 01fc90fbf5..4a6436a74b 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2555,6 +2555,20 @@ inst_any() {
+     return 1
+ }
+ 
++inst_recursive() {
++    local p item
++
++    for p in "$@"; do
++        while read -r item; do
++            if [[ -d "$item" ]]; then
++                inst_dir "$item"
++            elif [[ -f "$item" ]]; then
++                inst_simple "$item"
++            fi
++        done < <(find "$p" 2>/dev/null)
++    done
++}
++
+ # image_install [-o ] <file> [<file> ... ]
+ # Install <file> to the test image
+ # -o optionally install the <file> and don't fail, if it is not there
diff --git a/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch b/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch
new file mode 100644
index 0000000..5bfe290
--- /dev/null
+++ b/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch
@@ -0,0 +1,39 @@
+From f7b73ede98fe971ba28def1af4f3e4ab1fc20c6c Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Sat, 12 Mar 2022 00:51:21 +0100
+Subject: [PATCH] hmac/sha256: move size define to sha256.h
+
+(cherry picked from commit e560cf4f71bf237019d982603af3d6be86394788)
+
+Related: #2087652
+---
+ src/basic/hmac.h         | 2 +-
+ src/fundamental/sha256.h | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/basic/hmac.h b/src/basic/hmac.h
+index a5682c439f..e58c1838a3 100644
+--- a/src/basic/hmac.h
++++ b/src/basic/hmac.h
+@@ -4,7 +4,7 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+-#define SHA256_DIGEST_SIZE 32
++#include "sha256.h"
+ 
+ /* Unoptimized implementation based on FIPS 198. 'res' has to be allocated by
+  * the caller. Prefer external OpenSSL functions, and use this only when
+diff --git a/src/fundamental/sha256.h b/src/fundamental/sha256.h
+index abc4167628..e53197f2ef 100644
+--- a/src/fundamental/sha256.h
++++ b/src/fundamental/sha256.h
+@@ -8,6 +8,8 @@
+ 
+ #include "types-fundamental.h"
+ 
++#define SHA256_DIGEST_SIZE 32
++
+ struct sha256_ctx {
+         uint32_t H[8];
+ 
diff --git a/SOURCES/0224-tpm2-support-policies-with-PIN.patch b/SOURCES/0224-tpm2-support-policies-with-PIN.patch
new file mode 100644
index 0000000..9f56c08
--- /dev/null
+++ b/SOURCES/0224-tpm2-support-policies-with-PIN.patch
@@ -0,0 +1,322 @@
+From 98997b288819f4dac7b2ca19c199d71e733bfa92 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Wed, 16 Feb 2022 22:13:42 +0100
+Subject: [PATCH] tpm2: support policies with PIN
+
+Modify TPM2 authentication policy to optionally include an authValue, i.e.
+a password/PIN. We use the "PIN" terminology since it's used by other
+systems such as Windows, even though the PIN is not necessarily numeric.
+
+The pin is hashed via SHA256 to allow for arbitrary length PINs.
+
+v2: fix tpm2_seal in sd-repart
+v3: applied review feedback
+(cherry picked from commit 2f5a892aa0d70aa4f1f10c8dba495ad52bc02bc3)
+
+Related: #2087652
+---
+ src/cryptenroll/cryptenroll-tpm2.c            |  4 +-
+ src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c |  2 +-
+ src/cryptsetup/cryptsetup-tpm2.c              |  2 +-
+ src/partition/repart.c                        |  2 +-
+ src/shared/creds-util.c                       |  2 +
+ src/shared/tpm2-util.c                        | 76 ++++++++++++++++++-
+ src/shared/tpm2-util.h                        |  8 +-
+ 7 files changed, 85 insertions(+), 11 deletions(-)
+
+diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c
+index 801014af11..f5f6b87d0f 100644
+--- a/src/cryptenroll/cryptenroll-tpm2.c
++++ b/src/cryptenroll/cryptenroll-tpm2.c
+@@ -80,7 +80,7 @@ int enroll_tpm2(struct crypt_device *cd,
+ 
+         assert_se(node = crypt_get_device_name(cd));
+ 
+-        r = tpm2_seal(device, pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
++        r = tpm2_seal(device, pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
+         if (r < 0)
+                 return r;
+ 
+@@ -97,7 +97,7 @@ int enroll_tpm2(struct crypt_device *cd,
+ 
+         /* Quick verification that everything is in order, we are not in a hurry after all. */
+         log_debug("Unsealing for verification...");
+-        r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &secret2, &secret2_size);
++        r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, NULL, &secret2, &secret2_size);
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
+index 3d39dfa884..de189c7bed 100644
+--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
+@@ -41,7 +41,7 @@ int acquire_luks2_key(
+                         pcr_mask, pcr_bank,
+                         primary_alg,
+                         key_data, key_data_size,
+-                        policy_hash, policy_hash_size,
++                        policy_hash, policy_hash_size, NULL,
+                         ret_decrypted_key, ret_decrypted_key_size);
+ }
+ 
+diff --git a/src/cryptsetup/cryptsetup-tpm2.c b/src/cryptsetup/cryptsetup-tpm2.c
+index cb139518a7..05d76a684d 100644
+--- a/src/cryptsetup/cryptsetup-tpm2.c
++++ b/src/cryptsetup/cryptsetup-tpm2.c
+@@ -64,7 +64,7 @@ int acquire_tpm2_key(
+                 blob = loaded_blob;
+         }
+ 
+-        return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, ret_decrypted_key, ret_decrypted_key_size);
++        return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, NULL, ret_decrypted_key, ret_decrypted_key_size);
+ }
+ 
+ int find_tpm2_auto_data(
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index 2f70796e58..adfec0b9f3 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -2655,7 +2655,7 @@ static int partition_encrypt(
+                 uint16_t pcr_bank, primary_alg;
+                 int keyslot;
+ 
+-                r = tpm2_seal(arg_tpm2_device, arg_tpm2_pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
++                r = tpm2_seal(arg_tpm2_device, arg_tpm2_pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to seal to TPM2: %m");
+ 
+diff --git a/src/shared/creds-util.c b/src/shared/creds-util.c
+index 4d0681bc10..c4dcc396ac 100644
+--- a/src/shared/creds-util.c
++++ b/src/shared/creds-util.c
+@@ -534,6 +534,7 @@ int encrypt_credential_and_warn(
+ 
+                 r = tpm2_seal(tpm2_device,
+                               tpm2_pcr_mask,
++                              NULL,
+                               &tpm2_key,
+                               &tpm2_key_size,
+                               &tpm2_blob,
+@@ -803,6 +804,7 @@ int decrypt_credential_and_warn(
+                                 le32toh(t->blob_size),
+                                 t->policy_hash_and_blob + le32toh(t->blob_size),
+                                 le32toh(t->policy_hash_size),
++                                NULL,
+                                 &tpm2_key,
+                                 &tpm2_key_size);
+                 if (r < 0)
+diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c
+index 70a2929432..aca7b69ab5 100644
+--- a/src/shared/tpm2-util.c
++++ b/src/shared/tpm2-util.c
+@@ -14,6 +14,7 @@
+ #include "hexdecoct.h"
+ #include "memory-util.h"
+ #include "random-util.h"
++#include "sha256.h"
+ #include "time-util.h"
+ 
+ static void *libtss2_esys_dl = NULL;
+@@ -30,10 +31,12 @@ TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_
+ TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context,  TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion) = NULL;
+ TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle) = NULL;
+ TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues);
++TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3) = NULL;
+ TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest) = NULL;
+ TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs) = NULL;
+ TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle) = NULL;
+ TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType) = NULL;
++TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue) = NULL;
+ TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData) = NULL;
+ 
+ const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc) = NULL;
+@@ -58,10 +61,12 @@ int dlopen_tpm2(void) {
+                         DLSYM_ARG(Esys_Initialize),
+                         DLSYM_ARG(Esys_Load),
+                         DLSYM_ARG(Esys_PCR_Read),
++                        DLSYM_ARG(Esys_PolicyAuthValue),
+                         DLSYM_ARG(Esys_PolicyGetDigest),
+                         DLSYM_ARG(Esys_PolicyPCR),
+                         DLSYM_ARG(Esys_StartAuthSession),
+                         DLSYM_ARG(Esys_Startup),
++                        DLSYM_ARG(Esys_TR_SetAuth),
+                         DLSYM_ARG(Esys_Unseal));
+         if (r < 0)
+                 return r;
+@@ -594,6 +599,7 @@ static int tpm2_make_pcr_session(
+                 ESYS_CONTEXT *c,
+                 uint32_t pcr_mask,
+                 uint16_t pcr_bank, /* If UINT16_MAX, pick best bank automatically, otherwise specify bank explicitly. */
++                bool use_pin,
+                 ESYS_TR *ret_session,
+                 TPM2B_DIGEST **ret_policy_digest,
+                 TPMI_ALG_HASH *ret_pcr_bank) {
+@@ -669,6 +675,21 @@ static int tpm2_make_pcr_session(
+                 goto finish;
+         }
+ 
++        if (use_pin) {
++                rc = sym_Esys_PolicyAuthValue(
++                                c,
++                                session,
++                                ESYS_TR_NONE,
++                                ESYS_TR_NONE,
++                                ESYS_TR_NONE);
++                if (rc != TSS2_RC_SUCCESS) {
++                        r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
++                                            "Failed to add authValue policy to TPM: %s",
++                                            sym_Tss2_RC_Decode(rc));
++                        goto finish;
++                }
++        }
++
+         if (DEBUG_LOGGING || ret_policy_digest) {
+                 log_debug("Acquiring policy digest.");
+ 
+@@ -717,9 +738,22 @@ finish:
+         return r;
+ }
+ 
++static void hash_pin(const char *pin, size_t len, uint8_t ret_digest[static SHA256_DIGEST_SIZE]) {
++        struct sha256_ctx hash;
++
++        assert(pin);
++
++        sha256_init_ctx(&hash);
++        sha256_process_bytes(pin, len, &hash);
++        sha256_finish_ctx(&hash, ret_digest);
++
++        explicit_bzero_safe(&hash, sizeof(hash));
++}
++
+ int tpm2_seal(
+                 const char *device,
+                 uint32_t pcr_mask,
++                const char *pin,
+                 void **ret_secret,
+                 size_t *ret_secret_size,
+                 void **ret_blob,
+@@ -782,7 +816,8 @@ int tpm2_seal(
+         if (r < 0)
+                 return r;
+ 
+-        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, UINT16_MAX, NULL, &policy_digest, &pcr_bank);
++        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, UINT16_MAX, !!pin, NULL, &policy_digest,
++                                  &pcr_bank);
+         if (r < 0)
+                 goto finish;
+ 
+@@ -813,6 +848,10 @@ int tpm2_seal(
+                 .size = sizeof(hmac_sensitive.sensitive),
+                 .sensitive.data.size = 32,
+         };
++        if (pin) {
++                hash_pin(pin, strlen(pin), hmac_sensitive.sensitive.userAuth.buffer);
++                hmac_sensitive.sensitive.userAuth.size = SHA256_DIGEST_SIZE;
++        }
+         assert(sizeof(hmac_sensitive.sensitive.data.buffer) >= hmac_sensitive.sensitive.data.size);
+ 
+         (void) tpm2_credit_random(c.esys_context);
+@@ -910,6 +949,7 @@ int tpm2_seal(
+         r = 0;
+ 
+ finish:
++        explicit_bzero_safe(&hmac_sensitive, sizeof(hmac_sensitive));
+         primary = flush_context_verbose(c.esys_context, primary);
+         return r;
+ }
+@@ -923,6 +963,7 @@ int tpm2_unseal(
+                 size_t blob_size,
+                 const void *known_policy_hash,
+                 size_t known_policy_hash_size,
++                const char *pin,
+                 void **ret_secret,
+                 size_t *ret_secret_size) {
+ 
+@@ -978,7 +1019,7 @@ int tpm2_unseal(
+         if (r < 0)
+                 return r;
+ 
+-        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, pcr_bank, &session, &policy_digest, NULL);
++        r = tpm2_make_pcr_session(c.esys_context, pcr_mask, pcr_bank, !!pin, &session, &policy_digest, NULL);
+         if (r < 0)
+                 goto finish;
+ 
+@@ -1005,11 +1046,38 @@ int tpm2_unseal(
+                         &public,
+                         &hmac_key);
+         if (rc != TSS2_RC_SUCCESS) {
+-                r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+-                                    "Failed to load HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc));
++                /* If we're in dictionary attack lockout mode, we should see a lockout error here, which we
++                 * need to translate for the caller. */
++                if (rc == TPM2_RC_LOCKOUT)
++                        r = log_error_errno(
++                                        SYNTHETIC_ERRNO(ENOLCK),
++                                        "TPM2 device is in dictionary attack lockout mode.");
++                else
++                        r = log_error_errno(
++                                        SYNTHETIC_ERRNO(ENOTRECOVERABLE),
++                                        "Failed to load HMAC key in TPM: %s",
++                                        sym_Tss2_RC_Decode(rc));
+                 goto finish;
+         }
+ 
++        if (pin) {
++                TPM2B_AUTH auth = {
++                        .size = SHA256_DIGEST_SIZE
++                };
++
++                hash_pin(pin, strlen(pin), auth.buffer);
++
++                rc = sym_Esys_TR_SetAuth(c.esys_context, hmac_key, &auth);
++                explicit_bzero_safe(&auth, sizeof(auth));
++                if (rc != TSS2_RC_SUCCESS) {
++                        r = log_error_errno(
++                                        SYNTHETIC_ERRNO(ENOTRECOVERABLE),
++                                        "Failed to load PIN in TPM: %s",
++                                        sym_Tss2_RC_Decode(rc));
++                        goto finish;
++                }
++        }
++
+         log_debug("Unsealing HMAC key.");
+ 
+         rc = sym_Esys_Unseal(
+diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h
+index cb57a847e2..784e9fd11e 100644
+--- a/src/shared/tpm2-util.h
++++ b/src/shared/tpm2-util.h
+@@ -1,6 +1,8 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ #pragma once
+ 
++#include <stdbool.h>
++
+ #include "json.h"
+ #include "macro.h"
+ 
+@@ -20,10 +22,12 @@ extern TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1
+ extern TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context,  TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion);
+ extern TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle);
+ extern TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues);
++extern TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
+ extern TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest);
+ extern TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs);
+ extern TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle);
+ extern TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType);
++extern TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue);
+ extern TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData);
+ 
+ extern const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc);
+@@ -35,8 +39,8 @@ extern TSS2_RC (*sym_Tss2_MU_TPM2B_PUBLIC_Unmarshal)(uint8_t const buffer[], siz
+ 
+ int dlopen_tpm2(void);
+ 
+-int tpm2_seal(const char *device, uint32_t pcr_mask, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size, uint16_t *ret_pcr_bank, uint16_t *ret_primary_alg);
+-int tpm2_unseal(const char *device, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *pcr_hash, size_t pcr_hash_size, void **ret_secret, size_t *ret_secret_size);
++int tpm2_seal(const char *device, uint32_t pcr_mask, const char *pin, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size, uint16_t *ret_pcr_bank, uint16_t *ret_primary_alg);
++int tpm2_unseal(const char *device, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *pcr_hash, size_t pcr_hash_size, const char *pin, void **ret_secret, size_t *ret_secret_size);
+ 
+ #endif
+ 
diff --git a/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch b/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch
new file mode 100644
index 0000000..4115ec9
--- /dev/null
+++ b/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch
@@ -0,0 +1,296 @@
+From 9aecba3db5d381dd915e90931c63513141988d92 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Fri, 18 Feb 2022 11:51:25 +0100
+Subject: [PATCH] cryptenroll: add support for TPM2 pin
+
+Add support for PIN enrollment with TPM2. A new "tpm2-pin" field is
+introduced into metadata to signal that the policy needs to include a
+PIN.
+
+v2: fix tpm2_make_luks2_json in sd-repart
+(cherry picked from commit 6c7a1681052c37ef354a000355c4c0d676113a1a)
+
+Related: #2087652
+---
+ src/cryptenroll/cryptenroll-tpm2.c | 85 ++++++++++++++++++++++++++++--
+ src/cryptenroll/cryptenroll-tpm2.h |  4 +-
+ src/cryptenroll/cryptenroll.c      | 15 +++++-
+ src/partition/repart.c             |  2 +-
+ src/shared/tpm2-util.c             |  5 +-
+ src/shared/tpm2-util.h             |  6 ++-
+ 6 files changed, 107 insertions(+), 10 deletions(-)
+
+diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c
+index f5f6b87d0f..e8c64dd753 100644
+--- a/src/cryptenroll/cryptenroll-tpm2.c
++++ b/src/cryptenroll/cryptenroll-tpm2.c
+@@ -1,7 +1,9 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
++#include "ask-password-api.h"
+ #include "cryptenroll-tpm2.h"
++#include "env-util.h"
+ #include "hexdecoct.h"
+ #include "json.h"
+ #include "memory-util.h"
+@@ -58,11 +60,78 @@ static int search_policy_hash(
+         return -ENOENT; /* Not found */
+ }
+ 
++static int get_pin(char **ret_pin_str, TPM2Flags *ret_flags) {
++        _cleanup_free_ char *pin_str = NULL;
++        int r;
++        TPM2Flags flags = 0;
++
++        assert(ret_pin_str);
++        assert(ret_flags);
++
++        r = getenv_steal_erase("NEWPIN", &pin_str);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++        if (r > 0)
++                flags |= TPM2_FLAGS_USE_PIN;
++        else {
++                for (size_t i = 5;; i--) {
++                        _cleanup_strv_free_erase_ char **pin = NULL, **pin2 = NULL;
++
++                        if (i <= 0)
++                                return log_error_errno(
++                                                SYNTHETIC_ERRNO(ENOKEY), "Too many attempts, giving up.");
++
++                        pin = strv_free_erase(pin);
++                        r = ask_password_auto(
++                                        "Please enter TPM2 PIN:",
++                                        "drive-harddisk",
++                                        NULL,
++                                        "tpm2-pin",
++                                        "cryptenroll.tpm2-pin",
++                                        USEC_INFINITY,
++                                        0,
++                                        &pin);
++                        if (r < 0)
++                                return log_error_errno(r, "Failed to ask for user pin: %m");
++                        assert(strv_length(pin) == 1);
++
++                        r = ask_password_auto(
++                                        "Please enter TPM2 PIN (repeat):",
++                                        "drive-harddisk",
++                                        NULL,
++                                        "tpm2-pin",
++                                        "cryptenroll.tpm2-pin",
++                                        USEC_INFINITY,
++                                        0,
++                                        &pin2);
++                        if (r < 0)
++                                return log_error_errno(r, "Failed to ask for user pin: %m");
++                        assert(strv_length(pin) == 1);
++
++                        if (strv_equal(pin, pin2)) {
++                                pin_str = strdup(*pin);
++                                if (!pin_str)
++                                        return log_oom();
++                                flags |= TPM2_FLAGS_USE_PIN;
++                                break;
++                        }
++
++                        log_error("PINs didn't match, please try again!");
++                }
++        }
++
++        *ret_flags = flags;
++        *ret_pin_str = TAKE_PTR(pin_str);
++
++        return 0;
++}
++
+ int enroll_tpm2(struct crypt_device *cd,
+                 const void *volume_key,
+                 size_t volume_key_size,
+                 const char *device,
+-                uint32_t pcr_mask) {
++                uint32_t pcr_mask,
++                bool use_pin) {
+ 
+         _cleanup_(erase_and_freep) void *secret = NULL, *secret2 = NULL;
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+@@ -71,7 +140,9 @@ int enroll_tpm2(struct crypt_device *cd,
+         _cleanup_free_ void *blob = NULL, *hash = NULL;
+         uint16_t pcr_bank, primary_alg;
+         const char *node;
++        _cleanup_(erase_and_freep) char *pin_str = NULL;
+         int r, keyslot;
++        TPM2Flags flags = 0;
+ 
+         assert(cd);
+         assert(volume_key);
+@@ -80,7 +151,13 @@ int enroll_tpm2(struct crypt_device *cd,
+ 
+         assert_se(node = crypt_get_device_name(cd));
+ 
+-        r = tpm2_seal(device, pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
++        if (use_pin) {
++                r = get_pin(&pin_str, &flags);
++                if (r < 0)
++                        return r;
++        }
++
++        r = tpm2_seal(device, pcr_mask, pin_str, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg);
+         if (r < 0)
+                 return r;
+ 
+@@ -97,7 +174,7 @@ int enroll_tpm2(struct crypt_device *cd,
+ 
+         /* Quick verification that everything is in order, we are not in a hurry after all. */
+         log_debug("Unsealing for verification...");
+-        r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, NULL, &secret2, &secret2_size);
++        r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, pin_str, &secret2, &secret2_size);
+         if (r < 0)
+                 return r;
+ 
+@@ -123,7 +200,7 @@ int enroll_tpm2(struct crypt_device *cd,
+         if (keyslot < 0)
+                 return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node);
+ 
+-        r = tpm2_make_luks2_json(keyslot, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &v);
++        r = tpm2_make_luks2_json(keyslot, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, flags, &v);
+         if (r < 0)
+                 return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m");
+ 
+diff --git a/src/cryptenroll/cryptenroll-tpm2.h b/src/cryptenroll/cryptenroll-tpm2.h
+index d5dd1b0003..742f49b8d5 100644
+--- a/src/cryptenroll/cryptenroll-tpm2.h
++++ b/src/cryptenroll/cryptenroll-tpm2.h
+@@ -7,9 +7,9 @@
+ #include "log.h"
+ 
+ #if HAVE_TPM2
+-int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask);
++int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask, bool use_pin);
+ #else
+-static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask) {
++static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask, bool use_pin) {
+         return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                "TPM2 key enrollment not supported.");
+ }
+diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
+index 7f397f197f..ed19f3f8f4 100644
+--- a/src/cryptenroll/cryptenroll.c
++++ b/src/cryptenroll/cryptenroll.c
+@@ -32,6 +32,7 @@ static char *arg_pkcs11_token_uri = NULL;
+ static char *arg_fido2_device = NULL;
+ static char *arg_tpm2_device = NULL;
+ static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
++static bool arg_tpm2_pin = false;
+ static char *arg_node = NULL;
+ static int *arg_wipe_slots = NULL;
+ static size_t arg_n_wipe_slots = 0;
+@@ -100,6 +101,8 @@ static int help(void) {
+                "                       Enroll a TPM2 device\n"
+                "     --tpm2-pcrs=PCR1+PCR2+PCR3+…\n"
+                "                       Specify TPM2 PCRs to seal against\n"
++               "     --tpm2-with-pin=BOOL\n"
++               "                       Whether to require entering a PIN to unlock the volume\n"
+                "     --wipe-slot=SLOT1,SLOT2,…\n"
+                "                       Wipe specified slots\n"
+                "\nSee the %s for details.\n",
+@@ -121,6 +124,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 ARG_FIDO2_DEVICE,
+                 ARG_TPM2_DEVICE,
+                 ARG_TPM2_PCRS,
++                ARG_TPM2_PIN,
+                 ARG_WIPE_SLOT,
+                 ARG_FIDO2_WITH_PIN,
+                 ARG_FIDO2_WITH_UP,
+@@ -139,6 +143,7 @@ static int parse_argv(int argc, char *argv[]) {
+                 { "fido2-with-user-verification", required_argument, NULL, ARG_FIDO2_WITH_UV    },
+                 { "tpm2-device",                  required_argument, NULL, ARG_TPM2_DEVICE      },
+                 { "tpm2-pcrs",                    required_argument, NULL, ARG_TPM2_PCRS        },
++                { "tpm2-with-pin",                required_argument, NULL, ARG_TPM2_PIN         },
+                 { "wipe-slot",                    required_argument, NULL, ARG_WIPE_SLOT        },
+                 {}
+         };
+@@ -301,6 +306,14 @@ static int parse_argv(int argc, char *argv[]) {
+                         break;
+                 }
+ 
++                case ARG_TPM2_PIN: {
++                        r = parse_boolean_argument("--tpm2-with-pin=", optarg, &arg_tpm2_pin);
++                        if (r < 0)
++                                return r;
++
++                        break;
++                }
++
+                 case ARG_WIPE_SLOT: {
+                         const char *p = optarg;
+ 
+@@ -563,7 +576,7 @@ static int run(int argc, char *argv[]) {
+                 break;
+ 
+         case ENROLL_TPM2:
+-                slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask);
++                slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask, arg_tpm2_pin);
+                 break;
+ 
+         case _ENROLL_TYPE_INVALID:
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index adfec0b9f3..67e379be55 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -2677,7 +2677,7 @@ static int partition_encrypt(
+                 if (keyslot < 0)
+                         return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node);
+ 
+-                r = tpm2_make_luks2_json(keyslot, arg_tpm2_pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &v);
++                r = tpm2_make_luks2_json(keyslot, arg_tpm2_pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, 0, &v);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m");
+ 
+diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c
+index aca7b69ab5..44fe899acd 100644
+--- a/src/shared/tpm2-util.c
++++ b/src/shared/tpm2-util.c
+@@ -1291,6 +1291,7 @@ int tpm2_make_luks2_json(
+                 size_t blob_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
+                 JsonVariant **ret) {
+ 
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *a = NULL;
+@@ -1331,7 +1332,9 @@ int tpm2_make_luks2_json(
+                                        JSON_BUILD_PAIR("tpm2-pcrs", JSON_BUILD_VARIANT(a)),
+                                        JSON_BUILD_PAIR_CONDITION(!!tpm2_pcr_bank_to_string(pcr_bank), "tpm2-pcr-bank", JSON_BUILD_STRING(tpm2_pcr_bank_to_string(pcr_bank))),
+                                        JSON_BUILD_PAIR_CONDITION(!!tpm2_primary_alg_to_string(primary_alg), "tpm2-primary-alg", JSON_BUILD_STRING(tpm2_primary_alg_to_string(primary_alg))),
+-                                       JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size))));
++                                       JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size)),
++                                       JSON_BUILD_PAIR("tpm2-pin", JSON_BUILD_BOOLEAN(flags & TPM2_FLAGS_USE_PIN)))
++                        );
+         if (r < 0)
+                 return r;
+ 
+diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h
+index 784e9fd11e..5a9bcf8c24 100644
+--- a/src/shared/tpm2-util.h
++++ b/src/shared/tpm2-util.h
+@@ -6,6 +6,10 @@
+ #include "json.h"
+ #include "macro.h"
+ 
++typedef enum TPM2Flags {
++        TPM2_FLAGS_USE_PIN = 1 << 0,
++} TPM2Flags;
++
+ #if HAVE_TPM2
+ 
+ #include <tss2/tss2_esys.h>
+@@ -49,7 +53,7 @@ int tpm2_find_device_auto(int log_level, char **ret);
+ 
+ int tpm2_parse_pcrs(const char *s, uint32_t *ret);
+ 
+-int tpm2_make_luks2_json(int keyslot, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, JsonVariant **ret);
++int tpm2_make_luks2_json(int keyslot, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, TPM2Flags flags, JsonVariant **ret);
+ 
+ #define TPM2_PCRS_MAX 24
+ 
diff --git a/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch b/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch
new file mode 100644
index 0000000..94a7c3c
--- /dev/null
+++ b/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch
@@ -0,0 +1,292 @@
+From 2418e9c1409ba04ddff516a83d83b2daa3417832 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Fri, 18 Feb 2022 11:56:02 +0100
+Subject: [PATCH] cryptsetup: add support for TPM2 pin
+
+Extend cryptsetup for TPM2 pin entry, similar to FIDO2.
+
+(cherry picked from commit bea344a1a426e615ba87b66b6d3ff4b265c57a95)
+
+Related: #2087652
+---
+ src/cryptsetup/cryptsetup-tpm2.c | 108 ++++++++++++++++++++++++++++++-
+ src/cryptsetup/cryptsetup-tpm2.h |  16 ++++-
+ src/cryptsetup/cryptsetup.c      |  16 ++++-
+ 3 files changed, 135 insertions(+), 5 deletions(-)
+
+diff --git a/src/cryptsetup/cryptsetup-tpm2.c b/src/cryptsetup/cryptsetup-tpm2.c
+index 05d76a684d..b84d64def8 100644
+--- a/src/cryptsetup/cryptsetup-tpm2.c
++++ b/src/cryptsetup/cryptsetup-tpm2.c
+@@ -1,7 +1,9 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
++#include "ask-password-api.h"
+ #include "cryptsetup-tpm2.h"
++#include "env-util.h"
+ #include "fileio.h"
+ #include "hexdecoct.h"
+ #include "json.h"
+@@ -9,6 +11,47 @@
+ #include "random-util.h"
+ #include "tpm2-util.h"
+ 
++static int get_pin(usec_t until, AskPasswordFlags ask_password_flags, bool headless, char **ret_pin_str) {
++        _cleanup_free_ char *pin_str = NULL;
++        _cleanup_strv_free_erase_ char **pin = NULL;
++        int r;
++
++        assert(ret_pin_str);
++
++        r = getenv_steal_erase("PIN", &pin_str);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++        if (!r) {
++                if (headless)
++                        return log_error_errno(
++                                        SYNTHETIC_ERRNO(ENOPKG),
++                                        "PIN querying disabled via 'headless' option. "
++                                        "Use the '$PIN' environment variable.");
++
++                pin = strv_free_erase(pin);
++                r = ask_password_auto(
++                                "Please enter TPM2 PIN:",
++                                "drive-harddisk",
++                                NULL,
++                                "tpm2-pin",
++                                "cryptsetup.tpm2-pin",
++                                until,
++                                ask_password_flags,
++                                &pin);
++                if (r < 0)
++                        return log_error_errno(r, "Failed to ask for user pin: %m");
++                assert(strv_length(pin) == 1);
++
++                pin_str = strdup(pin[0]);
++                if (!pin_str)
++                        return log_oom();
++        }
++
++        *ret_pin_str = TAKE_PTR(pin_str);
++
++        return r;
++}
++
+ int acquire_tpm2_key(
+                 const char *volume_name,
+                 const char *device,
+@@ -22,6 +65,10 @@ int acquire_tpm2_key(
+                 size_t key_data_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
++                usec_t until,
++                bool headless,
++                AskPasswordFlags ask_password_flags,
+                 void **ret_decrypted_key,
+                 size_t *ret_decrypted_key_size) {
+ 
+@@ -64,7 +111,51 @@ int acquire_tpm2_key(
+                 blob = loaded_blob;
+         }
+ 
+-        return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, NULL, ret_decrypted_key, ret_decrypted_key_size);
++        if (!(flags & TPM2_FLAGS_USE_PIN))
++                return tpm2_unseal(
++                                device,
++                                pcr_mask,
++                                pcr_bank,
++                                primary_alg,
++                                blob,
++                                blob_size,
++                                policy_hash,
++                                policy_hash_size,
++                                NULL,
++                                ret_decrypted_key,
++                                ret_decrypted_key_size);
++
++        for (int i = 5;; i--) {
++                _cleanup_(erase_and_freep) char *pin_str = NULL;
++
++                if (i <= 0)
++                        return -EACCES;
++
++                r = get_pin(until, ask_password_flags, headless, &pin_str);
++                if (r < 0)
++                        return r;
++
++                r = tpm2_unseal(
++                                device,
++                                pcr_mask,
++                                pcr_bank,
++                                primary_alg,
++                                blob,
++                                blob_size,
++                                policy_hash,
++                                policy_hash_size,
++                                pin_str,
++                                ret_decrypted_key,
++                                ret_decrypted_key_size);
++                /* We get this error in case there is an authentication policy mismatch. This should
++                 * not happen, but this avoids confusing behavior, just in case. */
++                if (IN_SET(r, -EPERM, -ENOLCK))
++                        return r;
++                if (r < 0)
++                        continue;
++
++                return r;
++        }
+ }
+ 
+ int find_tpm2_auto_data(
+@@ -79,11 +170,13 @@ int find_tpm2_auto_data(
+                 void **ret_policy_hash,
+                 size_t *ret_policy_hash_size,
+                 int *ret_keyslot,
+-                int *ret_token) {
++                int *ret_token,
++                TPM2Flags *ret_flags) {
+ 
+         _cleanup_free_ void *blob = NULL, *policy_hash = NULL;
+         size_t blob_size = 0, policy_hash_size = 0;
+         int r, keyslot = -1, token = -1;
++        TPM2Flags flags = 0;
+         uint32_t pcr_mask = 0;
+         uint16_t pcr_bank = UINT16_MAX; /* default: pick automatically */
+         uint16_t primary_alg = TPM2_ALG_ECC; /* ECC was the only supported algorithm in systemd < 250, use that as implied default, for compatibility */
+@@ -196,6 +289,16 @@ int find_tpm2_auto_data(
+                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                "Invalid base64 data in 'tpm2-policy-hash' field.");
+ 
++                w = json_variant_by_key(v, "tpm2-pin");
++                if (w) {
++                        if (!json_variant_is_boolean(w))
++                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
++                                                       "TPM2 PIN policy is not a boolean.");
++
++                        if (json_variant_boolean(w))
++                                flags |= TPM2_FLAGS_USE_PIN;
++                }
++
+                 break;
+         }
+ 
+@@ -215,6 +318,7 @@ int find_tpm2_auto_data(
+         *ret_token = token;
+         *ret_pcr_bank = pcr_bank;
+         *ret_primary_alg = primary_alg;
++        *ret_flags = flags;
+ 
+         return 0;
+ }
+diff --git a/src/cryptsetup/cryptsetup-tpm2.h b/src/cryptsetup/cryptsetup-tpm2.h
+index bd04620462..ab16d0a18f 100644
+--- a/src/cryptsetup/cryptsetup-tpm2.h
++++ b/src/cryptsetup/cryptsetup-tpm2.h
+@@ -3,9 +3,11 @@
+ 
+ #include <sys/types.h>
+ 
++#include "ask-password-api.h"
+ #include "cryptsetup-util.h"
+ #include "log.h"
+ #include "time-util.h"
++#include "tpm2-util.h"
+ 
+ #if HAVE_TPM2
+ 
+@@ -22,6 +24,10 @@ int acquire_tpm2_key(
+                 size_t key_data_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
++                usec_t until,
++                bool headless,
++                AskPasswordFlags ask_password_flags,
+                 void **ret_decrypted_key,
+                 size_t *ret_decrypted_key_size);
+ 
+@@ -37,7 +43,8 @@ int find_tpm2_auto_data(
+                 void **ret_policy_hash,
+                 size_t *ret_policy_hash_size,
+                 int *ret_keyslot,
+-                int *ret_token);
++                int *ret_token,
++                TPM2Flags *ret_flags);
+ 
+ #else
+ 
+@@ -54,6 +61,10 @@ static inline int acquire_tpm2_key(
+                 size_t key_data_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
++                usec_t until,
++                bool headless,
++                AskPasswordFlags ask_password_flags,
+                 void **ret_decrypted_key,
+                 size_t *ret_decrypted_key_size) {
+ 
+@@ -73,7 +84,8 @@ static inline int find_tpm2_auto_data(
+                 void **ret_policy_hash,
+                 size_t *ret_policy_hash_size,
+                 int *ret_keyslot,
+-                int *ret_token) {
++                int *ret_token,
++                TPM2Flags *ret_flags) {
+ 
+         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+                                "TPM2 support not available.");
+diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
+index dddd976dc8..ede0f7ed0b 100644
+--- a/src/cryptsetup/cryptsetup.c
++++ b/src/cryptsetup/cryptsetup.c
+@@ -1301,9 +1301,15 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2(
+                                         key_file, arg_keyfile_size, arg_keyfile_offset,
+                                         key_data, key_data_size,
+                                         NULL, 0, /* we don't know the policy hash */
++                                        0, /* PIN is currently unhandled in this case */
++                                        until,
++                                        arg_headless,
++                                        arg_ask_password_flags,
+                                         &decrypted_key, &decrypted_key_size);
+                         if (r >= 0)
+                                 break;
++                        if (IN_SET(r, -EACCES, -ENOLCK))
++                                return log_error_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking.");
+                         if (ERRNO_IS_NOT_SUPPORTED(r)) /* TPM2 support not compiled in? */
+                                 return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 support not available, falling back to traditional unlocking.");
+                         if (r != -EAGAIN) /* EAGAIN means: no tpm2 chip found */
+@@ -1335,6 +1341,7 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2(
+                         for (;;) {
+                                 uint32_t pcr_mask;
+                                 uint16_t pcr_bank, primary_alg;
++                                TPM2Flags tpm2_flags;
+ 
+                                 r = find_tpm2_auto_data(
+                                                 cd,
+@@ -1346,7 +1353,8 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2(
+                                                 &blob, &blob_size,
+                                                 &policy_hash, &policy_hash_size,
+                                                 &keyslot,
+-                                                &token);
++                                                &token,
++                                                &tpm2_flags);
+                                 if (r == -ENXIO)
+                                         /* No further TPM2 tokens found in the LUKS2 header. */
+                                         return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN),
+@@ -1369,7 +1377,13 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2(
+                                                 NULL, 0, 0, /* no key file */
+                                                 blob, blob_size,
+                                                 policy_hash, policy_hash_size,
++                                                tpm2_flags,
++                                                until,
++                                                arg_headless,
++                                                arg_ask_password_flags,
+                                                 &decrypted_key, &decrypted_key_size);
++                                if (IN_SET(r, -EACCES, -ENOLCK))
++                                        return log_error_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking.");
+                                 if (r != -EPERM)
+                                         break;
+ 
diff --git a/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch b/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch
new file mode 100644
index 0000000..4ac80fe
--- /dev/null
+++ b/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch
@@ -0,0 +1,218 @@
+From 1b7d251ab836ba703913eda149f05bd03559c483 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Fri, 18 Feb 2022 12:00:12 +0100
+Subject: [PATCH] cryptsetup: add libcryptsetup TPM2 PIN support
+
+This is unfinished: we don't have any way to actually query for PINs
+interactively this way. It is similar to FIDO2 and PKCS#11 in this
+regard.
+
+Nonetheless, this code is capable of validating and dumping tokens, so
+it is already useful as-is.
+
+(cherry picked from commit 1f895adac287b5f1b6b854caa586093616ccc172)
+
+Related: #2087652
+---
+ .../cryptsetup-token-systemd-tpm2.c           | 18 +++++++++--
+ src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c | 32 +++++++++++++++++--
+ src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h |  6 +++-
+ 3 files changed, 51 insertions(+), 5 deletions(-)
+
+diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c
+index e2d28a5dda..23df974999 100644
+--- a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c
++++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c
+@@ -6,8 +6,10 @@
+ #include "cryptsetup-token.h"
+ #include "cryptsetup-token-util.h"
+ #include "hexdecoct.h"
++#include "json.h"
+ #include "luks2-tpm2.h"
+ #include "memory-util.h"
++#include "strv.h"
+ #include "tpm2-util.h"
+ #include "version.h"
+ 
+@@ -78,7 +80,8 @@ _public_ int cryptsetup_token_open(
+         if (usrptr)
+                 params = *(systemd_tpm2_plugin_params *)usrptr;
+ 
+-        r = parse_luks2_tpm2_data(json, params.search_pcr_mask, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash);
++        TPM2Flags flags = 0;
++        r = parse_luks2_tpm2_data(json, params.search_pcr_mask, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash, &flags);
+         if (r < 0)
+                 return log_debug_open_error(cd, r);
+ 
+@@ -101,6 +104,7 @@ _public_ int cryptsetup_token_open(
+                         blob_size,
+                         policy_hash,
+                         policy_hash_size,
++                        flags,
+                         &decrypted_key,
+                         &decrypted_key_size);
+         if (r < 0)
+@@ -135,6 +139,7 @@ _public_ void cryptsetup_token_dump(
+                 const char *json /* validated 'systemd-tpm2' token if cryptsetup_token_validate is defined */) {
+ 
+         int r;
++        TPM2Flags flags = 0;
+         uint32_t pcr_mask;
+         uint16_t pcr_bank, primary_alg;
+         size_t decoded_blob_size;
+@@ -144,7 +149,7 @@ _public_ void cryptsetup_token_dump(
+ 
+         assert(json);
+ 
+-        r = parse_luks2_tpm2_data(json, UINT32_MAX, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash);
++        r = parse_luks2_tpm2_data(json, UINT32_MAX, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash, &flags);
+         if (r < 0)
+                 return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " metadata: %m.");
+ 
+@@ -171,6 +176,7 @@ _public_ void cryptsetup_token_dump(
+         crypt_log(cd, "\ttpm2-primary-alg:  %s\n", strna(tpm2_primary_alg_to_string(primary_alg)));
+         crypt_log(cd, "\ttpm2-blob:  %s\n", blob_str);
+         crypt_log(cd, "\ttpm2-policy-hash:" CRYPT_DUMP_LINE_SEP "%s\n", policy_hash_str);
++        crypt_log(cd, "\ttpm2-pin: %s\n", true_false(flags & TPM2_FLAGS_USE_PIN));
+ }
+ 
+ /*
+@@ -268,5 +274,13 @@ _public_ int cryptsetup_token_validate(
+         if (r < 0)
+                 return crypt_log_debug_errno(cd, r, "Invalid base64 data in 'tpm2-policy-hash' field: %m");
+ 
++        w = json_variant_by_key(v, "tpm2-pin");
++        if (w) {
++                if (!json_variant_is_boolean(w)) {
++                        crypt_log_debug(cd, "TPM2 PIN policy is not a boolean.");
++                        return 1;
++                }
++        }
++
+         return 0;
+ }
+diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
+index de189c7bed..0d6e4bc0f8 100644
+--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c
+@@ -1,11 +1,15 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
+ #include "alloc-util.h"
++#include "ask-password-api.h"
++#include "env-util.h"
+ #include "hexdecoct.h"
+ #include "json.h"
++#include "log.h"
+ #include "luks2-tpm2.h"
+ #include "parse-util.h"
+ #include "random-util.h"
++#include "strv.h"
+ #include "tpm2-util.h"
+ 
+ int acquire_luks2_key(
+@@ -17,10 +21,12 @@ int acquire_luks2_key(
+                 size_t key_data_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
+                 void **ret_decrypted_key,
+                 size_t *ret_decrypted_key_size) {
+ 
+         _cleanup_free_ char *auto_device = NULL;
++        _cleanup_(erase_and_freep) char *pin_str = NULL;
+         int r;
+ 
+         assert(ret_decrypted_key);
+@@ -36,12 +42,22 @@ int acquire_luks2_key(
+                 device = auto_device;
+         }
+ 
++        r = getenv_steal_erase("PIN", &pin_str);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++        if (!r) {
++                /* PIN entry is not supported by plugin, let it fallback, possibly to sd-cryptsetup's
++                 * internal handling. */
++                if (flags & TPM2_FLAGS_USE_PIN)
++                        return -EOPNOTSUPP;
++        }
++
+         return tpm2_unseal(
+                         device,
+                         pcr_mask, pcr_bank,
+                         primary_alg,
+                         key_data, key_data_size,
+-                        policy_hash, policy_hash_size, NULL,
++                        policy_hash, policy_hash_size, pin_str,
+                         ret_decrypted_key, ret_decrypted_key_size);
+ }
+ 
+@@ -53,7 +69,8 @@ int parse_luks2_tpm2_data(
+                 uint16_t *ret_pcr_bank,
+                 uint16_t *ret_primary_alg,
+                 char **ret_base64_blob,
+-                char **ret_hex_policy_hash) {
++                char **ret_hex_policy_hash,
++                TPM2Flags *ret_flags) {
+ 
+         int r;
+         JsonVariant *w, *e;
+@@ -61,6 +78,7 @@ int parse_luks2_tpm2_data(
+         uint16_t pcr_bank = UINT16_MAX, primary_alg = TPM2_ALG_ECC;
+         _cleanup_free_ char *base64_blob = NULL, *hex_policy_hash = NULL;
+         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
++        TPM2Flags flags = 0;
+ 
+         assert(json);
+         assert(ret_pcr_mask);
+@@ -138,11 +156,21 @@ int parse_luks2_tpm2_data(
+         if (!hex_policy_hash)
+                 return -ENOMEM;
+ 
++        w = json_variant_by_key(v, "tpm2-pin");
++        if (w) {
++                if (!json_variant_is_boolean(w))
++                        return -EINVAL;
++
++                if (json_variant_boolean(w))
++                        flags |= TPM2_FLAGS_USE_PIN;
++        }
++
+         *ret_pcr_mask = pcr_mask;
+         *ret_pcr_bank = pcr_bank;
+         *ret_primary_alg = primary_alg;
+         *ret_base64_blob = TAKE_PTR(base64_blob);
+         *ret_hex_policy_hash = TAKE_PTR(hex_policy_hash);
++        *ret_flags = flags;
+ 
+         return 0;
+ }
+diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h
+index 0c93ea82cc..34c93216ee 100644
+--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h
++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h
+@@ -2,6 +2,8 @@
+ 
+ #pragma once
+ 
++#include "tpm2-util.h"
++
+ struct crypt_device;
+ 
+ int acquire_luks2_key(
+@@ -13,6 +15,7 @@ int acquire_luks2_key(
+                 size_t key_data_size,
+                 const void *policy_hash,
+                 size_t policy_hash_size,
++                TPM2Flags flags,
+                 void **ret_decrypted_key,
+                 size_t *ret_decrypted_key_size);
+ 
+@@ -23,4 +26,5 @@ int parse_luks2_tpm2_data(
+                 uint16_t *ret_pcr_bank,
+                 uint16_t *ret_primary_alg,
+                 char **ret_base64_blob,
+-                char **ret_hex_policy_hash);
++                char **ret_hex_policy_hash,
++                TPM2Flags *ret_flags);
diff --git a/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch b/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch
new file mode 100644
index 0000000..6490007
--- /dev/null
+++ b/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch
@@ -0,0 +1,41 @@
+From ae4da9f80eb84469b0fbb3e02bfe95751d4513dd Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Fri, 18 Feb 2022 12:51:00 +0100
+Subject: [PATCH] cryptenroll: add TPM2 PIN documentation
+
+(cherry picked from commit caeb5604f9fd8e7aa43c7a1c853f8a7597240b17)
+
+Related: #2087652
+---
+ man/systemd-cryptenroll.xml | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/man/systemd-cryptenroll.xml b/man/systemd-cryptenroll.xml
+index d5fdb54cdd..58a4626768 100644
+--- a/man/systemd-cryptenroll.xml
++++ b/man/systemd-cryptenroll.xml
+@@ -299,6 +299,24 @@
+         signatures likely will validate against pre-existing certificates.</para></listitem>
+       </varlistentry>
+ 
++      <varlistentry>
++        <term><option>--tpm2-with-pin=</option><replaceable>BOOL</replaceable></term>
++
++        <listitem><para>When enrolling a TPM2 device, controls whether to require the user to enter a PIN
++        when unlocking the volume in addition to PCR binding, based on TPM2 policy authentication. Defaults
++        to <literal>no</literal>. Despite being called PIN, any character can be used, not just numbers.
++        </para>
++
++        <para>Note that incorrect PIN entry when unlocking increments the
++        TPM dictionary attack lockout mechanism, and may lock out users for a prolonged time, depending on
++        its configuration. The lockout mechanism is a global property of the TPM,
++        <command>systemd-cryptenroll</command> does not control or configure the lockout mechanism. You may
++        use tpm2-tss tools to inspect or configure the dictionary attack lockout, with
++        <citerefentry><refentrytitle>tpm2_getcap</refentrytitle><manvolnum>1</manvolnum></citerefentry> and
++        <citerefentry><refentrytitle>tpm2_dictionarylockout</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++        commands, respectively.</para></listitem>
++      </varlistentry>
++
+       <varlistentry>
+         <term><option>--wipe-slot=</option><arg rep="repeat">SLOT</arg></term>
+ 
diff --git a/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch b/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch
new file mode 100644
index 0000000..536fbc8
--- /dev/null
+++ b/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch
@@ -0,0 +1,74 @@
+From d3615420322bf3c9666fe5580317ed0aec20fe62 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Fri, 18 Feb 2022 21:13:41 +0100
+Subject: [PATCH] cryptsetup: add manual TPM2 PIN configuration
+
+Handle the case where TPM2 metadata is not available and explicitly
+provided in crypttab. This adds a new "tpm2-pin" option to crypttab
+options for this purpose.
+
+(cherry picked from commit 4005d41ef0d007021deb0536800fc782ff670420)
+
+Related: #2087652
+---
+ man/crypttab.xml            |  8 ++++++++
+ src/cryptsetup/cryptsetup.c | 13 ++++++++++++-
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/man/crypttab.xml b/man/crypttab.xml
+index ac5c6ef666..22411166a8 100644
+--- a/man/crypttab.xml
++++ b/man/crypttab.xml
+@@ -677,6 +677,14 @@
+         of the current PCR state.</para></listitem>
+       </varlistentry>
+ 
++      <varlistentry>
++        <term><option>tpm2-pin=</option></term>
++
++        <listitem><para>Takes a boolean argument, defaults to <literal>false</literal>. Controls whether
++        TPM2 volume unlocking is bound to a PIN in addition to PCRs. Similarly, this option is only useful
++        when TPM2 enrollment metadata is not available.</para></listitem>
++      </varlistentry>
++
+       <varlistentry>
+         <term><option>token-timeout=</option></term>
+ 
+diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
+index ede0f7ed0b..fc1f37730f 100644
+--- a/src/cryptsetup/cryptsetup.c
++++ b/src/cryptsetup/cryptsetup.c
+@@ -82,6 +82,7 @@ static char *arg_fido2_rp_id = NULL;
+ static char *arg_tpm2_device = NULL;
+ static bool arg_tpm2_device_auto = false;
+ static uint32_t arg_tpm2_pcr_mask = UINT32_MAX;
++static bool arg_tpm2_pin = false;
+ static bool arg_headless = false;
+ static usec_t arg_token_timeout_usec = 30*USEC_PER_SEC;
+ 
+@@ -387,6 +388,16 @@ static int parse_one_option(const char *option) {
+                                 arg_tpm2_pcr_mask |= mask;
+                 }
+ 
++        } else if ((val = startswith(option, "tpm2-pin="))) {
++
++                r = parse_boolean(val);
++                if (r < 0) {
++                        log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
++                        return 0;
++                }
++
++                arg_tpm2_pin = r;
++
+         } else if ((val = startswith(option, "try-empty-password="))) {
+ 
+                 r = parse_boolean(val);
+@@ -1301,7 +1312,7 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2(
+                                         key_file, arg_keyfile_size, arg_keyfile_offset,
+                                         key_data, key_data_size,
+                                         NULL, 0, /* we don't know the policy hash */
+-                                        0, /* PIN is currently unhandled in this case */
++                                        arg_tpm2_pin,
+                                         until,
+                                         arg_headless,
+                                         arg_ask_password_flags,
diff --git a/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch b/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch
new file mode 100644
index 0000000..9e73f69
--- /dev/null
+++ b/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch
@@ -0,0 +1,166 @@
+From 6a31abd9fdfe9b08c169b315dd3bc18abbe200b0 Mon Sep 17 00:00:00 2001
+From: Grigori Goronzy <greg@chown.ath.cx>
+Date: Thu, 24 Feb 2022 01:28:29 +0100
+Subject: [PATCH] cryptenroll: add tests for TPM2 unlocking
+
+Add tests for enrolling and unlocking. Various cases are tested:
+
+- Default PCR 7 policy w/o PIN, good and bad cases (wrong PCR)
+- PCR 7 + PIN policy, good and bad cases (wrong PCR, wrong PIN)
+- Non-default PCR 0+7 policy w/o PIN, good and bad cases (wrong PCR 0)
+
+v2: rename test, fix tss2 library installation, fix CI failures
+v3: fix ppc64, load module
+(cherry picked from commit fd8b9248206734b655de503f8bb16c2d154934ed)Q
+
+Related: #2087652
+---
+ test/TEST-70-TPM2/Makefile      |  6 +++++
+ test/TEST-70-TPM2/test.sh       | 40 +++++++++++++++++++++++++++
+ test/test-functions             |  2 +-
+ test/units/testsuite-70.service |  7 +++++
+ test/units/testsuite-70.sh      | 48 +++++++++++++++++++++++++++++++++
+ 5 files changed, 102 insertions(+), 1 deletion(-)
+ create mode 100644 test/TEST-70-TPM2/Makefile
+ create mode 100755 test/TEST-70-TPM2/test.sh
+ create mode 100644 test/units/testsuite-70.service
+ create mode 100755 test/units/testsuite-70.sh
+
+diff --git a/test/TEST-70-TPM2/Makefile b/test/TEST-70-TPM2/Makefile
+new file mode 100644
+index 0000000000..9f65d4ca4f
+--- /dev/null
++++ b/test/TEST-70-TPM2/Makefile
+@@ -0,0 +1,6 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++
++all setup run clean clean-again:
++	@TEST_BASE_DIR=../ ./test.sh --$@
++
++.PHONY: all setup run clean clean-again
+diff --git a/test/TEST-70-TPM2/test.sh b/test/TEST-70-TPM2/test.sh
+new file mode 100755
+index 0000000000..d716614bcf
+--- /dev/null
++++ b/test/TEST-70-TPM2/test.sh
+@@ -0,0 +1,40 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="cryptenroll/cryptsetup with TPM2 devices"
++IMAGE_NAME="tpm2"
++TEST_NO_NSPAWN=1
++TEST_REQUIRE_INSTALL_TESTS=0
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++command -v swtpm >/dev/null 2>&1 || exit 0
++command -v tpm2_pcrextend >/dev/null 2>&1 || exit 0
++
++test_append_files() {
++    (
++        local workspace="${1:?}"
++
++        instmods tpm tpm_tis tpm_ibmvtpm
++        install_dmevent
++        generate_module_dependencies
++        inst_binary tpm2_pcrextend
++    )
++}
++
++machine="$(uname -m)"
++tpmdevice="tpm-tis"
++if [ "$machine" = "ppc64le" ]; then
++    # tpm-spapr support was introduced in qemu 5.0.0. Skip test for old qemu versions.
++    qemu_min_version "5.0.0" || exit 0
++    tpmdevice="tpm-spapr"
++fi
++
++tpmstate=$(mktemp -d)
++swtpm socket --tpm2 --tpmstate dir="$tpmstate" --ctrl type=unixio,path="$tpmstate/sock" &
++trap 'kill %%; rm -rf $tpmstate' SIGINT EXIT
++QEMU_OPTIONS="-chardev socket,id=chrtpm,path=$tpmstate/sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device $tpmdevice,tpmdev=tpm0"
++
++do_test "$@"
+diff --git a/test/test-functions b/test/test-functions
+index 4a6436a74b..050fefaf1b 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1198,7 +1198,7 @@ install_missing_libraries() {
+     local lib path
+     # A number of dependencies is now optional via dlopen, so the install
+     # script will not pick them up, since it looks at linkage.
+-    for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu libfido2 libbpf libelf libdw; do
++    for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw; do
+         ddebug "Searching for $lib via pkg-config"
+         if pkg-config --exists "$lib"; then
+                 path="$(pkg-config --variable=libdir "$lib")"
+diff --git a/test/units/testsuite-70.service b/test/units/testsuite-70.service
+new file mode 100644
+index 0000000000..c13c2d51a3
+--- /dev/null
++++ b/test/units/testsuite-70.service
+@@ -0,0 +1,7 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=TEST-70-TPM2
++
++[Service]
++Type=oneshot
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+diff --git a/test/units/testsuite-70.sh b/test/units/testsuite-70.sh
+new file mode 100755
+index 0000000000..f395ef4e5e
+--- /dev/null
++++ b/test/units/testsuite-70.sh
+@@ -0,0 +1,48 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -ex
++
++export SYSTEMD_LOG_LEVEL=debug
++
++
++# Prepare fresh disk image
++img="/var/tmp/test.img"
++dd if=/dev/zero of=$img bs=1024k count=20 status=none
++echo -n passphrase >/tmp/passphrase
++cryptsetup luksFormat -q --use-urandom $img /tmp/passphrase
++
++# Enroll unlock with default PCR policy
++env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto $img
++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1
++/usr/lib/systemd/systemd-cryptsetup detach test-volume
++
++# Check with wrong PCR
++tpm2_pcrextend 7:sha256=0000000000000000000000000000000000000000000000000000000000000000
++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; }
++
++# Enroll unlock with PCR+PIN policy
++systemd-cryptenroll --wipe-slot=tpm2 $img
++env PASSWORD=passphrase NEWPIN=123456 systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=true $img
++env PIN=123456 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1
++/usr/lib/systemd/systemd-cryptsetup detach test-volume
++
++# Check failure with wrong PIN
++env PIN=123457 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; }
++
++# Check failure with wrong PCR (and correct PIN)
++tpm2_pcrextend 7:sha256=0000000000000000000000000000000000000000000000000000000000000000
++env PIN=123456 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; }
++
++# Enroll unlock with PCR 0+7
++systemd-cryptenroll --wipe-slot=tpm2 $img
++env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 $img
++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1
++/usr/lib/systemd/systemd-cryptsetup detach test-volume
++
++# Check with wrong PCR 0
++tpm2_pcrextend 0:sha256=0000000000000000000000000000000000000000000000000000000000000000
++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && exit 1
++
++echo OK >/testok
++
++exit 0
diff --git a/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch b/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch
new file mode 100644
index 0000000..d748e40
--- /dev/null
+++ b/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch
@@ -0,0 +1,434 @@
+From 75e45d84d9391e29d49f6ec05272c3fb9a92bbd8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Sat, 19 Feb 2022 00:08:39 +0100
+Subject: [PATCH] env-util: replace unsetenv_erase() by new
+ getenv_steal_erase() helper
+
+The new helper combines a bunch of steps every invocation of
+unsetenv_erase() did so far: getenv() + strdup() + unsetenv_erase().
+Let's unify this into one helper that is harder to use incorrectly. It's
+in inspired by TAKE_PTR() in a way: get the env var out and invalidate
+where it was before.
+
+(cherry picked from commit e99ca1474145f7fad38bb0255d344f4ad7717ef5)
+
+Related: #2087652
+---
+ src/basic/env-util.c                   | 27 ++++++++++---
+ src/basic/env-util.h                   |  2 +
+ src/cryptenroll/cryptenroll-password.c | 15 ++-----
+ src/cryptenroll/cryptenroll.c          | 20 ++++------
+ src/cryptsetup/cryptsetup-fido2.c      | 12 +++---
+ src/cryptsetup/cryptsetup.c            | 15 ++++---
+ src/home/homectl.c                     | 55 ++++++++++++--------------
+ src/shared/pkcs11-util.c               | 11 +++---
+ src/test/test-env-util.c               | 16 +++++---
+ 9 files changed, 89 insertions(+), 84 deletions(-)
+
+diff --git a/src/basic/env-util.c b/src/basic/env-util.c
+index 455f5d76f5..b60c9f9fdc 100644
+--- a/src/basic/env-util.c
++++ b/src/basic/env-util.c
+@@ -857,19 +857,36 @@ int getenv_path_list(const char *name, char ***ret_paths) {
+         return 1;
+ }
+ 
+-int unsetenv_erase(const char *name) {
+-        char *p;
++int getenv_steal_erase(const char *name, char **ret) {
++        _cleanup_(erase_and_freep) char *a = NULL;
++        char *e;
+ 
+         assert(name);
+ 
+-        p = getenv(name);
+-        if (!p)
++        /* Reads an environment variable, makes a copy of it, erases its memory in the environment block and removes
++         * it from there. Usecase: reading passwords from the env block (which is a bad idea, but useful for
++         * testing, and given that people are likely going to misuse this, be thorough) */
++
++        e = getenv(name);
++        if (!e) {
++                if (ret)
++                        *ret = NULL;
+                 return 0;
++        }
+ 
+-        string_erase(p);
++        if (ret) {
++                a = strdup(e);
++                if (!a)
++                        return -ENOMEM;
++        }
++
++        string_erase(e);
+ 
+         if (unsetenv(name) < 0)
+                 return -errno;
+ 
++        if (ret)
++                *ret = TAKE_PTR(a);
++
+         return 1;
+ }
+diff --git a/src/basic/env-util.h b/src/basic/env-util.h
+index 38bfc8a3f2..e4084af9a5 100644
+--- a/src/basic/env-util.h
++++ b/src/basic/env-util.h
+@@ -70,3 +70,5 @@ int setenv_systemd_exec_pid(bool update_only);
+ int getenv_path_list(const char *name, char ***ret_paths);
+ 
+ int unsetenv_erase(const char *name);
++
++int getenv_steal_erase(const char *name, char **ret);
+diff --git a/src/cryptenroll/cryptenroll-password.c b/src/cryptenroll/cryptenroll-password.c
+index 1775912d8e..9b7c8b5400 100644
+--- a/src/cryptenroll/cryptenroll-password.c
++++ b/src/cryptenroll/cryptenroll-password.c
+@@ -17,20 +17,13 @@ int enroll_password(
+         _cleanup_free_ char *error = NULL;
+         const char *node;
+         int r, keyslot;
+-        char *e;
+ 
+         assert_se(node = crypt_get_device_name(cd));
+ 
+-        e = getenv("NEWPASSWORD");
+-        if (e) {
+-
+-                new_password = strdup(e);
+-                if (!new_password)
+-                        return log_oom();
+-
+-                assert_se(unsetenv_erase("NEWPASSWORD") >= 0);
+-
+-        } else {
++        r = getenv_steal_erase("NEWPASSWORD", &new_password);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r == 0) {
+                 _cleanup_free_ char *disk_path = NULL;
+                 unsigned i = 5;
+                 const char *id;
+diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
+index ed19f3f8f4..2e11ffe291 100644
+--- a/src/cryptenroll/cryptenroll.c
++++ b/src/cryptenroll/cryptenroll.c
+@@ -422,8 +422,8 @@ static int prepare_luks(
+                 size_t *ret_volume_key_size) {
+ 
+         _cleanup_(crypt_freep) struct crypt_device *cd = NULL;
++        _cleanup_(erase_and_freep) char *envpw = NULL;
+         _cleanup_(erase_and_freep) void *vk = NULL;
+-        char *e = NULL;
+         size_t vks;
+         int r;
+ 
+@@ -458,23 +458,17 @@ static int prepare_luks(
+         if (!vk)
+                 return log_oom();
+ 
+-        e = getenv("PASSWORD");
+-        if (e) {
+-                _cleanup_(erase_and_freep) char *password = NULL;
+-
+-                password = strdup(e);
+-                if (!password)
+-                        return log_oom();
+-
+-                assert_se(unsetenv_erase("PASSWORD") >= 0);
+-
++        r = getenv_steal_erase("PASSWORD", &envpw);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r > 0) {
+                 r = crypt_volume_key_get(
+                                 cd,
+                                 CRYPT_ANY_SLOT,
+                                 vk,
+                                 &vks,
+-                                password,
+-                                strlen(password));
++                                envpw,
++                                strlen(envpw));
+                 if (r < 0)
+                         return log_error_errno(r, "Password from environment variable $PASSWORD did not work.");
+         } else {
+diff --git a/src/cryptsetup/cryptsetup-fido2.c b/src/cryptsetup/cryptsetup-fido2.c
+index 35d5dbe007..74053b8ce3 100644
+--- a/src/cryptsetup/cryptsetup-fido2.c
++++ b/src/cryptsetup/cryptsetup-fido2.c
+@@ -30,12 +30,12 @@ int acquire_fido2_key(
+                 size_t *ret_decrypted_key_size,
+                 AskPasswordFlags ask_password_flags) {
+ 
++        _cleanup_(erase_and_freep) char *envpw = NULL;
+         _cleanup_strv_free_erase_ char **pins = NULL;
+         _cleanup_free_ void *loaded_salt = NULL;
+         bool device_exists = false;
+         const char *salt;
+         size_t salt_size;
+-        char *e;
+         int r;
+ 
+         ask_password_flags |= ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
+@@ -66,13 +66,13 @@ int acquire_fido2_key(
+                 salt = loaded_salt;
+         }
+ 
+-        e = getenv("PIN");
+-        if (e) {
+-                pins = strv_new(e);
++        r = getenv_steal_erase("PIN", &envpw);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r > 0) {
++                pins = strv_new(envpw);
+                 if (!pins)
+                         return log_oom();
+-
+-                assert_se(unsetenv_erase("PIN") >= 0);
+         }
+ 
+         for (;;) {
+diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
+index fc1f37730f..692e1d137b 100644
+--- a/src/cryptsetup/cryptsetup.c
++++ b/src/cryptsetup/cryptsetup.c
+@@ -829,20 +829,19 @@ static bool libcryptsetup_plugins_support(void) {
+ 
+ #if HAVE_LIBCRYPTSETUP_PLUGINS
+ static int acquire_pins_from_env_variable(char ***ret_pins) {
+-        char *e;
++        _cleanup_(erase_and_freep) char *envpin = NULL;
+         _cleanup_strv_free_erase_ char **pins = NULL;
++        int r;
+ 
+         assert(ret_pins);
+ 
+-        e = getenv("PIN");
+-        if (e) {
+-                pins = strv_new(e);
++        r = getenv_steal_erase("PIN", &envpin);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++        if (r > 0) {
++                pins = strv_new(envpin);
+                 if (!pins)
+                         return log_oom();
+-
+-                string_erase(e);
+-                if (unsetenv("PIN") < 0)
+-                        return log_error_errno(errno, "Failed to unset $PIN: %m");
+         }
+ 
+         *ret_pins = TAKE_PTR(pins);
+diff --git a/src/home/homectl.c b/src/home/homectl.c
+index 4aeaaf6b9a..f0d1dac6ab 100644
+--- a/src/home/homectl.c
++++ b/src/home/homectl.c
+@@ -201,24 +201,25 @@ static int acquire_existing_password(
+                 AskPasswordFlags flags) {
+ 
+         _cleanup_(strv_free_erasep) char **password = NULL;
++        _cleanup_(erase_and_freep) char *envpw = NULL;
+         _cleanup_free_ char *question = NULL;
+-        char *e;
+         int r;
+ 
+         assert(user_name);
+         assert(hr);
+ 
+-        e = getenv("PASSWORD");
+-        if (e) {
++        r = getenv_steal_erase("PASSWORD", &envpw);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r > 0) {
+                 /* People really shouldn't use environment variables for passing passwords. We support this
+                  * only for testing purposes, and do not document the behaviour, so that people won't
+                  * actually use this outside of testing. */
+ 
+-                r = user_record_set_password(hr, STRV_MAKE(e), true);
++                r = user_record_set_password(hr, STRV_MAKE(envpw), true);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to store password: %m");
+ 
+-                assert_se(unsetenv_erase("PASSWORD") >= 0);
+                 return 1;
+         }
+ 
+@@ -261,24 +262,25 @@ static int acquire_recovery_key(
+                 AskPasswordFlags flags) {
+ 
+         _cleanup_(strv_free_erasep) char **recovery_key = NULL;
++        _cleanup_(erase_and_freep) char *envpw = NULL;
+         _cleanup_free_ char *question = NULL;
+-        char *e;
+         int r;
+ 
+         assert(user_name);
+         assert(hr);
+ 
+-        e = getenv("RECOVERY_KEY");
+-        if (e) {
++        r = getenv_steal_erase("PASSWORD", &envpw);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r > 0) {
+                 /* People really shouldn't use environment variables for passing secrets. We support this
+                  * only for testing purposes, and do not document the behaviour, so that people won't
+                  * actually use this outside of testing. */
+ 
+-                r = user_record_set_password(hr, STRV_MAKE(e), true); /* recovery keys are stored in the record exactly like regular passwords! */
++                r = user_record_set_password(hr, STRV_MAKE(envpw), true); /* recovery keys are stored in the record exactly like regular passwords! */
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to store recovery key: %m");
+ 
+-                assert_se(unsetenv_erase("RECOVERY_KEY") >= 0);
+                 return 1;
+         }
+ 
+@@ -318,20 +320,21 @@ static int acquire_token_pin(
+                 AskPasswordFlags flags) {
+ 
+         _cleanup_(strv_free_erasep) char **pin = NULL;
++        _cleanup_(erase_and_freep) char *envpin = NULL;
+         _cleanup_free_ char *question = NULL;
+-        char *e;
+         int r;
+ 
+         assert(user_name);
+         assert(hr);
+ 
+-        e = getenv("PIN");
+-        if (e) {
+-                r = user_record_set_token_pin(hr, STRV_MAKE(e), false);
++        r = getenv_steal_erase("PIN", &envpin);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++        if (r > 0) {
++                r = user_record_set_token_pin(hr, STRV_MAKE(envpin), false);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to store token PIN: %m");
+ 
+-                assert_se(unsetenv_erase("PIN") >= 0);
+                 return 1;
+         }
+ 
+@@ -1147,33 +1150,25 @@ static int acquire_new_password(
+                 bool suggest,
+                 char **ret) {
+ 
++        _cleanup_(erase_and_freep) char *envpw = NULL;
+         unsigned i = 5;
+-        char *e;
+         int r;
+ 
+         assert(user_name);
+         assert(hr);
+ 
+-        e = getenv("NEWPASSWORD");
+-        if (e) {
+-                _cleanup_(erase_and_freep) char *copy = NULL;
+-
++        r = getenv_steal_erase("NEWPASSWORD", &envpw);
++        if (r < 0)
++                return log_error_errno(r, "Failed to acquire password from environment: %m");
++        if (r > 0) {
+                 /* As above, this is not for use, just for testing */
+ 
+-                if (ret) {
+-                        copy = strdup(e);
+-                        if (!copy)
+-                                return log_oom();
+-                }
+-
+-                r = user_record_set_password(hr, STRV_MAKE(e), /* prepend = */ true);
++                r = user_record_set_password(hr, STRV_MAKE(envpw), /* prepend = */ true);
+                 if (r < 0)
+                         return log_error_errno(r, "Failed to store password: %m");
+ 
+-                assert_se(unsetenv_erase("NEWPASSWORD") >= 0);
+-
+                 if (ret)
+-                        *ret = TAKE_PTR(copy);
++                        *ret = TAKE_PTR(envpw);
+ 
+                 return 0;
+         }
+diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c
+index 4f9ec1fbd6..80feeb1fae 100644
+--- a/src/shared/pkcs11-util.c
++++ b/src/shared/pkcs11-util.c
+@@ -275,15 +275,16 @@ int pkcs11_token_login(
+ 
+         for (unsigned tries = 0; tries < 3; tries++) {
+                 _cleanup_strv_free_erase_ char **passwords = NULL;
+-                char *e;
++                _cleanup_(erase_and_freep) char *envpin = NULL;
+ 
+-                e = getenv("PIN");
+-                if (e) {
+-                        passwords = strv_new(e);
++                r = getenv_steal_erase("PIN", &envpin);
++                if (r < 0)
++                        return log_error_errno(r, "Failed to acquire PIN from environment: %m");
++                if (r > 0) {
++                        passwords = strv_new(envpin);
+                         if (!passwords)
+                                 return log_oom();
+ 
+-                        assert_se(unsetenv_erase("PIN") >= 0);
+                 } else if (headless)
+                         return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the 'PIN' environment variable.");
+                 else {
+diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
+index 4d5f39b5b7..cc37d96327 100644
+--- a/src/test/test-env-util.c
++++ b/src/test/test-env-util.c
+@@ -406,16 +406,16 @@ TEST(setenv_systemd_exec_pid) {
+         assert_se(set_unset_env("SYSTEMD_EXEC_PID", saved, 1) >= 0);
+ }
+ 
+-TEST(unsetenv_erase) {
++TEST(getenv_steal_erase) {
+         int r;
+ 
+-        r = safe_fork("(sd-unsetenverase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
++        r = safe_fork("(sd-getenvstealerase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
+         if (r == 0) {
+                 _cleanup_strv_free_ char **l = NULL;
+ 
+                 /* child */
+ 
+-                assert_se(unsetenv_erase("thisenvvardefinitelywontexist") == 0);
++                assert_se(getenv_steal_erase("thisenvvardefinitelywontexist", NULL) == 0);
+ 
+                 l = strv_new("FOO=BAR", "QUUX=PIFF", "ONE=TWO", "A=B");
+                 assert_se(strv_length(l) == 4);
+@@ -423,7 +423,7 @@ TEST(unsetenv_erase) {
+                 environ = l;
+ 
+                 STRV_FOREACH(e, environ) {
+-                        _cleanup_free_ char *n = NULL;
++                        _cleanup_free_ char *n = NULL, *copy1 = NULL, *copy2 = NULL;
+                         char *eq;
+ 
+                         eq = strchr(*e, '=');
+@@ -433,9 +433,13 @@ TEST(unsetenv_erase) {
+                         n = strndup(*e, eq - *e);
+                         assert_se(n);
+ 
+-                        assert_se(streq_ptr(getenv(n), eq + 1));
++                        copy1 = strdup(eq + 1);
++                        assert_se(copy1);
++
++                        assert_se(streq_ptr(getenv(n), copy1));
+                         assert_se(getenv(n) == eq + 1);
+-                        assert_se(unsetenv_erase(n) > 0);
++                        assert_se(getenv_steal_erase(n, &copy2) > 0);
++                        assert_se(streq_ptr(copy1, copy2));
+                         assert_se(isempty(eq + 1));
+                         assert_se(!getenv(n));
+                 }
diff --git a/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch b/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch
new file mode 100644
index 0000000..c6dea04
--- /dev/null
+++ b/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch
@@ -0,0 +1,63 @@
+From 6bf4cd485735ecff5c0ccfb6b36bf1b2f310997a Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:12:00 +0900
+Subject: [PATCH] test: install libxkbcommon and x11 keymaps
+
+(cherry picked from commit 1136175c7fd4898c6fdc59c1f729386cf994265c)
+
+Related: #2087652
+---
+ test/test-functions | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 050fefaf1b..644c3a8613 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -685,6 +685,7 @@ setup_basic_environment() {
+     install_dbus
+     install_fonts
+     install_keymaps
++    install_x11_keymaps
+     install_terminfo
+     install_execs
+     install_fs_tools
+@@ -1198,7 +1199,7 @@ install_missing_libraries() {
+     local lib path
+     # A number of dependencies is now optional via dlopen, so the install
+     # script will not pick them up, since it looks at linkage.
+-    for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw; do
++    for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw xkbcommon; do
+         ddebug "Searching for $lib via pkg-config"
+         if pkg-config --exists "$lib"; then
+                 path="$(pkg-config --variable=libdir "$lib")"
+@@ -1214,6 +1215,10 @@ install_missing_libraries() {
+                 # (eg: libcryptsetup), so just ignore them
+                 inst_libs "${path}/${lib}.so" || true
+                 inst_library "${path}/${lib}.so" || true
++
++                if [[ "$lib" == "libxkbcommon" ]]; then
++                    install_x11_keymaps full
++                fi
+         else
+             ddebug "$lib.pc not found, skipping"
+             continue
+@@ -1889,6 +1894,18 @@ install_keymaps() {
+     fi
+ }
+ 
++install_x11_keymaps() {
++    dinfo "Install x11 keymaps"
++
++    if (( $# == 0 )); then
++        # Install only keymap list.
++        inst /usr/share/X11/xkb/rules/base.lst
++    else
++        # When it takes any argument, then install all keymaps.
++        inst_recursive /usr/share/X11/xkb
++    fi
++}
++
+ install_zoneinfo() {
+     dinfo "Install time zones"
+     inst_any /usr/share/zoneinfo/Asia/Seoul
diff --git a/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch b/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch
new file mode 100644
index 0000000..c9c6064
--- /dev/null
+++ b/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch
@@ -0,0 +1,54 @@
+From 9e35f5e32eeacdeeb0d2b520320b08daafc11c72 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:13:00 +0900
+Subject: [PATCH] test: install C.UTF-8 and English locales
+
+(cherry picked from commit 4ce68ea9b3707fde8c4be20e164fc2a41197fdda)
+
+Related: #2087652
+---
+ test/test-functions | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/test/test-functions b/test/test-functions
+index 644c3a8613..cab3e3c015 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -684,6 +684,7 @@ setup_basic_environment() {
+     install_pam
+     install_dbus
+     install_fonts
++    install_locales
+     install_keymaps
+     install_x11_keymaps
+     install_terminfo
+@@ -1847,6 +1848,29 @@ install_pam() {
+     done
+ }
+ 
++install_locales() {
++    # install only C.UTF-8 and English locales
++    dinfo "Install locales"
++
++    if command -v meson >/dev/null \
++            && (meson configure "${BUILD_DIR:?}" | grep 'localegen-path */') \
++            || get_bool "$LOOKS_LIKE_DEBIAN"; then
++        # locale-gen support
++        image_install -o locale-gen localedef
++        inst /etc/locale.gen || :
++        inst /usr/share/i18n/SUPPORTED || :
++        inst_recursive /usr/share/i18n/charmaps
++        inst_recursive /usr/share/i18n/locales
++        inst_recursive /usr/share/locale/en
++        inst_recursive /usr/share/locale/en_*
++    fi
++
++    inst_recursive /usr/lib/locale/C.utf8
++    inst_recursive /usr/lib/locale/C.UTF-8
++    inst_recursive /usr/lib/locale/en_*.utf8
++    inst_recursive /usr/lib/locale/en_*.UTF-8
++}
++
+ # shellcheck disable=SC2120
+ install_keymaps() {
+     local i p
diff --git a/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch b/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch
new file mode 100644
index 0000000..a74682a
--- /dev/null
+++ b/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch
@@ -0,0 +1,456 @@
+From 85e06430f03fe3078d5443d80ce53721fa88b285 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 09:14:00 +0900
+Subject: [PATCH] test: import localed tests from debian/ubuntu test suite
+
+(cherry picked from commit 47ba157cc083dcc5e5d7dcbdc1e27db0d6dced3e)
+
+Related: #2087652
+---
+ test/TEST-73-LOCALE/Makefile    |   1 +
+ test/TEST-73-LOCALE/test.sh     |  10 +
+ test/units/testsuite-73.service |  10 +
+ test/units/testsuite-73.sh      | 391 ++++++++++++++++++++++++++++++++
+ 4 files changed, 412 insertions(+)
+ create mode 120000 test/TEST-73-LOCALE/Makefile
+ create mode 100755 test/TEST-73-LOCALE/test.sh
+ create mode 100644 test/units/testsuite-73.service
+ create mode 100755 test/units/testsuite-73.sh
+
+diff --git a/test/TEST-73-LOCALE/Makefile b/test/TEST-73-LOCALE/Makefile
+new file mode 120000
+index 0000000000..e9f93b1104
+--- /dev/null
++++ b/test/TEST-73-LOCALE/Makefile
+@@ -0,0 +1 @@
++../TEST-01-BASIC/Makefile
+\ No newline at end of file
+diff --git a/test/TEST-73-LOCALE/test.sh b/test/TEST-73-LOCALE/test.sh
+new file mode 100755
+index 0000000000..a33ddaba86
+--- /dev/null
++++ b/test/TEST-73-LOCALE/test.sh
+@@ -0,0 +1,10 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++set -e
++
++TEST_DESCRIPTION="test localed"
++
++# shellcheck source=test/test-functions
++. "${TEST_BASE_DIR:?}/test-functions"
++
++do_test "$@"
+diff --git a/test/units/testsuite-73.service b/test/units/testsuite-73.service
+new file mode 100644
+index 0000000000..bee8c4215d
+--- /dev/null
++++ b/test/units/testsuite-73.service
+@@ -0,0 +1,10 @@
++# SPDX-License-Identifier: LGPL-2.1-or-later
++[Unit]
++Description=TEST-73-LOCALE
++
++[Service]
++ExecStartPre=rm -f /failed /testok
++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
++StandardOutput=journal+console
++StandardError=journal+console
++Type=oneshot
+diff --git a/test/units/testsuite-73.sh b/test/units/testsuite-73.sh
+new file mode 100755
+index 0000000000..d96e9f4151
+--- /dev/null
++++ b/test/units/testsuite-73.sh
+@@ -0,0 +1,391 @@
++#!/usr/bin/env bash
++# SPDX-License-Identifier: LGPL-2.1-or-later
++
++set -eux
++set -o pipefail
++
++# shellcheck source=test/units/assert.sh
++. "$(dirname "$0")"/assert.sh
++
++enable_debug() {
++    mkdir -p /run/systemd/system/systemd-localed.service.d
++    cat >>/run/systemd/system/systemd-localed.service.d/override.conf <<EOF
++[Service]
++Environment=SYSTEMD_LOG_LEVEL=debug
++EOF
++
++    mkdir -p /run/systemd/system/systemd-vconsole-setup.service.d
++    cat >>/run/systemd/system/systemd-vconsole-setup.service.d/override.conf <<EOF
++[Unit]
++StartLimitIntervalSec=0
++
++[Service]
++Environment=SYSTEMD_LOG_LEVEL=debug
++EOF
++
++    systemctl daemon-reload
++}
++
++restore_locale() {
++    if [[ -d /usr/lib/locale/xx_XX.UTF-8 ]]; then
++        rmdir /usr/lib/locale/xx_XX.UTF-8
++    fi
++
++    if [[ -f /tmp/locale.conf.bak ]]; then
++        mv /tmp/locale.conf.bak /etc/locale.conf
++    else
++        rm -f /etc/locale.conf
++    fi
++
++    if [[ -f /tmp/default-locale.bak ]]; then
++        mv /tmp/default-locale.bak /etc/default/locale
++    else
++        rm -f /etc/default/locale
++        rmdir --ignore-fail-on-non-empty /etc/default
++    fi
++
++    if [[ -f /tmp/locale.gen.bak ]]; then
++        mv /tmp/locale.gen.bak /etc/locale.gen
++    else
++        rm -f /etc/locale.gen
++    fi
++}
++
++test_locale() {
++    local i output
++
++    if [[ -f /etc/locale.conf ]]; then
++        cp /etc/locale.conf /tmp/locale.conf.bak
++    fi
++
++    # Debian/Ubuntu specific file
++    if [[ -f /etc/default/locale ]]; then
++        cp /etc/default/locale /tmp/default-locale.bak
++    fi
++
++    if [[ -f /etc/locale.gen ]]; then
++        cp /etc/locale.gen /tmp/locale.gen.bak
++    fi
++
++    # remove locale.conf to make /etc/default/locale used by Debian/Ubuntu
++    rm -f /etc/locale.conf
++    # also remove /etc/default/locale
++    rm -f /etc/default/locale
++    # and create /etc/default to make /etc/default/locale created by localed
++    mkdir -p /etc/default
++
++    trap restore_locale RETURN
++
++    if command -v locale-gen >/dev/null 2>&1 &&
++           ! localectl list-locales | grep -F "en_US.UTF-8"; then
++        # ensure at least one utf8 locale exist
++        echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
++        locale-gen en_US.UTF-8
++    fi
++
++    # create invalid locale
++    mkdir -p /usr/lib/locale/xx_XX.UTF-8
++    assert_not_in "xx_XX.UTF-8" "$(localectl list-locales)"
++
++    if [[ -z "$(localectl list-locales)" ]]; then
++        echo "No locale installed, skipping test."
++        return
++    fi
++
++    # warn when kernel command line has locale settings
++    output=$(SYSTEMD_PROC_CMDLINE="locale.LANG=C.UTF-8 locale.LC_CTYPE=ja_JP.UTF-8" localectl 2>&1)
++    assert_in "Warning:" "$output"
++    assert_in "Command Line: LANG=C.UTF-8" "$output"
++    assert_in "LC_CTYPE=ja_JP.UTF-8" "$output"
++    assert_in "System Locale:" "$output"
++
++    # change locale
++    for i in $(localectl list-locales); do
++        assert_rc 0 localectl set-locale "LANG=C" "LC_CTYPE=$i"
++        if [[ -f /etc/default/locale ]]; then
++            assert_eq "$(cat /etc/default/locale)" "LANG=C
++LC_CTYPE=$i"
++        else
++            assert_eq "$(cat /etc/locale.conf)" "LANG=C
++LC_CTYPE=$i"
++        fi
++        output=$(localectl)
++        assert_in "System Locale: LANG=C" "$output"
++        assert_in "LC_CTYPE=$i" "$output"
++        output=$(systemctl show-environment)
++        assert_in "LANG=C" "$output"
++        assert_in "LC_CTYPE=$i" "$output"
++
++        assert_rc 0 localectl set-locale "$i"
++        if [[ -f /etc/default/locale ]]; then
++            # Debian/Ubuntu patch is buggy, and LC_CTYPE= still exists.
++            assert_eq "$(cat /etc/default/locale)" "LANG=$i
++LC_CTYPE=$i"
++        else
++            assert_eq "$(cat /etc/locale.conf)" "LANG=$i"
++        fi
++        output=$(localectl)
++        assert_in "System Locale: LANG=$i" "$output"
++        assert_not_in "LC_CTYPE=" "$output"
++        output=$(systemctl show-environment)
++        assert_in "LANG=$i" "$output"
++        assert_not_in "LC_CTYPE=" "$output"
++    done
++
++    # test if localed auto-runs locale-gen
++    if command -v locale-gen >/dev/null 2>&1 &&
++           ! localectl list-locales | grep -F "de_DE.UTF-8"; then
++
++        # clear previous locale
++        systemctl stop systemd-localed.service
++        rm -f /etc/locale.conf /etc/default/locale
++
++        # change locale
++        assert_rc 0 localectl set-locale de_DE.UTF-8
++        if [[ -f /etc/default/locale ]]; then
++            assert_eq "$(cat /etc/default/locale)" "LANG=de_DE.UTF-8"
++        else
++            assert_eq "$(cat /etc/locale.conf)" "LANG=de_DE.UTF-8"
++        fi
++        assert_in "System Locale: LANG=de_DE.UTF-8" "$(localectl)"
++        assert_in "LANG=de_DE.UTF-8" "$(systemctl show-environment)"
++
++        # ensure tested locale exists and works now
++        assert_in "de_DE.UTF-8" "$(localectl list-locales)"
++    fi
++}
++
++backup_keymap() {
++    if [[ -f /etc/vconsole.conf ]]; then
++        cp /etc/vconsole.conf /tmp/vconsole.conf.bak
++    fi
++
++    if [[ -f /etc/X11/xorg.conf.d/00-keyboard.conf ]]; then
++        cp /etc/X11/xorg.conf.d/00-keyboard.conf /tmp/00-keyboard.conf.bak
++    fi
++
++    # Debian/Ubuntu specific file
++    if [[ -f /etc/default/keyboard ]]; then
++        cp /etc/default/keyboard /tmp/default-keyboard.bak
++    fi
++
++    mkdir -p /etc/default
++}
++
++restore_keymap() {
++    if [[ -f /tmp/vconsole.conf.bak ]]; then
++        mv /tmp/vconsole.conf.bak /etc/vconsole.conf
++    else
++        rm -f /etc/vconsole.conf
++    fi
++
++    if [[ -f /tmp/00-keyboard.conf.bak ]]; then
++        mv /tmp/00-keyboard.conf.bak /etc/X11/xorg.conf.d/00-keyboard.conf
++    else
++        rm -f /etc/X11/xorg.conf.d/00-keyboard.conf
++    fi
++
++    if [[ -f /tmp/default-keyboard.bak ]]; then
++        mv /tmp/default-keyboard.bak /etc/default/keyboard
++    else
++        rm -f /etc/default/keyboard
++        rmdir --ignore-fail-on-non-empty /etc/default
++    fi
++}
++
++wait_vconsole_setup() {
++    local i ss
++    for ((i = 0; i < 20; i++)); do
++        if (( i != 0 )); then sleep .5; fi
++        ss="$(systemctl --property SubState --value show systemd-vconsole-setup.service)"
++        if [[ "$ss" == "exited" || "$ss" == "dead" || "$ss" == "condition" ]]; then
++            return 0
++        elif [[ "$ss" == "failed" ]]; then
++            echo "WARNING: systemd-vconsole-setup.service failed, ignoring." >&2
++            systemctl reset-failed systemd-vconsole-setup.service
++            return 0
++        fi
++    done
++
++    systemctl status systemd-vconsole-setup.service
++    return 1
++}
++
++test_vc_keymap() {
++    local i output
++
++    if [[ -z "$(localectl list-keymaps)" ]]; then
++        echo "No vconsole keymap installed, skipping test."
++        return
++    fi
++
++    backup_keymap
++    trap restore_keymap RETURN
++
++    # should activate daemon and work
++    assert_in "VC Keymap:" "$(localectl)"
++
++    for i in $(localectl list-keymaps); do
++        # clear previous conversion from VC -> X11 keymap
++        systemctl stop systemd-localed.service
++        wait_vconsole_setup
++        rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
++
++        # set VC keymap
++        assert_rc 0 localectl set-keymap "$i"
++        output=$(localectl)
++
++        # check VC keymap
++        assert_in "KEYMAP=$i" "$(cat /etc/vconsole.conf)"
++        assert_in "VC Keymap: $i" "$output"
++
++        # check VC -> X11 keymap conversion
++        if [[ "$i" == "us" ]]; then
++            assert_in "X11 Layout: us" "$output"
++            assert_in "X11 Model: pc105\+inet" "$output"
++            assert_not_in "X11 Variant:" "$output"
++            assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output"
++        elif [[ "$i" == "us-acentos" ]]; then
++            assert_in "X11 Layout: us" "$output"
++            assert_in 'X11 Model: pc105$' "$output"
++            assert_in "X11 Variant: intl" "$output"
++            assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output"
++        elif [[ "$i" =~ ^us-.* ]]; then
++            assert_in "X11 Layout: n/a" "$output"
++            assert_not_in "X11 Model:" "$output"
++            assert_not_in "X11 Variant:" "$output"
++            assert_not_in "X11 Options:" "$output"
++        fi
++    done
++
++    # gets along without config file
++    systemctl stop systemd-localed.service
++    wait_vconsole_setup
++    rm -f /etc/vconsole.conf
++    assert_in "VC Keymap: n/a" "$(localectl)"
++}
++
++test_x11_keymap() {
++    local output
++
++    if [[ -z "$(localectl list-x11-keymap-layouts)" ]]; then
++        echo "No x11 keymap installed, skipping test."
++        return
++    fi
++
++    backup_keymap
++    trap restore_keymap RETURN
++
++    # should activate daemon and work
++    assert_in "X11 Layout:" "$(localectl)"
++
++    # set x11 keymap (layout, model, variant, options)
++    assert_rc 0 localectl set-x11-keymap us pc105+inet intl terminate:ctrl_alt_bksp
++
++    if [[ -f /etc/default/keyboard ]]; then
++        assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us
++XKBMODEL=pc105+inet
++XKBVARIANT=intl
++XKBOPTIONS=terminate:ctrl_alt_bksp"
++    else
++        output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf)
++        assert_in 'Option "XkbLayout" "us"' "$output"
++        assert_in 'Option "XkbModel" "pc105\+inet"' "$output"
++        assert_in 'Option "XkbVariant" "intl"' "$output"
++        assert_in 'Option "XkbOptions" "terminate:ctrl_alt_bksp"' "$output"
++    fi
++
++    output=$(localectl)
++    assert_in "X11 Layout: us" "$output"
++    assert_in "X11 Model: pc105\+inet" "$output"
++    assert_in "X11 Variant: intl" "$output"
++    assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output"
++
++    # Debian/Ubuntu patch is buggy, unspecified settings are not cleared
++    rm -f /etc/default/keyboard
++
++    # set x11 keymap (layout, model, variant)
++    assert_rc 0 localectl set-x11-keymap us pc105+inet intl
++
++    if [[ -f /etc/default/keyboard ]]; then
++        assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us
++XKBMODEL=pc105+inet
++XKBVARIANT=intl"
++    else
++        output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf)
++        assert_in 'Option "XkbLayout" "us"' "$output"
++        assert_in 'Option "XkbModel" "pc105\+inet"' "$output"
++        assert_in 'Option "XkbVariant" "intl"' "$output"
++        assert_not_in 'Option "XkbOptions"' "$output"
++    fi
++
++    output=$(localectl)
++    assert_in "X11 Layout: us" "$output"
++    assert_in "X11 Model: pc105\+inet" "$output"
++    assert_in "X11 Variant: intl" "$output"
++    assert_not_in "X11 Options:" "$output"
++
++    # Debian/Ubuntu patch is buggy, unspecified settings are not cleared
++    rm -f /etc/default/keyboard
++
++    # set x11 keymap (layout, model)
++    assert_rc 0 localectl set-x11-keymap us pc105+inet
++
++    if [[ -f /etc/default/keyboard ]]; then
++        assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us
++XKBMODEL=pc105+inet"
++    else
++        output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf)
++        assert_in 'Option "XkbLayout" "us"' "$output"
++        assert_in 'Option "XkbModel" "pc105\+inet"' "$output"
++        assert_not_in 'Option "XkbVariant"' "$output"
++        assert_not_in 'Option "XkbOptions"' "$output"
++    fi
++
++    output=$(localectl)
++    assert_in "X11 Layout: us" "$output"
++    assert_in "X11 Model: pc105\+inet" "$output"
++    assert_not_in "X11 Variant:" "$output"
++    assert_not_in "X11 Options:" "$output"
++
++    # Debian/Ubuntu patch is buggy, unspecified settings are not cleared
++    rm -f /etc/default/keyboard
++
++    # set x11 keymap (layout)
++    assert_rc 0 localectl set-x11-keymap us
++
++    if [[ -f /etc/default/keyboard ]]; then
++        assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us"
++    else
++        output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf)
++        assert_in 'Option "XkbLayout" "us"' "$output"
++        assert_not_in 'Option "XkbModel"' "$output"
++        assert_not_in 'Option "XkbVariant"' "$output"
++        assert_not_in 'Option "XkbOptions"' "$output"
++    fi
++
++    output=$(localectl)
++    assert_in "X11 Layout: us" "$output"
++    assert_not_in "X11 Model:" "$output"
++    assert_not_in "X11 Variant:" "$output"
++    assert_not_in "X11 Options:" "$output"
++
++    # gets along without config file
++    systemctl stop systemd-localed.service
++    rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
++    output=$(localectl)
++    assert_in "X11 Layout: n/a" "$output"
++    assert_not_in "X11 Model:" "$output"
++    assert_not_in "X11 Variant:" "$output"
++    assert_not_in "X11 Options:" "$output"
++}
++
++: >/failed
++
++enable_debug
++test_locale
++test_vc_keymap
++test_x11_keymap
++
++touch /testok
++rm /failed
diff --git a/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch b/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch
new file mode 100644
index 0000000..bf74518
--- /dev/null
+++ b/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch
@@ -0,0 +1,52 @@
+From 7131b76b1ef9382396cdc9dc1a23999d94bb79f8 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 30 May 2022 11:55:41 +0200
+Subject: [PATCH] unit: check for mount rate limiting before checking active
+ state
+
+Having this check as part of mount_can_start() is too late because
+UNIT(u)->can_start() virtual method is called after checking the active
+state of unit in unit_start().
+
+We need to hold off running mount start jobs when /p/s/mountinfo monitor
+is rate limited even when given mount unit is already active.
+
+Fixes #20329
+
+(cherry picked from commit b161bc394b2cc8b271dda9208e310cc2af0cc29d)
+
+Related: #2087652
+---
+ src/core/mount.c | 3 ---
+ src/core/unit.c  | 4 ++++
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index d63884e47e..8011389bcc 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -2169,9 +2169,6 @@ static int mount_can_start(Unit *u) {
+ 
+         assert(m);
+ 
+-        if (sd_event_source_is_ratelimited(u->manager->mount_event_source))
+-                return -EAGAIN;
+-
+         r = unit_test_start_limit(u);
+         if (r < 0) {
+                 mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT);
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 6eaa553255..569f712e85 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -1848,6 +1848,10 @@ int unit_start(Unit *u) {
+ 
+         assert(u);
+ 
++        /* Let's hold off running start jobs for mount units when /proc/self/mountinfo monitor is rate limited. */
++        if (u->type == UNIT_MOUNT && sd_event_source_is_ratelimited(u->manager->mount_event_source))
++                return -EAGAIN;
++
+         /* If this is already started, then this will succeed. Note that this will even succeed if this unit
+          * is not startable by the user. This is relied on to detect when we need to wait for units and when
+          * waiting is finished. */
diff --git a/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch b/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch
new file mode 100644
index 0000000..034bd39
--- /dev/null
+++ b/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch
@@ -0,0 +1,84 @@
+From 94f643c328cd2d3c7376219573e0bc5dedea10d8 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 30 May 2022 14:50:05 +0200
+Subject: [PATCH] tests: make sure we delay running mount start jobs when
+ /p/s/mountinfo is rate limited
+
+(cherry picked from commit 9e15be6c8d55abd800bf33f9776dd0e307ed37bc)
+
+Related: #2087652
+---
+ test/units/testsuite-60.sh | 53 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 53 insertions(+)
+
+diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh
+index 239d7b0d4c..8cb3f466b6 100755
+--- a/test/units/testsuite-60.sh
++++ b/test/units/testsuite-60.sh
+@@ -3,6 +3,56 @@
+ set -eux
+ set -o pipefail
+ 
++test_issue_20329() {
++    local tmpdir unit
++    tmpdir="$(mktemp -d)"
++    unit=$(systemd-escape --suffix mount --path "$tmpdir")
++
++    # Set up test mount unit
++    cat > /run/systemd/system/"$unit" <<EOF
++[Mount]
++What=tmpfs
++Where=$tmpdir
++Type=tmpfs
++Options=defaults,nofail
++EOF
++
++    # Start the unit
++    systemctl daemon-reload
++    systemctl start "$unit"
++
++    [[ "$(systemctl show --property SubState --value "$unit")" = "mounted" ]] || {
++        echo >&2 "Test mount \"$unit\" unit isn't mounted"
++        return 1
++    }
++    mountpoint -q "$tmpdir"
++
++    trap 'systemctl stop $unit' RETURN
++
++    # Trigger the mount ratelimiting
++    cd "$(mktemp -d)"
++    mkdir foo
++    for ((i=0;i<50;++i)); do
++        mount --bind foo foo
++        umount foo
++    done
++
++    # Unmount the test mount and start it immediately again via systemd
++    umount "$tmpdir"
++    systemctl start "$unit"
++
++    # Make sure it is seen as mounted by systemd and it actually is mounted
++    [[ "$(systemctl show --property SubState --value "$unit")" = "mounted" ]] || {
++        echo >&2 "Test mount \"$unit\" unit isn't in \"mounted\" state"
++        return 1
++    }
++
++    mountpoint -q "$tmpdir" || {
++        echo >&2 "Test mount \"$unit\" is in \"mounted\" state, actually is not mounted"
++        return 1
++    }
++}
++
+ systemd-analyze log-level debug
+ systemd-analyze log-target journal
+ 
+@@ -87,6 +137,9 @@ if systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; then
+     exit 42
+ fi
+ 
++# test that handling of mount start jobs is delayed when /proc/self/mouninfo monitor is rate limited
++test_issue_20329
++
+ systemd-analyze log-level info
+ 
+ echo OK >/testok
diff --git a/SOURCES/0237-test-insert-space-in-for-loop.patch b/SOURCES/0237-test-insert-space-in-for-loop.patch
new file mode 100644
index 0000000..6f5aaac
--- /dev/null
+++ b/SOURCES/0237-test-insert-space-in-for-loop.patch
@@ -0,0 +1,139 @@
+From a480327b20deb75d5595878f2924490ef3aa4064 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 21:05:10 +0900
+Subject: [PATCH] test: insert space in for loop
+
+(cherry picked from commit 2f34ee33291c92fd46308213689540cb76fb8e2b)
+
+Related: #2087652
+---
+ test/units/testsuite-17.06.sh | 6 +++---
+ test/units/testsuite-35.sh    | 8 ++++----
+ test/units/testsuite-45.sh    | 6 +++---
+ test/units/testsuite-46.sh    | 2 +-
+ test/units/testsuite-60.sh    | 2 +-
+ 5 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/test/units/testsuite-17.06.sh b/test/units/testsuite-17.06.sh
+index f2a0442dc3..224063f6a6 100755
+--- a/test/units/testsuite-17.06.sh
++++ b/test/units/testsuite-17.06.sh
+@@ -18,18 +18,18 @@ function check_validity() {
+ function check() {
+     local i j
+ 
+-    for ((i=0;i<2;i++)); do
++    for ((i = 0; i < 2; i++)); do
+         systemctl restart systemd-udevd.service
+         udevadm control --ping
+         udevadm settle
+         check_validity
+ 
+-        for ((j=0;j<2;j++)); do
++        for ((j = 0; j < 2; j++)); do
+             udevadm trigger -w --action add --subsystem-match=block
+             check_validity
+         done
+ 
+-        for ((j=0;j<2;j++)); do
++        for ((j = 0; j < 2; j++)); do
+             udevadm trigger -w --action change --subsystem-match=block
+             check_validity
+         done
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 0a7198c3fe..e369cf8701 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -149,7 +149,7 @@ EOF
+     evemu-device /run/lidswitch.evemu &
+     KILL_PID="$!"
+ 
+-    for ((i=0;i<20;i++)); do
++    for ((i = 0; i < 20; i++)); do
+         if (( i != 0 )); then sleep .5; fi
+ 
+         INPUT_NAME=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :)
+@@ -287,7 +287,7 @@ EOF
+ 
+     # check session
+     ret=1
+-    for ((i=0;i<30;i++)); do
++    for ((i = 0; i < 30; i++)); do
+         if (( i != 0)); then sleep 1; fi
+         if check_session; then
+             ret=0
+@@ -315,7 +315,7 @@ EOF
+     # coldplug: logind started with existing device
+     systemctl stop systemd-logind.service
+     modprobe scsi_debug
+-    for ((i=0;i<30;i++)); do
++    for ((i = 0; i < 30; i++)); do
+         if (( i != 0)); then sleep 1; fi
+         if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
+             break
+@@ -342,7 +342,7 @@ EOF
+     # hotplug: new device appears while logind is running
+     rmmod scsi_debug
+     modprobe scsi_debug
+-    for ((i=0;i<30;i++)); do
++    for ((i = 0; i < 30; i++)); do
+         if (( i != 0)); then sleep 1; fi
+         if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
+             break
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index d0f9dd9461..fd8a99076b 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -197,7 +197,7 @@ start_mon() {
+ }
+ 
+ wait_mon() {
+-    for ((i=0;i<10;i++)); do
++    for ((i = 0; i < 10; i++)); do
+         if (( i != 0 )); then sleep 1; fi
+         if grep -q "$1" "$mon"; then break; fi
+     done
+@@ -228,7 +228,7 @@ EOF
+ 
+     echo 'disable NTP'
+     timedatectl set-ntp false
+-    for ((i=0;i<10;i++)); do
++    for ((i = 0; i < 10; i++)); do
+         if (( i != 0 )); then sleep 1; fi
+         if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then
+             break;
+@@ -243,7 +243,7 @@ EOF
+     timedatectl set-ntp true
+     wait_mon "NTP" "BOOLEAN true"
+     assert_ntp "true"
+-    for ((i=0;i<10;i++)); do
++    for ((i = 0; i < 10; i++)); do
+         if (( i != 0 )); then sleep 1; fi
+         if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then
+             break;
+diff --git a/test/units/testsuite-46.sh b/test/units/testsuite-46.sh
+index 61ee921151..3724a3b5f6 100755
+--- a/test/units/testsuite-46.sh
++++ b/test/units/testsuite-46.sh
+@@ -27,7 +27,7 @@ inspect() {
+ }
+ 
+ wait_for_state() {
+-    for ((i=0;i<10;i++)) ; do
++    for ((i = 0; i < 10; i++)) ; do
+         homectl inspect "$1" | grep -qF "State: $2" && break
+         sleep .5
+     done
+diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh
+index 8cb3f466b6..3a097816ca 100755
+--- a/test/units/testsuite-60.sh
++++ b/test/units/testsuite-60.sh
+@@ -32,7 +32,7 @@ EOF
+     # Trigger the mount ratelimiting
+     cd "$(mktemp -d)"
+     mkdir foo
+-    for ((i=0;i<50;++i)); do
++    for ((i = 0; i < 50; i++)); do
+         mount --bind foo foo
+         umount foo
+     done
diff --git a/SOURCES/0238-test-move-do-at-the-end-of-line.patch b/SOURCES/0238-test-move-do-at-the-end-of-line.patch
new file mode 100644
index 0000000..5b42606
--- /dev/null
+++ b/SOURCES/0238-test-move-do-at-the-end-of-line.patch
@@ -0,0 +1,46 @@
+From 9adf5125e39e15b2868a22fc481c4ce027de4f55 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 21:06:06 +0900
+Subject: [PATCH] test: move "do" at the end of line
+
+(cherry picked from commit 4627fb80bf54f5824570d3b94df9286971f028ac)
+
+Related: #2087652
+---
+ test/test-functions | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index cab3e3c015..1b10112329 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2250,8 +2250,7 @@ convert_abs_rel() {
+     __abssize=${#__absolute[@]}
+     __cursize=${#__current[@]}
+ 
+-    while [[ "${__absolute[__level]}" == "${__current[__level]}" ]]
+-    do
++    while [[ "${__absolute[__level]}" == "${__current[__level]}" ]]; do
+         (( __level++ ))
+         if (( __level > __abssize || __level > __cursize ))
+         then
+@@ -2259,8 +2258,7 @@ convert_abs_rel() {
+         fi
+     done
+ 
+-    for ((__i = __level; __i < __cursize-1; __i++))
+-    do
++    for ((__i = __level; __i < __cursize-1; __i++)); do
+         if ((__i > __level))
+         then
+             __newpath=$__newpath"/"
+@@ -2268,8 +2266,7 @@ convert_abs_rel() {
+         __newpath=$__newpath".."
+     done
+ 
+-    for ((__i = __level; __i < __abssize; __i++))
+-    do
++    for ((__i = __level; __i < __abssize; __i++)); do
+         if [[ -n $__newpath ]]
+         then
+             __newpath=$__newpath"/"
diff --git a/SOURCES/0239-test-use-trap-RETURN.patch b/SOURCES/0239-test-use-trap-RETURN.patch
new file mode 100644
index 0000000..e5ce153
--- /dev/null
+++ b/SOURCES/0239-test-use-trap-RETURN.patch
@@ -0,0 +1,97 @@
+From 60bc6c654dfbcbfeac0120143dd9869ceeb1a56e Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 14 Jun 2022 21:08:04 +0900
+Subject: [PATCH] test: use trap RETURN
+
+(cherry picked from commit 6243063824838e027754cc2737bb975472d62de2)
+
+Related: #2087652
+---
+ test/units/testsuite-35.sh | 10 ++--------
+ test/units/testsuite-45.sh | 10 ++--------
+ 2 files changed, 4 insertions(+), 16 deletions(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index e369cf8701..05d2a6c4c3 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -91,7 +91,7 @@ test_suspend_on_lid() {
+     fi
+ 
+     KILL_PID=
+-    trap test_suspend_tear_down EXIT
++    trap test_suspend_tear_down RETURN
+ 
+     # create fake suspend
+     mkdir -p /run/systemd/system/systemd-suspend.service.d
+@@ -184,9 +184,6 @@ EOF
+         echo "logind crashed" >&2
+         exit 1
+     fi
+-
+-    test_suspend_tear_down
+-    trap - EXIT
+ }
+ 
+ test_shutdown() {
+@@ -269,7 +266,7 @@ test_session() {
+         return
+     fi
+ 
+-    trap test_session_tear_down EXIT
++    trap test_session_tear_down RETURN
+ 
+     # add user
+     useradd -s /bin/bash logind-test-user
+@@ -361,9 +358,6 @@ EOF
+         getfacl -p "$dev" >&2
+         exit 1
+     fi
+-
+-    test_session_tear_down
+-    trap - EXIT
+ }
+ 
+ : >/failed
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index fd8a99076b..322d8086e7 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -23,7 +23,7 @@ test_timezone() {
+         mv /etc/timezone /tmp/timezone.bak
+     fi
+ 
+-    trap restore_timezone EXIT
++    trap restore_timezone RETURN
+ 
+     if [[ -L /etc/localtime ]]; then
+         ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')
+@@ -49,9 +49,6 @@ test_timezone() {
+             assert_eq "$(cat /etc/timezone)" "$ORIG_TZ"
+         fi
+     fi
+-
+-    restore_timezone
+-    trap - EXIT
+ }
+ 
+ restore_adjtime() {
+@@ -75,7 +72,7 @@ test_adjtime() {
+         mv /etc/adjtime /etc/adjtime.bak
+     fi
+ 
+-    trap restore_adjtime EXIT
++    trap restore_adjtime RETURN
+ 
+     echo 'no adjtime file'
+     rm -f /etc/adjtime
+@@ -182,9 +179,6 @@ LOCAL"
+     assert_eq "$(cat /etc/adjtime)" "0.0 0 0
+ 0
+ LOCAL"
+-
+-    restore_adjtime
+-    trap - EXIT
+ }
+ 
+ assert_ntp() {
diff --git a/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch b/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch
new file mode 100644
index 0000000..9653e95
--- /dev/null
+++ b/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch
@@ -0,0 +1,56 @@
+From 07d0debc02fb8a9f51ff06a03ceb2302e4982166 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 15 Dec 2021 09:14:44 +0100
+Subject: [PATCH] test: ignore the error about our own libraries missing during
+ image creation
+
+19:50:59 F: Missing a shared library required by /var/tmp/systemd-test.NIPT2q/root/lib/systemd/libsystemd-core-250.so.
+19:50:59 F: Run "ldd /var/tmp/systemd-test.NIPT2q/root/lib/systemd/libsystemd-core-250.so" to find out what it is.
+19:50:59 F: libsystemd-shared-250.so => not found
+19:50:59 F: Cannot create a test image.
+(cherry picked from commit ff254eea8feb55bbea9ec5d731e3dc9299b80b9e)
+
+Related: #2087652
+---
+ test/test-functions | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 1b10112329..a0ad8b2fb1 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2021,11 +2021,9 @@ inst_libs() {
+ 
+     while read -r line; do
+         [[ "$line" = 'not a dynamic executable' ]] && break
+-        # Skip a harmless error when running the tests on a system with a significantly
+-        # older systemd version (ldd tries to resolve the unprefixed RPATH for libsystemd.so.0,
+-        # which is in this case older than the already installed libsystemd.so.0 in $initdir).
+-        # The issue is triggered by installing test dependencies in install_missing_libraries().
+-        [[ "$line" =~ libsystemd.so.*:\ version\ .*\ not\ found ]] && continue
++        # Ignore errors about our own stuff missing. This is most likely caused
++        # by ldd attempting to use the unprefixed RPATH.
++        [[ "$line" =~ libsystemd.*\ not\ found ]] && continue
+ 
+         if [[ "$line" =~ $so_regex ]]; then
+             file="${BASH_REMATCH[1]}"
+@@ -2413,7 +2411,7 @@ inst_binary() {
+     # In certain cases we might attempt to install a binary which is already
+     # present in the test image, yet it's missing from the host system.
+     # In such cases, let's check if the binary indeed exists in the image
+-    # before doing any other chcecks. If it does, immediately return with
++    # before doing any other checks. If it does, immediately return with
+     # success.
+     if [[ $# -eq 1 ]]; then
+         for path in "" bin sbin usr/bin usr/sbin; do
+@@ -2432,6 +2430,10 @@ inst_binary() {
+     while read -r line; do
+         [[ "$line" = 'not a dynamic executable' ]] && break
+ 
++        # Ignore errors about our own stuff missing. This is most likely caused
++        # by ldd attempting to use the unprefixed RPATH.
++        [[ "$line" =~ libsystemd.*\ not\ found ]] && continue
++
+         if [[ "$line" =~ $so_regex ]]; then
+             file="${BASH_REMATCH[1]}"
+             [[ -e "${initdir}/$file" ]] && continue
diff --git a/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch b/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch
new file mode 100644
index 0000000..f5b7fb4
--- /dev/null
+++ b/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch
@@ -0,0 +1,85 @@
+From 75037db319f9eb240d73186eee457f62d4b16c7d Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Tue, 14 Jun 2022 22:54:39 +0200
+Subject: [PATCH] test: wrap binaries using systemd DSOs when running w/ ASan
+
+Let's detect & wrap binaries which are linked against systemd DSOs and
+we're running under ASan, since otherwise running such binaries ends
+with:
+
+```
+==633==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
+```
+
+(cherry picked from commit 3917534d620c2b358a196431b9e2593218ba1ac9)
+
+Related: #2087652
+---
+ test/test-functions | 40 +++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index a0ad8b2fb1..34aeac339f 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2426,6 +2426,9 @@ inst_binary() {
+ 
+     local file line
+     local so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)'
++    # DSOs provided by systemd
++    local systemd_so_regex='/(libudev|libsystemd.*|.+[\-_]systemd([\-_].+)?|libnss_(mymachines|myhostname|resolve)).so'
++    local wrap_binary=0
+     # I love bash!
+     while read -r line; do
+         [[ "$line" = 'not a dynamic executable' ]] && break
+@@ -2434,6 +2437,12 @@ inst_binary() {
+         # by ldd attempting to use the unprefixed RPATH.
+         [[ "$line" =~ libsystemd.*\ not\ found ]] && continue
+ 
++        # We're built with ASan and the target binary loads one of the systemd's
++        # DSOs, so we need to tweak the environment before executing the binary
++        if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$line" =~ $systemd_so_regex ]]; then
++            wrap_binary=1
++        fi
++
+         if [[ "$line" =~ $so_regex ]]; then
+             file="${BASH_REMATCH[1]}"
+             [[ -e "${initdir}/$file" ]] && continue
+@@ -2449,7 +2458,36 @@ inst_binary() {
+             exit 1
+         fi
+     done < <(LC_ALL=C ldd "$bin" 2>/dev/null)
+-    inst_simple "$bin" "$target"
++
++    # Same as above, but we need to wrap certain libraries unconditionally
++    #
++    # login - dlopen()s (not only) systemd's PAM modules
++    # tar - called by machinectl in TEST-25
++    if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar)$ ]]; then
++        wrap_binary=1
++    fi
++
++    if get_bool "$wrap_binary"; then
++        dinfo "Creating ASan-compatible wrapper for binary '$target'"
++        # Install the target binary with a ".orig" suffix
++        inst_simple "$bin" "${target}.orig"
++        # Create a simple shell wrapper in place of the target binary, which
++        # sets necessary ASan-related env variables and then exec()s the
++        # suffixed target binary
++        cat >"$initdir/$target" <<EOF
++#!/bin/bash
++# Preload the ASan runtime DSO, otherwise ASAn will complain
++export LD_PRELOAD="$ASAN_RT_PATH"
++# Disable LSan to speed things up, since we don't care about leak reports
++# from 'external' binaries
++export ASAN_OPTIONS=detect_leaks=0
++# Set argv[0] to the original binary name without the ".orig" suffix
++exec -a "\$0" -- "${target}.orig" "\$@"
++EOF
++        chmod +x "$initdir/$target"
++    else
++        inst_simple "$bin" "$target"
++    fi
+ }
+ 
+ # same as above, except for shell scripts.
diff --git a/SOURCES/0242-test-set-ASAN_RT_PATH-along-with-LD_PRELOAD-to-the-A.patch b/SOURCES/0242-test-set-ASAN_RT_PATH-along-with-LD_PRELOAD-to-the-A.patch
new file mode 100644
index 0000000..4ecc8b7
--- /dev/null
+++ b/SOURCES/0242-test-set-ASAN_RT_PATH-along-with-LD_PRELOAD-to-the-A.patch
@@ -0,0 +1,30 @@
+From 3a58ce9a0ff042f9d5e2c4b75462490a3868bd13 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 6 Jun 2022 14:45:11 +0200
+Subject: [PATCH] test: set $ASAN_RT_PATH along with $LD_PRELOAD to the ASan
+ runtime DSO
+
+Since we unset $LD_PRELOAD in the testsuite-* units (due to another
+issue), let's store the path to the ASan DSO in another env variable, so
+we can easily access it in the testsuite scripts when needed.
+
+(cherry picked from commit 3ea18a2e36a5b8ac60c76e407f9dd38800455725)
+
+Related: #2087652
+---
+ test/test-functions | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 34aeac339f..a9ff561083 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -820,7 +820,7 @@ mount -o remount,rw /
+ 
+ # A lot of services (most notably dbus) won't start without preloading libasan
+ # See https://github.com/systemd/systemd/issues/5004
+-DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=$ASAN_RT_PATH"
++DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=$ASAN_RT_PATH ASAN_RT_PATH=$ASAN_RT_PATH"
+ 
+ if [[ "$ASAN_COMPILER" == "clang" ]]; then
+   # Let's add the ASan DSO's path to the dynamic linker's cache. This is pretty
diff --git a/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch b/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch
new file mode 100644
index 0000000..138ae6b
--- /dev/null
+++ b/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch
@@ -0,0 +1,101 @@
+From 137a22e0192941fa275b70665af7a0d54f6ad614 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 15 Jun 2022 12:32:51 +0200
+Subject: [PATCH] test: drop all LD_PRELOAD-related ASan workarounds
+
+since they shouldn't be necessary anymore, as we tweak the "problematic"
+binaries on per-binary basis.
+
+(cherry picked from commit fa65ba6baac8c9241cf30802bb5fd3698d1f3189)
+
+Related: #2087652
+---
+ test/test-functions | 54 +--------------------------------------------
+ 1 file changed, 1 insertion(+), 53 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index a9ff561083..f55e64493d 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -593,10 +593,6 @@ install_verity_minimal() {
+             # missing $LD_PRELOAD libraries.
+             inst_libs "$ASAN_RT_PATH"
+             inst_library "$ASAN_RT_PATH"
+-            # Create a dummy LSan suppression file otherwise gcc's ASan
+-            # complains as it doesn't exist in the minimal image
+-            # (i.e. when running TEST-29 or TEST-50 under sanitizers)
+-            touch "$initdir/systemd-lsan.supp"
+         fi
+         cp "$os_release" "$initdir/usr/lib/os-release"
+         ln -s ../usr/lib/os-release "$initdir/etc/os-release"
+@@ -792,20 +788,6 @@ if [[ ! -e "$ASAN_RT_PATH" ]]; then
+     exit 1
+ fi
+ 
+-# Suppress certain leaks reported by LSan (either in external tools or bogus
+-# ones)
+-# Docs: # https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer#suppressions
+-#
+-# - fsck is called by systemd-homed and is reporting a leak we're not interested
+-#   in
+-# - libLLVM is a "side effect" caused by the previous fsck leak
+-cat >/systemd-lsan.supp <<INNER_EOF
+-leak:/bin/fsck$
+-leak:/sbin/fsck$
+-leak:/lib/libLLVM
+-INNER_EOF
+-
+-DEFAULT_LSAN_OPTIONS=${LSAN_OPTIONS:-}:suppressions=/systemd-lsan.supp
+ DEFAULT_ASAN_OPTIONS=${ASAN_OPTIONS:-strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1}
+ DEFAULT_UBSAN_OPTIONS=${UBSAN_OPTIONS:-print_stacktrace=1:print_summary=1:halt_on_error=1}
+ DEFAULT_ENVIRONMENT="ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS LSAN_OPTIONS=\$DEFAULT_LSAN_OPTIONS"
+@@ -818,9 +800,7 @@ mount -t proc proc /proc
+ mount -t sysfs sysfs /sys
+ mount -o remount,rw /
+ 
+-# A lot of services (most notably dbus) won't start without preloading libasan
+-# See https://github.com/systemd/systemd/issues/5004
+-DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=$ASAN_RT_PATH ASAN_RT_PATH=$ASAN_RT_PATH"
++DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT ASAN_RT_PATH=$ASAN_RT_PATH"
+ 
+ if [[ "$ASAN_COMPILER" == "clang" ]]; then
+   # Let's add the ASan DSO's path to the dynamic linker's cache. This is pretty
+@@ -857,38 +837,6 @@ printf "[Unit]\nConditionVirtualization=container\n\n[Service]\nTimeoutSec=240s\
+ mkdir -p /etc/systemd/system/systemd-journal-flush.service.d
+ printf "[Service]\nTimeoutSec=180s\n" >/etc/systemd/system/systemd-journal-flush.service.d/timeout.conf
+ 
+-# D-Bus has troubles during system shutdown causing it to fail. Although it's
+-# harmless, it causes unnecessary noise in the logs, so let's disable LSan's
+-# at_exit check just for the dbus.service
+-mkdir -p /etc/systemd/system/dbus.service.d
+-printf "[Service]\nEnvironment=ASAN_OPTIONS=leak_check_at_exit=false\n" >/etc/systemd/system/dbus.service.d/disable-lsan.conf
+-
+-# Some utilities run via IMPORT/RUN/PROGRAM udev directives fail because
+-# they're uninstrumented (like dmsetup). Let's add a simple rule which sets
+-# LD_PRELOAD to the ASan RT library to fix this.
+-mkdir -p /etc/udev/rules.d
+-cat >/etc/udev/rules.d/00-set-LD_PRELOAD.rules <<INNER_EOF
+-SUBSYSTEM=="block", ENV{LD_PRELOAD}="$ASAN_RT_PATH"
+-INNER_EOF
+-chmod 0644 /etc/udev/rules.d/00-set-LD_PRELOAD.rules
+-
+-# The 'mount' utility doesn't behave well under libasan, causing unexpected
+-# fails during boot and subsequent test results check:
+-# bash-5.0# mount -o remount,rw -v /
+-# mount: /dev/sda1 mounted on /.
+-# bash-5.0# echo \$?
+-# 1
+-# Let's workaround this by clearing the previously set LD_PRELOAD env variable,
+-# so the libasan library is not loaded for this particular service
+-unset_ld_preload() {
+-    local _dropin_dir="/etc/systemd/system/\$1.service.d"
+-    mkdir -p "\$_dropin_dir"
+-    printf "[Service]\nUnsetEnvironment=LD_PRELOAD\n" >"\$_dropin_dir/unset_ld_preload.conf"
+-}
+-
+-unset_ld_preload systemd-remount-fs
+-unset_ld_preload testsuite-
+-
+ export ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS:log_path=/systemd.asan.log UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS
+ exec "$ROOTLIBDIR/systemd" "\$@"
+ EOF
diff --git a/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch b/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch
new file mode 100644
index 0000000..b7ef69f
--- /dev/null
+++ b/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch
@@ -0,0 +1,57 @@
+From e5ecc772a0bb0813cdcf0a24f48ba3278da6e276 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 15 Jun 2022 19:43:11 +0200
+Subject: [PATCH] test: don't wrap binaries built with ASan
+
+since they should handle loading other instrumented libraries without
+issues.
+
+(cherry picked from commit b727d7e02d6c88476ae9e46211e1f9c24720d5c3)
+
+Related: #2087652
+---
+ test/test-functions | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index f55e64493d..57d4df3e7e 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -228,6 +228,8 @@ DEBUGTOOLS=(
+ )
+ 
+ is_built_with_asan() {
++    local _bin="${1:?}"
++
+     if ! type -P objdump >/dev/null; then
+         ddebug "Failed to find objdump. Assuming systemd hasn't been built with ASAN."
+         return 1
+@@ -235,7 +237,7 @@ is_built_with_asan() {
+ 
+     # Borrowed from https://github.com/google/oss-fuzz/blob/cd9acd02f9d3f6e80011cc1e9549be526ce5f270/infra/base-images/base-runner/bad_build_check#L182
+     local _asan_calls
+-    _asan_calls="$(objdump -dC "$SYSTEMD_JOURNALD" | grep -E "(callq?|brasl?|bl)\s.+__asan" -c)"
++    _asan_calls="$(objdump -dC "$_bin" | grep -E "(callq?|brasl?|bl)\s.+__asan" -c)"
+     if ((_asan_calls < 1000)); then
+         return 1
+     else
+@@ -251,7 +253,7 @@ is_built_with_coverage() {
+     meson configure "${BUILD_DIR:?}" | grep 'b_coverage' | awk '{ print $2 }' | grep -q 'true'
+ }
+ 
+-IS_BUILT_WITH_ASAN=$(is_built_with_asan && echo yes || echo no)
++IS_BUILT_WITH_ASAN=$(is_built_with_asan "$SYSTEMD_JOURNALD" && echo yes || echo no)
+ IS_BUILT_WITH_COVERAGE=$(is_built_with_coverage && echo yes || echo no)
+ 
+ if get_bool "$IS_BUILT_WITH_ASAN"; then
+@@ -2415,7 +2417,9 @@ inst_binary() {
+         wrap_binary=1
+     fi
+ 
+-    if get_bool "$wrap_binary"; then
++    # If the target binary is built with ASan support, we don't need to wrap
++    # it, as it should handle everything by itself
++    if get_bool "$wrap_binary" && ! is_built_with_asan "$bin"; then
+         dinfo "Creating ASan-compatible wrapper for binary '$target'"
+         # Install the target binary with a ".orig" suffix
+         inst_simple "$bin" "${target}.orig"
diff --git a/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch b/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch
new file mode 100644
index 0000000..250eb9b
--- /dev/null
+++ b/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch
@@ -0,0 +1,108 @@
+From 4dd51db0381048f15973dc0046fe5fdec1f40aa8 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 16 Jun 2022 22:16:53 +0200
+Subject: [PATCH] test: send stdout/stderr of testsuite units to journal &
+ console
+
+to make debugging in CIs slightly easier.
+
+(cherry picked from commit ba7abf79a5a2df2a93332fc32e8e3c268c74abc7)
+
+Related: #2087652
+---
+ test/test-functions             | 12 ++++++++++++
+ test/units/testsuite-22.service |  2 --
+ test/units/testsuite-35.service |  2 --
+ test/units/testsuite-45.service |  2 --
+ test/units/testsuite-64.service |  2 --
+ test/units/testsuite-71.service |  2 --
+ test/units/testsuite-73.service |  2 --
+ 7 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 57d4df3e7e..77d4a0afff 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2867,6 +2867,18 @@ test_setup() {
+             mask_supporting_services
+         fi
+ 
++        # Send stdout/stderr of testsuite-*.service units to both journal and
++        # console to make debugging in CIs easier
++        # Note: we can't use a dropin for `testsuite-.service`, since that also
++        #       overrides 'sub-units' of some tests that already use a specific
++        #       value for Standard(Output|Error)=
++        #       (e.g. test/units/testsuite-66-deviceisolation.service)
++        if ! get_bool "$INTERACTIVE_DEBUG"; then
++            local dropin_dir="${initdir:?}/etc/systemd/system/testsuite-${TESTID:?}.service.d"
++            mkdir -p "$dropin_dir"
++            printf '[Service]\nStandardOutput=journal+console\nStandardError=journal+console' >"$dropin_dir/99-stdout.conf"
++        fi
++
+         if get_bool "$hook_defined"; then
+             test_append_files "${initdir:?}"
+         fi
+diff --git a/test/units/testsuite-22.service b/test/units/testsuite-22.service
+index b9ecc4c5d6..a5ed660c62 100644
+--- a/test/units/testsuite-22.service
++++ b/test/units/testsuite-22.service
+@@ -9,5 +9,3 @@ Wants=getty-pre.target
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+ Type=oneshot
+-StandardOutput=tty
+-StandardError=tty
+diff --git a/test/units/testsuite-35.service b/test/units/testsuite-35.service
+index 556a57a384..0599f6104e 100644
+--- a/test/units/testsuite-35.service
++++ b/test/units/testsuite-35.service
+@@ -5,6 +5,4 @@ Description=TEST-35-LOGIN
+ [Service]
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+-StandardOutput=journal+console
+-StandardError=journal+console
+ Type=oneshot
+diff --git a/test/units/testsuite-45.service b/test/units/testsuite-45.service
+index 79c0a6f117..b16ce9933f 100644
+--- a/test/units/testsuite-45.service
++++ b/test/units/testsuite-45.service
+@@ -5,6 +5,4 @@ Description=TEST-45-TIMEDATE
+ [Service]
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+-StandardOutput=journal+console
+-StandardError=journal+console
+ Type=oneshot
+diff --git a/test/units/testsuite-64.service b/test/units/testsuite-64.service
+index 10b61e7e53..f75a3d7aad 100644
+--- a/test/units/testsuite-64.service
++++ b/test/units/testsuite-64.service
+@@ -6,5 +6,3 @@ Description=TEST-64-UDEV
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+ Type=oneshot
+-StandardOutput=journal+console
+-StandardError=journal+console
+diff --git a/test/units/testsuite-71.service b/test/units/testsuite-71.service
+index 019e8bff24..1718629c05 100644
+--- a/test/units/testsuite-71.service
++++ b/test/units/testsuite-71.service
+@@ -5,6 +5,4 @@ Description=TEST-71-HOSTNAME
+ [Service]
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+-StandardOutput=journal+console
+-StandardError=journal+console
+ Type=oneshot
+diff --git a/test/units/testsuite-73.service b/test/units/testsuite-73.service
+index bee8c4215d..3ebd24da18 100644
+--- a/test/units/testsuite-73.service
++++ b/test/units/testsuite-73.service
+@@ -5,6 +5,4 @@ Description=TEST-73-LOCALE
+ [Service]
+ ExecStartPre=rm -f /failed /testok
+ ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+-StandardOutput=journal+console
+-StandardError=journal+console
+ Type=oneshot
diff --git a/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch b/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch
new file mode 100644
index 0000000..c9fb57b
--- /dev/null
+++ b/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch
@@ -0,0 +1,49 @@
+From 1e684870a7f893fcd9138c0ca6bde0fcf3bf752a Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 14:44:49 +0200
+Subject: [PATCH] test: make the busy loop in TEST-02 less verbose
+
+as it unnecessarily clogs the logs.
+
+(cherry picked from commit 582547cbd38a02289451c1cea36a32f446b66677)
+
+Related: #2087652
+---
+ test/units/testsuite-02.sh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh
+index af6e007825..54927a6377 100755
+--- a/test/units/testsuite-02.sh
++++ b/test/units/testsuite-02.sh
+@@ -49,6 +49,7 @@ function report_result() {
+     systemd-cat cat "/$name.log"
+ }
+ 
++set +x
+ # Associative array for running tasks, where running[test-path]=PID
+ declare -A running=()
+ for task in "${TEST_LIST[@]}"; do
+@@ -72,6 +73,7 @@ for task in "${TEST_LIST[@]}"; do
+     done
+ 
+     if [[ -x $task ]]; then
++        echo "Executing test '$task'"
+         log_file="/${task##*/}.log"
+         $task &>"$log_file" &
+         running[$task]=$!
+@@ -80,11 +82,14 @@ done
+ 
+ # Wait for remaining running tasks
+ for key in "${!running[@]}"; do
++    echo "Waiting for test '$key' to finish"
+     wait ${running[$key]} && ec=0 || ec=$?
+     report_result "$key" $ec
+     unset running["$key"]
+ done
+ 
++set -x
++
+ # Test logs are sometimes lost, as the system shuts down immediately after
+ journalctl --sync
+ 
diff --git a/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch b/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch
new file mode 100644
index 0000000..e30e1b5
--- /dev/null
+++ b/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch
@@ -0,0 +1,30 @@
+From d9055b5394aff8a8ec9c75c7cf4fc43f0617e6dd Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 14:47:10 +0200
+Subject: [PATCH] test: always wrap useradd/userdel when running w/ ASan
+
+since they dlopen() PAM modules, including systemd ones.
+
+(cherry picked from commit 94850fb956458703e0c6e0bee7f482aa41a47e9e)
+
+Related: #2087652
+---
+ test/test-functions | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 77d4a0afff..b5fcf07818 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2411,9 +2411,9 @@ inst_binary() {
+ 
+     # Same as above, but we need to wrap certain libraries unconditionally
+     #
+-    # login - dlopen()s (not only) systemd's PAM modules
++    # login, useradd, userdel - dlopen()s (not only) systemd's PAM modules
+     # tar - called by machinectl in TEST-25
+-    if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar)$ ]]; then
++    if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar|useradd|userdel)$ ]]; then
+         wrap_binary=1
+     fi
+ 
diff --git a/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch b/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch
new file mode 100644
index 0000000..ce6295c
--- /dev/null
+++ b/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch
@@ -0,0 +1,239 @@
+From da2408f522a4ea65b30fb86619dd3f11e1308ac4 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 15:06:59 +0200
+Subject: [PATCH] test: don't flush debug logs to the console
+
+Let's keep the debug logs in the journal, while logging only
+testsute-*.sh stdout/stderr to the console (ba7abf7). This should make
+the test output log a bit more readable and potentially the tests itself
+a bit faster by avoiding console oversaturation.
+
+Also, it should significantly reduce the size of artifacts kept by CIs.
+
+(cherry picked from commit c84d1c9822bd181c37a5bd26b607edd67096839f)
+
+Related: #2087652
+---
+ test/units/testsuite-20.sh | 1 -
+ test/units/testsuite-23.sh | 1 -
+ test/units/testsuite-27.sh | 1 -
+ test/units/testsuite-30.sh | 1 -
+ test/units/testsuite-32.sh | 1 -
+ test/units/testsuite-34.sh | 1 -
+ test/units/testsuite-38.sh | 1 -
+ test/units/testsuite-39.sh | 1 -
+ test/units/testsuite-40.sh | 1 -
+ test/units/testsuite-41.sh | 1 -
+ test/units/testsuite-46.sh | 1 -
+ test/units/testsuite-47.sh | 1 -
+ test/units/testsuite-52.sh | 1 -
+ test/units/testsuite-55.sh | 1 -
+ test/units/testsuite-59.sh | 1 -
+ test/units/testsuite-62.sh | 1 -
+ test/units/testsuite-66.sh | 1 -
+ 17 files changed, 17 deletions(-)
+
+diff --git a/test/units/testsuite-20.sh b/test/units/testsuite-20.sh
+index fc87c18c4c..338769aacc 100755
+--- a/test/units/testsuite-20.sh
++++ b/test/units/testsuite-20.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$
+ 
+diff --git a/test/units/testsuite-23.sh b/test/units/testsuite-23.sh
+index 46e45c8780..e8f99ff60d 100755
+--- a/test/units/testsuite-23.sh
++++ b/test/units/testsuite-23.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ # Create a binary for which execve() will fail
+ touch /tmp/brokenbinary
+diff --git a/test/units/testsuite-27.sh b/test/units/testsuite-27.sh
+index 3b2f925153..c0701f35c3 100755
+--- a/test/units/testsuite-27.sh
++++ b/test/units/testsuite-27.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ systemd-run --wait --unit=test27-one \
+             -p StandardOutput=file:/tmp/stdout \
+diff --git a/test/units/testsuite-30.sh b/test/units/testsuite-30.sh
+index 51b9bdd093..57f46669f9 100755
+--- a/test/units/testsuite-30.sh
++++ b/test/units/testsuite-30.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ systemctl disable --now systemd-timesyncd.service
+ 
+diff --git a/test/units/testsuite-32.sh b/test/units/testsuite-32.sh
+index 20ab67f6f1..5c289d0abf 100755
+--- a/test/units/testsuite-32.sh
++++ b/test/units/testsuite-32.sh
+@@ -11,7 +11,6 @@ set -o pipefail
+ 
+ if test -f /sys/fs/cgroup/system.slice/testsuite-32.service/memory.oom.group; then
+     systemd-analyze log-level debug
+-    systemd-analyze log-target console
+ 
+     # Run a service that is guaranteed to be the first candidate for OOM killing
+     systemd-run --unit=oomtest.service \
+diff --git a/test/units/testsuite-34.sh b/test/units/testsuite-34.sh
+index 57a7b950a0..e6171beaa6 100755
+--- a/test/units/testsuite-34.sh
++++ b/test/units/testsuite-34.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ function test_directory() {
+     local directory="$1"
+diff --git a/test/units/testsuite-38.sh b/test/units/testsuite-38.sh
+index f2f61b961f..438990d1c5 100755
+--- a/test/units/testsuite-38.sh
++++ b/test/units/testsuite-38.sh
+@@ -5,7 +5,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ unit=testsuite-38-sleep.service
+ 
+diff --git a/test/units/testsuite-39.sh b/test/units/testsuite-39.sh
+index 03abf391f1..5b77bbbaf1 100755
+--- a/test/units/testsuite-39.sh
++++ b/test/units/testsuite-39.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ export SYSTEMD_PAGER=
+ SERVICE_PATH="$(mktemp /etc/systemd/system/execreloadXXX.service)"
+diff --git a/test/units/testsuite-40.sh b/test/units/testsuite-40.sh
+index dd54fa174c..cec1fd3a7a 100755
+--- a/test/units/testsuite-40.sh
++++ b/test/units/testsuite-40.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ declare -A property
+ 
+diff --git a/test/units/testsuite-41.sh b/test/units/testsuite-41.sh
+index 3b41db03f5..13bc684c2d 100755
+--- a/test/units/testsuite-41.sh
++++ b/test/units/testsuite-41.sh
+@@ -7,7 +7,6 @@ set -o pipefail
+ MAX_SECS=60
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ # test one: Restart=on-failure should restart the service
+ systemd-run --unit=one -p Type=oneshot -p Restart=on-failure /bin/bash -c "exit 1" \
+diff --git a/test/units/testsuite-46.sh b/test/units/testsuite-46.sh
+index 3724a3b5f6..658613abb6 100755
+--- a/test/units/testsuite-46.sh
++++ b/test/units/testsuite-46.sh
+@@ -34,7 +34,6 @@ wait_for_state() {
+ }
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ systemctl service-log-level systemd-homed debug
+ 
+ # Create a tmpfs to use as backing store for the home dir. That way we can enforce a size limit nicely.
+diff --git a/test/units/testsuite-47.sh b/test/units/testsuite-47.sh
+index ff10602df7..529e9617a5 100755
+--- a/test/units/testsuite-47.sh
++++ b/test/units/testsuite-47.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ systemctl start testsuite-47-repro
+ sleep 4
+diff --git a/test/units/testsuite-52.sh b/test/units/testsuite-52.sh
+index 8a76ff6ed6..d78fdd53ba 100755
+--- a/test/units/testsuite-52.sh
++++ b/test/units/testsuite-52.sh
+@@ -4,7 +4,6 @@ set -ex
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ systemctl enable test-honor-first-shutdown.service
+ systemctl start test-honor-first-shutdown.service
+diff --git a/test/units/testsuite-55.sh b/test/units/testsuite-55.sh
+index 379ea9e569..74dd285460 100755
+--- a/test/units/testsuite-55.sh
++++ b/test/units/testsuite-55.sh
+@@ -4,7 +4,6 @@ set -eux
+ set -o pipefail
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ # Loose checks to ensure the environment has the necessary features for systemd-oomd
+ [[ -e /proc/pressure ]] || echo "no PSI" >>/skipped
+diff --git a/test/units/testsuite-59.sh b/test/units/testsuite-59.sh
+index 143e44ec63..83db053107 100755
+--- a/test/units/testsuite-59.sh
++++ b/test/units/testsuite-59.sh
+@@ -28,7 +28,6 @@ wait_on_state_or_fail () {
+ }
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ 
+ cat >/run/systemd/system/testservice-fail-59.service <<EOF
+diff --git a/test/units/testsuite-62.sh b/test/units/testsuite-62.sh
+index da40c2f1e7..04b79b7e77 100755
+--- a/test/units/testsuite-62.sh
++++ b/test/units/testsuite-62.sh
+@@ -5,7 +5,6 @@ set -o pipefail
+ 
+ setup() {
+     systemd-analyze log-level debug
+-    systemd-analyze log-target console
+ 
+     for i in {0..3};
+     do
+diff --git a/test/units/testsuite-66.sh b/test/units/testsuite-66.sh
+index fba42d15df..7a88e5bcba 100755
+--- a/test/units/testsuite-66.sh
++++ b/test/units/testsuite-66.sh
+@@ -6,7 +6,6 @@ set -o pipefail
+ RESULTS_FILE=/tmp/testsuite66serviceresults
+ 
+ systemd-analyze log-level debug
+-systemd-analyze log-target console
+ 
+ systemctl start testsuite-66-deviceisolation.service
+ 
diff --git a/SOURCES/0249-test-fix-a-couple-of-issues-found-by-shellcheck.patch b/SOURCES/0249-test-fix-a-couple-of-issues-found-by-shellcheck.patch
new file mode 100644
index 0000000..ee6d7f2
--- /dev/null
+++ b/SOURCES/0249-test-fix-a-couple-of-issues-found-by-shellcheck.patch
@@ -0,0 +1,75 @@
+From de9aa9da870f1f5fd1457dd70fd13c221e8b39b3 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 15:28:17 +0200
+Subject: [PATCH] test: fix a couple of issues found by shellcheck
+
+(cherry picked from commit 72f0e89c0da3584d5d0a0124d791b02f0f04e769)
+
+Related: #2087652
+---
+ test/units/testsuite-02.sh | 4 ++--
+ test/units/testsuite-38.sh | 8 ++++----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh
+index 54927a6377..8ebcc575ee 100755
+--- a/test/units/testsuite-02.sh
++++ b/test/units/testsuite-02.sh
+@@ -61,7 +61,7 @@ for task in "${TEST_LIST[@]}"; do
+                 # Task has finished, report its result and drop it from the queue
+                 wait "${running[$key]}" && ec=0 || ec=$?
+                 report_result "$key" $ec
+-                unset running["$key"]
++                unset "running[$key]"
+                 # Break from inner for loop and outer while loop to skip
+                 # the sleep below when we find a free slot in the queue
+                 break 2
+@@ -85,7 +85,7 @@ for key in "${!running[@]}"; do
+     echo "Waiting for test '$key' to finish"
+     wait ${running[$key]} && ec=0 || ec=$?
+     report_result "$key" $ec
+-    unset running["$key"]
++    unset "running[$key]"
+ done
+ 
+ set -x
+diff --git a/test/units/testsuite-38.sh b/test/units/testsuite-38.sh
+index 438990d1c5..c5f9bcc22c 100755
+--- a/test/units/testsuite-38.sh
++++ b/test/units/testsuite-38.sh
+@@ -17,7 +17,7 @@ dbus_freeze() {
+     local name object_path suffix
+ 
+     suffix="${1##*.}"
+-    name="${1%.$suffix}"
++    name="${1%".$suffix"}"
+     object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}"
+ 
+     busctl call \
+@@ -31,7 +31,7 @@ dbus_thaw() {
+     local name object_path suffix
+ 
+     suffix="${1##*.}"
+-    name="${1%.$suffix}"
++    name="${1%".$suffix"}"
+     object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}"
+ 
+     busctl call \
+@@ -65,7 +65,7 @@ dbus_can_freeze() {
+     local name object_path suffix
+ 
+     suffix="${1##*.}"
+-    name="${1%.$suffix}"
++    name="${1%".$suffix"}"
+     object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}"
+ 
+     busctl get-property \
+@@ -79,7 +79,7 @@ check_freezer_state() {
+     local name object_path suffix
+ 
+     suffix="${1##*.}"
+-    name="${1%.$suffix}"
++    name="${1%".$suffix"}"
+     object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}"
+ 
+     for _ in {0..10}; do
diff --git a/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch b/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch
new file mode 100644
index 0000000..ae0c9b8
--- /dev/null
+++ b/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch
@@ -0,0 +1,45 @@
+From e235b10483fb5b33f20ff0611ac5ed707d35d850 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 18 Feb 2022 14:10:15 +0100
+Subject: [PATCH] test: pass the initdir to check_result_{qemu,nspawn} hooks
+
+(cherry picked from commit 4b9a0c3aebdcf000f8d7ee569cb8a1806d07c397)
+
+Related: #2087652
+---
+ test/test-functions | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index b5fcf07818..93ab32b68d 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1438,7 +1438,7 @@ check_result_nspawn() {
+ 
+     # Run additional test-specific checks if defined by check_result_nspawn_hook()
+     if declare -F check_result_nspawn_hook >/dev/null; then
+-        if ! check_result_nspawn_hook; then
++        if ! check_result_nspawn_hook "${workspace}"; then
+             derror "check_result_nspawn_hook() returned with EC > 0"
+             ret=4
+         fi
+@@ -1457,16 +1457,16 @@ check_result_qemu() {
+     check_result_common "${initdir:?}"
+     ret=$?
+ 
+-    _umount_dir "${initdir:?}"
+-
+     # Run additional test-specific checks if defined by check_result_qemu_hook()
+     if declare -F check_result_qemu_hook >/dev/null; then
+-        if ! check_result_qemu_hook; then
++        if ! check_result_qemu_hook "${initdir:?}"; then
+             derror "check_result_qemu_hook() returned with EC > 0"
+             ret=4
+         fi
+     fi
+ 
++    _umount_dir "${initdir:?}"
++
+     return $ret
+ }
+ 
diff --git a/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch b/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch
new file mode 100644
index 0000000..840a55e
--- /dev/null
+++ b/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch
@@ -0,0 +1,64 @@
+From 895cc5ef78f91ed542d8be6a057033b7992ad91e Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 17:28:13 +0200
+Subject: [PATCH] test: run the custom check hooks before common checks
+
+since we delete the guest journals as part of the save_journal() step in
+check_result_common(), making journal inaccessible from the custom check
+hooks.
+
+(cherry picked from commit 35d2d2e61c7695b87a4ee3dc54d065f4de95f260)
+
+Related: #2087652
+---
+ test/test-functions | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 93ab32b68d..1306dcf260 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1433,10 +1433,7 @@ check_result_nspawn() {
+     local workspace="${1:?}"
+     local ret
+ 
+-    check_result_common "${workspace}"
+-    ret=$?
+-
+-    # Run additional test-specific checks if defined by check_result_nspawn_hook()
++    # Run a test-specific checks if defined by check_result_nspawn_hook()
+     if declare -F check_result_nspawn_hook >/dev/null; then
+         if ! check_result_nspawn_hook "${workspace}"; then
+             derror "check_result_nspawn_hook() returned with EC > 0"
+@@ -1444,6 +1441,9 @@ check_result_nspawn() {
+         fi
+     fi
+ 
++    check_result_common "${workspace}"
++    ret=$?
++
+     _umount_dir "${initdir:?}"
+ 
+     return $ret
+@@ -1454,10 +1454,7 @@ check_result_qemu() {
+     local ret
+     mount_initdir
+ 
+-    check_result_common "${initdir:?}"
+-    ret=$?
+-
+-    # Run additional test-specific checks if defined by check_result_qemu_hook()
++    # Run a test-specific checks if defined by check_result_qemu_hook()
+     if declare -F check_result_qemu_hook >/dev/null; then
+         if ! check_result_qemu_hook "${initdir:?}"; then
+             derror "check_result_qemu_hook() returned with EC > 0"
+@@ -1465,6 +1462,9 @@ check_result_qemu() {
+         fi
+     fi
+ 
++    check_result_common "${initdir:?}"
++    ret=$?
++
+     _umount_dir "${initdir:?}"
+ 
+     return $ret
diff --git a/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch b/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch
new file mode 100644
index 0000000..6c294d9
--- /dev/null
+++ b/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch
@@ -0,0 +1,37 @@
+From 37b398e2a3d6cd225a3121843540a033f4415b80 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Fri, 17 Jun 2022 17:29:22 +0200
+Subject: [PATCH] test: check journal directly instead of capturing console
+ output
+
+(cherry picked from commit 8cda7b91ff267fc21325d4886980e243389a7566)
+
+Related: #2087652
+---
+ test/TEST-52-HONORFIRSTSHUTDOWN/test.sh | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh b/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh
+index 936e801c51..6a1ec9ca29 100755
+--- a/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh
++++ b/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh
+@@ -14,15 +14,10 @@ TEST_NO_QEMU=1
+ # could turn into a reboot if the test fails.
+ NSPAWN_TIMEOUT=60
+ 
+-# Remove this file if it exists. This is used along with
+-# the make target "finish". Since concrete confirmation is
+-# only found from the console during the poweroff.
+-rm -f /tmp/honorfirstshutdown.log >/dev/null
+-
+ check_result_nspawn_hook() {
+-    grep -q "Shutdown is already active. Skipping emergency action request" /tmp/honorfirstshutdown.log
++    local workspace="${1:?}"
++
++    "${JOURNALCTL:?}" -D "${workspace:?}/var/log/journal" --grep "Shutdown is already active. Skipping emergency action request" --no-pager
+ }
+ 
+-# Note: don't use a pipe in the following expression, as it breaks the trap
+-#       handlers we have defined in test/test-functions.
+-do_test "$@" > >(tee /tmp/honorfirstshutdown.log)
++do_test "$@"
diff --git a/SOURCES/0253-test-use-saved-process-PID-instead-of.patch b/SOURCES/0253-test-use-saved-process-PID-instead-of.patch
new file mode 100644
index 0000000..533ce85
--- /dev/null
+++ b/SOURCES/0253-test-use-saved-process-PID-instead-of.patch
@@ -0,0 +1,37 @@
+From c81dea716e04419f8f7b83346015ae8f834ec30c Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Mon, 20 Jun 2022 12:27:39 +0200
+Subject: [PATCH] test: use saved process PID instead of %%
+
+As the `%%` specifier might fail if the current job (i.e. the last
+background job) already finished:
+
+```
+[   61.692196] testsuite-04.sh[656]: ++ systemd-id128 new
+[   61.705407] testsuite-04.sh[263]: + ID=912cb8f8ef304153a123f772bb0fe9e0
+[   61.706318] testsuite-04.sh[657]: + systemd-cat -t 912cb8f8ef304153a123f772bb0fe9e0 bash -c 'echo parent; (echo child) & wait'
+[   61.720940] testsuite-04.sh[263]: + PID=657
+[   61.721126] testsuite-04.sh[263]: + wait %%
+[   61.723014] testsuite-04.sh[263]: /usr/lib/systemd/tests/testdata/units/testsuite-04.sh: line 96: wait: %%: no such job
+```
+
+(cherry picked from commit 08970485003c25ce2c4adfaeea2d58558d311d42)
+
+Related: #2087652
+---
+ test/units/testsuite-04.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/units/testsuite-04.sh b/test/units/testsuite-04.sh
+index 7521a6d2e5..b5468cbea4 100755
+--- a/test/units/testsuite-04.sh
++++ b/test/units/testsuite-04.sh
+@@ -93,7 +93,7 @@ cmp /expected /output
+ ID=$(systemd-id128 new)
+ systemd-cat -t "$ID" bash -c 'echo parent; (echo child) & wait' &
+ PID=$!
+-wait %%
++wait $PID
+ journalctl --sync
+ # We can drop this grep when https://github.com/systemd/systemd/issues/13937
+ # has a fix.
diff --git a/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch b/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch
new file mode 100644
index 0000000..3a735a4
--- /dev/null
+++ b/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch
@@ -0,0 +1,58 @@
+From f55e25db1b2f69cd5d19508bda34c52f5f92e800 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 9 Jun 2022 11:34:09 +0200
+Subject: [PATCH] test: account for ADDR_NO_RANDOMIZE if it's set
+
+On ppc64le sanitizers disable ASLR (i.e. by setting ADDR_NO_RANDOMIZE),
+which opinionated_personality() doesn't return. Let's tweak the current
+personality ourselves in such cases.
+
+See: https://github.com/llvm/llvm-project/commit/78f7a6eaa601bfdd6ae70ffd3da2254c21ff77f9
+
+Resolves: #23666
+(cherry picked from commit 894dad2975c61f59e71561cab21d6f85e8523b57)
+
+Related: #2087652
+---
+ src/test/test-seccomp.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c
+index 7ccfeadbb8..1f96ba4f80 100644
+--- a/src/test/test-seccomp.c
++++ b/src/test/test-seccomp.c
+@@ -934,8 +934,15 @@ TEST(lock_personality) {
+         }
+ 
+         assert_se(opinionated_personality(&current) >= 0);
++        /* On ppc64le sanitizers disable ASLR (i.e. by setting ADDR_NO_RANDOMIZE),
++         * which opinionated_personality() doesn't return. Let's tweak the current
++         * personality ourselves in such cases.
++         * See: https://github.com/llvm/llvm-project/commit/78f7a6eaa601bfdd6ae70ffd3da2254c21ff77f9
++         */
++        if (FLAGS_SET(safe_personality(PERSONALITY_INVALID), ADDR_NO_RANDOMIZE))
++                current |= ADDR_NO_RANDOMIZE;
+ 
+-        log_info("current personality=%lu", current);
++        log_info("current personality=0x%lX", current);
+ 
+         pid = fork();
+         assert_se(pid >= 0);
+@@ -945,13 +952,14 @@ TEST(lock_personality) {
+ 
+                 assert_se((unsigned long) safe_personality(current) == current);
+ 
+-                /* Note, we also test that safe_personality() works correctly, by checkig whether errno is properly
++                /* Note, we also test that safe_personality() works correctly, by checking whether errno is properly
+                  * set, in addition to the return value */
+                 errno = 0;
+-                assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM);
++                assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM);
+                 assert_se(errno == EPERM);
+ 
+-                assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM);
++                if (!FLAGS_SET(current, ADDR_NO_RANDOMIZE))
++                        assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM);
+                 assert_se(safe_personality(PER_LINUX | ADDR_COMPAT_LAYOUT) == -EPERM);
+                 assert_se(safe_personality(PER_LINUX | READ_IMPLIES_EXEC) == -EPERM);
+                 assert_se(safe_personality(PER_LINUX_32BIT) == -EPERM);
diff --git a/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch b/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch
new file mode 100644
index 0000000..13aeca4
--- /dev/null
+++ b/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch
@@ -0,0 +1,27 @@
+From e161d3a1297408415842731be73af765fbdc5c3b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 4 Jan 2022 09:31:25 +0100
+Subject: [PATCH] fuzz-bcd: silence warning about always-true comparison
+
+Occurs with gcc-11.2.1-7.fc35.x86_64.
+
+(cherry picked from commit 5377ad4ea44e771b5eb436d381ea9f3506488295)
+
+Related: #2087652
+---
+ src/boot/efi/fuzz-bcd.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/boot/efi/fuzz-bcd.c b/src/boot/efi/fuzz-bcd.c
+index e5ed6638a4..3df55a5c36 100644
+--- a/src/boot/efi/fuzz-bcd.c
++++ b/src/boot/efi/fuzz-bcd.c
+@@ -21,6 +21,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+         assert_se(p);
+ 
+         char16_t *title = get_bcd_title(p, size);
+-        assert_se(!title || char16_strlen(title) >= 0);
++        if (title)
++                (void) char16_strlen(title);
+         return 0;
+ }
diff --git a/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch b/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch
new file mode 100644
index 0000000..1290369
--- /dev/null
+++ b/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch
@@ -0,0 +1,26 @@
+From 9c9187a252300f5f453d995ac50edf88c5e0c855 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Wed, 22 Jun 2022 15:29:02 +0200
+Subject: [PATCH] test: disable test_ntp on RHEL
+
+since we don't ship systemd-timesyncd.
+
+rhel-only
+
+Related: #2087652
+---
+ test/units/testsuite-45.sh | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
+index 322d8086e7..75e07bc09a 100755
+--- a/test/units/testsuite-45.sh
++++ b/test/units/testsuite-45.sh
+@@ -258,7 +258,6 @@ EOF
+ 
+ test_timezone
+ test_adjtime
+-test_ntp
+ 
+ touch /testok
+ rm /failed
diff --git a/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch b/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch
new file mode 100644
index 0000000..e5c6950
--- /dev/null
+++ b/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch
@@ -0,0 +1,40 @@
+From b6d5a57b8181cc2565e2231fc9baf95fc9cc481e Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sat, 2 Jul 2022 04:18:41 +0900
+Subject: [PATCH] core: do not filter out systemd.unit= and run-level specifier
+ from kernel command line
+
+Fixes a bug introduced by 846f1da465beda990c1c01346311393f485df467.
+
+The commit 846f1da465beda990c1c01346311393f485df467 made systemd.unit=
+filtered out from the command line. That causes debug-generator does not
+work as expected on daemon-reexecute, and we cannot call `systemctl
+daemon-reexecute` in our test suite running on nspawn.
+
+Fixes issue reported in https://github.com/systemd/systemd/pull/23851#issuecomment-1170992052.
+
+(cherry picked from commit bffde9b5869fffc09e7824d2ac0aeb82a31a134b)
+
+Related: #2087652
+---
+ src/core/main.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 667e972364..03efaa03be 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1812,13 +1812,6 @@ static void filter_args(
+                         continue;
+                 }
+ 
+-                if (startswith(src[i],
+-                               in_initrd() ? "rd.systemd.unit=" : "systemd.unit="))
+-                        continue;
+-
+-                if (runlevel_to_target(src[i]))
+-                        continue;
+-
+                 /* Seems we have a good old option. Let's pass it over to the new instance. */
+                 dst[(*dst_index)++] = src[i];
+         }
diff --git a/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch b/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch
new file mode 100644
index 0000000..2d3c08d
--- /dev/null
+++ b/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch
@@ -0,0 +1,27 @@
+From a1b8ff570b5ed95697f4748cfe3bbe154802c37e Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sat, 2 Jul 2022 05:21:52 +0900
+Subject: [PATCH] test: add a simple test for daemon-reexec
+
+(cherry picked from commit d1b1bbfbfa1cb7d225250fc08089d1de17eaef7c)
+
+Related: #2087652
+---
+ test/units/testsuite-03.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/test/units/testsuite-03.sh b/test/units/testsuite-03.sh
+index 070e978cda..7c5a3b8f19 100755
+--- a/test/units/testsuite-03.sh
++++ b/test/units/testsuite-03.sh
+@@ -3,6 +3,10 @@
+ set -eux
+ set -o pipefail
+ 
++# Simple test for that daemon-reexec works in container.
++# See: https://github.com/systemd/systemd/pull/23883
++systemctl daemon-reexec
++
+ # Test merging of a --job-mode=ignore-dependencies job into a previously
+ # installed job.
+ 
diff --git a/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch b/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch
new file mode 100644
index 0000000..f9560a2
--- /dev/null
+++ b/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch
@@ -0,0 +1,27 @@
+From e6dfbe67f94d60b889f3031ebb644ed262d7fe35 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sat, 16 Apr 2022 14:43:17 +0200
+Subject: [PATCH] test: install /usr/libexec/vi as well
+
+since `/bin/vi` (at least on Fedora) is a shell wrapper which runs
+either `/bin/vim` or `/usr/libexec/vi` based on availability.
+
+(cherry picked from commit 8afe2f53b25ca99bc5bd1ec0c5dff7e183712577)
+
+Related: #2087652
+---
+ test/test-functions | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/test-functions b/test/test-functions
+index 1306dcf260..9e171cba30 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -225,6 +225,7 @@ DEBUGTOOLS=(
+     stty
+     tty
+     vi
++    /usr/libexec/vi
+ )
+ 
+ is_built_with_asan() {
diff --git a/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch b/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch
new file mode 100644
index 0000000..72dbd31
--- /dev/null
+++ b/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch
@@ -0,0 +1,37 @@
+From 70ff2f68c1cf9bdfe79ab4719ee0a051bbcb22eb Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Sun, 17 Apr 2022 19:49:17 +0200
+Subject: [PATCH] test: resize the terminal automagically with
+ INTERACTIVE_DEBUG=yes
+
+(cherry picked from commit 17082e8ac1b5335465876d100774893ba735fca4)
+
+Related: #2087652
+---
+ test/test-functions | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 9e171cba30..42ad16050c 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1678,14 +1678,12 @@ install_debug_tools() {
+         local getty_override="${initdir:?}/etc/systemd/system/serial-getty@.service.d"
+         mkdir -p "$getty_override"
+         echo -e "[Service]\nEnvironment=TERM=linux" >"$getty_override/default-TERM.conf"
++        echo 'export TERM=linux' >>"$initdir/etc/profile"
+ 
+-        cat >"$initdir/etc/motd" <<EOF
+-To adjust the terminal size use:
+-    export COLUMNS=xx
+-    export LINES=yy
+-or
+-    stty cols xx rows yy
+-EOF
++        if command -v resize >/dev/null; then
++            image_install resize
++            echo "resize" >>"$initdir/etc/profile"
++        fi
+     fi
+ }
+ 
diff --git a/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch b/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch
new file mode 100644
index 0000000..12f3b92
--- /dev/null
+++ b/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch
@@ -0,0 +1,31 @@
+From ab5ddf261e2a8c840c0224b5c8ef5932465e4eb8 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 7 Jul 2022 14:12:38 +0200
+Subject: [PATCH] test: create an ASan wrapper for `getent` and `su`
+
+since they "suffer" from the same issue as `login` and other binaries
+that load PAM stuff
+
+(cherry picked from commit fdb70dd9222219307ca53662e789fc9304ca3616)
+
+Related: #2087652
+---
+ test/test-functions | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 42ad16050c..8523cf2d21 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -2410,9 +2410,9 @@ inst_binary() {
+ 
+     # Same as above, but we need to wrap certain libraries unconditionally
+     #
+-    # login, useradd, userdel - dlopen()s (not only) systemd's PAM modules
++    # getent, login, su, useradd, userdel - dlopen()s (not only) systemd's PAM modules
+     # tar - called by machinectl in TEST-25
+-    if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar|useradd|userdel)$ ]]; then
++    if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(getent|login|su|tar|useradd|userdel)$ ]]; then
+         wrap_binary=1
+     fi
+ 
diff --git a/SOURCES/0262-test-mark-partition-bootable.patch b/SOURCES/0262-test-mark-partition-bootable.patch
new file mode 100644
index 0000000..fd719a2
--- /dev/null
+++ b/SOURCES/0262-test-mark-partition-bootable.patch
@@ -0,0 +1,29 @@
+From f039730a8e2d0a6c8ea7539ffb1a54c8951f3622 Mon Sep 17 00:00:00 2001
+From: Ludwig Nussel <ludwig.nussel@suse.de>
+Date: Mon, 27 Dec 2021 10:34:52 +0100
+Subject: [PATCH] test: mark partition bootable
+
+Make test suite partition bootable so nspawn can use the image directly.
+Useful for local testing.
+
+https://systemd.io/DISCOVERABLE_PARTITIONS/
+(cherry picked from commit b13a8b5b377f60cacad98fa8a989e992e8724c0e)
+
+Related: #2087652
+---
+ test/test-functions | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index 8523cf2d21..b596ce1382 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1219,7 +1219,7 @@ create_empty_image() {
+     LOOPDEV=$(losetup --show -P -f "$IMAGE_PUBLIC")
+     [ -b "$LOOPDEV" ] || return 1
+     sfdisk "$LOOPDEV" <<EOF
+-,$((size - 50))M
++,$((size - 50))M,L,*
+ ,
+ EOF
+ 
diff --git a/SOURCES/0263-test-bump-the-data-partition-size-if-we-don-t-strip-.patch b/SOURCES/0263-test-bump-the-data-partition-size-if-we-don-t-strip-.patch
new file mode 100644
index 0000000..5033687
--- /dev/null
+++ b/SOURCES/0263-test-bump-the-data-partition-size-if-we-don-t-strip-.patch
@@ -0,0 +1,69 @@
+From 332ac78ab1febc89e04dc095bdd2259044f7d6b6 Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 7 Jul 2022 14:13:32 +0200
+Subject: [PATCH] test: bump the data partition size if we don't strip binaries
+
+so we can run TEST-24 under sanitizers as well.
+
+Also, when at it, use the 'named-fields' sfdisk format to make the code
+a bit more descriptive without needing a manual.
+
+(cherry picked from commit 98b27937cb02dac98d8a9f0c48ba677b45df0831)
+
+Related: #2087652
+---
+ test/test-functions | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/test/test-functions b/test/test-functions
+index b596ce1382..b0f3b28def 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1194,33 +1194,38 @@ create_empty_image() {
+         exit 1
+     fi
+ 
+-    local size=500
++    # Partition sizes are in MiBs
++    local root_size=500
++    local data_size=50
+     if ! get_bool "$NO_BUILD"; then
+         if meson configure "${BUILD_DIR:?}" | grep 'static-lib\|standalone-binaries' | awk '{ print $2 }' | grep -q 'true'; then
+-            size=$((size+=200))
++            root_size=$((root_size+=200))
+         fi
+         if meson configure "${BUILD_DIR:?}" | grep 'link-.*-shared' | awk '{ print $2 }' | grep -q 'false'; then
+-            size=$((size+=200))
++            root_size=$((root_size+=200))
+         fi
+         if get_bool "$IS_BUILT_WITH_COVERAGE"; then
+-            size=$((size+=250))
++            root_size=$((root_size+=250))
+         fi
+     fi
+     if ! get_bool "$STRIP_BINARIES"; then
+-        size=$((4 * size))
++        root_size=$((4 * root_size))
++        data_size=$((2 * data_size))
+     fi
+ 
+-    echo "Setting up ${IMAGE_PUBLIC:?} (${size} MB)"
++    echo "Setting up ${IMAGE_PUBLIC:?} (${root_size} MB)"
+     rm -f "${IMAGE_PRIVATE:?}" "$IMAGE_PUBLIC"
+ 
+     # Create the blank file to use as a root filesystem
+-    truncate -s "${size}M" "$IMAGE_PUBLIC"
++    truncate -s "${root_size}M" "$IMAGE_PUBLIC"
+ 
+     LOOPDEV=$(losetup --show -P -f "$IMAGE_PUBLIC")
+     [ -b "$LOOPDEV" ] || return 1
++    # Create two partitions - a root one and a data one (utilized by some tests)
+     sfdisk "$LOOPDEV" <<EOF
+-,$((size - 50))M,L,*
+-,
++label: gpt
++type=0FC63DAF-8483-4772-8E79-3D69D8477DE4 name=root size=$((root_size - data_size))M bootable
++type=0FC63DAF-8483-4772-8E79-3D69D8477DE4 name=data
+ EOF
+ 
+     udevadm settle
diff --git a/SOURCES/0264-test-use-PBKDF2-with-capped-iterations-instead-of-Ar.patch b/SOURCES/0264-test-use-PBKDF2-with-capped-iterations-instead-of-Ar.patch
new file mode 100644
index 0000000..b14f39e
--- /dev/null
+++ b/SOURCES/0264-test-use-PBKDF2-with-capped-iterations-instead-of-Ar.patch
@@ -0,0 +1,28 @@
+From 2e673178e0bf90fd9083d19061ad6f03ecd94c3d Mon Sep 17 00:00:00 2001
+From: Frantisek Sumsal <frantisek@sumsal.cz>
+Date: Thu, 7 Jul 2022 17:16:31 +0200
+Subject: [PATCH] test: use PBKDF2 with capped iterations instead of Argon2
+
+to reduce the amount of resources the test needs (similarly to TEST-24
+where we do the same thing).
+
+(cherry picked from commit 8fec14a7d397f52b93024bf3417de8f77b0d85e6)
+
+Related: #2087652
+---
+ test/units/testsuite-70.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/units/testsuite-70.sh b/test/units/testsuite-70.sh
+index f395ef4e5e..09f78a0226 100755
+--- a/test/units/testsuite-70.sh
++++ b/test/units/testsuite-70.sh
+@@ -9,7 +9,7 @@ export SYSTEMD_LOG_LEVEL=debug
+ img="/var/tmp/test.img"
+ dd if=/dev/zero of=$img bs=1024k count=20 status=none
+ echo -n passphrase >/tmp/passphrase
+-cryptsetup luksFormat -q --use-urandom $img /tmp/passphrase
++cryptsetup luksFormat -q --pbkdf pbkdf2 --pbkdf-force-iterations 1000 --use-urandom $img /tmp/passphrase
+ 
+ # Enroll unlock with default PCR policy
+ env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto $img
diff --git a/SOURCES/0265-locale-drop-unnecessary-allocation.patch b/SOURCES/0265-locale-drop-unnecessary-allocation.patch
new file mode 100644
index 0000000..f123b35
--- /dev/null
+++ b/SOURCES/0265-locale-drop-unnecessary-allocation.patch
@@ -0,0 +1,31 @@
+From b93eca3f277547c7e45c6840f2a582b20319a93a Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sat, 18 Jun 2022 11:06:46 +0900
+Subject: [PATCH] locale: drop unnecessary allocation
+
+Fixes a bug introduced by 3d36b5d7e7b191fca7c5c65dbab94d99cf5f0230.
+
+Fixes #23777.
+
+(cherry picked from commit e83cfbf97247e391e9fc19a7abb2712c77f3b4c0)
+
+Related: #2087652
+---
+ src/locale/localed.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index 2c324efb14..791b5e60dd 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -152,10 +152,6 @@ static int property_get_locale(
+         if (r < 0)
+                 return r;
+ 
+-        l = new0(char*, _VARIABLE_LC_MAX+1);
+-        if (!l)
+-                return -ENOMEM;
+-
+         r = locale_context_build_env(&c->locale_context, &l, NULL);
+         if (r < 0)
+                 return r;
diff --git a/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch b/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch
new file mode 100644
index 0000000..f8cf7cd
--- /dev/null
+++ b/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch
@@ -0,0 +1,604 @@
+From 7cff4a47721c2cc07648e7a84a6dee2c5e930412 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 12 Apr 2022 22:01:10 +0200
+Subject: [PATCH] Revert "shared/install: create relative symlinks for
+ enablement and aliasing"
+
+This reverts commit d6c9411072901556176ac130f2ce71a33107aa93.
+
+I still think this is something that needs to be done, but we're hitting some
+unexplained failures, e.g. https://github.com/systemd/systemd/issues/22920.
+So let's revert this for now, so -rc2 can be released, with a plan to return
+to this after a release.
+
+Closes #22920.
+
+(cherry picked from commit 9aa3d6b41eadff6634bb3cf800064724171a7aad)
+
+Resolves: #2118668
+---
+ src/shared/install.c          |  14 ++--
+ src/test/test-install-root.c  |  65 ++++++++---------
+ test/test-systemctl-enable.sh | 130 ++++++++++++++++++----------------
+ 3 files changed, 103 insertions(+), 106 deletions(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 96d64d32bb..eb5c3d5f91 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1904,7 +1904,7 @@ static int install_info_symlink_alias(
+                 if (!alias_path)
+                         return -ENOMEM;
+ 
+-                q = create_symlink(lp, info->name, alias_path, force, changes, n_changes);
++                q = create_symlink(lp, info->path, alias_path, force, changes, n_changes);
+                 r = r < 0 ? r : q;
+         }
+ 
+@@ -1973,7 +1973,7 @@ static int install_info_symlink_wants(
+         }
+ 
+         STRV_FOREACH(s, list) {
+-                _cleanup_free_ char *dst = NULL;
++                _cleanup_free_ char *path = NULL, *dst = NULL;
+ 
+                 q = install_name_printf(scope, info, *s, &dst);
+                 if (q < 0) {
+@@ -2003,15 +2003,11 @@ static int install_info_symlink_wants(
+                         continue;
+                 }
+ 
+-                _cleanup_free_ char *path = strjoin(config_path, "/", dst, suffix, n);
++                path = strjoin(config_path, "/", dst, suffix, n);
+                 if (!path)
+                         return -ENOMEM;
+ 
+-                _cleanup_free_ char *target = strjoin("../", info->name);
+-                if (!target)
+-                        return -ENOMEM;
+-
+-                q = create_symlink(lp, target, path, true, changes, n_changes);
++                q = create_symlink(lp, info->path, path, true, changes, n_changes);
+                 if (r == 0)
+                         r = q;
+ 
+@@ -2919,7 +2915,7 @@ int unit_file_set_default(
+                 return r;
+ 
+         new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
+-        return create_symlink(&lp, info->name, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
++        return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes);
+ }
+ 
+ int unit_file_get_default(
+diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
+index a36536b85b..c2980ccbbd 100644
+--- a/src/test/test-install-root.c
++++ b/src/test/test-install-root.c
+@@ -88,7 +88,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../a.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -128,7 +128,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../a.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -147,7 +147,7 @@ TEST(basic_mask_and_enable) {
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
+         assert_se(streq(changes[0].path, p));
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[1].source, "../a.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
+         assert_se(streq(changes[1].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+@@ -186,7 +186,7 @@ TEST(basic_mask_and_enable) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../f.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service");
+         assert_se(streq(changes[0].path, p));
+         assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT);
+@@ -280,8 +280,7 @@ TEST(linked_units) {
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
+         for (i = 0 ; i < n_changes; i++) {
+                 assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+-                assert_se(STR_IN_SET(changes[i].source,
+-                                     "../linked.service", "/opt/linked.service"));
++                assert_se(streq(changes[i].source, "/opt/linked.service"));
+ 
+                 if (p && streq(changes[i].path, p))
+                         p = NULL;
+@@ -323,8 +322,7 @@ TEST(linked_units) {
+         q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
+         for (i = 0 ; i < n_changes; i++) {
+                 assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
+-                assert_se(STR_IN_SET(changes[i].source,
+-                                     "../linked2.service", "/opt/linked2.service"));
++                assert_se(streq(changes[i].source, "/opt/linked2.service"));
+ 
+                 if (p && streq(changes[i].path, p))
+                         p = NULL;
+@@ -342,7 +340,7 @@ TEST(linked_units) {
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(startswith(changes[0].path, root));
+         assert_se(endswith(changes[0].path, "linked3.service"));
+-        assert_se(streq(changes[0].source, "../linked3.service"));
++        assert_se(streq(changes[0].source, "/opt/linked3.service"));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ }
+@@ -373,7 +371,7 @@ TEST(default) {
+         assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "test-default-real.target"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -403,7 +401,7 @@ TEST(add_dependency) {
+         assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -444,7 +442,7 @@ TEST(template_enable) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../template@.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -475,14 +473,13 @@ TEST(template_enable) {
+ 
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../template@foo.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+         changes = NULL; n_changes = 0;
+ 
+-        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0);
+-        assert_se(state == UNIT_FILE_INDIRECT);
++        assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
+         assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
+         assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+         assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
+@@ -509,7 +506,7 @@ TEST(template_enable) {
+ 
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../template@quux.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -555,7 +552,7 @@ TEST(indirect) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../indirectb.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -607,7 +604,7 @@ TEST(preset_and_list) {
+         assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../preset-yes.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -644,7 +641,7 @@ TEST(preset_and_list) {
+         for (i = 0; i < n_changes; i++) {
+ 
+                 if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) {
+-                        assert_se(streq(changes[i].source, "../preset-yes.service"));
++                        assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
+                         assert_se(streq(changes[i].path, p));
+                 } else
+                         assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
+@@ -760,7 +757,7 @@ TEST(preset_order) {
+         assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../prefix-1.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -869,8 +866,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-1.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-1.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service");
+@@ -883,8 +880,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-2.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-2.service"));
++        assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
++        assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service");
+@@ -897,8 +894,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-3.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-3.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service");
+@@ -911,8 +908,8 @@ TEST(with_dropin) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-4a.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-4b.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service");
+@@ -978,8 +975,8 @@ TEST(with_dropin_template) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-1@instance-1.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-1@instance-1.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service");
+@@ -991,8 +988,8 @@ TEST(with_dropin_template) {
+         assert_se(n_changes == 2);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+         assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-2@instance-1.service"));
+-        assert_se(streq(changes[1].source, "../with-dropin-2@instance-1.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
++        assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
+         assert_se(streq(changes[0].path, p));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service");
+@@ -1003,7 +1000,7 @@ TEST(with_dropin_template) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+@@ -1012,7 +1009,7 @@ TEST(with_dropin_template) {
+         assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
+         assert_se(n_changes == 1);
+         assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
+-        assert_se(streq(changes[0].source, "../with-dropin-3@.service"));
++        assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
+         p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
+         assert_se(streq(changes[0].path, p));
+         unit_file_changes_free(changes, n_changes);
+diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
+index ac1bcc1cc7..0f9f220571 100644
+--- a/test/test-systemctl-enable.sh
++++ b/test/test-systemctl-enable.sh
+@@ -90,27 +90,27 @@ EOF
+ ( ! "$systemctl" --root="$root" enable test1 )
+ test -h "$root/etc/systemd/system/default.target.wants/test1.service"
+ test -h "$root/etc/systemd/system/special.target.requires/test1.service"
+-test -e "$root/etc/systemd/system/test1-goodalias.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
+ test -h "$root/etc/systemd/system/test1-goodalias.service"
+-test ! -h "$root/etc/systemd/system/test1@badalias.service"
+-test ! -h "$root/etc/systemd/system/test1-badalias.target"
+-test ! -h "$root/etc/systemd/system/test1-badalias.socket"
+-test -e "$root/etc/systemd/system/test1-goodalias2.service"
++test ! -e "$root/etc/systemd/system/test1@badalias.service"
++test ! -e "$root/etc/systemd/system/test1-badalias.target"
++test ! -e "$root/etc/systemd/system/test1-badalias.socket"
+ test -h "$root/etc/systemd/system/test1-goodalias2.service"
+ 
+ : '-------aliases in reeanble----------------------------------'
+ ( ! "$systemctl" --root="$root" reenable test1 )
+-islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service"
+-islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service"
++test -h "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
++test -h "$root/etc/systemd/system/test1-goodalias.service"
+ 
+-test ! -h "$root/etc/systemd/system/test1@badalias.service"
+-test ! -h "$root/etc/systemd/system/test1-badalias.target"
+-test ! -h "$root/etc/systemd/system/test1-badalias.socket"
++test ! -e "$root/etc/systemd/system/test1@badalias.service"
++test ! -e "$root/etc/systemd/system/test1-badalias.target"
++test ! -e "$root/etc/systemd/system/test1-badalias.socket"
+ 
+ "$systemctl" --root="$root" disable test1
+-test ! -h "$root/etc/systemd/system/default.target.wants/test1.service"
+-test ! -h "$root/etc/systemd/system/special.target.requires/test1.service"
+-test ! -h "$root/etc/systemd/system/test1-goodalias.service"
++test ! -e "$root/etc/systemd/system/default.target.wants/test1.service"
++test ! -e "$root/etc/systemd/system/special.target.requires/test1.service"
++test ! -e "$root/etc/systemd/system/test1-goodalias.service"
+ 
+ : '-------aliases when link already exists---------------------'
+ cat >"$root/etc/systemd/system/test1a.service" <<EOF
+@@ -201,17 +201,17 @@ test ! -e "$root/etc/systemd/system/link1.path"
+ : '-------link and enable--------------------------------------'
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : '-------enable already linked same path----------------------'
+ "$systemctl" --root="$root" enable '/link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : '-------enable already linked different path-----------------'
+ ( ! "$systemctl" --root="$root" enable '/subdir/link1.path' )
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : '-------enable bad suffix------------------------------------'
+ cp "$root/link1.path" "$root/subdir/link1.suffix"
+@@ -240,11 +240,11 @@ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path"
+ 
+ "$systemctl" --root="$root" enable 'link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ "$systemctl" --root="$root" reenable 'link1.path'
+ islink "$root/etc/systemd/system/link1.path" "/link1.path"
+-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path"
++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+ 
+ : '-------manual link------------------------------------------'
+ cat >"$root/link3.suffix" <<EOF
+@@ -257,7 +257,7 @@ ln -s "/link3.suffix" "$root/etc/systemd/system/link3.service"
+ 
+ SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" enable 'link3.service'
+ islink "$root/etc/systemd/system/link3.service" "/link3.suffix"
+-islink "$root/etc/systemd/system/services.target.wants/link3.service" "../link3.service"
++islink "$root/etc/systemd/system/services.target.wants/link3.service" "/link3.suffix"
+ 
+ SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" disable 'link3.service'
+ test ! -h "$root/etc/systemd/system/link3.service"
+@@ -293,7 +293,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service"
+ 
+ "$systemctl" --root="$root" enable 'link5-also.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/link5.service"
+-islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "../link5-also.service"
++islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "/etc/systemd/system/link5-also.service"
+ 
+ : '-------template enablement----------------------------------'
+ cat >"$root/etc/systemd/system/templ1@.service" <<EOF
+@@ -307,17 +307,17 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+@@ -335,33 +335,33 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'templ1@.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ1@two.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ1@one.service'
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "/etc/systemd/system/templ1@.service"
+ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"
+ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service"
+-islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service"
+-islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service"
++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
++islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "/etc/systemd/system/templ1@.service"
+ 
+ # disable remaining links here
+ "$systemctl" --root="$root" disable 'templ1@.service'
+@@ -400,18 +400,18 @@ RequiredBy=another-template@.target
+ EOF
+ 
+ "$systemctl" --root="$root" enable 'templ2@.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
+ 
+ "$systemctl" --root="$root" enable 'templ2@two.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@other.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "/etc/systemd/system/templ2@.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@two.service'
+-islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service"
++islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "/etc/systemd/system/templ2@.service"
+ test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service"
+ 
+ "$systemctl" --root="$root" disable 'templ2@.service'
+@@ -433,8 +433,8 @@ EOF
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+ test ! -h "$root/etc/systemd/system/link4@.service"
+ test ! -h "$root/etc/systemd/system/link4@inst.service"
+-islink "$root/etc/systemd/system/link4alias.service" "link4.service"
+-islink "$root/etc/systemd/system/link4alias2.service" "link4.service"
++islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
+ 
+ "$systemctl" --root="$root" disable 'link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"
+@@ -453,8 +453,8 @@ EOF
+ # Apparently this works. I'm not sure what to think.
+ "$systemctl" --root="$root" enable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"  # this is our file
+-islink "$root/etc/systemd/system/link4alias.service" "link4.service"
+-islink "$root/etc/systemd/system/link4alias2.service" "link4.service"
++islink "$root/etc/systemd/system/link4alias.service" "/etc/systemd/system/link4.service"
++islink "$root/etc/systemd/system/link4alias2.service" "/etc/systemd/system/link4.service"
+ 
+ "$systemctl" --root="$root" disable '/etc/systemd/system/link4.service'
+ test ! -h "$root/etc/systemd/system/link4.service"
+@@ -472,8 +472,8 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5.service"  # this is our file
+-islink "$root/etc/systemd/system/link5alias.service" "link5.service"
+-islink "$root/etc/systemd/system/link5alias2.service" "link5.service"
++islink "$root/etc/systemd/system/link5alias.service" "/etc/systemd/system/link5.service"
++islink "$root/etc/systemd/system/link5alias2.service" "/etc/systemd/system/link5.service"
+ 
+ "$systemctl" --root="$root" disable 'link5.service'
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+@@ -495,6 +495,10 @@ islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
++# FIXME: we must create link5alias2 and link5alias as relative links to link5.service
++# When they are independent links to /link5.service, systemd doesn't know that
++# they are aliases, because we do not follow symlinks outside of the search paths.
++
+ "$systemctl" --root="$root" disable 'link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5copy.service"
+ test ! -h "$root/etc/systemd/system/link5alias.service"
+@@ -502,8 +506,8 @@ test ! -h "$root/etc/systemd/system/link5alias2.service"
+ 
+ "$systemctl" --root="$root" enable '/link5copy.service'
+ islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service'
+-islink "$root/etc/systemd/system/link5alias.service" 'link5copy.service'
+-islink "$root/etc/systemd/system/link5alias2.service" 'link5copy.service'
++islink "$root/etc/systemd/system/link5alias.service" '/link5copy.service'
++islink "$root/etc/systemd/system/link5alias2.service" '/link5copy.service'
+ 
+ "$systemctl" --root="$root" disable 'link5copy.service'
+ test ! -h "$root/etc/systemd/system/link5copy.service"
+@@ -522,10 +526,10 @@ EOF
+ 
+ "$systemctl" --root="$root" enable 'link5@.path'
+ test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
+-islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "../link5@.path"
+-islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "../link5@.path"
+-islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "../link5@.path"
+-islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "../link5@.path"
++islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "/etc/systemd/system/link5@.path"
++islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "/etc/systemd/system/link5@.path"
+ 
+ "$systemctl" --root="$root" disable 'link5@.path'
+ test ! -h "$root/etc/systemd/system/link5@.path"  # this is our file
+@@ -564,7 +568,7 @@ check_alias() {
+ Alias=target@$1:%$1.socket
+ EOF
+     SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" enable 'some-some-link6@.socket' || return 1
+-    islink "$root/etc/systemd/system/target@$1:$2.socket" "some-some-link6@.socket" || return 2
++    islink "$root/etc/systemd/system/target@$1:$2.socket" "/etc/systemd/system/some-some-link6@.socket" || return 2
+ }
+ 
+ # TODO: our architecture names are different than what uname -m returns.
+@@ -669,10 +673,10 @@ RequiredBy=another-target2@.target
+ EOF
+ 
+ "$systemctl" --root="$root" enable 'some-some-link7.socket'
+-islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "../some-some-link7.socket"
+-islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "../some-some-link7.socket"
+-islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "../some-some-link7.socket"
+-islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "../some-some-link7.socket"
++islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
++islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "/etc/systemd/system/some-some-link7.socket"
+ 
+ "$systemctl" --root="$root" disable 'some-some-link7.socket'
+ test ! -h "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket"
diff --git a/SOURCES/0267-glyph-util-add-new-glyphs-for-up-down-arrows.patch b/SOURCES/0267-glyph-util-add-new-glyphs-for-up-down-arrows.patch
new file mode 100644
index 0000000..2e805f1
--- /dev/null
+++ b/SOURCES/0267-glyph-util-add-new-glyphs-for-up-down-arrows.patch
@@ -0,0 +1,322 @@
+From 65038051854a48ed8c86bfcfdddfee9122fc2cab Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Wed, 16 Feb 2022 14:53:34 +0100
+Subject: [PATCH] glyph-util: add new glyphs for up/down arrows
+
+(cherry picked from commit fc03e80c6b19521ecf4f3af06865b2054e685f9a)
+
+Related: #2118297
+---
+ src/analyze/analyze-security.c |  2 +-
+ src/basic/chase-symlinks.c     |  2 +-
+ src/basic/glyph-util.c         | 10 ++++++++--
+ src/basic/glyph-util.h         |  5 ++++-
+ src/delta/delta.c              | 20 ++++++++++----------
+ src/partition/repart.c         |  4 ++--
+ src/portable/portable.c        |  6 +++---
+ src/portable/portablectl.c     |  4 ++--
+ src/shared/cgroup-show.c       |  2 +-
+ src/shared/install.c           |  2 +-
+ src/test/test-locale-util.c    |  5 ++++-
+ 11 files changed, 37 insertions(+), 25 deletions(-)
+
+diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
+index e112922cbf..522d443f8a 100644
+--- a/src/analyze/analyze-security.c
++++ b/src/analyze/analyze-security.c
+@@ -1902,7 +1902,7 @@ static int assess(const SecurityInfo *info,
+                         name = info->id;
+ 
+                 printf("\n%s %sOverall exposure level for %s%s: %s%" PRIu64 ".%" PRIu64 " %s%s %s\n",
+-                       special_glyph(SPECIAL_GLYPH_ARROW),
++                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                        ansi_highlight(),
+                        name,
+                        ansi_normal(),
+diff --git a/src/basic/chase-symlinks.c b/src/basic/chase-symlinks.c
+index 344e7e1bb7..61f8b3351b 100644
+--- a/src/basic/chase-symlinks.c
++++ b/src/basic/chase-symlinks.c
+@@ -41,7 +41,7 @@ static int log_unsafe_transition(int a, int b, const char *path, unsigned flags)
+ 
+         return log_warning_errno(SYNTHETIC_ERRNO(ENOLINK),
+                                  "Detected unsafe path transition %s (owned by %s) %s %s (owned by %s) during canonicalization of %s.",
+-                                 strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW), strna(n2), strna(user_b), path);
++                                 strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(n2), strna(user_b), path);
+ }
+ 
+ static int log_autofs_mount_point(int fd, const char *path, unsigned flags) {
+diff --git a/src/basic/glyph-util.c b/src/basic/glyph-util.c
+index 8810738fc3..4583b7412c 100644
+--- a/src/basic/glyph-util.c
++++ b/src/basic/glyph-util.c
+@@ -39,6 +39,7 @@ const char *special_glyph(SpecialGlyph code) {
+                         [SPECIAL_GLYPH_TREE_BRANCH]             = "|-",
+                         [SPECIAL_GLYPH_TREE_RIGHT]              = "`-",
+                         [SPECIAL_GLYPH_TREE_SPACE]              = "  ",
++                        [SPECIAL_GLYPH_TREE_TOP]                = ",-",
+                         [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = ">",
+                         [SPECIAL_GLYPH_BLACK_CIRCLE]            = "*",
+                         [SPECIAL_GLYPH_WHITE_CIRCLE]            = "*",
+@@ -51,7 +52,9 @@ const char *special_glyph(SpecialGlyph code) {
+                         [SPECIAL_GLYPH_LIGHT_SHADE]             = "-",
+                         [SPECIAL_GLYPH_DARK_SHADE]              = "X",
+                         [SPECIAL_GLYPH_SIGMA]                   = "S",
+-                        [SPECIAL_GLYPH_ARROW]                   = "->",
++                        [SPECIAL_GLYPH_ARROW_RIGHT]             = "->",
++                        [SPECIAL_GLYPH_ARROW_UP]                = "^",
++                        [SPECIAL_GLYPH_ARROW_DOWN]              = "v",
+                         [SPECIAL_GLYPH_ELLIPSIS]                = "...",
+                         [SPECIAL_GLYPH_EXTERNAL_LINK]           = "[LNK]",
+                         [SPECIAL_GLYPH_ECSTATIC_SMILEY]         = ":-]",
+@@ -75,6 +78,7 @@ const char *special_glyph(SpecialGlyph code) {
+                         [SPECIAL_GLYPH_TREE_BRANCH]             = "\342\224\234\342\224\200", /* ├─ */
+                         [SPECIAL_GLYPH_TREE_RIGHT]              = "\342\224\224\342\224\200", /* └─ */
+                         [SPECIAL_GLYPH_TREE_SPACE]              = "  ",                       /*    */
++                        [SPECIAL_GLYPH_TREE_TOP]                = "\u250C\342\224\200",       /* ┌─ */
+ 
+                         /* Single glyphs in both cases */
+                         [SPECIAL_GLYPH_TRIANGULAR_BULLET]       = "\342\200\243",             /* ‣ */
+@@ -89,9 +93,11 @@ const char *special_glyph(SpecialGlyph code) {
+                         [SPECIAL_GLYPH_LIGHT_SHADE]             = "\342\226\221",             /* ░ */
+                         [SPECIAL_GLYPH_DARK_SHADE]              = "\342\226\223",             /* ▒ */
+                         [SPECIAL_GLYPH_SIGMA]                   = "\316\243",                 /* Σ */
++                        [SPECIAL_GLYPH_ARROW_UP]                = "\u2191",                   /* ↑ (actually called: UPWARDS ARROW) */
++                        [SPECIAL_GLYPH_ARROW_DOWN]              = "\u2193",                   /* ↓ (actually called: DOWNWARDS ARROW) */
+ 
+                         /* Single glyph in Unicode, two in ASCII */
+-                        [SPECIAL_GLYPH_ARROW]                   = "\342\206\222",             /* → (actually called: RIGHTWARDS ARROW) */
++                        [SPECIAL_GLYPH_ARROW_RIGHT]             = "\342\206\222",             /* → (actually called: RIGHTWARDS ARROW) */
+ 
+                         /* Single glyph in Unicode, three in ASCII */
+                         [SPECIAL_GLYPH_ELLIPSIS]                = "\342\200\246",             /* … (actually called: HORIZONTAL ELLIPSIS) */
+diff --git a/src/basic/glyph-util.h b/src/basic/glyph-util.h
+index ddee210041..7e0a73842a 100644
+--- a/src/basic/glyph-util.h
++++ b/src/basic/glyph-util.h
+@@ -11,6 +11,7 @@ typedef enum SpecialGlyph {
+         SPECIAL_GLYPH_TREE_BRANCH,
+         SPECIAL_GLYPH_TREE_RIGHT,
+         SPECIAL_GLYPH_TREE_SPACE,
++        SPECIAL_GLYPH_TREE_TOP,
+         SPECIAL_GLYPH_TRIANGULAR_BULLET,
+         SPECIAL_GLYPH_BLACK_CIRCLE,
+         SPECIAL_GLYPH_WHITE_CIRCLE,
+@@ -20,7 +21,9 @@ typedef enum SpecialGlyph {
+         SPECIAL_GLYPH_MU,
+         SPECIAL_GLYPH_CHECK_MARK,
+         SPECIAL_GLYPH_CROSS_MARK,
+-        SPECIAL_GLYPH_ARROW,
++        SPECIAL_GLYPH_ARROW_RIGHT,
++        SPECIAL_GLYPH_ARROW_UP,
++        SPECIAL_GLYPH_ARROW_DOWN,
+         SPECIAL_GLYPH_ELLIPSIS,
+         SPECIAL_GLYPH_LIGHT_SHADE,
+         SPECIAL_GLYPH_DARK_SHADE,
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index eafe1c05c4..aa5a546bce 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -91,7 +91,7 @@ static int notify_override_masked(const char *top, const char *bottom) {
+ 
+         printf("%s%s%s     %s %s %s\n",
+                ansi_highlight_red(), "[MASKED]", ansi_normal(),
+-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
++               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
+         return 1;
+ }
+ 
+@@ -101,7 +101,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
+ 
+         printf("%s%s%s %s %s %s\n",
+                ansi_highlight_green(), "[EQUIVALENT]", ansi_normal(),
+-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
++               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
+         return 1;
+ }
+ 
+@@ -111,7 +111,7 @@ static int notify_override_redirected(const char *top, const char *bottom) {
+ 
+         printf("%s%s%s %s %s %s\n",
+                ansi_highlight(), "[REDIRECTED]", ansi_normal(),
+-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
++               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
+         return 1;
+ }
+ 
+@@ -121,7 +121,7 @@ static int notify_override_overridden(const char *top, const char *bottom) {
+ 
+         printf("%s%s%s %s %s %s\n",
+                ansi_highlight(), "[OVERRIDDEN]", ansi_normal(),
+-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
++               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
+         return 1;
+ }
+ 
+@@ -131,7 +131,7 @@ static int notify_override_extended(const char *top, const char *bottom) {
+ 
+         printf("%s%s%s   %s %s %s\n",
+                ansi_highlight(), "[EXTENDED]", ansi_normal(),
+-               top, special_glyph(SPECIAL_GLYPH_ARROW), bottom);
++               top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom);
+         return 1;
+ }
+ 
+@@ -235,7 +235,7 @@ static int enumerate_dir_d(
+                         return -ENOMEM;
+                 d = p + strlen(toppath) + 1;
+ 
+-                log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p);
++                log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+                 k = ordered_hashmap_put(top, d, p);
+                 if (k >= 0) {
+                         p = strdup(p);
+@@ -247,7 +247,7 @@ static int enumerate_dir_d(
+                         return k;
+                 }
+ 
+-                log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p);
++                log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+                 free(ordered_hashmap_remove(bottom, d));
+                 k = ordered_hashmap_put(bottom, d, p);
+                 if (k < 0) {
+@@ -271,7 +271,7 @@ static int enumerate_dir_d(
+                         return -ENOMEM;
+ 
+                 log_debug("Adding to drops: %s %s %s %s %s",
+-                          unit, special_glyph(SPECIAL_GLYPH_ARROW), basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
++                          unit, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+                 k = ordered_hashmap_put(h, basename(p), p);
+                 if (k < 0) {
+                         free(p);
+@@ -347,7 +347,7 @@ static int enumerate_dir(
+                 if (!p)
+                         return -ENOMEM;
+ 
+-                log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
++                log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+                 r = ordered_hashmap_put(top, basename(p), p);
+                 if (r >= 0) {
+                         p = strdup(p);
+@@ -356,7 +356,7 @@ static int enumerate_dir(
+                 } else if (r != -EEXIST)
+                         return r;
+ 
+-                log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p);
++                log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+                 free(ordered_hashmap_remove(bottom, basename(p)));
+                 r = ordered_hashmap_put(bottom, basename(p), p);
+                 if (r < 0)
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index 67e379be55..9f95713130 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -1968,9 +1968,9 @@ static int format_size_change(uint64_t from, uint64_t to, char **ret) {
+                 if (from == to || to == UINT64_MAX)
+                         t = strdup(FORMAT_BYTES(from));
+                 else
+-                        t = strjoin(FORMAT_BYTES(from), " ", special_glyph(SPECIAL_GLYPH_ARROW), " ", FORMAT_BYTES(to));
++                        t = strjoin(FORMAT_BYTES(from), " ", special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to));
+         } else if (to != UINT64_MAX)
+-                t = strjoin(special_glyph(SPECIAL_GLYPH_ARROW), " ", FORMAT_BYTES(to));
++                t = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to));
+         else {
+                 *ret = NULL;
+                 return 0;
+diff --git a/src/portable/portable.c b/src/portable/portable.c
+index 4c75dc0e0c..c1e253061f 100644
+--- a/src/portable/portable.c
++++ b/src/portable/portable.c
+@@ -1011,14 +1011,14 @@ static int install_profile_dropin(
+ 
+                 r = copy_file_atomic(from, dropin, 0644, 0, 0, COPY_REFLINK);
+                 if (r < 0)
+-                        return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin);
++                        return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin);
+ 
+                 (void) portable_changes_add(changes, n_changes, PORTABLE_COPY, dropin, from);
+ 
+         } else {
+ 
+                 if (symlink(from, dropin) < 0)
+-                        return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin);
++                        return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin);
+ 
+                 (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, dropin, from);
+         }
+@@ -1188,7 +1188,7 @@ static int install_image_symlink(
+         (void) mkdir_parents(sl, 0755);
+ 
+         if (symlink(image_path, sl) < 0)
+-                return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW), sl);
++                return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), sl);
+ 
+         (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, sl, image_path);
+         return 0;
+diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c
+index f4c57e14ae..585568acc1 100644
+--- a/src/portable/portablectl.c
++++ b/src/portable/portablectl.c
+@@ -433,12 +433,12 @@ static int print_changes(sd_bus_message *m) {
+                         break;
+ 
+                 if (streq(type, "symlink"))
+-                        log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW), source);
++                        log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), source);
+                 else if (streq(type, "copy")) {
+                         if (isempty(source))
+                                 log_info("Copied %s.", path);
+                         else
+-                                log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW), path);
++                                log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), path);
+                 } else if (streq(type, "unlink"))
+                         log_info("Removed %s.", path);
+                 else if (streq(type, "write"))
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index 48dd4d8001..f18420c1b6 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -228,7 +228,7 @@ static int show_cgroup_name(
+                         printf("%s%s%s %s%s%s: %s\n",
+                                prefix,
+                                glyph == SPECIAL_GLYPH_TREE_BRANCH ? special_glyph(SPECIAL_GLYPH_TREE_VERTICAL) : "  ",
+-                               special_glyph(SPECIAL_GLYPH_ARROW),
++                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                ansi_blue(), x, ansi_normal(),
+                                y);
+                 }
+diff --git a/src/shared/install.c b/src/shared/install.c
+index eb5c3d5f91..4c7d0d6cad 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -335,7 +335,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
+                         if (!quiet)
+                                 log_info("Created symlink %s %s %s.",
+                                          changes[i].path,
+-                                         special_glyph(SPECIAL_GLYPH_ARROW),
++                                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                          changes[i].source);
+                         break;
+                 case UNIT_FILE_UNLINK:
+diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c
+index 3243e3c567..6ec3f7f00b 100644
+--- a/src/test/test-locale-util.c
++++ b/src/test/test-locale-util.c
+@@ -91,13 +91,16 @@ TEST(dump_special_glyphs) {
+         dump_glyph(SPECIAL_GLYPH_TREE_BRANCH);
+         dump_glyph(SPECIAL_GLYPH_TREE_RIGHT);
+         dump_glyph(SPECIAL_GLYPH_TREE_SPACE);
++        dump_glyph(SPECIAL_GLYPH_TREE_TOP);
+         dump_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET);
+         dump_glyph(SPECIAL_GLYPH_BLACK_CIRCLE);
+         dump_glyph(SPECIAL_GLYPH_WHITE_CIRCLE);
+         dump_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN);
+         dump_glyph(SPECIAL_GLYPH_CIRCLE_ARROW);
+         dump_glyph(SPECIAL_GLYPH_BULLET);
+-        dump_glyph(SPECIAL_GLYPH_ARROW);
++        dump_glyph(SPECIAL_GLYPH_ARROW_RIGHT);
++        dump_glyph(SPECIAL_GLYPH_ARROW_UP);
++        dump_glyph(SPECIAL_GLYPH_ARROW_DOWN);
+         dump_glyph(SPECIAL_GLYPH_ELLIPSIS);
+         dump_glyph(SPECIAL_GLYPH_MU);
+         dump_glyph(SPECIAL_GLYPH_CHECK_MARK);
diff --git a/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch b/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch
new file mode 100644
index 0000000..51a9383
--- /dev/null
+++ b/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch
@@ -0,0 +1,677 @@
+From 73cbf82d726a7b50c9b7dec9a0a0c285b0de9993 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Fri, 24 Jun 2022 09:13:42 +0200
+Subject: [PATCH] =?UTF-8?q?tree-wide:=20allow=20ASCII=20fallback=20for=20?=
+ =?UTF-8?q?=E2=86=92=20in=20logs?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit e2341b6bc325932b3f9f10874956952cbdbd6361)
+
+Resolves: #2118297
+---
+ src/basic/unit-file.c                  | 13 +++++-----
+ src/core/dbus-service.c                |  3 ++-
+ src/core/manager-serialize.c           |  6 +++--
+ src/core/namespace.c                   |  7 +++--
+ src/core/socket.c                      |  3 ++-
+ src/home/homed-home.c                  |  4 ++-
+ src/home/homed-manager.c               |  7 +++--
+ src/home/homework-luks.c               |  6 ++++-
+ src/home/homework-mount.c              |  4 ++-
+ src/libsystemd/sd-bus/sd-bus.c         |  4 ++-
+ src/network/networkd-link.c            | 15 +++++++----
+ src/partition/repart.c                 |  7 ++---
+ src/resolve/resolved-dns-query.c       | 11 ++++++--
+ src/resolve/resolved-dns-transaction.c | 14 +++++-----
+ src/run-generator/run-generator.c      |  4 ++-
+ src/shared/devnode-acl.c               |  5 ++--
+ src/shared/dns-domain.c                |  8 +++---
+ src/shared/install.c                   |  3 ++-
+ src/shared/mount-util.c                |  5 ++--
+ src/shared/varlink.c                   |  4 ++-
+ src/udev/udev-builtin-net_id.c         | 36 +++++++++++++++-----------
+ 21 files changed, 110 insertions(+), 59 deletions(-)
+
+diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
+index 83c29bb25f..2f5ec5b702 100644
+--- a/src/basic/unit-file.c
++++ b/src/basic/unit-file.c
+@@ -348,13 +348,13 @@ int unit_file_resolve_symlink(
+                 if (r < 0)
+                         return r;
+                 if (is_path(tail))
+-                        log_warning("Suspicious symlink %s/%s→%s, treating as alias.",
+-                                    dir, filename, simplified);
++                        log_warning("Suspicious symlink %s/%s %s %s, treating as alias.",
++                                    dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified);
+ 
+                 dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name);
+ 
+         } else {
+-                log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified);
++                log_debug("Linked unit file: %s/%s %s %s", dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified);
+ 
+                 if (resolve_destination_target)
+                         dst = TAKE_PTR(simplified);
+@@ -569,8 +569,8 @@ int unit_file_build_name_map(
+ 
+                         r = hashmap_ensure_put(&ids, &string_hash_ops_free_free, key, dst);
+                         if (r < 0)
+-                                return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m",
+-                                                         de->d_name, dst);
++                                return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m",
++                                                         de->d_name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dst);
+                         key = dst = NULL;
+                 }
+         }
+@@ -612,7 +612,8 @@ int unit_file_build_name_map(
+ 
+                 r = string_strv_hashmap_put(&names, dst, src);
+                 if (r < 0)
+-                        return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m", dst, src);
++                        return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m",
++                                                 dst, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), src);
+         }
+ 
+         if (cache_timestamp_hash)
+diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
+index e90fe4f596..3f7c161b0e 100644
+--- a/src/core/dbus-service.c
++++ b/src/core/dbus-service.c
+@@ -493,7 +493,8 @@ static int bus_service_set_transient_property(
+                                         return log_oom();
+ 
+                                 if (!UNIT_WRITE_FLAGS_NOOP(flags))
+-                                        log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s → %s; please update client accordingly.", n, z);
++                                        log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s %s %s; please update client accordingly.",
++                                                        n, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), z);
+ 
+                                 free_and_replace(n, z);
+                         }
+diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c
+index 60a35f48f3..007af3ee1f 100644
+--- a/src/core/manager-serialize.c
++++ b/src/core/manager-serialize.c
+@@ -307,9 +307,11 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+ 
+                                 r = fd_get_path(fd, &fn);
+                                 if (r < 0)
+-                                        log_debug_errno(r, "Received serialized fd %i → %m", fd);
++                                        log_debug_errno(r, "Received serialized fd %i %s %m",
++                                                        fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT));
+                                 else
+-                                        log_debug("Received serialized fd %i → %s", fd, strna(fn));
++                                        log_debug("Received serialized fd %i %s %s",
++                                                  fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(fn));
+                         }
+                 }
+         }
+diff --git a/src/core/namespace.c b/src/core/namespace.c
+index 4bd63f6227..3bf6524935 100644
+--- a/src/core/namespace.c
++++ b/src/core/namespace.c
+@@ -17,6 +17,7 @@
+ #include "extension-release.h"
+ #include "fd-util.h"
+ #include "format-util.h"
++#include "glyph-util.h"
+ #include "label.h"
+ #include "list.h"
+ #include "loop-util.h"
+@@ -1210,7 +1211,8 @@ static int follow_symlink(
+                                        "Symlink loop on '%s'.",
+                                        mount_entry_path(m));
+ 
+-        log_debug("Followed mount entry path symlink %s → %s.", mount_entry_path(m), target);
++        log_debug("Followed mount entry path symlink %s %s %s.",
++                  mount_entry_path(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), target);
+ 
+         mount_entry_consume_prefix(m, TAKE_PTR(target));
+ 
+@@ -1308,7 +1310,8 @@ static int apply_one_mount(
+                 if (r < 0)
+                         return log_debug_errno(r, "Failed to follow symlinks on %s: %m", mount_entry_source(m));
+ 
+-                log_debug("Followed source symlinks %s → %s.", mount_entry_source(m), chased);
++                log_debug("Followed source symlinks %s %s %s.",
++                          mount_entry_source(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), chased);
+ 
+                 free_and_replace(m->source_malloc, chased);
+ 
+diff --git a/src/core/socket.c b/src/core/socket.c
+index 8da9f14db6..cdb1e75e7a 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -1291,7 +1291,8 @@ static int socket_symlink(Socket *s) {
+                 }
+ 
+                 if (r < 0)
+-                        log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s → %s, ignoring: %m", p, *i);
++                        log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s %s %s, ignoring: %m",
++                                               p, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *i);
+         }
+ 
+         return 0;
+diff --git a/src/home/homed-home.c b/src/home/homed-home.c
+index 1340cf30d3..c78918ab1a 100644
+--- a/src/home/homed-home.c
++++ b/src/home/homed-home.c
+@@ -19,6 +19,7 @@
+ #include "fileio.h"
+ #include "filesystems.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "home-util.h"
+ #include "homed-home-bus.h"
+ #include "homed-home.h"
+@@ -479,8 +480,9 @@ static void home_set_state(Home *h, HomeState state) {
+         new_state = home_get_state(h); /* Query the new state, since the 'state' variable might be set to -1,
+                                         * in which case we synthesize an high-level state on demand */
+ 
+-        log_info("%s: changing state %s → %s", h->user_name,
++        log_info("%s: changing state %s %s %s", h->user_name,
+                  home_state_to_string(old_state),
++                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                  home_state_to_string(new_state));
+ 
+         home_update_pin_fd(h, new_state);
+diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
+index f04b87e366..f70c9f95e4 100644
+--- a/src/home/homed-manager.c
++++ b/src/home/homed-manager.c
+@@ -23,6 +23,7 @@
+ #include "fileio.h"
+ #include "format-util.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "gpt.h"
+ #include "home-util.h"
+ #include "homed-conf.h"
+@@ -1939,8 +1940,10 @@ static int manager_rebalance_calculate(Manager *m) {
+                     (m->rebalance_state == REBALANCE_GROWING && h->rebalance_goal < h->rebalance_size))
+                         h->rebalance_pending = false;
+                 else {
+-                        log_debug("Rebalancing home directory '%s' %s → %s.", h->user_name,
+-                                  FORMAT_BYTES(h->rebalance_size), FORMAT_BYTES(h->rebalance_goal));
++                        log_debug("Rebalancing home directory '%s' %s %s %s.", h->user_name,
++                                  FORMAT_BYTES(h->rebalance_size),
++                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
++                                  FORMAT_BYTES(h->rebalance_goal));
+                         h->rebalance_pending = true;
+                 }
+ 
+diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c
+index f8f4afb253..f5653b4e14 100644
+--- a/src/home/homework-luks.c
++++ b/src/home/homework-luks.c
+@@ -28,6 +28,7 @@
+ #include "filesystems.h"
+ #include "fs-util.h"
+ #include "fsck-util.h"
++#include "glyph-util.h"
+ #include "home-util.h"
+ #include "homework-luks.h"
+ #include "homework-mount.h"
+@@ -3312,12 +3313,15 @@ int home_resize_luks(
+         if (resize_type == CAN_RESIZE_OFFLINE && FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED))
+                 return log_error_errno(SYNTHETIC_ERRNO(ETXTBSY), "File systems of this type can only be resized offline, but is currently online.");
+ 
+-        log_info("Ready to resize image size %s → %s, partition size %s → %s, file system size %s → %s.",
++        log_info("Ready to resize image size %s %s %s, partition size %s %s %s, file system size %s %s %s.",
+                  FORMAT_BYTES(old_image_size),
++                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                  FORMAT_BYTES(new_image_size),
+                  FORMAT_BYTES(setup->partition_size),
++                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                  FORMAT_BYTES(new_partition_size),
+                  FORMAT_BYTES(old_fs_size),
++                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                  FORMAT_BYTES(new_fs_size));
+ 
+         r = prepare_resize_partition(
+diff --git a/src/home/homework-mount.c b/src/home/homework-mount.c
+index 0b028dad37..6dc665e323 100644
+--- a/src/home/homework-mount.c
++++ b/src/home/homework-mount.c
+@@ -7,6 +7,7 @@
+ #include "alloc-util.h"
+ #include "fd-util.h"
+ #include "format-util.h"
++#include "glyph-util.h"
+ #include "home-util.h"
+ #include "homework-mount.h"
+ #include "homework.h"
+@@ -283,7 +284,8 @@ int home_shift_uid(int dir_fd, const char *target, uid_t stored_uid, uid_t expos
+         if (r < 0)
+                 return log_error_errno(errno, "Failed to apply UID/GID map: %m");
+ 
+-        log_debug("Applied uidmap mount to %s. Mapping is " UID_FMT " → " UID_FMT ".", strna(target), stored_uid, exposed_uid);
++        log_debug("Applied uidmap mount to %s. Mapping is " UID_FMT " %s " UID_FMT ".",
++                  strna(target), stored_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), exposed_uid);
+ 
+         if (ret_mount_fd)
+                 *ret_mount_fd = TAKE_FD(mount_fd);
+diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
+index 9e1d29cc1d..d117199cf9 100644
+--- a/src/libsystemd/sd-bus/sd-bus.c
++++ b/src/libsystemd/sd-bus/sd-bus.c
+@@ -30,6 +30,7 @@
+ #include "def.h"
+ #include "errno-util.h"
+ #include "fd-util.h"
++#include "glyph-util.h"
+ #include "hexdecoct.h"
+ #include "hostname-util.h"
+ #include "io-util.h"
+@@ -521,7 +522,8 @@ void bus_set_state(sd_bus *bus, enum bus_state state) {
+         if (state == bus->state)
+                 return;
+ 
+-        log_debug("Bus %s: changing state %s → %s", strna(bus->description), table[bus->state], table[state]);
++        log_debug("Bus %s: changing state %s %s %s", strna(bus->description),
++                  table[bus->state], special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), table[state]);
+         bus->state = state;
+ }
+ 
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index f409d1f33a..15c188cb6d 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -26,6 +26,7 @@
+ #include "fileio.h"
+ #include "format-util.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "ipvlan.h"
+ #include "missing_network.h"
+ #include "netlink-util.h"
+@@ -2122,7 +2123,8 @@ static int link_update_master(Link *link, sd_netlink_message *message) {
+         else if (master_ifindex == 0)
+                 log_link_debug(link, "Leaved from master interface: %i", link->master_ifindex);
+         else
+-                log_link_debug(link, "Master interface is changed: %i → %i", link->master_ifindex, master_ifindex);
++                log_link_debug(link, "Master interface changed: %i %s %i", link->master_ifindex,
++                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), master_ifindex);
+ 
+         link_drop_from_master(link);
+ 
+@@ -2158,8 +2160,10 @@ static int link_update_hardware_address(Link *link, sd_netlink_message *message)
+         if (link->hw_addr.length == 0)
+                 log_link_debug(link, "Saved hardware address: %s", HW_ADDR_TO_STR(&addr));
+         else {
+-                log_link_debug(link, "Hardware address is changed: %s → %s",
+-                               HW_ADDR_TO_STR(&link->hw_addr), HW_ADDR_TO_STR(&addr));
++                log_link_debug(link, "Hardware address is changed: %s %s %s",
++                               HW_ADDR_TO_STR(&link->hw_addr),
++                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
++                               HW_ADDR_TO_STR(&addr));
+ 
+                 if (hashmap_get(link->manager->links_by_hw_addr, &link->hw_addr) == link)
+                         hashmap_remove(link->manager->links_by_hw_addr, &link->hw_addr);
+@@ -2256,8 +2260,9 @@ static int link_update_mtu(Link *link, sd_netlink_message *message) {
+                 return 0;
+ 
+         if (link->mtu != 0)
+-                log_link_debug(link, "MTU is changed: %"PRIu32" → %"PRIu32" (min: %"PRIu32", max: %"PRIu32")",
+-                               link->mtu, mtu, link->min_mtu, link->max_mtu);
++                log_link_debug(link, "MTU is changed: %"PRIu32" %s %"PRIu32" (min: %"PRIu32", max: %"PRIu32")",
++                               link->mtu, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), mtu,
++                               link->min_mtu, link->max_mtu);
+ 
+         link->mtu = mtu;
+ 
+diff --git a/src/partition/repart.c b/src/partition/repart.c
+index 9f95713130..d41411caeb 100644
+--- a/src/partition/repart.c
++++ b/src/partition/repart.c
+@@ -1096,7 +1096,8 @@ static int config_parse_size4096(
+                 *sz = parsed;
+ 
+         if (*sz != parsed)
+-                log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " → %" PRIu64 ", a multiple of 4096.", lvalue, parsed, *sz);
++                log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " %s %" PRIu64 ", a multiple of 4096.",
++                           lvalue, parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *sz);
+ 
+         return 0;
+ }
+@@ -4295,8 +4296,8 @@ static int parse_argv(int argc, char *argv[]) {
+                                 return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Specified image size too large, refusing.");
+ 
+                         if (rounded != parsed)
+-                                log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " → %" PRIu64 ")",
+-                                            parsed, rounded);
++                                log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " %s %" PRIu64 ")",
++                                            parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), rounded);
+ 
+                         arg_size = rounded;
+                         arg_size_auto = false;
+diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c
+index 3b5e456db2..ddb66c4659 100644
+--- a/src/resolve/resolved-dns-query.c
++++ b/src/resolve/resolved-dns-query.c
+@@ -3,6 +3,7 @@
+ #include "alloc-util.h"
+ #include "dns-domain.h"
+ #include "dns-type.h"
++#include "glyph-util.h"
+ #include "hostname-util.h"
+ #include "local-addresses.h"
+ #include "resolved-dns-query.h"
+@@ -1016,7 +1017,10 @@ static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname)
+         if (r < 0)
+                 return r;
+         if (r > 0)
+-                log_debug("Following CNAME/DNAME %s → %s.", dns_question_first_name(q->question_idna), dns_question_first_name(nq_idna));
++                log_debug("Following CNAME/DNAME %s %s %s.",
++                          dns_question_first_name(q->question_idna),
++                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
++                          dns_question_first_name(nq_idna));
+ 
+         k = dns_question_is_equal(q->question_idna, q->question_utf8);
+         if (k < 0)
+@@ -1030,7 +1034,10 @@ static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname)
+                 if (k < 0)
+                         return k;
+                 if (k > 0)
+-                        log_debug("Following UTF8 CNAME/DNAME %s → %s.", dns_question_first_name(q->question_utf8), dns_question_first_name(nq_utf8));
++                        log_debug("Following UTF8 CNAME/DNAME %s %s %s.",
++                                  dns_question_first_name(q->question_utf8),
++                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
++                                  dns_question_first_name(nq_utf8));
+         }
+ 
+         if (r == 0 && k == 0) /* No actual cname happened? */
+diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c
+index 0cf9912712..1ae8103a14 100644
+--- a/src/resolve/resolved-dns-transaction.c
++++ b/src/resolve/resolved-dns-transaction.c
+@@ -8,6 +8,7 @@
+ #include "errno-list.h"
+ #include "errno-util.h"
+ #include "fd-util.h"
++#include "glyph-util.h"
+ #include "random-util.h"
+ #include "resolved-dns-cache.h"
+ #include "resolved-dns-transaction.h"
+@@ -2591,21 +2592,22 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
+                         r = dns_name_parent(&name);
+                         if (r > 0) {
+                                 type = DNS_TYPE_SOA;
+-                                log_debug("Requesting parent SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty DS response).",
+-                                          name, t->id, dns_resource_key_name(dns_transaction_key(t)));
++                                log_debug("Requesting parent SOA (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty DS response).",
++                                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id,
++                                          dns_resource_key_name(dns_transaction_key(t)));
+                         } else
+                                 name = NULL;
+ 
+                 } else if (IN_SET(dns_transaction_key(t)->type, DNS_TYPE_SOA, DNS_TYPE_NS)) {
+ 
+                         type = DNS_TYPE_DS;
+-                        log_debug("Requesting DS (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty SOA/NS response).",
+-                                  name, t->id, name);
++                        log_debug("Requesting DS (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty SOA/NS response).",
++                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name);
+ 
+                 } else {
+                         type = DNS_TYPE_SOA;
+-                        log_debug("Requesting SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty non-SOA/NS/DS response).",
+-                                  name, t->id, name);
++                        log_debug("Requesting SOA (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty non-SOA/NS/DS response).",
++                                  special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name);
+                 }
+ 
+                 if (name) {
+diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c
+index fb62209704..e3fb7f24fe 100644
+--- a/src/run-generator/run-generator.c
++++ b/src/run-generator/run-generator.c
+@@ -7,6 +7,7 @@
+ #include "fd-util.h"
+ #include "fileio.h"
+ #include "generator.h"
++#include "glyph-util.h"
+ #include "mkdir.h"
+ #include "proc-cmdline.h"
+ #include "special.h"
+@@ -116,7 +117,8 @@ static int generate(void) {
+         /* And now redirect default.target to our new target */
+         p = strjoina(arg_dest, "/" SPECIAL_DEFAULT_TARGET);
+         if (symlink("kernel-command-line.target", p) < 0)
+-                return log_error_errno(errno, "Failed to link unit file kernel-command-line.target → %s: %m", p);
++                return log_error_errno(errno, "Failed to link unit file kernel-command-line.target %s %s: %m",
++                                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p);
+ 
+         return 0;
+ }
+diff --git a/src/shared/devnode-acl.c b/src/shared/devnode-acl.c
+index 89ff566832..21d8130e0d 100644
+--- a/src/shared/devnode-acl.c
++++ b/src/shared/devnode-acl.c
+@@ -12,6 +12,7 @@
+ #include "escape.h"
+ #include "fd-util.h"
+ #include "format-util.h"
++#include "glyph-util.h"
+ #include "set.h"
+ #include "string-util.h"
+ #include "util.h"
+@@ -242,8 +243,8 @@ int devnode_acl_all(const char *seat,
+         SET_FOREACH(n, nodes) {
+                 int k;
+ 
+-                log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)",
+-                          n, seat, old_uid, new_uid,
++                log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"%s"UID_FMT"%s%s)",
++                          n, seat, old_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), new_uid,
+                           del ? " del" : "", add ? " add" : "");
+ 
+                 k = devnode_acl(n, flush, del, old_uid, add, new_uid);
+diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
+index f54b187a1b..49ce9cfa10 100644
+--- a/src/shared/dns-domain.c
++++ b/src/shared/dns-domain.c
+@@ -7,6 +7,7 @@
+ 
+ #include "alloc-util.h"
+ #include "dns-domain.h"
++#include "glyph-util.h"
+ #include "hashmap.h"
+ #include "hexdecoct.h"
+ #include "hostname-util.h"
+@@ -1300,7 +1301,7 @@ int dns_name_apply_idna(const char *name, char **ret) {
+                 r = sym_idn2_lookup_u8((uint8_t*) name, (uint8_t**) &t,
+                                        IDN2_NFC_INPUT | IDN2_TRANSITIONAL);
+ 
+-        log_debug("idn2_lookup_u8: %s → %s", name, t);
++        log_debug("idn2_lookup_u8: %s %s %s", name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t);
+         if (r == IDN2_OK) {
+                 if (!startswith(name, "xn--")) {
+                         _cleanup_free_ char *s = NULL;
+@@ -1314,8 +1315,9 @@ int dns_name_apply_idna(const char *name, char **ret) {
+                         }
+ 
+                         if (!streq_ptr(name, s)) {
+-                                log_debug("idn2 roundtrip failed: \"%s\" → \"%s\" → \"%s\", ignoring.",
+-                                          name, t, s);
++                                log_debug("idn2 roundtrip failed: \"%s\" %s \"%s\" %s \"%s\", ignoring.",
++                                          name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t,
++                                          special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), s);
+                                 *ret = NULL;
+                                 return 0;
+                         }
+diff --git a/src/shared/install.c b/src/shared/install.c
+index 4c7d0d6cad..d3661521a9 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -523,7 +523,8 @@ static int create_symlink(
+         }
+ 
+         if (chroot_unit_symlinks_equivalent(lp, new_path, dest, old_path)) {
+-                log_debug("Symlink %s → %s already exists", new_path, dest);
++                log_debug("Symlink %s %s %s already exists",
++                          new_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dest);
+                 return 1;
+         }
+ 
+diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c
+index 12c7044f04..e0c8cff14a 100644
+--- a/src/shared/mount-util.c
++++ b/src/shared/mount-util.c
+@@ -17,6 +17,7 @@
+ #include "fd-util.h"
+ #include "fileio.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "hashmap.h"
+ #include "label.h"
+ #include "libmount-util.h"
+@@ -672,8 +673,8 @@ int mount_verbose_full(
+                 log_debug("Bind-mounting %s on %s (%s \"%s\")...",
+                           what, where, strnull(fl), strempty(o));
+         else if (f & MS_MOVE)
+-                log_debug("Moving mount %s → %s (%s \"%s\")...",
+-                          what, where, strnull(fl), strempty(o));
++                log_debug("Moving mount %s %s %s (%s \"%s\")...",
++                          what, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), where, strnull(fl), strempty(o));
+         else
+                 log_debug("Mounting %s (%s) on %s (%s \"%s\")...",
+                           strna(what), strna(type), where, strnull(fl), strempty(o));
+diff --git a/src/shared/varlink.c b/src/shared/varlink.c
+index e0038dfd28..f18301d3c4 100644
+--- a/src/shared/varlink.c
++++ b/src/shared/varlink.c
+@@ -6,6 +6,7 @@
+ #include "alloc-util.h"
+ #include "errno-util.h"
+ #include "fd-util.h"
++#include "glyph-util.h"
+ #include "hashmap.h"
+ #include "io-util.h"
+ #include "list.h"
+@@ -236,8 +237,9 @@ static void varlink_set_state(Varlink *v, VarlinkState state) {
+                 varlink_log(v, "Setting state %s",
+                             varlink_state_to_string(state));
+         else
+-                varlink_log(v, "Changing state %s → %s",
++                varlink_log(v, "Changing state %s %s %s",
+                             varlink_state_to_string(v->state),
++                            special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                             varlink_state_to_string(state));
+ 
+         v->state = state;
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 673ed7a7ca..1ca7983cfe 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -28,6 +28,7 @@
+ #include "dirent-util.h"
+ #include "fd-util.h"
+ #include "fileio.h"
++#include "glyph-util.h"
+ #include "netif-naming-scheme.h"
+ #include "parse-util.h"
+ #include "proc-cmdline.h"
+@@ -215,9 +216,9 @@ static int dev_pci_onboard(sd_device *dev, const LinkInfo *info, NetNames *names
+                 l = strpcpyf(&s, l, "d%lu", dev_port);
+         if (l == 0)
+                 names->pci_onboard[0] = '\0';
+-        log_device_debug(dev, "Onboard index identifier: index=%lu phys_port=%s dev_port=%lu → %s",
++        log_device_debug(dev, "Onboard index identifier: index=%lu phys_port=%s dev_port=%lu %s %s",
+                          idx, strempty(info->phys_port_name), dev_port,
+-                         empty_to_na(names->pci_slot));
++                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_slot));
+ 
+         if (sd_device_get_sysattr_value(names->pcidev, "label", &names->pci_onboard_label) >= 0)
+                 log_device_debug(dev, "Onboard label from PCI device: %s", names->pci_onboard_label);
+@@ -393,9 +394,9 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) {
+         if (l == 0)
+                 names->pci_path[0] = '\0';
+ 
+-        log_device_debug(dev, "PCI path identifier: domain=%u bus=%u slot=%u func=%u phys_port=%s dev_port=%lu → %s",
++        log_device_debug(dev, "PCI path identifier: domain=%u bus=%u slot=%u func=%u phys_port=%s dev_port=%lu %s %s",
+                          domain, bus, slot, func, strempty(info->phys_port_name), dev_port,
+-                         empty_to_na(names->pci_path));
++                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_path));
+ 
+         /* ACPI _SUN — slot user number */
+         r = sd_device_new_from_subsystem_sysname(&pci, "subsystem", "pci");
+@@ -487,9 +488,9 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) {
+                 if (l == 0)
+                         names->pci_slot[0] = '\0';
+ 
+-                log_device_debug(dev, "Slot identifier: domain=%u slot=%"PRIu32" func=%u phys_port=%s dev_port=%lu → %s",
++                log_device_debug(dev, "Slot identifier: domain=%u slot=%"PRIu32" func=%u phys_port=%s dev_port=%lu %s %s",
+                                  domain, hotplug_slot, func, strempty(info->phys_port_name), dev_port,
+-                                 empty_to_na(names->pci_slot));
++                                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_slot));
+         }
+ 
+         return 0;
+@@ -529,7 +530,8 @@ static int names_vio(sd_device *dev, NetNames *names) {
+ 
+         xsprintf(names->vio_slot, "v%u", slotid);
+         names->type = NET_VIO;
+-        log_device_debug(dev, "Vio slot identifier: slotid=%u → %s", slotid, names->vio_slot);
++        log_device_debug(dev, "Vio slot identifier: slotid=%u %s %s",
++                         slotid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->vio_slot);
+         return 0;
+ }
+ 
+@@ -596,8 +598,8 @@ static int names_platform(sd_device *dev, NetNames *names, bool test) {
+ 
+         xsprintf(names->platform_path, "a%s%xi%u", vendor, model, instance);
+         names->type = NET_PLATFORM;
+-        log_device_debug(dev, "Platform identifier: vendor=%s model=%u instance=%u → %s",
+-                         vendor, model, instance, names->platform_path);
++        log_device_debug(dev, "Platform identifier: vendor=%s model=%u instance=%u %s %s",
++                         vendor, model, instance, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->platform_path);
+         return 0;
+ }
+ 
+@@ -718,8 +720,9 @@ static int names_usb(sd_device *dev, NetNames *names) {
+         if (l == 0)
+                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG),
+                                               "Generated USB name would be too long.");
+-        log_device_debug(dev, "USB name identifier: ports=%.*s config=%s interface=%s → %s",
+-                         (int) strlen(ports), sysname + (ports - name), config, interf, names->usb_ports);
++        log_device_debug(dev, "USB name identifier: ports=%.*s config=%s interface=%s %s %s",
++                         (int) strlen(ports), sysname + (ports - name), config, interf,
++                         special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->usb_ports);
+         names->type = NET_USB;
+         return 0;
+ }
+@@ -752,7 +755,8 @@ static int names_bcma(sd_device *dev, NetNames *names) {
+                 xsprintf(names->bcma_core, "b%u", core);
+ 
+         names->type = NET_BCMA;
+-        log_device_debug(dev, "BCMA core identifier: core=%u → \"%s\"", core, names->bcma_core);
++        log_device_debug(dev, "BCMA core identifier: core=%u %s \"%s\"",
++                         core, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->bcma_core);
+         return 0;
+ }
+ 
+@@ -813,7 +817,8 @@ static int names_ccw(sd_device *dev, NetNames *names) {
+                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG),
+                                               "Generated CCW name would be too long.");
+         names->type = NET_CCW;
+-        log_device_debug(dev, "CCW identifier: ccw_busid=%s → \"%s\"", bus_id, names->ccw_busid);
++        log_device_debug(dev, "CCW identifier: ccw_busid=%s %s \"%s\"",
++                         bus_id, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->ccw_busid);
+         return 0;
+ }
+ 
+@@ -1027,8 +1032,9 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg
+ 
+                 xsprintf(str, "%sx%s", prefix, HW_ADDR_TO_STR_FULL(&info.hw_addr, HW_ADDR_TO_STRING_NO_COLON));
+                 udev_builtin_add_property(dev, test, "ID_NET_NAME_MAC", str);
+-                log_device_debug(dev, "MAC address identifier: hw_addr=%s → %s",
+-                                 HW_ADDR_TO_STR(&info.hw_addr), str + strlen(prefix));
++                log_device_debug(dev, "MAC address identifier: hw_addr=%s %s %s",
++                                 HW_ADDR_TO_STR(&info.hw_addr),
++                                 special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), str + strlen(prefix));
+ 
+                 ieee_oui(dev, &info, test);
+         }
diff --git a/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch b/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch
new file mode 100644
index 0000000..a4c9a1e
--- /dev/null
+++ b/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch
@@ -0,0 +1,387 @@
+From 72fb11cd3191e7546ff0bae802f5bd6e5e815647 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Fri, 24 Jun 2022 09:59:44 +0200
+Subject: [PATCH] =?UTF-8?q?tree-wide:=20allow=20ASCII=20fallback=20for=20?=
+ =?UTF-8?q?=E2=80=A6=20in=20logs?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit 28e5e1e97f47067bce190ea6b3404907d63e4320)
+
+Related: #2118297
+---
+ src/basic/os-util.c                           |  6 +++--
+ src/binfmt/binfmt.c                           |  2 +-
+ src/boot/bootctl.c                            |  2 +-
+ src/core/dbus-manager.c                       |  2 +-
+ src/core/manager.c                            |  4 ++--
+ .../environment-d-generator.c                 |  3 ++-
+ src/home/homectl.c                            | 12 ++++++----
+ src/libsystemd/sd-event/sd-event.c            |  4 +++-
+ src/nss-resolve/nss-resolve.c                 |  5 ++++-
+ src/resolve/resolved-varlink.c                |  5 ++++-
+ src/shared/user-record.c                      | 22 ++++++++++++++-----
+ src/sysusers/sysusers.c                       | 12 +++++-----
+ src/tmpfiles/tmpfiles.c                       |  6 ++---
+ 13 files changed, 56 insertions(+), 29 deletions(-)
+
+diff --git a/src/basic/os-util.c b/src/basic/os-util.c
+index acfff24319..880fb7e6bb 100644
+--- a/src/basic/os-util.c
++++ b/src/basic/os-util.c
+@@ -8,6 +8,7 @@
+ #include "fd-util.h"
+ #include "fileio.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "macro.h"
+ #include "os-util.h"
+ #include "parse-util.h"
+@@ -146,8 +147,9 @@ int open_extension_release(const char *root, const char *extension, char **ret_p
+                                 if (k != 0)
+                                         continue;
+ 
+-                                log_debug("%s/%s: 'user.extension-release.strict' attribute is false…",
+-                                          extension_release_dir_path, de->d_name);
++                                log_debug("%s/%s: 'user.extension-release.strict' attribute is false%s",
++                                          extension_release_dir_path, de->d_name,
++                                          special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                                 /* We already found what we were looking for, but there's another candidate?
+                                  * We treat this as an error, as we want to enforce that there are no ambiguities
+diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
+index 817ee387ff..71cb56aa4a 100644
+--- a/src/binfmt/binfmt.c
++++ b/src/binfmt/binfmt.c
+@@ -83,7 +83,7 @@ static int apply_file(const char *filename, bool ignore_enoent) {
+                 return log_error_errno(r, "Failed to open file '%s': %m", filename);
+         }
+ 
+-        log_debug("Applying %s…", pp);
++        log_debug("Applying %s%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+         for (unsigned line = 1;; line++) {
+                 _cleanup_free_ char *text = NULL;
+                 char *p;
+diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
+index c1adae4962..292907eb4a 100644
+--- a/src/boot/bootctl.c
++++ b/src/boot/bootctl.c
+@@ -1404,7 +1404,7 @@ static int are_we_installed(void) {
+         if (!p)
+                 return log_oom();
+ 
+-        log_debug("Checking whether %s contains any files…", p);
++        log_debug("Checking whether %s contains any files%s", p, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+         r = dir_is_empty(p);
+         if (r < 0 && r != -ENOENT)
+                 return log_error_errno(r, "Failed to check whether %s contains any files: %m", p);
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index efba6331b9..0ce2d73857 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -1886,7 +1886,7 @@ static int method_enqueue_marked_jobs(sd_bus_message *message, void *userdata, s
+         if (r == 0)
+                 return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
+ 
+-        log_info("Queuing reload/restart jobs for marked units…");
++        log_info("Queuing reload/restart jobs for marked units%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+         r = sd_bus_message_new_method_return(message, &reply);
+diff --git a/src/core/manager.c b/src/core/manager.c
+index c01128adb4..5b7f5f55aa 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1593,7 +1593,7 @@ static void manager_coldplug(Manager *m) {
+ 
+         assert(m);
+ 
+-        log_debug("Invoking unit coldplug() handlers…");
++        log_debug("Invoking unit coldplug() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+         /* Let's place the units back into their deserialized state */
+         HASHMAP_FOREACH_KEY(u, k, m->units) {
+@@ -1614,7 +1614,7 @@ static void manager_catchup(Manager *m) {
+ 
+         assert(m);
+ 
+-        log_debug("Invoking unit catchup() handlers…");
++        log_debug("Invoking unit catchup() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+         /* Let's catch up on any state changes that happened while we were reloading/reexecing */
+         HASHMAP_FOREACH_KEY(u, k, m->units) {
+diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c
+index 39c46c7c2b..12aafbc7d9 100644
+--- a/src/environment-d-generator/environment-d-generator.c
++++ b/src/environment-d-generator/environment-d-generator.c
+@@ -6,6 +6,7 @@
+ #include "def.h"
+ #include "env-file.h"
+ #include "escape.h"
++#include "glyph-util.h"
+ #include "log.h"
+ #include "path-lookup.h"
+ #include "strv.h"
+@@ -55,7 +56,7 @@ static int load_and_print(void) {
+          * that in case of failure, a partial update is better than none. */
+ 
+         STRV_FOREACH(i, files) {
+-                log_debug("Reading %s…", *i);
++                log_debug("Reading %s%s", *i, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                 r = merge_env_file(&env, NULL, *i);
+                 if (r == -ENOMEM)
+diff --git a/src/home/homectl.c b/src/home/homectl.c
+index f0d1dac6ab..23bf17f5cf 100644
+--- a/src/home/homectl.c
++++ b/src/home/homectl.c
+@@ -1683,9 +1683,13 @@ static int passwd_home(int argc, char *argv[], void *userdata) {
+         int r;
+ 
+         if (arg_pkcs11_token_uri)
+-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=…'.");
++                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
++                                       "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=%s'.",
++                                       special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+         if (arg_fido2_device)
+-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the FIDO2 security token use 'homectl update --fido2-device=…'.");
++                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
++                                       "To change the FIDO2 security token use 'homectl update --fido2-device=%s'.",
++                                       special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+         if (identity_properties_specified())
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The 'passwd' verb does not permit changing other record properties at the same time.");
+ 
+@@ -3600,8 +3604,8 @@ static int parse_argv(int argc, char *argv[]) {
+                                         return log_error_errno(r, "Failed to parse --rebalance-weight= argument: %s", optarg);
+ 
+                                 if (u < REBALANCE_WEIGHT_MIN || u > REBALANCE_WEIGHT_MAX)
+-                                        return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Rebalancing weight out of valid range %" PRIu64 "…%" PRIu64 ": %s",
+-                                                               REBALANCE_WEIGHT_MIN, REBALANCE_WEIGHT_MAX, optarg);
++                                        return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Rebalancing weight out of valid range %" PRIu64 "%s%" PRIu64 ": %s",
++                                                               REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX, optarg);
+                         }
+ 
+                         /* Drop from per machine stuff and everywhere */
+diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
+index dd257eadfe..b491033ca7 100644
+--- a/src/libsystemd/sd-event/sd-event.c
++++ b/src/libsystemd/sd-event/sd-event.c
+@@ -13,6 +13,7 @@
+ #include "event-source.h"
+ #include "fd-util.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "hashmap.h"
+ #include "list.h"
+ #include "macro.h"
+@@ -405,7 +406,8 @@ _public_ int sd_event_new(sd_event** ret) {
+         e->epoll_fd = fd_move_above_stdio(e->epoll_fd);
+ 
+         if (secure_getenv("SD_EVENT_PROFILE_DELAYS")) {
+-                log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 … 2^63 us will be logged every 5s.");
++                log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 %s 2^63 us will be logged every 5s.",
++                          special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 e->profile_delays = true;
+         }
+ 
+diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c
+index e857d42db6..9ed2945a1e 100644
+--- a/src/nss-resolve/nss-resolve.c
++++ b/src/nss-resolve/nss-resolve.c
+@@ -10,6 +10,7 @@
+ 
+ #include "env-util.h"
+ #include "errno-util.h"
++#include "glyph-util.h"
+ #include "in-addr-util.h"
+ #include "macro.h"
+ #include "nss-util.h"
+@@ -180,7 +181,9 @@ static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDis
+ 
+                 b = json_variant_integer(i);
+                 if (b < 0 || b > 0xff)
+-                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name));
++                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
++                                        "Element %zu of JSON field '%s' is out of range 0%s255.",
++                                        k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                 buf.bytes[k++] = (uint8_t) b;
+         }
+diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c
+index cc684608a6..a00dfee5dd 100644
+--- a/src/resolve/resolved-varlink.c
++++ b/src/resolve/resolved-varlink.c
+@@ -1,5 +1,6 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ 
++#include "glyph-util.h"
+ #include "in-addr-util.h"
+ #include "resolved-dns-synthesize.h"
+ #include "resolved-varlink.h"
+@@ -371,7 +372,9 @@ static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDis
+ 
+                 b = json_variant_integer(i);
+                 if (b < 0 || b > 0xff)
+-                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name));
++                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
++                                        "Element %zu of JSON field '%s' is out of range 0%s255.",
++                                        k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                 buf.bytes[k++] = (uint8_t) b;
+         }
+diff --git a/src/shared/user-record.c b/src/shared/user-record.c
+index 5b406d1f42..eae0915fc7 100644
+--- a/src/shared/user-record.c
++++ b/src/shared/user-record.c
+@@ -6,6 +6,7 @@
+ #include "dns-domain.h"
+ #include "env-util.h"
+ #include "fs-util.h"
++#include "glyph-util.h"
+ #include "hexdecoct.h"
+ #include "hostname-util.h"
+ #include "memory-util.h"
+@@ -467,7 +468,9 @@ static int json_dispatch_umask(const char *name, JsonVariant *variant, JsonDispa
+ 
+         k = json_variant_unsigned(variant);
+         if (k > 0777)
+-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…0777.", strna(name));
++                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
++                                "JSON field '%s' outside of valid range 0%s0777.",
++                                strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+         *m = (mode_t) k;
+         return 0;
+@@ -487,7 +490,9 @@ static int json_dispatch_access_mode(const char *name, JsonVariant *variant, Jso
+ 
+         k = json_variant_unsigned(variant);
+         if (k > 07777)
+-                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…07777.", strna(name));
++                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL),
++                                "JSON field '%s' outside of valid range 0%s07777.",
++                                strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+         *m = (mode_t) k;
+         return 0;
+@@ -578,7 +583,9 @@ static int json_dispatch_tasks_or_memory_max(const char *name, JsonVariant *vari
+ 
+         k = json_variant_unsigned(variant);
+         if (k <= 0 || k >= UINT64_MAX)
+-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) 1, UINT64_MAX-1);
++                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
++                                "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".",
++                                strna(name), (uint64_t) 1, special_glyph(SPECIAL_GLYPH_ELLIPSIS), UINT64_MAX-1);
+ 
+         *limit = k;
+         return 0;
+@@ -597,7 +604,10 @@ static int json_dispatch_weight(const char *name, JsonVariant *variant, JsonDisp
+ 
+         k = json_variant_unsigned(variant);
+         if (k <= CGROUP_WEIGHT_MIN || k >= CGROUP_WEIGHT_MAX)
+-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) CGROUP_WEIGHT_MIN, (uint64_t) CGROUP_WEIGHT_MAX);
++                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
++                                "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".",
++                                strna(name), (uint64_t) CGROUP_WEIGHT_MIN,
++                                special_glyph(SPECIAL_GLYPH_ELLIPSIS), (uint64_t) CGROUP_WEIGHT_MAX);
+ 
+         *weight = k;
+         return 0;
+@@ -1010,7 +1020,9 @@ static int dispatch_rebalance_weight(const char *name, JsonVariant *variant, Jso
+         else if (u == 0)
+                 *rebalance_weight = REBALANCE_WEIGHT_OFF;
+         else
+-                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "Rebalance weight is out of valid range %" PRIu64 "…%" PRIu64 ".", REBALANCE_WEIGHT_MIN, REBALANCE_WEIGHT_MAX);
++                return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE),
++                                "Rebalance weight is out of valid range %" PRIu64 "%s%" PRIu64 ".",
++                                REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX);
+ 
+         return 0;
+ }
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 6a2ca1afbb..05e2591b6a 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -405,7 +405,7 @@ static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char
+                 return 0;
+ 
+         if (arg_dry_run) {
+-                log_info("Would write /etc/passwd…");
++                log_info("Would write /etc/passwd%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 return 0;
+         }
+ 
+@@ -529,7 +529,7 @@ static int write_temporary_shadow(const char *shadow_path, FILE **tmpfile, char
+                 return 0;
+ 
+         if (arg_dry_run) {
+-                log_info("Would write /etc/shadow…");
++                log_info("Would write /etc/shadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 return 0;
+         }
+ 
+@@ -667,7 +667,7 @@ static int write_temporary_group(const char *group_path, FILE **tmpfile, char **
+                 return 0;
+ 
+         if (arg_dry_run) {
+-                log_info("Would write /etc/group…");
++                log_info("Would write /etc/group%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 return 0;
+         }
+ 
+@@ -773,7 +773,7 @@ static int write_temporary_gshadow(const char * gshadow_path, FILE **tmpfile, ch
+                 return 0;
+ 
+         if (arg_dry_run) {
+-                log_info("Would write /etc/gshadow…");
++                log_info("Would write /etc/gshadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 return 0;
+         }
+ 
+@@ -2002,13 +2002,13 @@ static int read_config_files(char **args) {
+ 
+         STRV_FOREACH(f, files)
+                 if (p && path_equal(*f, p)) {
+-                        log_debug("Parsing arguments at position \"%s\"…", *f);
++                        log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                         r = parse_arguments(args);
+                         if (r < 0)
+                                 return r;
+                 } else {
+-                        log_debug("Reading config file \"%s\"…", *f);
++                        log_debug("Reading config file \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                         /* Just warn, ignore result otherwise */
+                         (void) read_config_file(*f, true);
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 023207bc60..c6019ae2c8 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -3509,7 +3509,7 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe
+         assert(fn);
+ 
+         if (streq(fn, "-")) {
+-                log_debug("Reading config from stdin…");
++                log_debug("Reading config from stdin%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 fn = "<stdin>";
+                 f = stdin;
+         } else {
+@@ -3523,7 +3523,7 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe
+                         return log_error_errno(r, "Failed to open '%s': %m", fn);
+                 }
+ 
+-                log_debug("Reading config file \"%s\"…", pp);
++                log_debug("Reading config file \"%s\"%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+                 fn = pp;
+                 f = _f;
+         }
+@@ -3626,7 +3626,7 @@ static int read_config_files(char **config_dirs, char **args, bool *invalid_conf
+ 
+         STRV_FOREACH(f, files)
+                 if (p && path_equal(*f, p)) {
+-                        log_debug("Parsing arguments at position \"%s\"…", *f);
++                        log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS));
+ 
+                         r = parse_arguments(config_dirs, args, invalid_config);
+                         if (r < 0)
diff --git a/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch b/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch
new file mode 100644
index 0000000..0c61285
--- /dev/null
+++ b/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch
@@ -0,0 +1,115 @@
+From fa06a45fa2dc0b7d15dc1394e679a9043fa2fee4 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Sat, 16 Jul 2022 09:49:12 +0200
+Subject: [PATCH] core: allow to set default timeout for devices
+
+Fixes: #19879
+(cherry picked from commit a0fe19f9f791c05af236265954b1d73e8fcf5468)
+
+Resolves: #2116681
+---
+ src/core/dbus-manager.c | 1 +
+ src/core/device.c       | 2 +-
+ src/core/main.c         | 4 ++++
+ src/core/manager.c      | 1 +
+ src/core/manager.h      | 1 +
+ src/core/system.conf.in | 1 +
+ 6 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
+index 0ce2d73857..9d47d9c8a7 100644
+--- a/src/core/dbus-manager.c
++++ b/src/core/dbus-manager.c
+@@ -2706,6 +2706,7 @@ const sd_bus_vtable bus_manager_vtable[] = {
+         SD_BUS_PROPERTY("DefaultTimeoutStartUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_start_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+         SD_BUS_PROPERTY("DefaultTimeoutStopUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_stop_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+         SD_BUS_PROPERTY("DefaultTimeoutAbortUSec", "t", property_get_default_timeout_abort_usec, 0, 0),
++        SD_BUS_PROPERTY("DefaultDeviceTimeoutUSec", "t", bus_property_get_usec, offsetof(Manager, default_device_timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+         SD_BUS_PROPERTY("DefaultRestartUSec", "t", bus_property_get_usec, offsetof(Manager, default_restart_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+         SD_BUS_PROPERTY("DefaultStartLimitIntervalUSec", "t", bus_property_get_usec, offsetof(Manager, default_start_limit_interval), SD_BUS_VTABLE_PROPERTY_CONST),
+         /* The following two items are obsolete alias */
+diff --git a/src/core/device.c b/src/core/device.c
+index d2c5febd3f..cb6021cbd8 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -101,7 +101,7 @@ static void device_init(Unit *u) {
+          * indefinitely for plugged in devices, something which cannot
+          * happen for the other units since their operations time out
+          * anyway. */
+-        u->job_running_timeout = u->manager->default_timeout_start_usec;
++        u->job_running_timeout = u->manager->default_device_timeout_usec;
+ 
+         u->ignore_on_isolate = true;
+ 
+diff --git a/src/core/main.c b/src/core/main.c
+index 03efaa03be..7dedc5163b 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -132,6 +132,7 @@ static usec_t arg_default_restart_usec;
+ static usec_t arg_default_timeout_start_usec;
+ static usec_t arg_default_timeout_stop_usec;
+ static usec_t arg_default_timeout_abort_usec;
++static usec_t arg_default_device_timeout_usec;
+ static bool arg_default_timeout_abort_set;
+ static usec_t arg_default_start_limit_interval;
+ static unsigned arg_default_start_limit_burst;
+@@ -725,6 +726,7 @@ static int parse_config_file(void) {
+                 { "Manager", "DefaultTimeoutStartSec",       config_parse_sec,                   0, &arg_default_timeout_start_usec        },
+                 { "Manager", "DefaultTimeoutStopSec",        config_parse_sec,                   0, &arg_default_timeout_stop_usec         },
+                 { "Manager", "DefaultTimeoutAbortSec",       config_parse_default_timeout_abort, 0, NULL                                   },
++                { "Manager", "DefaultDeviceTimeoutSec",      config_parse_sec,                   0, &arg_default_device_timeout_usec       },
+                 { "Manager", "DefaultRestartSec",            config_parse_sec,                   0, &arg_default_restart_usec              },
+                 { "Manager", "DefaultStartLimitInterval",    config_parse_sec,                   0, &arg_default_start_limit_interval      }, /* obsolete alias */
+                 { "Manager", "DefaultStartLimitIntervalSec", config_parse_sec,                   0, &arg_default_start_limit_interval      },
+@@ -809,6 +811,7 @@ static void set_manager_defaults(Manager *m) {
+         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
+         m->default_timeout_abort_usec = arg_default_timeout_abort_usec;
+         m->default_timeout_abort_set = arg_default_timeout_abort_set;
++        m->default_device_timeout_usec = arg_default_device_timeout_usec;
+         m->default_restart_usec = arg_default_restart_usec;
+         m->default_start_limit_interval = arg_default_start_limit_interval;
+         m->default_start_limit_burst = arg_default_start_limit_burst;
+@@ -2437,6 +2440,7 @@ static void reset_arguments(void) {
+         arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
+         arg_default_timeout_abort_usec = DEFAULT_TIMEOUT_USEC;
+         arg_default_timeout_abort_set = false;
++        arg_default_device_timeout_usec = DEFAULT_TIMEOUT_USEC;
+         arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
+         arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
+         arg_runtime_watchdog = 0;
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 5b7f5f55aa..8057bafe61 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -806,6 +806,7 @@ int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager *
+                 .default_timeout_start_usec = DEFAULT_TIMEOUT_USEC,
+                 .default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC,
+                 .default_restart_usec = DEFAULT_RESTART_USEC,
++                .default_device_timeout_usec = DEFAULT_TIMEOUT_USEC,
+ 
+                 .original_log_level = -1,
+                 .original_log_target = _LOG_TARGET_INVALID,
+diff --git a/src/core/manager.h b/src/core/manager.h
+index 281d2a2138..e7a15e6b25 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -354,6 +354,7 @@ struct Manager {
+         ExecOutput default_std_output, default_std_error;
+ 
+         usec_t default_restart_usec, default_timeout_start_usec, default_timeout_stop_usec;
++        usec_t default_device_timeout_usec;
+         usec_t default_timeout_abort_usec;
+         bool default_timeout_abort_set;
+ 
+diff --git a/src/core/system.conf.in b/src/core/system.conf.in
+index 5913b5b0e4..7a150a482f 100644
+--- a/src/core/system.conf.in
++++ b/src/core/system.conf.in
+@@ -44,6 +44,7 @@
+ #DefaultTimeoutStartSec=90s
+ #DefaultTimeoutStopSec=90s
+ #DefaultTimeoutAbortSec=
++#DefaultDeviceTimeoutSec=90s
+ #DefaultRestartSec=100ms
+ #DefaultStartLimitIntervalSec=10s
+ #DefaultStartLimitBurst=5
diff --git a/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch b/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch
new file mode 100644
index 0000000..924ec78
--- /dev/null
+++ b/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch
@@ -0,0 +1,34 @@
+From 873e5040948fb317de39ad40316d16fdc9d17ffe Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Sat, 16 Jul 2022 10:16:41 +0200
+Subject: [PATCH] man: document DefaultDeviceTimeoutSec=
+
+(cherry picked from commit 9e69bd4801588c12811c611a1c68b54cecbe1718)
+
+Related: #2116681
+---
+ man/systemd-system.conf.xml | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
+index b8e2b65625..bad790944d 100644
+--- a/man/systemd-system.conf.xml
++++ b/man/systemd-system.conf.xml
+@@ -326,6 +326,17 @@
+         100ms.</para></listitem>
+       </varlistentry>
+ 
++      <varlistentry>
++        <term><varname>DefaultDeviceTimeoutSec=</varname></term>
++
++        <listitem><para>Configures the default timeout for waiting for devices. It can be changed per
++        device via the <varname>x-systemd.device-timeout=</varname> option in <filename>/etc/fstab</filename>
++        and <filename>/etc/crypttab</filename> (see
++        <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++        <citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
++        Defaults to 90s.</para></listitem>
++      </varlistentry>
++
+       <varlistentry>
+         <term><varname>DefaultStartLimitIntervalSec=</varname></term>
+         <term><varname>DefaultStartLimitBurst=</varname></term>
diff --git a/SOURCES/0272-man-update-dbus-docs.patch b/SOURCES/0272-man-update-dbus-docs.patch
new file mode 100644
index 0000000..707f3d8
--- /dev/null
+++ b/SOURCES/0272-man-update-dbus-docs.patch
@@ -0,0 +1,43 @@
+From 3b5feb647f86c6db779806551093202b1ab020f2 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Sat, 16 Jul 2022 12:36:06 +0200
+Subject: [PATCH] man: update dbus docs
+
+(cherry picked from commit 141332ab55203adddadbf59ff7792a7e3438092c)
+
+Related: #2116681
+---
+ man/org.freedesktop.systemd1.xml | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml
+index e1abb7f389..6be60c865c 100644
+--- a/man/org.freedesktop.systemd1.xml
++++ b/man/org.freedesktop.systemd1.xml
+@@ -425,6 +425,8 @@ node /org/freedesktop/systemd1 {
+       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+       readonly t DefaultTimeoutAbortUSec = ...;
+       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
++      readonly t DefaultDeviceTimeoutUSec = ...;
++      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+       readonly t DefaultRestartUSec = ...;
+       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+       readonly t DefaultStartLimitIntervalUSec = ...;
+@@ -669,6 +671,8 @@ node /org/freedesktop/systemd1 {
+ 
+     <!--property DefaultTimeoutAbortUSec is not documented!-->
+ 
++    <!--property DefaultDeviceTimeoutUSec is not documented!-->
++
+     <!--property DefaultRestartUSec is not documented!-->
+ 
+     <!--property DefaultStartLimitIntervalUSec is not documented!-->
+@@ -1073,6 +1077,8 @@ node /org/freedesktop/systemd1 {
+ 
+     <variablelist class="dbus-property" generated="True" extra-ref="DefaultTimeoutAbortUSec"/>
+ 
++    <variablelist class="dbus-property" generated="True" extra-ref="DefaultDeviceTimeoutUSec"/>
++
+     <variablelist class="dbus-property" generated="True" extra-ref="DefaultRestartUSec"/>
+ 
+     <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartLimitIntervalUSec"/>
diff --git a/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch b/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch
new file mode 100644
index 0000000..b83b8eb
--- /dev/null
+++ b/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch
@@ -0,0 +1,47 @@
+From c064473f6993a04ad126770a3218da623316c543 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Sat, 25 Dec 2021 11:19:03 +0100
+Subject: [PATCH] hwdb: 60-keyboard: Fix volume-button mapping on Asus TF103C
+
+The Asus TF103C misses the home button in its PNP0C40 GPIO resources
+causing the button mappings for the volume buttons to be off by one,
+leading to the volume-up button sending home button presses and the
+volume-down button sending volume-up button presses.
+
+Add a 60-keyboard hwdb entry to correct the mappings. Note this is
+split over 2 input devices because the soc_button_array driver
+creates separate input devices for power + home and vol up/down.
+This is done because power/home act as wakeup buttons where as
+the volume buttons do not.
+
+This means that after this fixup the home -> volume-up button
+still acts as a wakeup button, there is nothing which can be done
+about this without adding a kludge to the kernel which is not
+worth the trouble (IMHO).
+
+(cherry picked from commit 04b457d8ef9c93be3b2048c6f545cdbcf1b893a1)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index b614a22c8c..3d6e56983b 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -231,6 +231,14 @@ evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
+ evdev:input:b0003v0B05p1869*
+  KEYBOARD_KEY_ff31007c=f20                              # Remap micmute to f20
+ 
++# Asus TF103C misses the home button in its PNP0C40 GPIO resources
++# causing the volume-button mappings to be off by one, correct this
++evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
++ KEYBOARD_KEY_1=volumeup
++
++evdev:name:gpio-keys:phys:gpio-keys/input0:ev:100003:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
++ KEYBOARD_KEY_0=volumedown
++
+ ###########################################################
+ # BenQ
+ ###########################################################
diff --git a/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch b/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch
new file mode 100644
index 0000000..1cfbc99
--- /dev/null
+++ b/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch
@@ -0,0 +1,28 @@
+From c81a00694952469b1a3afa7c0345a5f2390c8024 Mon Sep 17 00:00:00 2001
+From: Tyson Whitehead <twhitehead@gmail.com>
+Date: Wed, 19 Jan 2022 22:38:21 -0500
+Subject: [PATCH] hwdb: CH Pro Pedals not classified correctly due to no
+ buttons
+
+(cherry picked from commit 230ed4c4bad8b3c1d9d746a80e6f78dc71d1c87f)
+
+Related: #2087778
+---
+ hwdb.d/60-input-id.hwdb | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb
+index c4101cc2a5..f7b61fb980 100644
+--- a/hwdb.d/60-input-id.hwdb
++++ b/hwdb.d/60-input-id.hwdb
+@@ -70,4 +70,9 @@ id-input:modalias:input:b0005v046DpB00De0700*
+ 
+ # Logitech MX Keys
+ id-input:modalias:input:b0003v046Dp408Ae0111*
+- ID_INPUT_MOUSE=0 
++ ID_INPUT_MOUSE=0
++
++# CH Products Pro Pedals
++id-input:modalias:input:b0003v068Ep00F2e0100*
++ ID_INPUT_ACCELEROMETER=0
++ ID_INPUT_JOYSTICK=1
diff --git a/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch b/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch
new file mode 100644
index 0000000..52181a6
--- /dev/null
+++ b/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch
@@ -0,0 +1,27 @@
+From d7ca24d57b5e6587238da4d5002c221af31e9735 Mon Sep 17 00:00:00 2001
+From: Thomas Batten <stenstorpmc@gmail.com>
+Date: Thu, 20 Jan 2022 19:24:00 +1030
+Subject: [PATCH] hwdb: Add accel orientation quirk for the GPD Pocket 3
+
+(cherry picked from commit 5888fa9b16c33e48d702313d80c9cb0253aec920)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index ab7b1adacd..c4ee7e0c7b 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -426,6 +426,10 @@ sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:bd03/20/201
+ sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:bd05/25/2017:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnAMICorporation:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:*
+  ACCEL_LOCATION=base
+ 
++# GPD Pocket 3
++sensor:modalias:acpi:MXC6655*:dmi:*:svnGPD:pnG1621-02:*
++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
++
+ #########################################
+ # Hometech
+ ########################################
diff --git a/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch b/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch
new file mode 100644
index 0000000..9acf684
--- /dev/null
+++ b/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch
@@ -0,0 +1,41 @@
+From ea54689eebe58d1bbb908762731f179e50ac1c9a Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 21 Jan 2022 18:56:42 +0100
+Subject: [PATCH] hostname: Allow overriding the chassis type from hwdb
+
+Closes: #7390
+(cherry picked from commit 4b35eb2579b226785f0d94129a7652450f9723fd)
+
+Related: #2087778
+---
+ src/hostname/hostnamed.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index b20a93ad81..559326b9f5 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -725,16 +725,18 @@ static int property_get_chassis(
+                 sd_bus_error *error) {
+ 
+         Context *c = userdata;
+-        const char *name;
++        _cleanup_free_ char *dmi_chassis = NULL;
++        const char *name = NULL;
+ 
+         context_read_machine_info(c);
+ 
+-        if (isempty(c->data[PROP_CHASSIS]))
+-                name = fallback_chassis();
+-        else
++        if (isempty(c->data[PROP_CHASSIS])) {
++                if (get_dmi_data("ID_CHASSIS", NULL, &dmi_chassis) <= 0)
++                        name = fallback_chassis();
++        } else
+                 name = c->data[PROP_CHASSIS];
+ 
+-        return sd_bus_message_append(reply, "s", name);
++        return sd_bus_message_append(reply, "s", name ?: dmi_chassis);
+ }
+ 
+ static int property_get_uname_field(
diff --git a/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch b/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch
new file mode 100644
index 0000000..081faf0
--- /dev/null
+++ b/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch
@@ -0,0 +1,26 @@
+From 1514432a3837d7feaf70e34fbfafc8137e539ea8 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 21 Jan 2022 18:57:21 +0100
+Subject: [PATCH] hwdb: Add Microsoft Surface Pro 1 chassis quirk
+
+See https://github.com/systemd/systemd/issues/7390#issuecomment-345546127
+
+(cherry picked from commit bdf182debe715ff7876c610b0f93540437cb8b43)
+
+Related: #2087778
+---
+ hwdb.d/20-dmi-id.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/20-dmi-id.hwdb b/hwdb.d/20-dmi-id.hwdb
+index a614473bd9..c7bf6cfab1 100644
+--- a/hwdb.d/20-dmi-id.hwdb
++++ b/hwdb.d/20-dmi-id.hwdb
+@@ -4,3 +4,7 @@
+ dmi:bvnLENOVO*
+     ID_SYSFS_ATTRIBUTE_MODEL=product_version
+     ID_VENDOR_FROM_DATABASE=Lenovo
++
++# Microsoft Surface 1's chassis type
++dmi:bvnMicrosoft Corporation*:pvrSurface with Windows 8 Pro*
++    ID_CHASSIS=tablet
diff --git a/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch b/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch
new file mode 100644
index 0000000..ce01cef
--- /dev/null
+++ b/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch
@@ -0,0 +1,27 @@
+From cf56e7ae888a0d5a1384b5a22398aa3e32c65b73 Mon Sep 17 00:00:00 2001
+From: Seth Falco <seth@falco.fun>
+Date: Thu, 27 Jan 2022 21:08:30 +0000
+Subject: [PATCH] hwdb: treat logitech craft keyboard as a keyboard
+
+(cherry picked from commit 7f74f7a916b8c2bd6e82b873334731427ba8cb80)
+
+Related: #2087778
+---
+ hwdb.d/60-input-id.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb
+index f7b61fb980..2d5681dea6 100644
+--- a/hwdb.d/60-input-id.hwdb
++++ b/hwdb.d/60-input-id.hwdb
+@@ -72,6 +72,10 @@ id-input:modalias:input:b0005v046DpB00De0700*
+ id-input:modalias:input:b0003v046Dp408Ae0111*
+  ID_INPUT_MOUSE=0
+ 
++# Logitech Craft Keyboard
++id-input:modalias:input:b0003v046Dp4066e0111*
++ ID_INPUT_MOUSE=0
++
+ # CH Products Pro Pedals
+ id-input:modalias:input:b0003v068Ep00F2e0100*
+  ID_INPUT_ACCELEROMETER=0
diff --git a/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch b/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch
new file mode 100644
index 0000000..2dea017
--- /dev/null
+++ b/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch
@@ -0,0 +1,27 @@
+From 3821f3570e28a6f169bf539086882b34a6a7beb8 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 28 Jan 2022 11:08:43 +0900
+Subject: [PATCH] test: frequency in mouse DPI is optional
+
+Prompted by #22278.
+
+(cherry picked from commit e912326e05cf753ddb703be0666336ee3386d6e0)
+
+Related: #2087778
+---
+ hwdb.d/parse_hwdb.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
+index 0268bf9580..aef0331ace 100755
+--- a/hwdb.d/parse_hwdb.py
++++ b/hwdb.d/parse_hwdb.py
+@@ -121,7 +121,7 @@ def hwdb_grammar():
+ def property_grammar():
+     ParserElement.setDefaultWhitespaceChars(' ')
+ 
+-    dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Suppress('@') + INTEGER('HZ'))('SETTINGS*')
++    dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Optional(Suppress('@') + INTEGER('HZ')))('SETTINGS*')
+     mount_matrix_row = SIGNED_REAL + ',' + SIGNED_REAL + ',' + SIGNED_REAL
+     mount_matrix = Group(mount_matrix_row + ';' + mount_matrix_row + ';' + mount_matrix_row)('MOUNT_MATRIX')
+     xkb_setting = Optional(Word(alphanums + '+-/@._'))
diff --git a/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch b/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch
new file mode 100644
index 0000000..62cef91
--- /dev/null
+++ b/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch
@@ -0,0 +1,34 @@
+From 7baf39a2264d38ee6c684c28fee5da879b87a2c5 Mon Sep 17 00:00:00 2001
+From: Ryan Hendrickson <ryan.hendrickson@alum.mit.edu>
+Date: Thu, 27 Jan 2022 18:06:14 -0500
+Subject: [PATCH] hwdb: add two Elecom trackballs
+
+(cherry picked from commit a663f5eef59a05ba64e313d2451000d8df754bcf)
+
+Related: #2087778
+---
+ hwdb.d/70-mouse.hwdb | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
+index 6302312456..66e74f667c 100644
+--- a/hwdb.d/70-mouse.hwdb
++++ b/hwdb.d/70-mouse.hwdb
+@@ -198,6 +198,17 @@ mouse:usb:v0461p4d46:name:USB Optical Mouse:*
+ mouse:usb:v056ep010d:name:ELECOM TrackBall Mouse HUGE TrackBall:*
+  MOUSE_DPI=500@125 *1000@125 1500@125
+ 
++# Elecom DEFT Pro TrackBall (M-DPT1MR)
++mouse:usb:v056ep0131:name:ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse:*
++ MOUSE_DPI=*500 1000 1500
++ MOUSE_WHEEL_CLICK_ANGLE=10
++
++# Elecom Relacon (M-RT1DR)
++mouse:usb:v056ep0155:name:ELECOM ELECOM Relacon:*
++ ID_INPUT_TRACKBALL=1
++ MOUSE_DPI=*500 1000 1500
++ MOUSE_WHEEL_CLICK_ANGLE=30
++
+ ##########################################
+ # Fujitsu Siemens
+ ##########################################
diff --git a/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch b/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch
new file mode 100644
index 0000000..31b933f
--- /dev/null
+++ b/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch
@@ -0,0 +1,91 @@
+From 125cb47adf05421d00e25aee4a143ef2c473aeb9 Mon Sep 17 00:00:00 2001
+From: Davide Cavalca <davide@cavalca.name>
+Date: Sun, 30 Jan 2022 09:28:52 -0800
+Subject: [PATCH] hwdb: add new database file for PDA devices
+
+Add a new database for handhelds (PDAs, calculators, etc.) that should be
+accessible the seat owner.
+
+The database is initially populated with Texas Instruments calculators
+and linking cables, which removes the need to installing dedicated udev
+rules for them.
+
+(cherry picked from commit 7d75376e1f0a83dba76d3a08edbb50923e02e3d3)
+
+Related: #2087778
+---
+ hwdb.d/70-pda.hwdb   | 39 +++++++++++++++++++++++++++++++++++++++
+ hwdb.d/meson.build   |  1 +
+ hwdb.d/parse_hwdb.py |  1 +
+ 3 files changed, 41 insertions(+)
+ create mode 100644 hwdb.d/70-pda.hwdb
+
+diff --git a/hwdb.d/70-pda.hwdb b/hwdb.d/70-pda.hwdb
+new file mode 100644
+index 0000000000..e122acca6f
+--- /dev/null
++++ b/hwdb.d/70-pda.hwdb
+@@ -0,0 +1,39 @@
++# This file is part of systemd.
++#
++# Database for handhelds (PDAs, calculators, etc.) that should be accessible
++# the seat owner.
++#
++# Permitted keys:
++#   Specify if a device is a signal analyzer
++#   ID_PDA=1|0
++
++###########################################################
++# Texas Instruments
++###########################################################
++# SilverLink
++usb:v0451pE001*
++ ID_PDA=1
++
++# TI-84 Plus DirectLink
++usb:v0451pE003*
++ ID_PDA=1
++
++# TI-89 Titanium DirectLink
++usb:v0451pE004*
++ ID_PDA=1
++
++# TI-84 Plus Silver Edition DirectLink
++usb:v0451pE008*
++ ID_PDA=1
++
++# TI-Nspire DirectLink
++usb:v0451pE012*
++ ID_PDA=1
++
++# TI-Nspire Lab Cradle
++usb:v0451pE01C*
++ ID_PDA=1
++
++# TI-Nspire CX II DirectLink
++usb:v0451pE022*
++ ID_PDA=1
+diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build
+index 8ff044131c..fc72ebb2bd 100644
+--- a/hwdb.d/meson.build
++++ b/hwdb.d/meson.build
+@@ -31,6 +31,7 @@ hwdb_files_test = files('''
+         70-cameras.hwdb
+         70-joystick.hwdb
+         70-mouse.hwdb
++        70-pda.hwdb
+         70-pointingstick.hwdb
+         70-touchpad.hwdb
+         80-ieee1394-unit-function.hwdb
+diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
+index aef0331ace..194a71ac08 100755
+--- a/hwdb.d/parse_hwdb.py
++++ b/hwdb.d/parse_hwdb.py
+@@ -136,6 +136,7 @@ def property_grammar():
+              ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER),
+              ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
+              ('ID_PERSIST', Or((Literal('0'), Literal('1')))),
++             ('ID_PDA', Or((Literal('0'), Literal('1')))),
+              ('ID_INPUT', Or((Literal('0'), Literal('1')))),
+              ('ID_INPUT_ACCELEROMETER', Or((Literal('0'), Literal('1')))),
+              ('ID_INPUT_JOYSTICK', Or((Literal('0'), Literal('1')))),
diff --git a/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch b/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch
new file mode 100644
index 0000000..a5f1eef
--- /dev/null
+++ b/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch
@@ -0,0 +1,41 @@
+From 5d3c35c19083053128ec2c48e6393c2a9803d57e Mon Sep 17 00:00:00 2001
+From: Dorian Clay <dorian@dorianclay.com>
+Date: Sun, 30 Jan 2022 11:50:09 -0800
+Subject: [PATCH] hwdb: add support for Surface Laptop 2 & 3 (#22303)
+
+(cherry picked from commit 156d01b9ca4cb6d7b3877a3db7d20ed600dc40c0)
+
+Related: #2087778
+---
+ hwdb.d/60-evdev.hwdb | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
+index f896dde357..9fcb4a3ddf 100644
+--- a/hwdb.d/60-evdev.hwdb
++++ b/hwdb.d/60-evdev.hwdb
+@@ -591,6 +591,24 @@ evdev:name:MSFT0001:02 04F3:304B Touchpad:dmi:*svnLENOVO:*pvrLenovoLegionY9000X2
+  EVDEV_ABS_35=::31
+  EVDEV_ABS_36=::30
+ 
++#########################################
++# Microsoft
++#########################################
++
++# Surface Laptop 2 (13")
++evdev:name:Microsoft Surface 045E:0933 Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop2**
++ EVDEV_ABS_00=::38
++ EVDEV_ABS_01=::38
++ EVDEV_ABS_35=::38
++ EVDEV_ABS_36=::38
++
++# Surface Laptop 3 (15")
++evdev:name:Microsoft Surface 045E:09AF Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop3**
++ EVDEV_ABS_00=::39
++ EVDEV_ABS_01=::37
++ EVDEV_ABS_35=::39
++ EVDEV_ABS_36=::37
++
+ #########################################
+ # NEWYES
+ #########################################
diff --git a/SOURCES/0283-hwdb-add-HP-calculators.patch b/SOURCES/0283-hwdb-add-HP-calculators.patch
new file mode 100644
index 0000000..fdbee4d
--- /dev/null
+++ b/SOURCES/0283-hwdb-add-HP-calculators.patch
@@ -0,0 +1,38 @@
+From e193ca5f8828301fe569e28938f10fce3af5fcd3 Mon Sep 17 00:00:00 2001
+From: Davide Cavalca <davide@cavalca.name>
+Date: Thu, 3 Feb 2022 08:35:35 -0800
+Subject: [PATCH] hwdb: add HP calculators
+
+(cherry picked from commit 2b560c6e545346e9791962e37361ca044fca036e)
+
+Related: #2087778
+---
+ hwdb.d/70-pda.hwdb | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/70-pda.hwdb b/hwdb.d/70-pda.hwdb
+index e122acca6f..3fdb4efcdd 100644
+--- a/hwdb.d/70-pda.hwdb
++++ b/hwdb.d/70-pda.hwdb
+@@ -4,9 +4,20 @@
+ # the seat owner.
+ #
+ # Permitted keys:
+-#   Specify if a device is a signal analyzer
++#   Specify if a device is a handheld
+ #   ID_PDA=1|0
+ 
++###########################################################
++# HP Inc.
++###########################################################
++# HP x9G+ Calculator
++usb:v03F0p0121*
++ ID_PDA=1
++
++# HP Prime
++usb:v03F0p1541*
++ ID_PDA=1
++
+ ###########################################################
+ # Texas Instruments
+ ###########################################################
diff --git a/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch b/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch
new file mode 100644
index 0000000..eaf8dcd
--- /dev/null
+++ b/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch
@@ -0,0 +1,29 @@
+From 6b2ea92e5d8c4888b33a2d9f21b830933132d513 Mon Sep 17 00:00:00 2001
+From: Matt Walton <matthew@nyrs.com>
+Date: Fri, 4 Feb 2022 11:47:08 -0600
+Subject: [PATCH] hwbd: 60-sensor.hwdb: Add Pipo W2Pro
+
+Add accelerometer matrix for Pipo W2Pro tablet. Y-axis was backwards (normal <--> bottom-up).
+
+(cherry picked from commit ec82f867eea000921fa0f93a9adf1f8fd7bfe2c5)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index c4ee7e0c7b..ea278913bc 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -751,6 +751,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnPEAQ:pnPEAQPMMC1010MD99187:*
+ sensor:modalias:acpi:KIOX000A*:dmi:*:svnPIPO:pnW2S:*
+  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
++# Pipo W2Pro
++sensor:modalias:acpi:KIOX0008*:dmi:*svnPIPO:pnW2pro:*
++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
++
+ # Pipo W4
+ sensor:modalias:acpi:SMO8500*:dmi:*:bvrV8L_WIN32_CHIPHD_*_DX:*:rvnAMICorporation:rnAptioCRB:*
+  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
diff --git a/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch b/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch
new file mode 100644
index 0000000..4563435
--- /dev/null
+++ b/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch
@@ -0,0 +1,51 @@
+From e8de40fbfab79cc86729e13b924251c1af8567ba Mon Sep 17 00:00:00 2001
+From: Lubomir Rintel <lkundrak@v3.sk>
+Date: Sun, 22 Jul 2018 00:25:51 +0200
+Subject: [PATCH] hwdb: 60-keyboard: Support the buttons on CZC P10T tablet
+
+The machine has tree buttons connected to an EC that acts as a regular
+AT-compatible keyboard controller. It can be either in "Windows 7" or
+"Android" mode. It boots up with the earlier, but the Android build on
+the tablet switches it on bootup (Windows presumably leaves it as-is).
+
+The "Windows 7" mode, the behavior is very inconvenient: the Home button
+emits multiple key presses that presumably do something in Windws 7 while
+the second button toggles the RF Kill Switch in addition to producing a
+scancode (it's labeled "Back" on Android version of the tablet).
+
+The "Android" mode just sends the good ol' scan codes and this patch
+handles them. On mainline Linux, the "x86-android-tablets" driver makes
+sure we're in the correct mode.
+
+(cherry picked from commit f2f11dfbb7f30d279ab3c9b3c84de5496407112d)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 3d6e56983b..66561eac35 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -1891,6 +1891,20 @@ evdev:input:b0003v1038p0310*
+  KEYBOARD_KEY_7002f=f11
+  KEYBOARD_KEY_70046=f6
+ 
++###########################################################
++# CZC
++###########################################################
++
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCZC:pnODEON*TPC-10:*
++ KEYBOARD_KEY_01=leftmeta                               # Home button held for 2s
++ KEYBOARD_KEY_db=prog1                                  # Home button
++ KEYBOARD_KEY_dd=rfkill                                 # Second button labeled Wi-Fi
++
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:*
++ KEYBOARD_KEY_01=leftmeta                               # Home button held for 2s
++ KEYBOARD_KEY_db=prog1                                  # Home button
++ KEYBOARD_KEY_dd=back                                   # Second button labeled Back
++
+ ###########################################################
+ # Other
+ ###########################################################
diff --git a/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch b/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch
new file mode 100644
index 0000000..e65ccd6
--- /dev/null
+++ b/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch
@@ -0,0 +1,33 @@
+From 67137663f67afa6c7ba9ef29f9b9c2e9288bb0bd Mon Sep 17 00:00:00 2001
+From: prumian <100143890+prumian@users.noreply.github.com>
+Date: Tue, 22 Feb 2022 07:47:39 +0100
+Subject: [PATCH] hwdb: add CST Laser Trackball (#22583)
+
+Set the default to 800DPI as this is what user manual suggests.
+
+(cherry picked from commit d9ab110ddc453cac40a0b36cee5e5dc272e7aec7)
+
+Related: #2087778
+---
+ hwdb.d/70-mouse.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
+index 66e74f667c..723d145e34 100644
+--- a/hwdb.d/70-mouse.hwdb
++++ b/hwdb.d/70-mouse.hwdb
+@@ -166,6 +166,14 @@ mouse:bluetooth:v05acp030d:name:*:*
+ mouse:usb:v04f2p0963:name:Chicony 2.4G Multimedia Wireless Kit:*
+  MOUSE_DPI=1000@142
+ 
++##########################################
++# CST
++##########################################
++
++# CST Laser Trackball
++mouse:usb:v5332p1400:name:Clearly Superior Technologies. CST Laser Trackball:*
++ MOUSE_DPI=400@1000 *800@1000 1600@1000
++
+ ##########################################
+ # Dell
+ ##########################################
diff --git a/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch b/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch
new file mode 100644
index 0000000..1ffad30
--- /dev/null
+++ b/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch
@@ -0,0 +1,27 @@
+From 1730fc33578270d9ee83aec116d014333aacb67f Mon Sep 17 00:00:00 2001
+From: Lan Tian <xuyh0120@outlook.com>
+Date: Tue, 22 Feb 2022 01:43:32 -0600
+Subject: [PATCH] hwdb: Force release calculator key on all HP OMEN laptops
+
+(cherry picked from commit 70920214b6a1c1825a2724793497e6be2ba3c0fc)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 66561eac35..2606d0b66c 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -719,8 +719,8 @@ evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnHewlett-Packard:pnHPStr
+ evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
+  KEYBOARD_KEY_0=unknown
+ 
+-# HP Omen 15
+-evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMENLaptop15*:pvr*
++# HP Omen
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMEN*:pvr*
+  KEYBOARD_KEY_a1=!calc
+ 
+ ##########################################################
diff --git a/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch b/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch
new file mode 100644
index 0000000..c5ee0ad
--- /dev/null
+++ b/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch
@@ -0,0 +1,36 @@
+From ce32478594b4afc26c91ed63eb17c65ca988158c Mon Sep 17 00:00:00 2001
+From: 4piu <16668056+4piu@users.noreply.github.com>
+Date: Mon, 7 Mar 2022 16:38:08 +0800
+Subject: [PATCH] Add support for NEC VersaPro VG-S
+
+The brightness control key (Fn+F7 Fn+F8) and touchpad toggle key (Fn + Space) do not work on the NEC VersaPro VG-S laptop. Add the keycode to fix the problem.
+
+(cherry picked from commit 19a04e807129e7790a0f2950cf67d79fe0df85cb)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 2606d0b66c..73b26089ab 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -1345,6 +1345,17 @@ evdev:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][a
+  KEYBOARD_KEY_0213=f22
+  KEYBOARD_KEY_0214=f23
+ 
++##########################################
++# NEC
++##########################################
++
++# VersaPro VG-S
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNEC:pnPC-VK22TGSGS:pvr*
++ KEYBOARD_KEY_a8=f21                                    # Fn+Space touchpad toggle
++ KEYBOARD_KEY_67=brightnessdown                         # Fn+F7 brightness down
++ KEYBOARD_KEY_65=brightnessup                           # Fn+F8 brightness up
++ KEYBOARD_KEY_71=battery                                # Fn+F4 ECO
++
+ ###########################################################
+ # Olimex
+ ###########################################################
diff --git a/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch b/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch
new file mode 100644
index 0000000..7419d46
--- /dev/null
+++ b/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch
@@ -0,0 +1,29 @@
+From ecf8c93eb9f181822c277746c729ab1545079c7d Mon Sep 17 00:00:00 2001
+From: tawefogo <101180464+tawefogo@users.noreply.github.com>
+Date: Tue, 8 Mar 2022 15:10:51 +0100
+Subject: [PATCH] Fix mic mute on Acer TravelMate B311-31 (#22677)
+
+(cherry picked from commit 6c5f368646c5de893d5cf05eb9a4a3892bc8228d)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 73b26089ab..780ed6183e 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -164,6 +164,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:*
+  KEYBOARD_KEY_ef=kbdillumup                             # Fn+F10
+  KEYBOARD_KEY_f0=kbdillumdown                           # Fn+F9
+ 
++# Travelmate B311-31, B311R-31, B311RN-31
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr*
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr*
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
++ KEYBOARD_KEY_8a=f20                                    # Microphone mute
++
+ # Travelmate C300
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
+  KEYBOARD_KEY_67=f24                                    # FIXME: rotate screen
diff --git a/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch b/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch
new file mode 100644
index 0000000..3093d6b
--- /dev/null
+++ b/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch
@@ -0,0 +1,196 @@
+From 41d06ed98ecbe4f65cfffc3877fbe4c87fadc6b4 Mon Sep 17 00:00:00 2001
+From: Be <be@mixxx.org>
+Date: Fri, 27 Aug 2021 22:30:50 -0500
+Subject: [PATCH] Add AV production controllers to hwdb and add uaccess
+
+This adds support for AV production controller devices, such
+as DJ tables, music-oriented key pads, and others.
+
+The USB vendor and product IDs come from Mixxx, Ctlra, and
+Ardour.
+
+Fixes #20533
+
+Co-developed-by: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+(cherry picked from commit f2c36c0e2445fa95ba109017d4b768b2fd825c43)
+
+Related: #2087778
+---
+ hwdb.d/70-av-production.hwdb  | 123 ++++++++++++++++++++++++++++++++++
+ hwdb.d/meson.build            |   1 +
+ hwdb.d/parse_hwdb.py          |   1 +
+ src/login/70-uaccess.rules.in |   9 +++
+ 4 files changed, 134 insertions(+)
+ create mode 100644 hwdb.d/70-av-production.hwdb
+
+diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb
+new file mode 100644
+index 0000000000..17ac1b4fb6
+--- /dev/null
++++ b/hwdb.d/70-av-production.hwdb
+@@ -0,0 +1,123 @@
++# This file is part of systemd.
++#
++# Database for AV production controllers that should be accessible to the seat owner.
++#
++# This covers DJ tables, and music-oriented key pads
++#
++# To add local entries, copy this file to
++#   /etc/udev/hwdb.d/
++# and add your rules there. To load the new rules execute (as root):
++#   systemd-hwdb update
++#   udevadm trigger
++
++################
++# Ableton
++################
++# Push 2
++usb:v2982p1967*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++################
++# Eks
++################
++# Otus
++usb:v1157p0300*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++#############################
++# Hercules (Guillemot Corp)
++#############################
++# DJ Console MP3e2
++usb:v06F8pB105*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# DJ Console MP3 LE / Glow
++usb:v06F8pB120*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# DJ Console Mk2
++usb:v06F8pB100*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# DJ Console Mk4
++usb:v06F8pB107*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++#####################
++# Native Instruments
++#####################
++
++# Maschine 2
++usb:v17CCp1140*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Maschine 2 Mikro
++usb:v17CCp1110*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Maschine 2 Studio
++usb:v17CCp1300*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Maschine Jam
++usb:v17CCp1500*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Maschine 3
++usb:v17CCp1600*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol D2
++usb:v17CCp1400*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol F1
++usb:v17CCp1120*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S2 Mk2
++usb:v17CCp1320*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S2 Mk3
++usb:v17CCp1710*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S3
++usb:v17CCp1900*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S4 Mk2
++usb:v17CCp1310*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S4 Mk3
++usb:v17CCp1720*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S5
++usb:v17CCp1420*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol S8
++usb:v17CCp1370*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol X1 Mk2
++usb:v17CCp1220*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol Z1
++usb:v17CCp1210*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Traktor Kontrol Z2
++usb:v17CCp1130*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++####################
++# Pioneer
++####################
++# CDJ 2000 NXS 2
++usb:v2B73p0005*
++ ID_AV_PRODUCTION_CONTROLLER=1
+diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build
+index fc72ebb2bd..8f6a8a4486 100644
+--- a/hwdb.d/meson.build
++++ b/hwdb.d/meson.build
+@@ -28,6 +28,7 @@ hwdb_files_test = files('''
+         60-seat.hwdb
+         60-sensor.hwdb
+         70-analyzers.hwdb
++        70-av-production.hwdb
+         70-cameras.hwdb
+         70-joystick.hwdb
+         70-mouse.hwdb
+diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
+index 194a71ac08..93179b675c 100755
+--- a/hwdb.d/parse_hwdb.py
++++ b/hwdb.d/parse_hwdb.py
+@@ -135,6 +135,7 @@ def property_grammar():
+              ('MOUSE_WHEEL_CLICK_COUNT', INTEGER),
+              ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER),
+              ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
++             ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
+              ('ID_PERSIST', Or((Literal('0'), Literal('1')))),
+              ('ID_PDA', Or((Literal('0'), Literal('1')))),
+              ('ID_INPUT', Or((Literal('0'), Literal('1')))),
+diff --git a/src/login/70-uaccess.rules.in b/src/login/70-uaccess.rules.in
+index 052194b6c9..a3301be1bc 100644
+--- a/src/login/70-uaccess.rules.in
++++ b/src/login/70-uaccess.rules.in
+@@ -87,4 +87,13 @@ ENV{ID_SIGNAL_ANALYZER}=="?*", ENV{DEVTYPE}=="usb_device", TAG+="uaccess"
+ # rfkill / radio killswitches
+ KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess"
+ 
++# AV production controllers
++# Most of these devices use HID for the knobs, faders, buttons, encoders, and jog wheels.
++SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
++
++# Some devices use vendor defined protocols on USB Bulk endpoints for controllers.
++# Other devices transfer graphics to screens on the device through USB Bulk endpoints.
++# This also allows accessing HID devices with the libusb backend of hidapi.
++SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
++
+ LABEL="uaccess_end"
diff --git a/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch b/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch
new file mode 100644
index 0000000..691a613
--- /dev/null
+++ b/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch
@@ -0,0 +1,65 @@
+From 3467ee329568bf6a1b37de9c37ba914adf436291 Mon Sep 17 00:00:00 2001
+From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+Date: Mon, 14 Mar 2022 10:50:45 -0300
+Subject: [PATCH] hwdb: Add AV production access to Elgado Stream Deck devices
+
+The Stream Deck products from Elgato are simple key pads
+intended to be used as macro pads. They're popular within
+the streaming community.
+
+This commit adds all 5 Stream Deck variants available to
+the AV production file.
+
+See https://www.elgato.com/en/stream-deck
+
+(cherry picked from commit e982320b44486b26c4d39f7c81012f6a0e2aaf77)
+
+Related: #2087778
+---
+ hwdb.d/70-av-production.hwdb | 26 +++++++++++++++++++++++++-
+ 1 file changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb
+index 17ac1b4fb6..a13d6981eb 100644
+--- a/hwdb.d/70-av-production.hwdb
++++ b/hwdb.d/70-av-production.hwdb
+@@ -2,7 +2,8 @@
+ #
+ # Database for AV production controllers that should be accessible to the seat owner.
+ #
+-# This covers DJ tables, and music-oriented key pads
++# This covers DJ tables, music-oriented key pads, and streaming-oriented key pads
++# such as Elgato Stream Deck
+ #
+ # To add local entries, copy this file to
+ #   /etc/udev/hwdb.d/
+@@ -24,6 +25,29 @@ usb:v2982p1967*
+ usb:v1157p0300*
+  ID_AV_PRODUCTION_CONTROLLER=1
+ 
++################
++# Elgato
++################
++# Stream Deck Original (gen 1)
++usb:v0FD9p0060*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Stream Deck Mini
++usb:v0FD9p0063*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Stream Deck XL
++usb:v0FD9p006C*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Stream Deck Original (gen 2)
++usb:v0FD9p006D*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
++# Stream Deck MK.2
++usb:v0FD9p0080*
++ ID_AV_PRODUCTION_CONTROLLER=1
++
+ #############################
+ # Hercules (Guillemot Corp)
+ #############################
diff --git a/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch b/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch
new file mode 100644
index 0000000..a0bfbbb
--- /dev/null
+++ b/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch
@@ -0,0 +1,35 @@
+From aaca6dc45b898607afea3bf3d50ba7120458b054 Mon Sep 17 00:00:00 2001
+From: AlexCatze <samsung5552015.st@gmail.com>
+Date: Fri, 18 Mar 2022 14:45:43 +0200
+Subject: [PATCH] Add HP Elitebook 2760p support (#22766)
+
+(cherry picked from commit 1a34f913a6cfa22abfb6b3f69e2ba20112e19d87)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 780ed6183e..eeadd1a059 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -602,6 +602,18 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:*
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:*
+  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
+ 
++# Elitebook 2760p
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
++ KEYBOARD_KEY_89=battery                                # Fn+F8
++ KEYBOARD_KEY_f8=unknown                                # rfkill is also reported by HP Wireless hotkeys
++ KEYBOARD_KEY_86=volumeup
++ KEYBOARD_KEY_87=volumedown
++ KEYBOARD_KEY_92=brightnessdown
++ KEYBOARD_KEY_97=brightnessup
++ KEYBOARD_KEY_d8=!f23                                   # touchpad off
++ KEYBOARD_KEY_d9=!f22                                   # touchpad on
++ KEYBOARD_KEY_b3=unknown                                # FIXME: Auto brightness
++
+ # TX2
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:*
+  KEYBOARD_KEY_c2=media
diff --git a/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch b/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch
new file mode 100644
index 0000000..4646e72
--- /dev/null
+++ b/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch
@@ -0,0 +1,30 @@
+From bfb6b8e75721c0d56d3a9ea8561f50f0f820b8a3 Mon Sep 17 00:00:00 2001
+From: Andy Chi <andy.chi@canonical.com>
+Date: Tue, 29 Mar 2022 15:36:13 +0800
+Subject: [PATCH] hwdb: Add mic mute key mapping for HP Elite x360
+
+On the new Elite x360 2 in 1 HP laptops, the microphone mute hotkey is "Fn+F8" and
+the scancode for this hotkey is 0x81, but this scancode was mapped to
+fn_esc in the HP generic keymap section. To fix this problem, we add
+a machine specific keymap section to add the correct keymap rule.
+
+(cherry picked from commit f09f6dc2c8f59b2b58159cc413b605a547c8646e)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index eeadd1a059..c196a1fd64 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -651,6 +651,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPLicrice:*
+ # HP EliteBook
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBook*:*
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook*:*
++# HP Elite x360
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPElite*x360*:*
+ # HP Elite Dragonfly
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonfly*:*
+ # HP ProBook 440 G2
diff --git a/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch b/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch
new file mode 100644
index 0000000..77c475b
--- /dev/null
+++ b/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch
@@ -0,0 +1,73 @@
+From 72d3b0c995403293f65ee9a47043ebd2fdafc1cd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 29 Mar 2022 12:17:51 +0200
+Subject: [PATCH] hwdb: fix parser to work with newer pyparsing
+
+The handling of whitespace in pyparsing is a bother. There's some
+global state, and per-element state, and it's hard to get a handle on
+things. With python3-pyparsing-2.4.7-10.fc36.noarch the grammar would
+not match. After handling of tabs was fixed to not accept duplicate tabs,
+the grammar passes.
+
+It seems that the entry for usb:v8087p8087*
+was generated incorrectly because we treated the interface line
+(with two TABs) as a device line (with one TAB).
+
+(cherry picked from commit f73d6895872cb9caffc523e1eddc53c9b98cfdec)
+
+Related: #2087778
+---
+ hwdb.d/20-usb-vendor-model.hwdb |  3 ---
+ hwdb.d/ids_parser.py            | 10 ++++++++--
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index f40a3947c7..9f457d9f65 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -69815,9 +69815,6 @@ usb:v8087p8008*
+ usb:v8087p800A*
+  ID_MODEL_FROM_DATABASE=Hub
+ 
+-usb:v8087p8087*
+- ID_MODEL_FROM_DATABASE=07da  Centrino Advanced-N 6235
+-
+ usb:v80EE*
+  ID_VENDOR_FROM_DATABASE=VirtualBox
+ 
+diff --git a/hwdb.d/ids_parser.py b/hwdb.d/ids_parser.py
+index 0ce79cd97e..811c12559b 100755
+--- a/hwdb.d/ids_parser.py
++++ b/hwdb.d/ids_parser.py
+@@ -6,7 +6,7 @@ import sys
+ from pyparsing import (Word, White, Literal, Regex,
+                        LineEnd, SkipTo,
+                        ZeroOrMore, OneOrMore, Combine, Optional, Suppress,
+-                       Group,
++                       Group, ParserElement,
+                        stringEnd, pythonStyleComment)
+ 
+ EOL = LineEnd().suppress()
+@@ -20,6 +20,8 @@ COMMENTLINE = pythonStyleComment + EOL
+ EMPTYLINE = LineEnd()
+ text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL
+ 
++ParserElement.set_default_whitespace_chars(' \n')
++
+ def klass_grammar():
+     klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text')
+     subclass_line = TAB + NUM2('subclass') + text_eol('text')
+@@ -35,8 +37,12 @@ def klass_grammar():
+ def usb_ids_grammar():
+     vendor_line = NUM4('vendor') + text_eol('text')
+     device_line = TAB + NUM4('device') + text_eol('text')
++    interface_line = TAB + TAB + NUM4('interface') + NUM4('interface2') + text_eol('text')
++    device = (device_line +
++              ZeroOrMore(Group(interface_line)
++                         ^ COMMENTLINE.suppress()))
+     vendor = (vendor_line('VENDOR') +
+-              ZeroOrMore(Group(device_line)('VENDOR_DEV*') ^ COMMENTLINE.suppress()))
++              ZeroOrMore(Group(device)('VENDOR_DEV*') ^ COMMENTLINE.suppress()))
+ 
+     klass = klass_grammar()
+ 
diff --git a/SOURCES/0295-hwdb-update-for-v251.patch b/SOURCES/0295-hwdb-update-for-v251.patch
new file mode 100644
index 0000000..0dd6528
--- /dev/null
+++ b/SOURCES/0295-hwdb-update-for-v251.patch
@@ -0,0 +1,16379 @@
+From dec0bd75d3163e45086825bb28b99fce94b8c8d3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 9 Dec 2021 11:05:15 +0100
+Subject: [PATCH] hwdb: update for v251
+
+As usual, there are mostly additions of new entries, and some spelling
+correction and company renames, no big removals.
+
+(cherry picked from commit c53e6f641eb763e9cb7762c106d8ce000591000e)
+
+Related: #2087778
+---
+ hwdb.d/20-OUI.hwdb               | 2415 ++++++++++++++++++-
+ hwdb.d/20-acpi-vendor.hwdb       |   18 +
+ hwdb.d/20-acpi-vendor.hwdb.patch |   98 +-
+ hwdb.d/20-pci-classes.hwdb       |    2 +-
+ hwdb.d/20-pci-vendor-model.hwdb  |  724 +++++-
+ hwdb.d/20-usb-vendor-model.hwdb  |   94 +-
+ hwdb.d/acpi_id_registry.html     |    3 +
+ hwdb.d/ma-large.txt              | 3713 +++++++++++++++++++++++++++---
+ hwdb.d/ma-medium.txt             |  998 +++++++-
+ hwdb.d/ma-small.txt              |  966 +++++++-
+ hwdb.d/pci.ids                   |  300 ++-
+ hwdb.d/pnp_id_registry.html      |    3 +
+ hwdb.d/usb.ids                   |   51 +-
+ 13 files changed, 8782 insertions(+), 603 deletions(-)
+
+diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
+index a97406d45d..4b8f83cc99 100644
+--- a/hwdb.d/20-OUI.hwdb
++++ b/hwdb.d/20-OUI.hwdb
+@@ -573,7 +573,7 @@ OUI:0000BC*
+  ID_OUI_FROM_DATABASE=Rockwell Automation
+ 
+ OUI:0000BD*
+- ID_OUI_FROM_DATABASE=Mitsubishi Cable Industries, Ltd. / Ryosei Systems
++ ID_OUI_FROM_DATABASE=RYOSEI, Ltd.
+ 
+ OUI:0000BE*
+  ID_OUI_FROM_DATABASE=THE NTI GROUP
+@@ -10413,7 +10413,7 @@ OUI:000DA8*
+  ID_OUI_FROM_DATABASE=Teletronics Technology Corporation
+ 
+ OUI:000DA9*
+- ID_OUI_FROM_DATABASE=T.E.A.M. S.L.
++ ID_OUI_FROM_DATABASE=INGETEAM
+ 
+ OUI:000DAA*
+  ID_OUI_FROM_DATABASE=S.A.Tehnology co.,Ltd.
+@@ -11922,7 +11922,7 @@ OUI:000F9F*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+ OUI:000FA0*
+- ID_OUI_FROM_DATABASE=CANON KOREA BUSINESS SOLUTIONS INC.
++ ID_OUI_FROM_DATABASE=Canon Korea Inc.
+ 
+ OUI:000FA1*
+  ID_OUI_FROM_DATABASE=Gigabit Systems Inc.
+@@ -14187,7 +14187,7 @@ OUI:001292*
+  ID_OUI_FROM_DATABASE=Griffin Technology
+ 
+ OUI:001293*
+- ID_OUI_FROM_DATABASE=ABB Power Protection (CH)
++ ID_OUI_FROM_DATABASE=ABB Switzerland Ltd.
+ 
+ OUI:001294*
+  ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC
+@@ -14961,7 +14961,7 @@ OUI:001394*
+  ID_OUI_FROM_DATABASE=Infohand Co.,Ltd
+ 
+ OUI:001395*
+- ID_OUI_FROM_DATABASE=congatec AG
++ ID_OUI_FROM_DATABASE=congatec GmbH
+ 
+ OUI:001396*
+  ID_OUI_FROM_DATABASE=Acbel Polytech Inc.
+@@ -15054,7 +15054,7 @@ OUI:0013B3*
+  ID_OUI_FROM_DATABASE=Ecom Communications Technology Co., Ltd.
+ 
+ OUI:0013B4*
+- ID_OUI_FROM_DATABASE=Appear TV
++ ID_OUI_FROM_DATABASE=Appear AS
+ 
+ OUI:0013B5*
+  ID_OUI_FROM_DATABASE=Wavesat
+@@ -17307,7 +17307,7 @@ OUI:0016A2*
+  ID_OUI_FROM_DATABASE=CentraLite Systems, Inc.
+ 
+ OUI:0016A3*
+- ID_OUI_FROM_DATABASE=Ingeteam Transmission&Distribution, S.A.
++ ID_OUI_FROM_DATABASE=INGETEAM
+ 
+ OUI:0016A4*
+  ID_OUI_FROM_DATABASE=Ezurio Ltd
+@@ -29529,7 +29529,7 @@ OUI:0025C9*
+  ID_OUI_FROM_DATABASE=SHENZHEN HUAPU DIGITAL CO., LTD
+ 
+ OUI:0025CA*
+- ID_OUI_FROM_DATABASE=LS Research, LLC
++ ID_OUI_FROM_DATABASE=Laird Connectivity
+ 
+ OUI:0025CB*
+  ID_OUI_FROM_DATABASE=Reiner SCT
+@@ -29700,7 +29700,7 @@ OUI:002603*
+  ID_OUI_FROM_DATABASE=Shenzhen Wistar Technology Co., Ltd
+ 
+ OUI:002604*
+- ID_OUI_FROM_DATABASE=Audio Processing Technology Ltd
++ ID_OUI_FROM_DATABASE=WorldCast Systems
+ 
+ OUI:002605*
+  ID_OUI_FROM_DATABASE=CC Systems AB
+@@ -35768,6 +35768,9 @@ OUI:009569*
+ OUI:0097FF*
+  ID_OUI_FROM_DATABASE=Heimann Sensor GmbH
+ 
++OUI:00991D*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:009ACD*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -36563,6 +36566,9 @@ OUI:00A0FF*
+ OUI:00A1DE*
+  ID_OUI_FROM_DATABASE=ShenZhen ShiHua Technology CO.,LTD
+ 
++OUI:00A265*
++ ID_OUI_FROM_DATABASE=M2Motive Technology Inc.
++
+ OUI:00A289*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -36593,6 +36599,9 @@ OUI:00A45F*
+ OUI:00A509*
+  ID_OUI_FROM_DATABASE=WigWag Inc.
+ 
++OUI:00A554*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:00A5BF*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -37694,6 +37703,9 @@ OUI:00CB00*
+ OUI:00CB51*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:00CB7A*
++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
++
+ OUI:00CBB4*
+  ID_OUI_FROM_DATABASE=SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
+ 
+@@ -38507,6 +38519,9 @@ OUI:00D318*
+ OUI:00D38D*
+  ID_OUI_FROM_DATABASE=Hotel Technology Next Generation
+ 
++OUI:00D49E*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:00D632*
+  ID_OUI_FROM_DATABASE=GE Energy
+ 
+@@ -39401,6 +39416,9 @@ OUI:00E421*
+ OUI:00E5E4*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+ 
++OUI:00E5F1*
++ ID_OUI_FROM_DATABASE=BUFFALO.INC
++
+ OUI:00E666*
+  ID_OUI_FROM_DATABASE=ARIMA Communications Corp.
+ 
+@@ -39728,6 +39746,9 @@ OUI:0425C5*
+ OUI:0425E0*
+  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+ 
++OUI:0425F0*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:042605*
+  ID_OUI_FROM_DATABASE=GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH
+ 
+@@ -39932,6 +39953,9 @@ OUI:046273*
+ OUI:0462D7*
+  ID_OUI_FROM_DATABASE=ALSTOM HYDRO FRANCE
+ 
++OUI:0463D0*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:0463E0*
+  ID_OUI_FROM_DATABASE=Nome Oy
+ 
+@@ -39944,6 +39968,9 @@ OUI:046785*
+ OUI:046865*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:04698F*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:0469F8*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -40061,6 +40088,9 @@ OUI:047AAE*
+ OUI:047BCB*
+  ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
+ 
++OUI:047C16*
++ ID_OUI_FROM_DATABASE=Micro-Star INTL CO., LTD.
++
+ OUI:047D50*
+  ID_OUI_FROM_DATABASE=Shenzhen Kang Ying Technology Co.Ltd.
+ 
+@@ -40151,6 +40181,9 @@ OUI:0498F3*
+ OUI:0499B9*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:0499BB*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:0499E6*
+  ID_OUI_FROM_DATABASE=Shenzhen Yoostar Technology Co., Ltd
+ 
+@@ -40226,9 +40259,15 @@ OUI:04B466*
+ OUI:04B648*
+  ID_OUI_FROM_DATABASE=ZENNER
+ 
++OUI:04B6BE*
++ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
++
+ OUI:04B86A*
+  ID_OUI_FROM_DATABASE=BSkyB Ltd
+ 
++OUI:04B97D*
++ ID_OUI_FROM_DATABASE=AiVIS Co., Itd.
++
+ OUI:04B9E3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -40241,12 +40280,18 @@ OUI:04BA36*
+ OUI:04BA8D*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:04BAD6*
++ ID_OUI_FROM_DATABASE=D-Link Corporation
++
+ OUI:04BBF9*
+  ID_OUI_FROM_DATABASE=Pavilion Data Systems Inc
+ 
+ OUI:04BC87*
+  ID_OUI_FROM_DATABASE=Shenzhen JustLink Technology Co., LTD
+ 
++OUI:04BC9F*
++ ID_OUI_FROM_DATABASE=Calix Inc.
++
+ OUI:04BD70*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -40517,6 +40562,9 @@ OUI:04E229*
+ OUI:04E2F8*
+  ID_OUI_FROM_DATABASE=AEP Ticketing solutions srl
+ 
++OUI:04E31A*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:04E451*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -40547,6 +40595,9 @@ OUI:04E77E*
+ OUI:04E795*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:04E892*
++ ID_OUI_FROM_DATABASE=SHENNAN CIRCUITS CO.,LTD
++
+ OUI:04E9E5*
+  ID_OUI_FROM_DATABASE=PJRC.COM, LLC
+ 
+@@ -41274,7 +41325,7 @@ OUI:0826AE9*
+  ID_OUI_FROM_DATABASE=Annapurna labs
+ 
+ OUI:0826AEA*
+- ID_OUI_FROM_DATABASE=Flextronics International Kft.
++ ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
+ OUI:0826AEB*
+  ID_OUI_FROM_DATABASE=F-Plus Mobile LLC
+@@ -41318,6 +41369,9 @@ OUI:082FE9*
+ OUI:08306B*
+  ID_OUI_FROM_DATABASE=Palo Alto Networks
+ 
++OUI:0830CE*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:08318B*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -41432,6 +41486,9 @@ OUI:084FA9*
+ OUI:084FF9*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:085104*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:085114*
+  ID_OUI_FROM_DATABASE=QINGDAO TOPSCOMM COMMUNICATION CO., LTD
+ 
+@@ -41891,6 +41948,9 @@ OUI:08E4DF*
+ OUI:08E5DA*
+  ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.
+ 
++OUI:08E63B*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:08E672*
+  ID_OUI_FROM_DATABASE=JEBSEE ELECTRONICS CO.,LTD.
+ 
+@@ -41921,6 +41981,9 @@ OUI:08EB74*
+ OUI:08EBED*
+  ID_OUI_FROM_DATABASE=World Elite Technology Co.,LTD
+ 
++OUI:08EBF6*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:08ECA9*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -42521,12 +42584,18 @@ OUI:0C771A*
+ OUI:0C7A15*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:0C7BC8*
++ ID_OUI_FROM_DATABASE=Cisco Meraki
++
+ OUI:0C7C28*
+  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+ 
+ OUI:0C7D7C*
+  ID_OUI_FROM_DATABASE=Kexiang Information Technology Co, Ltd.
+ 
++OUI:0C7FB2*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:0C8063*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -42575,6 +42644,54 @@ OUI:0C8525*
+ OUI:0C8610*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:0C86290*
++ ID_OUI_FROM_DATABASE=Shanghai Prophet Electronic Technology Co.,Ltd
++
++OUI:0C86291*
++ ID_OUI_FROM_DATABASE=Beijing Qinmu Data Technology Co., Ltd.
++
++OUI:0C86292*
++ ID_OUI_FROM_DATABASE=BADA SYSTEM co., Ltd
++
++OUI:0C86293*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:0C86294*
++ ID_OUI_FROM_DATABASE=Ag Express Electronics
++
++OUI:0C86295*
++ ID_OUI_FROM_DATABASE=Shenzhen protostellar technology Co., Ltd
++
++OUI:0C86296*
++ ID_OUI_FROM_DATABASE=C&A Marketing, INC.
++
++OUI:0C86297*
++ ID_OUI_FROM_DATABASE=HagerEnergy GmbH
++
++OUI:0C86298*
++ ID_OUI_FROM_DATABASE=MyGregor Ltd
++
++OUI:0C86299*
++ ID_OUI_FROM_DATABASE=HONGKONG SAINT TECH INDUSTRIAL LIMITED
++
++OUI:0C8629A*
++ ID_OUI_FROM_DATABASE=Nipron Co.,Ltd
++
++OUI:0C8629B*
++ ID_OUI_FROM_DATABASE=Akribis Systems
++
++OUI:0C8629C*
++ ID_OUI_FROM_DATABASE=SHENZHEN YINGMU TECHNOLOGY.,LTD
++
++OUI:0C8629D*
++ ID_OUI_FROM_DATABASE=BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
++
++OUI:0C8629E*
++ ID_OUI_FROM_DATABASE=FX TECHNOLOGY LIMITED
++
++OUI:0C86C7*
++ ID_OUI_FROM_DATABASE=Jabil Circuit (Guangzhou) Limited
++
+ OUI:0C8910*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -42584,6 +42701,9 @@ OUI:0C8A87*
+ OUI:0C8B7D*
+  ID_OUI_FROM_DATABASE=Vizio, Inc
+ 
++OUI:0C8B95*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:0C8BD3*
+  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+ 
+@@ -42647,6 +42767,9 @@ OUI:0C96CD*
+ OUI:0C96E6*
+  ID_OUI_FROM_DATABASE=Cloud Network Technology (Samoa) Limited
+ 
++OUI:0C975F*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:0C9838*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -42695,6 +42818,9 @@ OUI:0CAAEE*
+ OUI:0CAC05*
+  ID_OUI_FROM_DATABASE=Unitend Technologies Inc.
+ 
++OUI:0CAC8A*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:0CAE7D*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -43127,6 +43253,9 @@ OUI:100645*
+ OUI:1006ED*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:10071D*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:1007230*
+  ID_OUI_FROM_DATABASE=RippleTek Tech Ltd
+ 
+@@ -43274,6 +43403,9 @@ OUI:101F74*
+ OUI:102279*
+  ID_OUI_FROM_DATABASE=ZeroDesktop, Inc.
+ 
++OUI:102407*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:102779*
+  ID_OUI_FROM_DATABASE=Sadel S.p.A.
+ 
+@@ -43436,6 +43568,9 @@ OUI:104A7D*
+ OUI:104B46*
+  ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
+ 
++OUI:104D15*
++ ID_OUI_FROM_DATABASE=Viaanix Inc
++
+ OUI:104D77*
+  ID_OUI_FROM_DATABASE=Innovative Computer Engineering
+ 
+@@ -43466,6 +43601,12 @@ OUI:10521C*
+ OUI:105403*
+  ID_OUI_FROM_DATABASE=INTARSO GmbH
+ 
++OUI:1054D20*
++ ID_OUI_FROM_DATABASE=GIPS Technology Co., Ltd.
++
++OUI:1054D21*
++ ID_OUI_FROM_DATABASE=Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
++
+ OUI:1054D22*
+  ID_OUI_FROM_DATABASE=ComNav Technology Ltd.
+ 
+@@ -43475,6 +43616,12 @@ OUI:1054D23*
+ OUI:1054D24*
+  ID_OUI_FROM_DATABASE=Raylogic Control Systems Private Limited
+ 
++OUI:1054D25*
++ ID_OUI_FROM_DATABASE=Sybersense
++
++OUI:1054D26*
++ ID_OUI_FROM_DATABASE=Lanao Communication Technology Limited
++
+ OUI:1054D27*
+  ID_OUI_FROM_DATABASE=SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+ 
+@@ -43484,6 +43631,9 @@ OUI:1054D28*
+ OUI:1054D29*
+  ID_OUI_FROM_DATABASE=Bamboo Dynamics Corporation., Ltd.
+ 
++OUI:1054D2A*
++ ID_OUI_FROM_DATABASE=Embion B.V.
++
+ OUI:1054D2B*
+  ID_OUI_FROM_DATABASE=Shenzhen Dinstech Technology Co.,Ltd.
+ 
+@@ -43493,6 +43643,9 @@ OUI:1054D2C*
+ OUI:1054D2D*
+  ID_OUI_FROM_DATABASE=Sun wealth technology corporation limited
+ 
++OUI:1054D2E*
++ ID_OUI_FROM_DATABASE=COSMO AIOT TECHNOLOGY CO LTD
++
+ OUI:1055E4*
+  ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 
+@@ -43553,6 +43706,9 @@ OUI:1062E5*
+ OUI:1062EB*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:10634B*
++ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++
+ OUI:1063C8*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -43589,6 +43745,9 @@ OUI:1070FD*
+ OUI:107100*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:1071B3*
++ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
++
+ OUI:1071F9*
+  ID_OUI_FROM_DATABASE=Cloud Telecomputers, LLC
+ 
+@@ -43706,6 +43865,9 @@ OUI:1094BB*
+ OUI:10954B*
+  ID_OUI_FROM_DATABASE=Megabyte Ltd.
+ 
++OUI:10961A*
++ ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
++
+ OUI:109693*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -43757,6 +43919,9 @@ OUI:10A4DA*
+ OUI:10A51D*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:10A562*
++ ID_OUI_FROM_DATABASE=Iton Technology Corp.
++
+ OUI:10A5D0*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+ 
+@@ -43784,6 +43949,9 @@ OUI:10B1DF*
+ OUI:10B1F8*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:10B232*
++ ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd.
++
+ OUI:10B26B*
+  ID_OUI_FROM_DATABASE=base Co.,Ltd.
+ 
+@@ -43940,6 +44108,9 @@ OUI:10D7B0*
+ OUI:10DA43*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
++OUI:10DA49*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:10DC4A*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
+@@ -44003,6 +44174,9 @@ OUI:10DF8B*
+ OUI:10DFFC*
+  ID_OUI_FROM_DATABASE=Siemens AG
+ 
++OUI:10E177*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:10E2D5*
+  ID_OUI_FROM_DATABASE=Qi Hardware Inc.
+ 
+@@ -44051,6 +44225,9 @@ OUI:10EED9*
+ OUI:10F005*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:10F068*
++ ID_OUI_FROM_DATABASE=Ruckus Wireless
++
+ OUI:10F163*
+  ID_OUI_FROM_DATABASE=TNK CO.,LTD
+ 
+@@ -44069,6 +44246,9 @@ OUI:10F49A*
+ OUI:10F605*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:10F60A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:10F681*
+  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+ 
+@@ -44165,6 +44345,9 @@ OUI:141114*
+ OUI:14115D*
+  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
+ 
++OUI:14130B*
++ ID_OUI_FROM_DATABASE=Garmin International
++
+ OUI:141330*
+  ID_OUI_FROM_DATABASE=Anakreon UK LLP
+ 
+@@ -44318,6 +44501,9 @@ OUI:142C78*
+ OUI:142D27*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:142D4D*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:142D8B*
+  ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
+ 
+@@ -44405,6 +44591,9 @@ OUI:144319*
+ OUI:14444A*
+  ID_OUI_FROM_DATABASE=Apollo Seiko Ltd.
+ 
++OUI:14448F*
++ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
++
+ OUI:144658*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -44546,6 +44735,9 @@ OUI:145A83*
+ OUI:145AFC*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
++OUI:145BB9*
++ ID_OUI_FROM_DATABASE=ConMet
++
+ OUI:145BD1*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -44603,6 +44795,9 @@ OUI:147373*
+ OUI:147411*
+  ID_OUI_FROM_DATABASE=RIM
+ 
++OUI:14755B*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:147590*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -44693,6 +44888,9 @@ OUI:14942F*
+ OUI:149448*
+  ID_OUI_FROM_DATABASE=BLU CASTLE S.A.
+ 
++OUI:14946C*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:1495CE*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -44717,6 +44915,9 @@ OUI:149B2F*
+ OUI:149BD7*
+  ID_OUI_FROM_DATABASE=MULI MUWAI FURNITURE QIDONG CO., LTD
+ 
++OUI:149BF3*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:149D09*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -45023,12 +45224,18 @@ OUI:14EFCF*
+ OUI:14F0C5*
+  ID_OUI_FROM_DATABASE=Xtremio Ltd.
+ 
++OUI:14F287*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:14F28E*
+  ID_OUI_FROM_DATABASE=ShenYang ZhongKe-Allwin Technology Co.LTD
+ 
+ OUI:14F42A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:14F592*
++ ID_OUI_FROM_DATABASE=Shenzhen SDG DONZHI Technology Co., Ltd
++
+ OUI:14F65A*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -45242,6 +45449,9 @@ OUI:18339D*
+ OUI:183451*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:1834AF*
++ ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
++
+ OUI:1835D1*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -45278,6 +45488,9 @@ OUI:183A48*
+ OUI:183BD2*
+  ID_OUI_FROM_DATABASE=BYD Precision Manufacture Company Ltd.
+ 
++OUI:183C98*
++ ID_OUI_FROM_DATABASE=Shenzhen Hengyi Technology Co., LTD
++
+ OUI:183CB7*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -45518,6 +45731,9 @@ OUI:1866DA*
+ OUI:1866E3*
+  ID_OUI_FROM_DATABASE=Veros Systems, Inc.
+ 
++OUI:1866F0*
++ ID_OUI_FROM_DATABASE=Jupiter Systems
++
+ OUI:18673F*
+  ID_OUI_FROM_DATABASE=Hanover Displays Limited
+ 
+@@ -45536,6 +45752,9 @@ OUI:186882*
+ OUI:1868CB*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
++OUI:1869D4*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:1869D8*
+  ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+ 
+@@ -45806,6 +46025,51 @@ OUI:18A3E8*
+ OUI:18A4A9*
+  ID_OUI_FROM_DATABASE=Vanu Inc.
+ 
++OUI:18A59C0*
++ ID_OUI_FROM_DATABASE=Omwave
++
++OUI:18A59C1*
++ ID_OUI_FROM_DATABASE=Cuman
++
++OUI:18A59C2*
++ ID_OUI_FROM_DATABASE=Actiontec Electronics Inc.
++
++OUI:18A59C3*
++ ID_OUI_FROM_DATABASE=Beijing QS Medical Technology Co., Ltd.
++
++OUI:18A59C4*
++ ID_OUI_FROM_DATABASE=IT-1
++
++OUI:18A59C5*
++ ID_OUI_FROM_DATABASE=Thermia AB
++
++OUI:18A59C6*
++ ID_OUI_FROM_DATABASE=INTEGRAL PLUS
++
++OUI:18A59C7*
++ ID_OUI_FROM_DATABASE=ePower Network Solution Co., Ltd.
++
++OUI:18A59C8*
++ ID_OUI_FROM_DATABASE=Residence Control Ltd
++
++OUI:18A59C9*
++ ID_OUI_FROM_DATABASE=estun automation co.,ltd
++
++OUI:18A59CA*
++ ID_OUI_FROM_DATABASE=Erba Lachema s.r.o.
++
++OUI:18A59CB*
++ ID_OUI_FROM_DATABASE=CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
++
++OUI:18A59CC*
++ ID_OUI_FROM_DATABASE=BlueEyes Technology
++
++OUI:18A59CD*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:18A59CE*
++ ID_OUI_FROM_DATABASE=BMC Messsysteme GmbH
++
+ OUI:18A6F7*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -45860,6 +46124,9 @@ OUI:18AF9F*
+ OUI:18B169*
+  ID_OUI_FROM_DATABASE=Sonicwall
+ 
++OUI:18B185*
++ ID_OUI_FROM_DATABASE=Qiao Information Technology (Zhengzhou) Co., Ltd.
++
+ OUI:18B209*
+  ID_OUI_FROM_DATABASE=Torrey Pines Logic, Inc
+ 
+@@ -45890,12 +46157,18 @@ OUI:18B905*
+ OUI:18B96E*
+  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
+ 
++OUI:18BB1C*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:18BB26*
+  ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
+ 
+ OUI:18BB41*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:18BC57*
++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
++
+ OUI:18BC5A*
+  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
+ 
+@@ -45911,6 +46184,9 @@ OUI:18BF1C*
+ OUI:18BFB3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd., Memory Division
+ 
++OUI:18C007*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:18C04D*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
+@@ -46169,6 +46445,9 @@ OUI:18FC26*
+ OUI:18FC9F*
+  ID_OUI_FROM_DATABASE=Changhe Electronics Co., Ltd.
+ 
++OUI:18FD74*
++ ID_OUI_FROM_DATABASE=Routerboard.com
++
+ OUI:18FDCB0*
+  ID_OUI_FROM_DATABASE=Shenzhen Rui jiali Electronic Technology Co. Ltd.
+ 
+@@ -46244,6 +46523,9 @@ OUI:1C08C1*
+ OUI:1C0B52*
+  ID_OUI_FROM_DATABASE=EPICOM S.A
+ 
++OUI:1C0D7D*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:1C0FAF*
+  ID_OUI_FROM_DATABASE=Lucid Vision Labs
+ 
+@@ -46514,6 +46796,9 @@ OUI:1C45C2*
+ OUI:1C472F*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:1C47F6*
++ ID_OUI_FROM_DATABASE=Zhidao Network Technology(Shenzhen) Co.,Ltd
++
+ OUI:1C4840*
+  ID_OUI_FROM_DATABASE=IMS Messsysteme GmbH
+ 
+@@ -46580,6 +46865,51 @@ OUI:1C57D8*
+ OUI:1C57DC*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:1C59740*
++ ID_OUI_FROM_DATABASE=Shenzhen Hanshine Technology Co.Ltd.
++
++OUI:1C59741*
++ ID_OUI_FROM_DATABASE=Logical Infrastructure PTY LTD
++
++OUI:1C59742*
++ ID_OUI_FROM_DATABASE=Chongqing Taishan Cable Co., Ltd
++
++OUI:1C59743*
++ ID_OUI_FROM_DATABASE=Jiangsu Welm Technology Co.,Ltd
++
++OUI:1C59744*
++ ID_OUI_FROM_DATABASE=Syntax technology(tianjin)Co.,LTD
++
++OUI:1C59745*
++ ID_OUI_FROM_DATABASE=Shenzhen Shi Fang Communication Technology Co., Ltd
++
++OUI:1C59746*
++ ID_OUI_FROM_DATABASE=Square Inc.
++
++OUI:1C59747*
++ ID_OUI_FROM_DATABASE=Lynxi Technologies Co.,Ltd.
++
++OUI:1C59748*
++ ID_OUI_FROM_DATABASE=Topway Global Technology Limited
++
++OUI:1C59749*
++ ID_OUI_FROM_DATABASE=Shanghai Laisi Information Technology Co.,Ltd
++
++OUI:1C5974A*
++ ID_OUI_FROM_DATABASE=Council Rock
++
++OUI:1C5974B*
++ ID_OUI_FROM_DATABASE=Beijing Flintec Electronic Technology Co.,Ltd.
++
++OUI:1C5974C*
++ ID_OUI_FROM_DATABASE=King-On Technology Ltd.
++
++OUI:1C5974D*
++ ID_OUI_FROM_DATABASE=Shenzhen Geshem Technology Co Ltd
++
++OUI:1C5974E*
++ ID_OUI_FROM_DATABASE=Globe Tracker ApS
++
+ OUI:1C599B*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -46619,6 +46949,9 @@ OUI:1C60D2*
+ OUI:1C60DE*
+  ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+ 
++OUI:1C61B4*
++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
++
+ OUI:1C62B8*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -46700,6 +47033,9 @@ OUI:1C7508*
+ OUI:1C76CA*
+  ID_OUI_FROM_DATABASE=Terasic Technologies Inc.
+ 
++OUI:1C76F2*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:1C77F6*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
+@@ -47168,6 +47504,9 @@ OUI:1CA0EFE*
+ OUI:1CA2B1*
+  ID_OUI_FROM_DATABASE=ruwido austria gmbh
+ 
++OUI:1CA410*
++ ID_OUI_FROM_DATABASE=Amlogic, Inc.
++
+ OUI:1CA532*
+  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 
+@@ -47249,6 +47588,9 @@ OUI:1CAECB*
+ OUI:1CAF05*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:1CAF4A*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:1CAFF7*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
+@@ -47288,6 +47630,9 @@ OUI:1CBA8C*
+ OUI:1CBBA8*
+  ID_OUI_FROM_DATABASE=OJSC Ufimskiy Zavod Promsvyaz
+ 
++OUI:1CBCEC*
++ ID_OUI_FROM_DATABASE=silex technology, Inc.
++
+ OUI:1CBD0E*
+  ID_OUI_FROM_DATABASE=Amplified Engineering Pty Ltd
+ 
+@@ -47618,6 +47963,9 @@ OUI:200505*
+ OUI:2005E8*
+  ID_OUI_FROM_DATABASE=OOO InProMedia
+ 
++OUI:200889*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:2008ED*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -47669,6 +48017,9 @@ OUI:200A0DE*
+ OUI:200A5E*
+  ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing Co., Ltd.
+ 
++OUI:200B16*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:200BC7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -47978,6 +48329,9 @@ OUI:206432*
+ OUI:2064CB*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
++OUI:2064DE*
++ ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
++
+ OUI:20658E*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -48158,9 +48512,15 @@ OUI:208984*
+ OUI:208986*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:20898A*
++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
++
+ OUI:208B37*
+  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
+ 
++OUI:208BD1*
++ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD.
++
+ OUI:208C47*
+  ID_OUI_FROM_DATABASE=Tenstorrent Inc
+ 
+@@ -48545,6 +48905,9 @@ OUI:20F85E*
+ OUI:20FABB*
+  ID_OUI_FROM_DATABASE=Cambridge Executive Limited
+ 
++OUI:20FADB*
++ ID_OUI_FROM_DATABASE=Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
++
+ OUI:20FDF1*
+  ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+ 
+@@ -48584,6 +48947,9 @@ OUI:2405F5*
+ OUI:2406AA*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
++OUI:2406F2*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:24085D*
+  ID_OUI_FROM_DATABASE=Continental Aftermarket & Services GmbH
+ 
+@@ -48626,6 +48992,9 @@ OUI:240D6C*
+ OUI:240DC2*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
++OUI:240F5E*
++ ID_OUI_FROM_DATABASE=Shenzhen z-router Technology Co., Ltd
++
+ OUI:240F9B*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
+@@ -48704,6 +49073,9 @@ OUI:24169D*
+ OUI:24181D*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
++OUI:2418C0*
++ ID_OUI_FROM_DATABASE=E. Wehrle GmbH
++
+ OUI:2418C6*
+  ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+ 
+@@ -48737,6 +49109,9 @@ OUI:241F2C*
+ OUI:241FA0*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:241FBD*
++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
++
+ OUI:2420C7*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
+@@ -48755,12 +49130,18 @@ OUI:242642*
+ OUI:2426BA*
+  ID_OUI_FROM_DATABASE=Shenzhen Toptel Technology Co., Ltd.
+ 
++OUI:2426D6*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:2428FD*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
+ OUI:2429FE*
+  ID_OUI_FROM_DATABASE=KYOCERA Corporation
+ 
++OUI:242CFE*
++ ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
++
+ OUI:242E02*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -49046,6 +49427,9 @@ OUI:2469A5*
+ OUI:246AAB*
+  ID_OUI_FROM_DATABASE=IT-IS International
+ 
++OUI:246C60*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:246C8A*
+  ID_OUI_FROM_DATABASE=YUKAI Engineering
+ 
+@@ -49070,6 +49454,9 @@ OUI:247260*
+ OUI:2474F7*
+  ID_OUI_FROM_DATABASE=GoPro
+ 
++OUI:24753A*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:247625*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -49346,6 +49733,9 @@ OUI:24CE33*
+ OUI:24CF21*
+  ID_OUI_FROM_DATABASE=Shenzhen State Micro Technology Co., Ltd
+ 
++OUI:24CF24*
++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
++
+ OUI:24D0DF*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -49445,6 +49835,9 @@ OUI:24EA40*
+ OUI:24EB65*
+  ID_OUI_FROM_DATABASE=SAET I.S. S.r.l.
+ 
++OUI:24EBED*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:24EC51*
+  ID_OUI_FROM_DATABASE=ADF Technologies Sdn Bhd
+ 
+@@ -49580,6 +49973,9 @@ OUI:2811A8*
+ OUI:2811EC*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:281293*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:281471*
+  ID_OUI_FROM_DATABASE=Lantis co., LTD.
+ 
+@@ -49856,6 +50252,12 @@ OUI:283B96*
+ OUI:283CE4*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:283DC2*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
++OUI:283E0C*
++ ID_OUI_FROM_DATABASE=Preferred Robotics, Inc.
++
+ OUI:283E76*
+  ID_OUI_FROM_DATABASE=Common Networks
+ 
+@@ -49976,6 +50378,9 @@ OUI:286AB8*
+ OUI:286ABA*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:286B35*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:286C07*
+  ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD
+ 
+@@ -49988,6 +50393,9 @@ OUI:286DCD*
+ OUI:286ED4*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:286F40*
++ ID_OUI_FROM_DATABASE=Tonly Technology Co. Ltd
++
+ OUI:286F7F*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -50000,6 +50408,9 @@ OUI:2872C5*
+ OUI:2872F0*
+  ID_OUI_FROM_DATABASE=ATHENA
+ 
++OUI:2874F5*
++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
++
+ OUI:2875D8*
+  ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+ 
+@@ -50039,6 +50450,9 @@ OUI:288088*
+ OUI:2880A2*
+  ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc.
+ 
++OUI:28827C*
++ ID_OUI_FROM_DATABASE=Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++
+ OUI:288335*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -50135,6 +50549,12 @@ OUI:28A241*
+ OUI:28A24B*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:28A331*
++ ID_OUI_FROM_DATABASE=Sierra Wireless
++
++OUI:28A53F*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:28A574*
+  ID_OUI_FROM_DATABASE=Miller Electric Mfg. Co.
+ 
+@@ -50255,6 +50675,9 @@ OUI:28BD89*
+ OUI:28BE03*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
++OUI:28BE43*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:28BE9B*
+  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+ 
+@@ -50330,6 +50753,9 @@ OUI:28CD4C*
+ OUI:28CD9C*
+  ID_OUI_FROM_DATABASE=Shenzhen Dynamax Software Development Co.,Ltd.
+ 
++OUI:28CDC1*
++ ID_OUI_FROM_DATABASE=Raspberry Pi Trading Ltd
++
+ OUI:28CDC4*
+  ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+ 
+@@ -50537,9 +50963,15 @@ OUI:28F537D*
+ OUI:28F537E*
+  ID_OUI_FROM_DATABASE=Performance Motion Devices
+ 
++OUI:28F5D1*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:28F606*
+  ID_OUI_FROM_DATABASE=Syes srl
+ 
++OUI:28F7D6*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:28FA19*
+  ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+ 
+@@ -50660,6 +51092,9 @@ OUI:2C073C*
+ OUI:2C0786*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:2C07F6*
++ ID_OUI_FROM_DATABASE=SKG Health Technologies Co., Ltd.
++
+ OUI:2C081C*
+  ID_OUI_FROM_DATABASE=OVH
+ 
+@@ -50990,6 +51425,9 @@ OUI:2C3AE8*
+ OUI:2C3AFD*
+  ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+ 
++OUI:2C3B70*
++ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
++
+ OUI:2C3BFD*
+  ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd.
+ 
+@@ -51129,7 +51567,7 @@ OUI:2C54CF*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
+ OUI:2C553C*
+- ID_OUI_FROM_DATABASE=Gainspeed, Inc.
++ ID_OUI_FROM_DATABASE=Vecima Networks Inc.
+ 
+ OUI:2C557C*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+@@ -51188,6 +51626,9 @@ OUI:2C5FF3*
+ OUI:2C600C*
+  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
+ 
++OUI:2C60CD*
++ ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD
++
+ OUI:2C6104*
+  ID_OUI_FROM_DATABASE=SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
+ 
+@@ -51335,6 +51776,9 @@ OUI:2C8065*
+ OUI:2C8158*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:2C8217*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:2C86D2*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -51386,6 +51830,9 @@ OUI:2C9AA4*
+ OUI:2C9D1E*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:2C9D65*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:2C9E5F*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -51428,6 +51875,9 @@ OUI:2CA59C*
+ OUI:2CA780*
+  ID_OUI_FROM_DATABASE=True Technologies Inc.
+ 
++OUI:2CA79E*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:2CA835*
+  ID_OUI_FROM_DATABASE=RIM
+ 
+@@ -51629,6 +52079,9 @@ OUI:2CD974*
+ OUI:2CDB07*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:2CDC78*
++ ID_OUI_FROM_DATABASE=Descartes Systems (USA) LLC
++
+ OUI:2CDCAD*
+  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+ 
+@@ -51713,6 +52166,9 @@ OUI:2CF89B*
+ OUI:2CFAA2*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise
+ 
++OUI:2CFC8B*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:2CFCE4*
+  ID_OUI_FROM_DATABASE=CTEK Sweden AB
+ 
+@@ -51740,6 +52196,9 @@ OUI:2CFFEE*
+ OUI:3003C8*
+  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 
++OUI:30045C*
++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
++
+ OUI:30053F*
+  ID_OUI_FROM_DATABASE=JTI Co.,Ltd.
+ 
+@@ -51980,6 +52439,9 @@ OUI:302952*
+ OUI:3029BE*
+  ID_OUI_FROM_DATABASE=Shanghai MRDcom Co.,Ltd
+ 
++OUI:302BDC*
++ ID_OUI_FROM_DATABASE=Top-Unum Electronics Co., LTD
++
+ OUI:302DE8*
+  ID_OUI_FROM_DATABASE=JDA, LLC (JDA Systems)
+ 
+@@ -52040,9 +52502,15 @@ OUI:303ABA*
+ OUI:303D08*
+  ID_OUI_FROM_DATABASE=GLINTT TES S.A.
+ 
++OUI:303EA7*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:303EAD*
+  ID_OUI_FROM_DATABASE=Sonavox Canada Inc
+ 
++OUI:303F5D*
++ ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA
++
+ OUI:303F7B*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+ 
+@@ -52061,6 +52529,51 @@ OUI:304240*
+ OUI:3042A1*
+  ID_OUI_FROM_DATABASE=ilumisys Inc. DBA Toggled
+ 
++OUI:3043D70*
++ ID_OUI_FROM_DATABASE=SYMES SA
++
++OUI:3043D71*
++ ID_OUI_FROM_DATABASE=Shenzhen juduoping Technology Co.,Ltd
++
++OUI:3043D72*
++ ID_OUI_FROM_DATABASE=Apollo Infoways Private Limited
++
++OUI:3043D73*
++ ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD
++
++OUI:3043D74*
++ ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC
++
++OUI:3043D75*
++ ID_OUI_FROM_DATABASE=Shenzhen Mees Hi-Tech Co., Ltd
++
++OUI:3043D76*
++ ID_OUI_FROM_DATABASE=Sprocomm Technologies Co., Ltd.Guangming Branch
++
++OUI:3043D77*
++ ID_OUI_FROM_DATABASE=DIGICITI Technology Co.,Ltd
++
++OUI:3043D78*
++ ID_OUI_FROM_DATABASE=Kesu (Shanghai) Electronic Technology Co., Ltd
++
++OUI:3043D79*
++ ID_OUI_FROM_DATABASE=PK Solutions LLC
++
++OUI:3043D7A*
++ ID_OUI_FROM_DATABASE=Bodhi
++
++OUI:3043D7B*
++ ID_OUI_FROM_DATABASE=Motec GmbH
++
++OUI:3043D7C*
++ ID_OUI_FROM_DATABASE=Xiaoniu network technology (Shanghai) Co., Ltd.
++
++OUI:3043D7D*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:3043D7E*
++ ID_OUI_FROM_DATABASE=Guangdong Hongqin Telecom  Technology Co. Ltd.
++
+ OUI:304449*
+  ID_OUI_FROM_DATABASE=PLATH GmbH
+ 
+@@ -52301,6 +52814,9 @@ OUI:307CB2*
+ OUI:307ECB*
+  ID_OUI_FROM_DATABASE=SFR
+ 
++OUI:307F10*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:30809B*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
+@@ -52334,6 +52850,9 @@ OUI:308841*
+ OUI:308944*
+  ID_OUI_FROM_DATABASE=DEVA Broadcast Ltd.
+ 
++OUI:30894A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:308976*
+  ID_OUI_FROM_DATABASE=DALIAN LAMBA TECHNOLOGY CO.,LTD
+ 
+@@ -52388,6 +52907,9 @@ OUI:3095E3*
+ OUI:309610*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:30963B*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:3096FB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -52511,6 +53033,9 @@ OUI:30B930*
+ OUI:30B9B0*
+  ID_OUI_FROM_DATABASE=Intracom Asia Co., Ltd
+ 
++OUI:30BB7D*
++ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
++
+ OUI:30BE3B*
+  ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
+ 
+@@ -52541,6 +53066,9 @@ OUI:30C82A*
+ OUI:30C9AB*
+  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 
++OUI:30CB36*
++ ID_OUI_FROM_DATABASE=Belden Singapore Pte. Ltd.
++
+ OUI:30CBC7*
+  ID_OUI_FROM_DATABASE=Cambium Networks Limited
+ 
+@@ -52599,7 +53127,7 @@ OUI:30DF8D*
+  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 
+ OUI:30E090*
+- ID_OUI_FROM_DATABASE=Linctronix Ltd,
++ ID_OUI_FROM_DATABASE=Genevisio Ltd.
+ 
+ OUI:30E171*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+@@ -52625,6 +53153,9 @@ OUI:30E4DB*
+ OUI:30E7BC*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
++OUI:30E8E4*
++ ID_OUI_FROM_DATABASE=Qorvo International Pte. Ltd.
++
+ OUI:30E98E*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -52919,6 +53450,9 @@ OUI:34243E*
+ OUI:34255D*
+  ID_OUI_FROM_DATABASE=Shenzhen Loadcom Technology Co.,Ltd
+ 
++OUI:3425BE*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:342606*
+  ID_OUI_FROM_DATABASE=CarePredict, Inc.
+ 
+@@ -53162,6 +53696,9 @@ OUI:345D10*
+ OUI:345D9E*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:345DA8*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:3460F9*
+  ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+ 
+@@ -53351,6 +53888,9 @@ OUI:348F27*
+ OUI:34916F*
+  ID_OUI_FROM_DATABASE=UserGate Ltd.
+ 
++OUI:3492C2*
++ ID_OUI_FROM_DATABASE=Square Route Co., Ltd.
++
+ OUI:349342*
+  ID_OUI_FROM_DATABASE=TTE Corporation
+ 
+@@ -53456,6 +53996,12 @@ OUI:34AB37*
+ OUI:34AB95*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:34AC11*
++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
++
++OUI:34AD61*
++ ID_OUI_FROM_DATABASE=CELESTICA INC.
++
+ OUI:34ADE4*
+  ID_OUI_FROM_DATABASE=Shanghai Chint Power Systems Co., Ltd.
+ 
+@@ -53513,6 +54059,9 @@ OUI:34BB26*
+ OUI:34BCA6*
+  ID_OUI_FROM_DATABASE=Beijing Ding Qing Technology, Ltd.
+ 
++OUI:34BD20*
++ ID_OUI_FROM_DATABASE=Hangzhou Hikrobot Technology Co., Ltd.
++
+ OUI:34BDC8*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -53585,6 +54134,9 @@ OUI:34CE69*
+ OUI:34CE94*
+  ID_OUI_FROM_DATABASE=Parsec (Pty) Ltd
+ 
++OUI:34CF6C*
++ ID_OUI_FROM_DATABASE=Hangzhou Taili wireless communication equipment Co.,Ltd
++
+ OUI:34CFF6*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -53675,6 +54227,9 @@ OUI:34DB9C*
+ OUI:34DBFD*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:34DD04*
++ ID_OUI_FROM_DATABASE=Minut AB
++
+ OUI:34DD7E*
+  ID_OUI_FROM_DATABASE=Umeox Innovations Co.,Ltd
+ 
+@@ -53789,6 +54344,9 @@ OUI:34ED0B*
+ OUI:34ED1B*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:34EE2A*
++ ID_OUI_FROM_DATABASE=ConMet
++
+ OUI:34EF44*
+  ID_OUI_FROM_DATABASE=2Wire Inc
+ 
+@@ -53936,6 +54494,9 @@ OUI:3810D5*
+ OUI:3810F0*
+  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+ 
++OUI:38127B*
++ ID_OUI_FROM_DATABASE=Crenet Labs Co., Ltd.
++
+ OUI:381428*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -53984,6 +54545,51 @@ OUI:381DD9*
+ OUI:381EC7*
+  ID_OUI_FROM_DATABASE=Chipsea Technologies(Shenzhen) Corp.
+ 
++OUI:381F260*
++ ID_OUI_FROM_DATABASE=JAESUNG INFORMATION & COMMUNICATION CO.LTD
++
++OUI:381F261*
++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++
++OUI:381F262*
++ ID_OUI_FROM_DATABASE=Synamedia
++
++OUI:381F263*
++ ID_OUI_FROM_DATABASE=Bosch Automotive Electronics India Pvt. Ltd.
++
++OUI:381F264*
++ ID_OUI_FROM_DATABASE=Airmaster A/S
++
++OUI:381F265*
++ ID_OUI_FROM_DATABASE=Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++
++OUI:381F266*
++ ID_OUI_FROM_DATABASE=NOITAC sp. z o.o. sp.k.
++
++OUI:381F267*
++ ID_OUI_FROM_DATABASE=RCE systems s.r.o.
++
++OUI:381F268*
++ ID_OUI_FROM_DATABASE=Avon Protection
++
++OUI:381F269*
++ ID_OUI_FROM_DATABASE=SMS Evoko Group AB
++
++OUI:381F26A*
++ ID_OUI_FROM_DATABASE=Sercomm Corporation.
++
++OUI:381F26B*
++ ID_OUI_FROM_DATABASE=Deutronic Elektronik GmbH
++
++OUI:381F26C*
++ ID_OUI_FROM_DATABASE=Jade Bird Fire Co., Ltd.
++
++OUI:381F26D*
++ ID_OUI_FROM_DATABASE=HWACHANG CORPORATION
++
++OUI:381F26E*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
+ OUI:381F8D*
+  ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+ 
+@@ -54257,6 +54863,9 @@ OUI:386893*
+ OUI:3868A4*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+ 
++OUI:3868BE*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:3868DD*
+  ID_OUI_FROM_DATABASE=INVENTEC CORPORATION
+ 
+@@ -54407,12 +55016,18 @@ OUI:388E7A*
+ OUI:388EE7*
+  ID_OUI_FROM_DATABASE=Fanhattan LLC
+ 
++OUI:388F30*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:389052*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:3890A5*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:3891B7*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:3891D5*
+  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+ 
+@@ -54542,6 +55157,9 @@ OUI:38A9EA*
+ OUI:38AA3C*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+ 
++OUI:38AB41*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:38AC3D*
+  ID_OUI_FROM_DATABASE=Nephos Inc
+ 
+@@ -54962,6 +55580,9 @@ OUI:38FB14*
+ OUI:38FC98*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:38FDF5*
++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
++
+ OUI:38FDF8*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -55202,6 +55823,9 @@ OUI:3C25D7*
+ OUI:3C26D5*
+  ID_OUI_FROM_DATABASE=Sotera Wireless
+ 
++OUI:3C26E4*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:3C2763*
+  ID_OUI_FROM_DATABASE=SLE quality engineering GmbH & Co. KG
+ 
+@@ -55379,6 +56003,9 @@ OUI:3C438E*
+ OUI:3C457A*
+  ID_OUI_FROM_DATABASE=BSkyB Ltd
+ 
++OUI:3C4645*
++ ID_OUI_FROM_DATABASE=Shanghai Infinity Wireless Technologies Co.,Ltd.
++
+ OUI:3C46D8*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -55493,6 +56120,9 @@ OUI:3C678C*
+ OUI:3C6816*
+  ID_OUI_FROM_DATABASE=VXi Corporation
+ 
++OUI:3C69D1*
++ ID_OUI_FROM_DATABASE=ADC Automotive Distance Control System GmbH
++
+ OUI:3C6A2C0*
+  ID_OUI_FROM_DATABASE=Rio Lago Technologies  LLC
+ 
+@@ -55613,6 +56243,9 @@ OUI:3C80AA*
+ OUI:3C81D8*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:3C82C0*
++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
++
+ OUI:3C831E*
+  ID_OUI_FROM_DATABASE=CKD Corporation
+ 
+@@ -55898,6 +56531,9 @@ OUI:3CCD5D*
+ OUI:3CCD93*
+  ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
+ 
++OUI:3CCE0D*
++ ID_OUI_FROM_DATABASE=Shenzhen juduoping Technology Co.,Ltd
++
+ OUI:3CCE15*
+  ID_OUI_FROM_DATABASE=Mercedes-Benz USA, LLC
+ 
+@@ -56237,6 +56873,9 @@ OUI:401C83*
+ OUI:401D59*
+  ID_OUI_FROM_DATABASE=Biometric Associates, LP
+ 
++OUI:402230*
++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
++
+ OUI:4022ED*
+  ID_OUI_FROM_DATABASE=Digital Projection Ltd
+ 
+@@ -56339,9 +56978,15 @@ OUI:40331A*
+ OUI:40336C*
+  ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd
+ 
++OUI:4035E6*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:4037AD*
+  ID_OUI_FROM_DATABASE=Macro Image Technology, Inc.
+ 
++OUI:403B7B*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:403CFC*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -56372,6 +57017,9 @@ OUI:404101*
+ OUI:404229*
+  ID_OUI_FROM_DATABASE=Layer3TV, Inc
+ 
++OUI:404244*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:4044FD*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
+@@ -56654,6 +57302,9 @@ OUI:408C4C*
+ OUI:408D5C*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
++OUI:408EDF*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:408F9D*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -56798,6 +57449,9 @@ OUI:40AC8D*
+ OUI:40ACBF*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
++OUI:40B02F*
++ ID_OUI_FROM_DATABASE=Miele & Cie. KG
++
+ OUI:40B034*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -56963,6 +57617,9 @@ OUI:40D63C*
+ OUI:40D855*
+  ID_OUI_FROM_DATABASE=IEEE Registration Authority
+ 
++OUI:40D95A*
++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
++
+ OUI:40DC9D*
+  ID_OUI_FROM_DATABASE=HAJEN
+ 
+@@ -57341,6 +57998,9 @@ OUI:4427F3*
+ OUI:4428A3*
+  ID_OUI_FROM_DATABASE=Jiangsu fulian  Communication Technology Co., Ltd.
+ 
++OUI:44291E*
++ ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
++
+ OUI:442938*
+  ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd.
+ 
+@@ -57362,6 +58022,9 @@ OUI:443192*
+ OUI:44322A*
+  ID_OUI_FROM_DATABASE=Avaya Inc
+ 
++OUI:4432C2*
++ ID_OUI_FROM_DATABASE=GOAL Co., Ltd.
++
+ OUI:4432C8*
+  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+ 
+@@ -57405,7 +58068,7 @@ OUI:443C88*
+  ID_OUI_FROM_DATABASE=FICOSA MAROC INTERNATIONAL
+ 
+ OUI:443C9C*
+- ID_OUI_FROM_DATABASE=Pintsch Tiefenbach GmbH
++ ID_OUI_FROM_DATABASE=Pintsch GmbH
+ 
+ OUI:443D21*
+  ID_OUI_FROM_DATABASE=Nuvolt
+@@ -57584,6 +58247,9 @@ OUI:446D57*
+ OUI:446D6C*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:446D7F*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:446EE5*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -57701,6 +58367,9 @@ OUI:4487DB*
+ OUI:4487FC*
+  ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co.,Ltd.
+ 
++OUI:448816*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:4488CB*
+  ID_OUI_FROM_DATABASE=Camco Technologies NV
+ 
+@@ -57905,6 +58574,9 @@ OUI:44B433*
+ OUI:44B462*
+  ID_OUI_FROM_DATABASE=Flextronics Tech.(Ind) Pvt Ltd
+ 
++OUI:44B4B2*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:44B6BE*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -58349,6 +59021,9 @@ OUI:4826E8*
+ OUI:482759*
+  ID_OUI_FROM_DATABASE=Levven Electronics Ltd.
+ 
++OUI:4827C5*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:4827EA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -58439,6 +59114,9 @@ OUI:4844F7*
+ OUI:484520*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:48468D*
++ ID_OUI_FROM_DATABASE=Zepcam B.V.
++
+ OUI:4846C1*
+  ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
+ 
+@@ -58514,6 +59192,9 @@ OUI:48555F*
+ OUI:485702*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:4857D2*
++ ID_OUI_FROM_DATABASE=Broadcom Limited
++
+ OUI:4857DD*
+  ID_OUI_FROM_DATABASE=Facebook Inc
+ 
+@@ -58778,6 +59459,9 @@ OUI:489A42*
+ OUI:489BD5*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:489BE0*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:489BE2*
+  ID_OUI_FROM_DATABASE=SCI Innovations Ltd
+ 
+@@ -58862,6 +59546,9 @@ OUI:48B25D*
+ OUI:48B423*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
++OUI:48B4C3*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:48B5A7*
+  ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd.
+ 
+@@ -58937,6 +59624,9 @@ OUI:48CAC6*
+ OUI:48CB6E*
+  ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
+ 
++OUI:48CDD3*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:48D0CF*
+  ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+ 
+@@ -58994,6 +59684,9 @@ OUI:48DB50*
+ OUI:48DC2D*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:48DC9D*
++ ID_OUI_FROM_DATABASE=Grandprint(Beijing) Technology Co., LTD.
++
+ OUI:48DCFB*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -59153,6 +59846,9 @@ OUI:4C09B4*
+ OUI:4C09D4*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
++OUI:4C09FA*
++ ID_OUI_FROM_DATABASE=FRONTIER SMART TECHNOLOGIES LTD
++
+ OUI:4C0A3D*
+  ID_OUI_FROM_DATABASE=ADNACOM INC.
+ 
+@@ -59267,6 +59963,12 @@ OUI:4C2C80*
+ OUI:4C2C83*
+  ID_OUI_FROM_DATABASE=Zhejiang KaNong Network Technology Co.,Ltd.
+ 
++OUI:4C2E5E*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
++OUI:4C2EB4*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:4C2EFE*
+  ID_OUI_FROM_DATABASE=Shenzhen Comnect Technology Co.,LTD
+ 
+@@ -59420,6 +60122,9 @@ OUI:4C5262*
+ OUI:4C52EC*
+  ID_OUI_FROM_DATABASE=SOLARWATT GmbH
+ 
++OUI:4C5369*
++ ID_OUI_FROM_DATABASE=YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++
+ OUI:4C53FD*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -59561,6 +60266,9 @@ OUI:4C7274*
+ OUI:4C72B9*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+ 
++OUI:4C734F*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:4C7367*
+  ID_OUI_FROM_DATABASE=Genius Bytes Software Solutions GmbH
+ 
+@@ -59774,6 +60482,12 @@ OUI:4C962D*
+ OUI:4C98EF*
+  ID_OUI_FROM_DATABASE=Zeo
+ 
++OUI:4C9D22*
++ ID_OUI_FROM_DATABASE=ACES Co.,Ltd
++
++OUI:4C9E6C*
++ ID_OUI_FROM_DATABASE=BROADEX TECHNOLOGIES CO.LTD
++
+ OUI:4C9E80*
+  ID_OUI_FROM_DATABASE=KYOKKO ELECTRIC Co., Ltd.
+ 
+@@ -60020,6 +60734,9 @@ OUI:4CD08A*
+ OUI:4CD0CB*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:4CD0DD*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:4CD1A1*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -60380,6 +61097,9 @@ OUI:502690*
+ OUI:5027C7*
+  ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd
+ 
++OUI:50284A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:502873*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -60455,6 +61175,9 @@ OUI:5033F0*
+ OUI:50382F*
+  ID_OUI_FROM_DATABASE=ASE Group Chung-Li
+ 
++OUI:50392F*
++ ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES
++
+ OUI:503955*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -60503,6 +61226,9 @@ OUI:50411C*
+ OUI:5041B9*
+  ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
+ 
++OUI:504289*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:504348*
+  ID_OUI_FROM_DATABASE=ThingsMatrix Inc.
+ 
+@@ -60713,6 +61439,9 @@ OUI:5067F0*
+ OUI:50680A*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:5068AC*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:506A03*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -60908,6 +61637,9 @@ OUI:509F3B*
+ OUI:50A009*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:50A015*
++ ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd.
++
+ OUI:50A0300*
+  ID_OUI_FROM_DATABASE=Gopod Group Limited
+ 
+@@ -61091,6 +61823,9 @@ OUI:50C006*
+ OUI:50C0F0*
+  ID_OUI_FROM_DATABASE=Artek Microelectronics Co.,Ltd.
+ 
++OUI:50C1F0*
++ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD.
++
+ OUI:50C271*
+  ID_OUI_FROM_DATABASE=SECURETECH INC
+ 
+@@ -61184,6 +61919,9 @@ OUI:50DAD6*
+ OUI:50DB3F*
+  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 
++OUI:50DCD0*
++ ID_OUI_FROM_DATABASE=Observint Technologies, Inc.
++
+ OUI:50DCE7*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -61265,6 +62003,9 @@ OUI:50E24E*
+ OUI:50E549*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
++OUI:50E636*
++ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
++
+ OUI:50E666*
+  ID_OUI_FROM_DATABASE=Shenzhen Techtion Electronics Co., Ltd.
+ 
+@@ -61368,7 +62109,7 @@ OUI:50FF990*
+  ID_OUI_FROM_DATABASE=Simicon
+ 
+ OUI:50FF991*
+- ID_OUI_FROM_DATABASE=Coyote Sytem
++ ID_OUI_FROM_DATABASE=COYOTE SYSTEM
+ 
+ OUI:50FF992*
+  ID_OUI_FROM_DATABASE=SHENZHEN KINGVT ELECTRONICS CO.,LTD
+@@ -61571,6 +62312,9 @@ OUI:542BDE*
+ OUI:542CEA*
+  ID_OUI_FROM_DATABASE=PROTECTRON
+ 
++OUI:542F04*
++ ID_OUI_FROM_DATABASE=Shanghai Longcheer Technology Co., Ltd.
++
+ OUI:542F89*
+  ID_OUI_FROM_DATABASE=Euclid Laboratories, Inc.
+ 
+@@ -61622,6 +62366,9 @@ OUI:5440AD*
+ OUI:544249*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:5443B2*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:544408*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -61790,6 +62537,9 @@ OUI:54778A*
+ OUI:54781A*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:5478C9*
++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
++
+ OUI:547975*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -62036,6 +62786,9 @@ OUI:54A6DB*
+ OUI:54A703*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:54A9C8*
++ ID_OUI_FROM_DATABASE=Home Control Singapore Pte Ltd
++
+ OUI:54A9D4*
+  ID_OUI_FROM_DATABASE=Minibar Systems
+ 
+@@ -62198,6 +62951,9 @@ OUI:54E061*
+ OUI:54E140*
+  ID_OUI_FROM_DATABASE=INGENICO
+ 
++OUI:54E15B*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:54E1AD*
+  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+ 
+@@ -62309,6 +63065,9 @@ OUI:54FF82*
+ OUI:54FFCF*
+  ID_OUI_FROM_DATABASE=Mopria Alliance
+ 
++OUI:580032*
++ ID_OUI_FROM_DATABASE=Genexis B.V.
++
+ OUI:5800BB*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -62351,6 +63110,9 @@ OUI:58108C*
+ OUI:5810B7*
+  ID_OUI_FROM_DATABASE=Infinix mobility limited
+ 
++OUI:581122*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:581243*
+  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+ 
+@@ -62375,6 +63137,9 @@ OUI:581CBD*
+ OUI:581D91*
+  ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd.
+ 
++OUI:581DD8*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:581F28*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -62615,6 +63380,9 @@ OUI:58528A*
+ OUI:5853C0*
+  ID_OUI_FROM_DATABASE=Beijing Guang Runtong Technology Development Company co.,Ltd
+ 
++OUI:585595*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5855CA*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -62693,6 +63461,9 @@ OUI:587521*
+ OUI:587675*
+  ID_OUI_FROM_DATABASE=Beijing ECHO Technologies Co.,Ltd
+ 
++OUI:5876AC*
++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++
+ OUI:5876C5*
+  ID_OUI_FROM_DATABASE=DIGI I'S LTD
+ 
+@@ -62750,6 +63521,9 @@ OUI:588694*
+ OUI:58874C*
+  ID_OUI_FROM_DATABASE=LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
+ 
++OUI:58879F*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:5887E2*
+  ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
+ 
+@@ -62981,6 +63755,9 @@ OUI:58C17A*
+ OUI:58C232*
+  ID_OUI_FROM_DATABASE=NEC Corporation
+ 
++OUI:58C356*
++ ID_OUI_FROM_DATABASE=EM Microelectronic
++
+ OUI:58C38B*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -63272,6 +64049,9 @@ OUI:5C0272*
+ OUI:5C0339*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:5C045A*
++ ID_OUI_FROM_DATABASE=Company NA Stage & Light
++
+ OUI:5C076F*
+  ID_OUI_FROM_DATABASE=Thought Creator
+ 
+@@ -63338,6 +64118,9 @@ OUI:5C18B5*
+ OUI:5C1A6F*
+  ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
+ 
++OUI:5C1BF4*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5C1CB9*
+  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+ 
+@@ -63359,6 +64142,9 @@ OUI:5C2443*
+ OUI:5C2479*
+  ID_OUI_FROM_DATABASE=Baltech AG
+ 
++OUI:5C24E2*
++ ID_OUI_FROM_DATABASE=Suzhou Denbom Electronic S&T Co., Ltd
++
+ OUI:5C254C*
+  ID_OUI_FROM_DATABASE=Avire Global Pte Ltd
+ 
+@@ -63488,6 +64274,9 @@ OUI:5C521E*
+ OUI:5C5230*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:5C53C3*
++ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
++
+ OUI:5C546D*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -63722,6 +64511,9 @@ OUI:5C89D4*
+ OUI:5C8A38*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:5C8C30*
++ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
++
+ OUI:5C8D2D*
+  ID_OUI_FROM_DATABASE=Shanghai Wellpay Information Technology Co., Ltd
+ 
+@@ -63800,6 +64592,9 @@ OUI:5CA48A*
+ OUI:5CA4A4*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
++OUI:5CA4F4*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:5CA5BC*
+  ID_OUI_FROM_DATABASE=eero inc.
+ 
+@@ -63905,6 +64700,9 @@ OUI:5CC307*
+ OUI:5CC336*
+  ID_OUI_FROM_DATABASE=ittim
+ 
++OUI:5CC563*
++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
++
+ OUI:5CC5D4*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -63923,6 +64721,9 @@ OUI:5CC8E3*
+ OUI:5CC999*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
++OUI:5CC9C0*
++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
++
+ OUI:5CC9D3*
+  ID_OUI_FROM_DATABASE=PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA
+ 
+@@ -64061,6 +64862,9 @@ OUI:5CE8B7*
+ OUI:5CE8EB*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:5CE91E*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5CEA1D*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -64073,6 +64877,9 @@ OUI:5CEB68*
+ OUI:5CED8C*
+  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+ 
++OUI:5CEDF4*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:5CEE79*
+  ID_OUI_FROM_DATABASE=Global Digitech Co LTD
+ 
+@@ -64172,6 +64979,9 @@ OUI:5CF9F0*
+ OUI:5CF9FD*
+  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+ 
++OUI:5CFA25*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:5CFAFB*
+  ID_OUI_FROM_DATABASE=Acubit
+ 
+@@ -64316,6 +65126,9 @@ OUI:601803*
+ OUI:60182E*
+  ID_OUI_FROM_DATABASE=ShenZhen Protruly Electronic Ltd co.
+ 
++OUI:60183A*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:601888*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -64346,6 +65159,9 @@ OUI:601D9D*
+ OUI:601E02*
+  ID_OUI_FROM_DATABASE=EltexAlatau
+ 
++OUI:601E98*
++ ID_OUI_FROM_DATABASE=Axevast Technology
++
+ OUI:602101*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
+@@ -64529,6 +65345,9 @@ OUI:605718*
+ OUI:60577D*
+  ID_OUI_FROM_DATABASE=eero inc.
+ 
++OUI:605B30*
++ ID_OUI_FROM_DATABASE=Dell Inc.
++
+ OUI:605BB4*
+  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+ 
+@@ -64628,6 +65447,9 @@ OUI:607771*
+ OUI:6077E2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:607D09*
++ ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co., Ltd
++
+ OUI:607DDD*
+  ID_OUI_FROM_DATABASE=Shenzhen Shichuangyi Electronics Co.,Ltd
+ 
+@@ -64724,6 +65546,9 @@ OUI:6092F5*
+ OUI:609316*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:6095BD*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:6095CE0*
+  ID_OUI_FROM_DATABASE=Siema Applications
+ 
+@@ -64907,6 +65732,9 @@ OUI:60BC4C*
+ OUI:60BD91*
+  ID_OUI_FROM_DATABASE=Move Innovation
+ 
++OUI:60BEB4*
++ ID_OUI_FROM_DATABASE=S-Bluetech co., limited
++
+ OUI:60BEB5*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
+@@ -65111,6 +65939,9 @@ OUI:60E85B*
+ OUI:60E956*
+  ID_OUI_FROM_DATABASE=Ayla Networks, Inc
+ 
++OUI:60E9AA*
++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++
+ OUI:60EB5A*
+  ID_OUI_FROM_DATABASE=Asterfusion Data Technologies Co.,Ltd
+ 
+@@ -65273,6 +66104,9 @@ OUI:640F28*
+ OUI:641084*
+  ID_OUI_FROM_DATABASE=HEXIUM Technical Development Co., Ltd.
+ 
++OUI:6411A4*
++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
++
+ OUI:641225*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -65423,6 +66257,9 @@ OUI:643139E*
+ OUI:643150*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:643172*
++ ID_OUI_FROM_DATABASE=ZHEJIANG HISING TECHNOLOGY CO.,LTD
++
+ OUI:64317E*
+  ID_OUI_FROM_DATABASE=Dexin Corporation
+ 
+@@ -65513,6 +66350,9 @@ OUI:6444D5*
+ OUI:6447E0*
+  ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd
+ 
++OUI:64497D*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:644BC3*
+  ID_OUI_FROM_DATABASE=Shanghai WOASiS Telecommunications Ltd., Co.
+ 
+@@ -65594,6 +66434,9 @@ OUI:645D92*
+ OUI:645DD7*
+  ID_OUI_FROM_DATABASE=Shenzhen Lifesense Medical Electronics Co., Ltd.
+ 
++OUI:645DF4*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:645E10*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -65822,6 +66665,9 @@ OUI:649714*
+ OUI:649829*
+  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+ 
++OUI:64989E*
++ ID_OUI_FROM_DATABASE=TRINNOV AUDIO
++
+ OUI:64995D*
+  ID_OUI_FROM_DATABASE=LGE
+ 
+@@ -65972,6 +66818,9 @@ OUI:64BE63*
+ OUI:64BF6B*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:64C269*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:64C2DE*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
+@@ -65987,6 +66836,9 @@ OUI:64C3D6*
+ OUI:64C403*
+  ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+ 
++OUI:64C582*
++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
++
+ OUI:64C5AA*
+  ID_OUI_FROM_DATABASE=South African Broadcasting Corporation
+ 
+@@ -66263,6 +67115,9 @@ OUI:64FB92*
+ OUI:64FC8C*
+  ID_OUI_FROM_DATABASE=Zonar Systems
+ 
++OUI:64FD96*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:64FF0A*
+  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+ 
+@@ -66317,6 +67172,9 @@ OUI:681605*
+ OUI:681729*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:6818D9*
++ ID_OUI_FROM_DATABASE=Hill AFB - CAPRE Group
++
+ OUI:68193F*
+  ID_OUI_FROM_DATABASE=Digital Airways
+ 
+@@ -66479,6 +67337,9 @@ OUI:684B88*
+ OUI:684CA8*
+  ID_OUI_FROM_DATABASE=Shenzhen Herotel Tech. Co., Ltd.
+ 
++OUI:684E05*
++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
++
+ OUI:684F64*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -66533,6 +67394,9 @@ OUI:685B36*
+ OUI:685D43*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:685E1C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:685E6B*
+  ID_OUI_FROM_DATABASE=PowerRay Co., Ltd.
+ 
+@@ -66848,6 +67712,9 @@ OUI:68A47D*
+ OUI:68A682*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+ 
++OUI:68A7B4*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:68A828*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -66896,6 +67763,12 @@ OUI:68B43A*
+ OUI:68B599*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:68B691*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
++OUI:68B6B3*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:68B6FC*
+  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+ 
+@@ -67016,6 +67889,9 @@ OUI:68E41F*
+ OUI:68E478*
+  ID_OUI_FROM_DATABASE=Qingdao Haier Technology Co.,Ltd
+ 
++OUI:68E74A*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:68E7C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -67121,6 +67997,9 @@ OUI:6C05D5*
+ OUI:6C06D6*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:6C0831*
++ ID_OUI_FROM_DATABASE=ANALOG SYSTEMS
++
+ OUI:6C090A*
+  ID_OUI_FROM_DATABASE=GEMATICA SRL
+ 
+@@ -67151,6 +68030,9 @@ OUI:6C0EE6*
+ OUI:6C0F0B*
+  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+ 
++OUI:6C0F61*
++ ID_OUI_FROM_DATABASE=Hypervolt Ltd
++
+ OUI:6C0F6A*
+  ID_OUI_FROM_DATABASE=JDC Tech Co., Ltd.
+ 
+@@ -67172,6 +68054,51 @@ OUI:6C146E*
+ OUI:6C14F7*
+  ID_OUI_FROM_DATABASE=Erhardt+Leimer GmbH
+ 
++OUI:6C15240*
++ ID_OUI_FROM_DATABASE=DEFA AS
++
++OUI:6C15241*
++ ID_OUI_FROM_DATABASE=Telsonic AG
++
++OUI:6C15242*
++ ID_OUI_FROM_DATABASE=Linkplay
++
++OUI:6C15243*
++ ID_OUI_FROM_DATABASE=Forcite Helmet Systems Pty Ltd
++
++OUI:6C15244*
++ ID_OUI_FROM_DATABASE=Magicyo Technology CO., LTD.
++
++OUI:6C15245*
++ ID_OUI_FROM_DATABASE=Shenzhen Electron Technology Co., LTD.
++
++OUI:6C15246*
++ ID_OUI_FROM_DATABASE=Kunshan Abram Software Technology Co.,Ltd.
++
++OUI:6C15247*
++ ID_OUI_FROM_DATABASE=Motium Pty Ltd
++
++OUI:6C15248*
++ ID_OUI_FROM_DATABASE=ShenZhen Chainway Information Technology Co., Ltd.
++
++OUI:6C15249*
++ ID_OUI_FROM_DATABASE=D-HOME SMAART
++
++OUI:6C1524A*
++ ID_OUI_FROM_DATABASE=STERIS
++
++OUI:6C1524B*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:6C1524C*
++ ID_OUI_FROM_DATABASE=CORAL-TAIYI
++
++OUI:6C1524D*
++ ID_OUI_FROM_DATABASE=SYMLINK CORPORATION
++
++OUI:6C1524E*
++ ID_OUI_FROM_DATABASE=AEC s.r.l.
++
+ OUI:6C15F9*
+  ID_OUI_FROM_DATABASE=Nautronix Limited
+ 
+@@ -67226,6 +68153,9 @@ OUI:6C23B9*
+ OUI:6C23CB*
+  ID_OUI_FROM_DATABASE=Wattty Corporation
+ 
++OUI:6C2408*
++ ID_OUI_FROM_DATABASE=LCFC(Hefei) Electronics Technology Co., Ltd
++
+ OUI:6C2483*
+  ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
+ 
+@@ -67508,6 +68438,9 @@ OUI:6C639C*
+ OUI:6C641A*
+  ID_OUI_FROM_DATABASE=Penguin Computing
+ 
++OUI:6C67EF*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:6C6A77*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -67610,6 +68543,51 @@ OUI:6C9106*
+ OUI:6C92BF*
+  ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd.
+ 
++OUI:6C93080*
++ ID_OUI_FROM_DATABASE=Braums
++
++OUI:6C93081*
++ ID_OUI_FROM_DATABASE=WATERFORD CONSULTANTS LLC
++
++OUI:6C93082*
++ ID_OUI_FROM_DATABASE=ZHEJIANG XIAN DA Environmental Technology Co., Ltd
++
++OUI:6C93083*
++ ID_OUI_FROM_DATABASE=LightnTec GmbH
++
++OUI:6C93084*
++ ID_OUI_FROM_DATABASE=Estelar s.r.o
++
++OUI:6C93085*
++ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
++
++OUI:6C93086*
++ ID_OUI_FROM_DATABASE=Uconfree technology(shenzhen)limited
++
++OUI:6C93087*
++ ID_OUI_FROM_DATABASE=Liberty AV Solutions
++
++OUI:6C93088*
++ ID_OUI_FROM_DATABASE=Hangzhou Risco System Co.,Ltd
++
++OUI:6C93089*
++ ID_OUI_FROM_DATABASE=Shenzhen DOOGEE Hengtong Technology CO., LTD
++
++OUI:6C9308A*
++ ID_OUI_FROM_DATABASE=Shenzhen TOPWAY Technology Co.,LTD
++
++OUI:6C9308B*
++ ID_OUI_FROM_DATABASE=Shenzhen EZpro Sound & Light Technology Co., Ltd.
++
++OUI:6C9308C*
++ ID_OUI_FROM_DATABASE=Shenzhen haichangxing Technology Co., Ltd.
++
++OUI:6C9308D*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:6C9308E*
++ ID_OUI_FROM_DATABASE=ANDDORO LLC
++
+ OUI:6C9354*
+  ID_OUI_FROM_DATABASE=Yaojin Technology (Shenzhen) Co., LTD.
+ 
+@@ -67628,6 +68606,9 @@ OUI:6C9522*
+ OUI:6C96CF*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:6C976D*
++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
++
+ OUI:6C98EB*
+  ID_OUI_FROM_DATABASE=Riverbed Technology, Inc.
+ 
+@@ -67637,6 +68618,9 @@ OUI:6C9961*
+ OUI:6C9989*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:6C999D*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:6C9AC9*
+  ID_OUI_FROM_DATABASE=Valentine Research, Inc.
+ 
+@@ -67661,6 +68645,9 @@ OUI:6CA0B4*
+ OUI:6CA100*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:6CA401*
++ ID_OUI_FROM_DATABASE=essensys plc
++
+ OUI:6CA4D1*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
+@@ -67727,6 +68714,9 @@ OUI:6CADF8*
+ OUI:6CAE8B*
+  ID_OUI_FROM_DATABASE=IBM Corporation
+ 
++OUI:6CAEE3*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:6CAEF6*
+  ID_OUI_FROM_DATABASE=eero inc.
+ 
+@@ -67739,12 +68729,18 @@ OUI:6CB0CE*
+ OUI:6CB0FD*
+  ID_OUI_FROM_DATABASE=Shenzhen Xinghai Iot Technology Co.,Ltd
+ 
++OUI:6CB158*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:6CB227*
+  ID_OUI_FROM_DATABASE=Sony Video & Sound Products Inc.
+ 
+ OUI:6CB2AE*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:6CB2FD*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:6CB311*
+  ID_OUI_FROM_DATABASE=Shenzhen Lianrui Electronics Co.,Ltd
+ 
+@@ -68222,6 +69218,9 @@ OUI:70305D*
+ OUI:70305E*
+  ID_OUI_FROM_DATABASE=Nanjing Zhongke Menglian Information Technology Co.,LTD
+ 
++OUI:70317F*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:703187*
+  ID_OUI_FROM_DATABASE=ACX GmbH
+ 
+@@ -68345,6 +69344,51 @@ OUI:704FB8*
+ OUI:7050AF*
+  ID_OUI_FROM_DATABASE=BSkyB Ltd
+ 
++OUI:7050E70*
++ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
++
++OUI:7050E71*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:7050E72*
++ ID_OUI_FROM_DATABASE=Electronic's Time SRL
++
++OUI:7050E73*
++ ID_OUI_FROM_DATABASE=Skychers Creations ShenZhen Limited
++
++OUI:7050E74*
++ ID_OUI_FROM_DATABASE=Quantumdoor Technologies, Inc.
++
++OUI:7050E75*
++ ID_OUI_FROM_DATABASE=Wall Box Chargers, S.L.
++
++OUI:7050E76*
++ ID_OUI_FROM_DATABASE=Nippon Pulse America, Inc.
++
++OUI:7050E77*
++ ID_OUI_FROM_DATABASE=Yoctopuce
++
++OUI:7050E78*
++ ID_OUI_FROM_DATABASE=Shenzhen Dangs Science and Technology CO.,Ltd.
++
++OUI:7050E79*
++ ID_OUI_FROM_DATABASE=Elastics.cloud
++
++OUI:7050E7A*
++ ID_OUI_FROM_DATABASE=Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
++
++OUI:7050E7B*
++ ID_OUI_FROM_DATABASE=Beijing Shannoncyber Technology Co.,Ltd
++
++OUI:7050E7C*
++ ID_OUI_FROM_DATABASE=shenzhen newbridge communication equipment CO.,LTD
++
++OUI:7050E7D*
++ ID_OUI_FROM_DATABASE=Eta Compute Inc.
++
++OUI:7050E7E*
++ ID_OUI_FROM_DATABASE=KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
++
+ OUI:7052C5*
+  ID_OUI_FROM_DATABASE=Avaya Inc
+ 
+@@ -68447,6 +69491,9 @@ OUI:7065A3*
+ OUI:70661B*
+  ID_OUI_FROM_DATABASE=Sonova AG
+ 
++OUI:70662A*
++ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
++
+ OUI:706655*
+  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+ 
+@@ -68531,6 +69578,9 @@ OUI:70708B*
+ OUI:7070AA*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
++OUI:7070FC*
++ ID_OUI_FROM_DATABASE=GOLD&WATER INDUSTRIAL LIMITED
++
+ OUI:7071B3*
+  ID_OUI_FROM_DATABASE=Brain Corporation
+ 
+@@ -68618,6 +69668,9 @@ OUI:708540*
+ OUI:7085C2*
+  ID_OUI_FROM_DATABASE=ASRock Incorporation
+ 
++OUI:7085C4*
++ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
++
+ OUI:7085C6*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -68765,6 +69818,9 @@ OUI:70A56A*
+ OUI:70A66A*
+  ID_OUI_FROM_DATABASE=Prox Dynamics AS
+ 
++OUI:70A6BD*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:70A6CC*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -68780,9 +69836,15 @@ OUI:70A8D3*
+ OUI:70A8E3*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:70A983*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:70AAB2*
+  ID_OUI_FROM_DATABASE=BlackBerry RTS
+ 
++OUI:70AC08*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:70ACD7*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+ 
+@@ -79665,7 +80727,7 @@ OUI:70B3D5E2E*
+  ID_OUI_FROM_DATABASE=Merz s.r.o.
+ 
+ OUI:70B3D5E2F*
+- ID_OUI_FROM_DATABASE=Flextronics International Kft.
++ ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
+ OUI:70B3D5E30*
+  ID_OUI_FROM_DATABASE=QUISS AG
+@@ -79875,7 +80937,7 @@ OUI:70B3D5E74*
+  ID_OUI_FROM_DATABASE=Exfrontier Co., Ltd.
+ 
+ OUI:70B3D5E75*
+- ID_OUI_FROM_DATABASE=Nke
++ ID_OUI_FROM_DATABASE=Watteco
+ 
+ OUI:70B3D5E76*
+  ID_OUI_FROM_DATABASE=Dorsett Technologies Inc
+@@ -81161,6 +82223,9 @@ OUI:70D5E7*
+ OUI:70D6B6*
+  ID_OUI_FROM_DATABASE=Metrum Technologies
+ 
++OUI:70D823*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:70D880*
+  ID_OUI_FROM_DATABASE=Upos System sp. z o.o.
+ 
+@@ -81365,6 +82430,9 @@ OUI:74042B*
+ OUI:7404F0*
+  ID_OUI_FROM_DATABASE=Mobiwire Mobiles (NingBo) Co., LTD
+ 
++OUI:7404F1*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:7405A5*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -81677,6 +82745,9 @@ OUI:74547D*
+ OUI:745612*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:74563C*
++ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
++
+ OUI:745798*
+  ID_OUI_FROM_DATABASE=TRUMPF Laser GmbH + Co. KG
+ 
+@@ -81764,6 +82835,9 @@ OUI:745F90*
+ OUI:745FAE*
+  ID_OUI_FROM_DATABASE=TSL PPL
+ 
++OUI:74604C*
++ ID_OUI_FROM_DATABASE=RØDE
++
+ OUI:7460FA*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -81788,6 +82862,9 @@ OUI:746630*
+ OUI:7467F7*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:74694A*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:746A3A*
+  ID_OUI_FROM_DATABASE=Aperi Corporation
+ 
+@@ -81812,6 +82889,9 @@ OUI:746F19*
+ OUI:746F3D*
+  ID_OUI_FROM_DATABASE=Contec GmbH
+ 
++OUI:746F88*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:746FF7*
+  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+ 
+@@ -81821,6 +82901,9 @@ OUI:747069*
+ OUI:7470FD*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:74718B*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:74721E*
+  ID_OUI_FROM_DATABASE=Edison Labs Inc.
+ 
+@@ -81845,6 +82928,9 @@ OUI:747548*
+ OUI:74765B*
+  ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
+ 
++OUI:74767D*
++ ID_OUI_FROM_DATABASE=shenzhen kexint technology co.,ltd
++
+ OUI:747818*
+  ID_OUI_FROM_DATABASE=Jurumani Solutions
+ 
+@@ -81881,6 +82967,9 @@ OUI:7483C2*
+ OUI:7483EF*
+  ID_OUI_FROM_DATABASE=Arista Networks
+ 
++OUI:748469*
++ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
++
+ OUI:7484E1*
+  ID_OUI_FROM_DATABASE=Dongguan Haoyuan Electronics Co.,Ltd
+ 
+@@ -81974,6 +83063,9 @@ OUI:7495EC*
+ OUI:749637*
+  ID_OUI_FROM_DATABASE=Todaair Electronic Co., Ltd
+ 
++OUI:749779*
++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++
+ OUI:749781*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -82073,6 +83165,9 @@ OUI:74B587*
+ OUI:74B6B6*
+  ID_OUI_FROM_DATABASE=eero inc.
+ 
++OUI:74B725*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:74B7B3*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+ 
+@@ -82163,6 +83258,9 @@ OUI:74D285*
+ OUI:74D435*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
++OUI:74D4DD*
++ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
++
+ OUI:74D637*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -82187,6 +83285,9 @@ OUI:74D83E*
+ OUI:74D850*
+  ID_OUI_FROM_DATABASE=Evrisko Systems
+ 
++OUI:74D9EB*
++ ID_OUI_FROM_DATABASE=Petabit Scale, Inc.
++
+ OUI:74DA38*
+  ID_OUI_FROM_DATABASE=Edimax Technology Co. Ltd.
+ 
+@@ -82202,6 +83303,9 @@ OUI:74DAEA*
+ OUI:74DBD1*
+  ID_OUI_FROM_DATABASE=Ebay Inc
+ 
++OUI:74DDCB*
++ ID_OUI_FROM_DATABASE=China Leadshine Technology Co.,Ltd
++
+ OUI:74DE2B*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -82463,6 +83567,9 @@ OUI:7802B7*
+ OUI:7802F8*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:78034F*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:780473*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -82565,6 +83672,9 @@ OUI:781305E*
+ OUI:7813E0*
+  ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+ 
++OUI:78152D*
++ ID_OUI_FROM_DATABASE=UNION CHIP TECHNOLOGY LIMITED
++
+ OUI:781735*
+  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+ 
+@@ -82607,6 +83717,9 @@ OUI:782079*
+ OUI:7820A5*
+  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+ 
++OUI:7820BD*
++ ID_OUI_FROM_DATABASE=Polysense (Beijing) Technologies Co. Ltd
++
+ OUI:782184*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -82682,6 +83795,9 @@ OUI:78321B*
+ OUI:78324F*
+  ID_OUI_FROM_DATABASE=Millennium Group, Inc.
+ 
++OUI:783486*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:7835A0*
+  ID_OUI_FROM_DATABASE=Zurn Industries LLC
+ 
+@@ -82835,6 +83951,9 @@ OUI:78595E*
+ OUI:785968*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:785B64*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:785C28*
+  ID_OUI_FROM_DATABASE=Prime Motion Inc.
+ 
+@@ -82919,6 +84038,9 @@ OUI:78653B*
+ OUI:786559*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:78669D*
++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
++
+ OUI:7866AE*
+  ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc.
+ 
+@@ -82952,6 +84074,9 @@ OUI:786DEB*
+ OUI:787052*
+  ID_OUI_FROM_DATABASE=Welotec GmbH
+ 
++OUI:787104*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:78719C*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -83090,6 +84215,9 @@ OUI:788E33*
+ OUI:7890A2*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:7891DE*
++ ID_OUI_FROM_DATABASE=Guangdong ACIGA Science&Technology Co.,Ltd
++
+ OUI:7891E9*
+  ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD
+ 
+@@ -83222,6 +84350,9 @@ OUI:78ACC0*
+ OUI:78AE0C*
+  ID_OUI_FROM_DATABASE=Far South Networks
+ 
++OUI:78AF08*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:78AF58*
+  ID_OUI_FROM_DATABASE=GIMASI SA
+ 
+@@ -83469,7 +84600,7 @@ OUI:78D4F10*
+  ID_OUI_FROM_DATABASE=Burisch Elektronik Bauteile GmbH
+ 
+ OUI:78D4F11*
+- ID_OUI_FROM_DATABASE=Cartender
++ ID_OUI_FROM_DATABASE=Silla Industries
+ 
+ OUI:78D4F12*
+  ID_OUI_FROM_DATABASE=Lyngsoe Systems
+@@ -84137,6 +85268,9 @@ OUI:7C696B*
+ OUI:7C69F6*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:7C6A60*
++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
++
+ OUI:7C6AB3*
+  ID_OUI_FROM_DATABASE=IBC TECHNOLOGIES INC.
+ 
+@@ -84216,7 +85350,7 @@ OUI:7C70BC9*
+  ID_OUI_FROM_DATABASE=dogtra
+ 
+ OUI:7C70BCA*
+- ID_OUI_FROM_DATABASE=Ametek VIS
++ ID_OUI_FROM_DATABASE=Motec GmbH
+ 
+ OUI:7C70BCB*
+  ID_OUI_FROM_DATABASE=Tohan Engineering Corporation
+@@ -84809,6 +85943,9 @@ OUI:7CDFA1*
+ OUI:7CE044*
+  ID_OUI_FROM_DATABASE=NEON Inc
+ 
++OUI:7CE152*
++ ID_OUI_FROM_DATABASE=THE GOODYEAR TIRE & RUBBER COMPANY
++
+ OUI:7CE1FF*
+  ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc.
+ 
+@@ -84845,12 +85982,18 @@ OUI:7CEC79*
+ OUI:7CEC9B*
+  ID_OUI_FROM_DATABASE=Fuzhou Teraway Information Technology Co.,Ltd
+ 
++OUI:7CECB1*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:7CED8D*
+  ID_OUI_FROM_DATABASE=Microsoft
+ 
+ OUI:7CEF18*
+  ID_OUI_FROM_DATABASE=Creative Product Design Pty. Ltd.
+ 
++OUI:7CEF40*
++ ID_OUI_FROM_DATABASE=Nextorage Corporation
++
+ OUI:7CEF61*
+  ID_OUI_FROM_DATABASE=STR Elektronik Josef Schlechtinger GmbH
+ 
+@@ -84947,6 +86090,27 @@ OUI:80029C*
+ OUI:8002DF*
+  ID_OUI_FROM_DATABASE=ORA Inc.
+ 
++OUI:8002F40*
++ ID_OUI_FROM_DATABASE=BK Networks Co,. Ltd.
++
++OUI:8002F41*
++ ID_OUI_FROM_DATABASE=Sichuan lookout environment protection technology co.,Ltd
++
++OUI:8002F43*
++ ID_OUI_FROM_DATABASE=Shenzhen Suanzi Technology Co., Ltd
++
++OUI:8002F45*
++ ID_OUI_FROM_DATABASE=Sichuan Fanyi Technology Co. Ltd.
++
++OUI:8002F49*
++ ID_OUI_FROM_DATABASE=XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++
++OUI:8002F4A*
++ ID_OUI_FROM_DATABASE=PassiveLogic
++
++OUI:8002F4C*
++ ID_OUI_FROM_DATABASE=Wuhan Glory Road Intelligent Technology Co., Ltd.
++
+ OUI:800384*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -85172,6 +86336,9 @@ OUI:803B9A*
+ OUI:803BF6*
+  ID_OUI_FROM_DATABASE=LOOK EASY INTERNATIONAL LIMITED
+ 
++OUI:803C20*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:803E48*
+  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 
+@@ -85259,6 +86426,9 @@ OUI:8059FD*
+ OUI:805A04*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
++OUI:805B65*
++ ID_OUI_FROM_DATABASE=LG Innotek
++
+ OUI:805E0C*
+  ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+ 
+@@ -85274,6 +86444,9 @@ OUI:805FC5*
+ OUI:806007*
+  ID_OUI_FROM_DATABASE=RIM
+ 
++OUI:806036*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:8060B7*
+  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 
+@@ -85304,6 +86477,9 @@ OUI:8065E9*
+ OUI:806629*
+  ID_OUI_FROM_DATABASE=Prescope Technologies CO.,LTD.
+ 
++OUI:80691A*
++ ID_OUI_FROM_DATABASE=Belkin International Inc.
++
+ OUI:806933*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -85535,6 +86711,9 @@ OUI:8096CA*
+ OUI:80971B*
+  ID_OUI_FROM_DATABASE=Altenergy Power System,Inc.
+ 
++OUI:809733*
++ ID_OUI_FROM_DATABASE=Shenzhen Elebao Technology Co., Ltd
++
+ OUI:809B20*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -85644,7 +86823,7 @@ OUI:80C16E*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+ OUI:80C3BA*
+- ID_OUI_FROM_DATABASE=Sennheiser electronic GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Sennheiser Consumer Audio GmbH
+ 
+ OUI:80C501*
+  ID_OUI_FROM_DATABASE=OctoGate IT Security Systems GmbH
+@@ -86300,6 +87479,9 @@ OUI:8468C8*
+ OUI:846991*
+  ID_OUI_FROM_DATABASE=Nokia
+ 
++OUI:846993*
++ ID_OUI_FROM_DATABASE=HP Inc.
++
+ OUI:846A66*
+  ID_OUI_FROM_DATABASE=Sumitomo Kizai  Co.,Ltd.
+ 
+@@ -86315,6 +87497,9 @@ OUI:846EB1*
+ OUI:846FCE*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
++OUI:8470D7*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:847127*
+  ID_OUI_FROM_DATABASE=Silicon Laboratories
+ 
+@@ -86408,6 +87593,9 @@ OUI:848506*
+ OUI:84850A*
+  ID_OUI_FROM_DATABASE=Hella Sonnen- und Wetterschutztechnik GmbH
+ 
++OUI:848553*
++ ID_OUI_FROM_DATABASE=Biznes Systema Telecom, LLC
++
+ OUI:8485E6*
+  ID_OUI_FROM_DATABASE=Guangdong Asano Technology CO.,Ltd.
+ 
+@@ -86540,6 +87728,9 @@ OUI:84930C*
+ OUI:8493A0*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:8493B2*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:84948C*
+  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+ 
+@@ -86711,6 +87902,9 @@ OUI:84C3E8*
+ OUI:84C5A6*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:84C692*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:84C727*
+  ID_OUI_FROM_DATABASE=Gnodal Ltd
+ 
+@@ -86918,6 +88112,9 @@ OUI:84F129*
+ OUI:84F147*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:84F1D0*
++ ID_OUI_FROM_DATABASE=EHOOME IOT PRIVATE LIMITED
++
+ OUI:84F3EB*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -86960,6 +88157,12 @@ OUI:880118*
+ OUI:8801F2*
+  ID_OUI_FROM_DATABASE=Vitec System Engineering Inc.
+ 
++OUI:8801F9*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
++OUI:88034C*
++ ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
++
+ OUI:880355*
+  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+ 
+@@ -87128,6 +88331,9 @@ OUI:883C1C*
+ OUI:883D24*
+  ID_OUI_FROM_DATABASE=Google, Inc.
+ 
++OUI:883F0C*
++ ID_OUI_FROM_DATABASE=system a.v. co., ltd.
++
+ OUI:883F4A*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -87359,6 +88565,9 @@ OUI:8866A5*
+ OUI:88685C*
+  ID_OUI_FROM_DATABASE=Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
+ 
++OUI:88693D*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:886AB1*
+  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+ 
+@@ -87482,6 +88691,9 @@ OUI:888E68*
+ OUI:888E7F*
+  ID_OUI_FROM_DATABASE=ATOP CORPORATION
+ 
++OUI:888FA4*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:889009*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -87722,6 +88934,9 @@ OUI:88BFE4*
+ OUI:88C08B*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:88C174*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:88C227*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -87797,6 +89012,9 @@ OUI:88C9B3E*
+ OUI:88C9D0*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
++OUI:88C9E8*
++ ID_OUI_FROM_DATABASE=Sony Corporation
++
+ OUI:88CB87*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -87941,6 +89159,9 @@ OUI:88F031*
+ OUI:88F077*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:88F2BD*
++ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
++
+ OUI:88F488*
+  ID_OUI_FROM_DATABASE=cellon communications technology(shenzhen)Co.,Ltd.
+ 
+@@ -87959,6 +89180,9 @@ OUI:88F7C7*
+ OUI:88F872*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:88FC5D*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:88FCA6*
+  ID_OUI_FROM_DATABASE=devolo AG
+ 
+@@ -88079,12 +89303,18 @@ OUI:8C147DE*
+ OUI:8C14B4*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:8C1553*
++ ID_OUI_FROM_DATABASE=Beijing Memblaze Technology Co Ltd
++
+ OUI:8C15C7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:8C1645*
+  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+ 
++OUI:8C1759*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:8C17B6*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -88193,6 +89423,9 @@ OUI:8C1CDAE*
+ OUI:8C1D96*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:8C1E80*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:8C1ED9*
+  ID_OUI_FROM_DATABASE=Beijing Unigroup Tsingteng Microsystem Co., LTD.
+ 
+@@ -88202,6 +89435,24 @@ OUI:8C1F64000*
+ OUI:8C1F64003*
+  ID_OUI_FROM_DATABASE=Brighten Controls LLP
+ 
++OUI:8C1F64017*
++ ID_OUI_FROM_DATABASE=Farmote Limited
++
++OUI:8C1F6401A*
++ ID_OUI_FROM_DATABASE=Paragraf
++
++OUI:8C1F6401E*
++ ID_OUI_FROM_DATABASE=SCIREQ Scientific Respiratory Equipment  Inc
++
++OUI:8C1F64045*
++ ID_OUI_FROM_DATABASE=VEILUX INC.
++
++OUI:8C1F64059*
++ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
++
++OUI:8C1F6405F*
++ ID_OUI_FROM_DATABASE=ESCAD AUTOMATION GmbH
++
+ OUI:8C1F6406D*
+  ID_OUI_FROM_DATABASE=Monnit Corporation
+ 
+@@ -88223,6 +89474,9 @@ OUI:8C1F64086*
+ OUI:8C1F6408B*
+  ID_OUI_FROM_DATABASE=Shanghai Shenxu Technology Co., Ltd
+ 
++OUI:8C1F6408F*
++ ID_OUI_FROM_DATABASE=AixControl GmbH
++
+ OUI:8C1F64099*
+  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
+ 
+@@ -88238,9 +89492,18 @@ OUI:8C1F640A8*
+ OUI:8C1F640AB*
+  ID_OUI_FROM_DATABASE=Norbit ODM AS
+ 
++OUI:8C1F640AF*
++ ID_OUI_FROM_DATABASE=FORSEE POWER
++
++OUI:8C1F640B0*
++ ID_OUI_FROM_DATABASE=Bunka Shutter Co., Ltd.
++
+ OUI:8C1F640B8*
+  ID_OUI_FROM_DATABASE=Signatrol Ltd
+ 
++OUI:8C1F640C0*
++ ID_OUI_FROM_DATABASE=Active Research Limited
++
+ OUI:8C1F640C5*
+  ID_OUI_FROM_DATABASE=TechnipFMC
+ 
+@@ -88250,6 +89513,9 @@ OUI:8C1F640D6*
+ OUI:8C1F640E0*
+  ID_OUI_FROM_DATABASE=Autopharma
+ 
++OUI:8C1F640E6*
++ ID_OUI_FROM_DATABASE=Cleanwatts Digital, S.A.
++
+ OUI:8C1F640EA*
+  ID_OUI_FROM_DATABASE=SmartSky Networks LLC
+ 
+@@ -88268,6 +89534,9 @@ OUI:8C1F64103*
+ OUI:8C1F64111*
+  ID_OUI_FROM_DATABASE=ISAC SRL
+ 
++OUI:8C1F64115*
++ ID_OUI_FROM_DATABASE=Neuralog LP
++
+ OUI:8C1F64118*
+  ID_OUI_FROM_DATABASE=Automata GmbH & Co. KG
+ 
+@@ -88277,6 +89546,9 @@ OUI:8C1F6411F*
+ OUI:8C1F64128*
+  ID_OUI_FROM_DATABASE=YULISTA INTEGRATED SOLUTION
+ 
++OUI:8C1F6412B*
++ ID_OUI_FROM_DATABASE=Beijing Tongtech Technology Co., Ltd.
++
+ OUI:8C1F64135*
+  ID_OUI_FROM_DATABASE=Yuval Fichman
+ 
+@@ -88304,6 +89576,9 @@ OUI:8C1F64177*
+ OUI:8C1F64193*
+  ID_OUI_FROM_DATABASE=Sicon srl
+ 
++OUI:8C1F64194*
++ ID_OUI_FROM_DATABASE=TIFLEX
++
+ OUI:8C1F6419B*
+  ID_OUI_FROM_DATABASE=FeedFlo
+ 
+@@ -88325,6 +89600,9 @@ OUI:8C1F641BF*
+ OUI:8C1F641C2*
+  ID_OUI_FROM_DATABASE=Solid Invent Ltda.
+ 
++OUI:8C1F641CB*
++ ID_OUI_FROM_DATABASE=SASYS e.K.
++
+ OUI:8C1F641D1*
+  ID_OUI_FROM_DATABASE=AS Strömungstechnik GmbH
+ 
+@@ -88337,6 +89615,9 @@ OUI:8C1F641E1*
+ OUI:8C1F641E3*
+  ID_OUI_FROM_DATABASE=WBNet
+ 
++OUI:8C1F641EF*
++ ID_OUI_FROM_DATABASE=Tantronic AG
++
+ OUI:8C1F64204*
+  ID_OUI_FROM_DATABASE=castcore
+ 
+@@ -88352,9 +89633,15 @@ OUI:8C1F64224*
+ OUI:8C1F64227*
+  ID_OUI_FROM_DATABASE=Digilens
+ 
++OUI:8C1F6422E*
++ ID_OUI_FROM_DATABASE=Jide Car Rastreamento e Monitoramento LTDA
++
+ OUI:8C1F64242*
+  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
+ 
++OUI:8C1F64254*
++ ID_OUI_FROM_DATABASE=Zhuhai Yunzhou Intelligence Technology Ltd.
++
+ OUI:8C1F64256*
+  ID_OUI_FROM_DATABASE=Landinger
+ 
+@@ -88370,9 +89657,15 @@ OUI:8C1F64264*
+ OUI:8C1F64270*
+  ID_OUI_FROM_DATABASE=Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
+ 
++OUI:8C1F64274*
++ ID_OUI_FROM_DATABASE=INVIXIUM ACCESS INC
++
+ OUI:8C1F6428A*
+  ID_OUI_FROM_DATABASE=Arcopie
+ 
++OUI:8C1F6428C*
++ ID_OUI_FROM_DATABASE=Sakura Seiki Co.,Ltd.
++
+ OUI:8C1F64296*
+  ID_OUI_FROM_DATABASE=Roog zhi tong Technology(Beijing) Co.,Ltd
+ 
+@@ -88391,6 +89684,9 @@ OUI:8C1F642B6*
+ OUI:8C1F642C2*
+  ID_OUI_FROM_DATABASE=TEX COMPUTER SRL
+ 
++OUI:8C1F642C3*
++ ID_OUI_FROM_DATABASE=TeraDiode / Panasonic
++
+ OUI:8C1F642C8*
+  ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
+ 
+@@ -88403,6 +89699,9 @@ OUI:8C1F642EF*
+ OUI:8C1F642F5*
+  ID_OUI_FROM_DATABASE=Florida R&D Associates LLC
+ 
++OUI:8C1F642FD*
++ ID_OUI_FROM_DATABASE=Enestone Corporation
++
+ OUI:8C1F64304*
+  ID_OUI_FROM_DATABASE=Jemac Sweden AB
+ 
+@@ -88412,6 +89711,9 @@ OUI:8C1F64306*
+ OUI:8C1F6430A*
+  ID_OUI_FROM_DATABASE=XCOM Labs
+ 
++OUI:8C1F64316*
++ ID_OUI_FROM_DATABASE=Potter Electric Signal Company
++
+ OUI:8C1F6431A*
+  ID_OUI_FROM_DATABASE=Asiga Pty Ltd
+ 
+@@ -88421,6 +89723,9 @@ OUI:8C1F64328*
+ OUI:8C1F64330*
+  ID_OUI_FROM_DATABASE=Vision Systems Safety Tech
+ 
++OUI:8C1F6435C*
++ ID_OUI_FROM_DATABASE=Opgal Optronic Industries ltd
++
+ OUI:8C1F6435D*
+  ID_OUI_FROM_DATABASE=Security&Best
+ 
+@@ -88436,9 +89741,15 @@ OUI:8C1F64382*
+ OUI:8C1F64385*
+  ID_OUI_FROM_DATABASE=Multilane Inc
+ 
++OUI:8C1F6438B*
++ ID_OUI_FROM_DATABASE=Borrell USA Corp
++
+ OUI:8C1F6438D*
+  ID_OUI_FROM_DATABASE=Wilson Electronics
+ 
++OUI:8C1F6438E*
++ ID_OUI_FROM_DATABASE=Wartsila Voyage Limited
++
+ OUI:8C1F64391*
+  ID_OUI_FROM_DATABASE=CPC (UK)
+ 
+@@ -88454,6 +89765,9 @@ OUI:8C1F643A4*
+ OUI:8C1F643AD*
+  ID_OUI_FROM_DATABASE=TowerIQ
+ 
++OUI:8C1F643B2*
++ ID_OUI_FROM_DATABASE=Real Digital
++
+ OUI:8C1F643B5*
+  ID_OUI_FROM_DATABASE=SVMS
+ 
+@@ -88463,18 +89777,30 @@ OUI:8C1F643C4*
+ OUI:8C1F643C6*
+  ID_OUI_FROM_DATABASE=Wavestream Corp
+ 
++OUI:8C1F643D1*
++ ID_OUI_FROM_DATABASE=EMIT GmbH
++
+ OUI:8C1F643E0*
+  ID_OUI_FROM_DATABASE=YPP Corporation
+ 
+ OUI:8C1F643E8*
+  ID_OUI_FROM_DATABASE=Ruichuangte
+ 
++OUI:8C1F643F4*
++ ID_OUI_FROM_DATABASE=ACTELSER S.L.
++
+ OUI:8C1F643FE*
+  ID_OUI_FROM_DATABASE=Plum sp. z.o.o.
+ 
+ OUI:8C1F643FF*
+  ID_OUI_FROM_DATABASE=UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD.
+ 
++OUI:8C1F6440C*
++ ID_OUI_FROM_DATABASE=Sichuan Aiyijan Technology Company Ltd.
++
++OUI:8C1F6440E*
++ ID_OUI_FROM_DATABASE=Baker Hughes EMEA
++
+ OUI:8C1F64414*
+  ID_OUI_FROM_DATABASE=INSEVIS GmbH
+ 
+@@ -88484,6 +89810,9 @@ OUI:8C1F64417*
+ OUI:8C1F6441D*
+  ID_OUI_FROM_DATABASE=Aspen Spectra Sdn Bhd
+ 
++OUI:8C1F64429*
++ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
++
+ OUI:8C1F6442B*
+  ID_OUI_FROM_DATABASE=Gamber Johnson-LLC
+ 
+@@ -88508,12 +89837,21 @@ OUI:8C1F64466*
+ OUI:8C1F64472*
+  ID_OUI_FROM_DATABASE=Surge Networks, Inc.
+ 
++OUI:8C1F6447A*
++ ID_OUI_FROM_DATABASE=Missing Link Electronics, Inc.
++
++OUI:8C1F64489*
++ ID_OUI_FROM_DATABASE=HUPI
++
+ OUI:8C1F64493*
+  ID_OUI_FROM_DATABASE=Security Products International, LLC
+ 
+ OUI:8C1F64498*
+  ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+ 
++OUI:8C1F644AC*
++ ID_OUI_FROM_DATABASE=Vekto
++
+ OUI:8C1F644B0*
+  ID_OUI_FROM_DATABASE=U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
+ 
+@@ -88529,6 +89867,9 @@ OUI:8C1F644C7*
+ OUI:8C1F644CD*
+  ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+ 
++OUI:8C1F644D6*
++ ID_OUI_FROM_DATABASE=Dan Smith LLC
++
+ OUI:8C1F644DA*
+  ID_OUI_FROM_DATABASE=DTDS Technology Pte Ltd
+ 
+@@ -88538,6 +89879,12 @@ OUI:8C1F644DB*
+ OUI:8C1F644DD*
+  ID_OUI_FROM_DATABASE=Griffyn Robotech Private Limited
+ 
++OUI:8C1F644E0*
++ ID_OUI_FROM_DATABASE=PuS GmbH und Co. KG
++
++OUI:8C1F644E5*
++ ID_OUI_FROM_DATABASE=Renukas Castle Hard- and Software
++
+ OUI:8C1F644EC*
+  ID_OUI_FROM_DATABASE=XOR UK Corporation Limited
+ 
+@@ -88547,6 +89894,9 @@ OUI:8C1F644F0*
+ OUI:8C1F644FA*
+  ID_OUI_FROM_DATABASE=Sanskruti
+ 
++OUI:8C1F64504*
++ ID_OUI_FROM_DATABASE=EA Elektroautomatik GmbH & Co. KG
++
+ OUI:8C1F6450A*
+  ID_OUI_FROM_DATABASE=BELLCO TRADING COMPANY (PVT) LTD
+ 
+@@ -88562,6 +89912,12 @@ OUI:8C1F64517*
+ OUI:8C1F64521*
+  ID_OUI_FROM_DATABASE=MP-SENSOR GmbH
+ 
++OUI:8C1F64525*
++ ID_OUI_FROM_DATABASE=United States Technologies Inc.
++
++OUI:8C1F6452D*
++ ID_OUI_FROM_DATABASE=Cubic ITS, Inc. dba GRIDSMART Technologies
++
+ OUI:8C1F64534*
+  ID_OUI_FROM_DATABASE=SURYA ELECTRONICS
+ 
+@@ -88574,6 +89930,9 @@ OUI:8C1F64536*
+ OUI:8C1F6453A*
+  ID_OUI_FROM_DATABASE=TPVision Europe B.V
+ 
++OUI:8C1F6453B*
++ ID_OUI_FROM_DATABASE=REFU Storage System GmbH
++
+ OUI:8C1F6453D*
+  ID_OUI_FROM_DATABASE=NEXCONTECH
+ 
+@@ -88589,6 +89948,15 @@ OUI:8C1F64549*
+ OUI:8C1F6454C*
+  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
+ 
++OUI:8C1F6454F*
++ ID_OUI_FROM_DATABASE=Toolplanet Co., Ltd.
++
++OUI:8C1F64552*
++ ID_OUI_FROM_DATABASE=Proterra, Inc
++
++OUI:8C1F64557*
++ ID_OUI_FROM_DATABASE=In-lite Design BV
++
+ OUI:8C1F6455E*
+  ID_OUI_FROM_DATABASE=HANATEKSYSTEM
+ 
+@@ -88607,9 +89975,18 @@ OUI:8C1F6457A*
+ OUI:8C1F6457B*
+  ID_OUI_FROM_DATABASE=Potter Electric Signal Company
+ 
++OUI:8C1F64581*
++ ID_OUI_FROM_DATABASE=SpectraDynamics, Inc.
++
++OUI:8C1F6459F*
++ ID_OUI_FROM_DATABASE=Delta Computers LLC.
++
+ OUI:8C1F645AE*
+  ID_OUI_FROM_DATABASE=Suzhou Motorcomm Electronic Technology Co., Ltd
+ 
++OUI:8C1F645B3*
++ ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH.
++
+ OUI:8C1F645BC*
+  ID_OUI_FROM_DATABASE=HEITEC AG
+ 
+@@ -88640,6 +90017,12 @@ OUI:8C1F64619*
+ OUI:8C1F6461F*
+  ID_OUI_FROM_DATABASE=Lightworks GmbH
+ 
++OUI:8C1F64622*
++ ID_OUI_FROM_DATABASE=Logical Product
++
++OUI:8C1F64634*
++ ID_OUI_FROM_DATABASE=AML
++
+ OUI:8C1F64638*
+  ID_OUI_FROM_DATABASE=THUNDER DATA TAIWAN CO., LTD.
+ 
+@@ -88664,15 +90047,27 @@ OUI:8C1F64656*
+ OUI:8C1F6465F*
+  ID_OUI_FROM_DATABASE=Astrometric Instruments, Inc.
+ 
++OUI:8C1F64660*
++ ID_OUI_FROM_DATABASE=LLC NTPC
++
+ OUI:8C1F64663*
+  ID_OUI_FROM_DATABASE=mal-tech Technological Solutions Ltd/CRISP
+ 
+ OUI:8C1F6466C*
+  ID_OUI_FROM_DATABASE=LINEAGE POWER PVT LTD.,
+ 
++OUI:8C1F64672*
++ ID_OUI_FROM_DATABASE=Farmobile LLC
++
+ OUI:8C1F64675*
+  ID_OUI_FROM_DATABASE=Transit Solutions, LLC.
+ 
++OUI:8C1F6467A*
++ ID_OUI_FROM_DATABASE=MG s.r.l.
++
++OUI:8C1F64697*
++ ID_OUI_FROM_DATABASE=Sontay Ltd.
++
+ OUI:8C1F6469E*
+  ID_OUI_FROM_DATABASE=AT-Automation Technology GmbH
+ 
+@@ -88709,9 +90104,18 @@ OUI:8C1F646EA*
+ OUI:8C1F646F4*
+  ID_OUI_FROM_DATABASE=Elsist Srl
+ 
++OUI:8C1F646F9*
++ ID_OUI_FROM_DATABASE=ANDDORO LLC
++
+ OUI:8C1F646FC*
+  ID_OUI_FROM_DATABASE=HM Systems A/S
+ 
++OUI:8C1F64702*
++ ID_OUI_FROM_DATABASE=AIDirections
++
++OUI:8C1F64703*
++ ID_OUI_FROM_DATABASE=Calnex Solutions plc
++
+ OUI:8C1F64707*
+  ID_OUI_FROM_DATABASE=OAS AG
+ 
+@@ -88724,6 +90128,9 @@ OUI:8C1F6470E*
+ OUI:8C1F64712*
+  ID_OUI_FROM_DATABASE=Nexion Data Systems P/L
+ 
++OUI:8C1F64721*
++ ID_OUI_FROM_DATABASE=M/S MILIND RAMACHANDRA RAJWADE
++
+ OUI:8C1F64726*
+  ID_OUI_FROM_DATABASE=DAVE SRL
+ 
+@@ -88733,6 +90140,9 @@ OUI:8C1F6472A*
+ OUI:8C1F6472C*
+  ID_OUI_FROM_DATABASE=Antai technology Co.,Ltd
+ 
++OUI:8C1F6473C*
++ ID_OUI_FROM_DATABASE=REO AG
++
+ OUI:8C1F6473D*
+  ID_OUI_FROM_DATABASE=NewAgeMicro
+ 
+@@ -88745,12 +90155,18 @@ OUI:8C1F64747*
+ OUI:8C1F6475F*
+  ID_OUI_FROM_DATABASE=ASTRACOM Co. Ltd
+ 
++OUI:8C1F64765*
++ ID_OUI_FROM_DATABASE=Micro Electroninc Products
++
+ OUI:8C1F64768*
+  ID_OUI_FROM_DATABASE=mapna group
+ 
+ OUI:8C1F64774*
+  ID_OUI_FROM_DATABASE=navXperience GmbH
+ 
++OUI:8C1F64775*
++ ID_OUI_FROM_DATABASE=Becton Dickinson
++
+ OUI:8C1F6477C*
+  ID_OUI_FROM_DATABASE=Orange Tree Technologies Ltd
+ 
+@@ -88778,6 +90194,15 @@ OUI:8C1F647A1*
+ OUI:8C1F647A6*
+  ID_OUI_FROM_DATABASE=OTMetric
+ 
++OUI:8C1F647A7*
++ ID_OUI_FROM_DATABASE=Timegate Instruments Ltd.
++
++OUI:8C1F647AA*
++ ID_OUI_FROM_DATABASE=XSENSOR Technology Corp.
++
++OUI:8C1F647B7*
++ ID_OUI_FROM_DATABASE=Weidmann Tecnologia Electrica de Mexico
++
+ OUI:8C1F647B8*
+  ID_OUI_FROM_DATABASE=TimeMachines Inc.
+ 
+@@ -88790,12 +90215,18 @@ OUI:8C1F647C8*
+ OUI:8C1F647D2*
+  ID_OUI_FROM_DATABASE=Enlaps
+ 
++OUI:8C1F647D3*
++ ID_OUI_FROM_DATABASE=Suntech Engineering
++
+ OUI:8C1F647D6*
+  ID_OUI_FROM_DATABASE=Algodue Elettronica Srl
+ 
+ OUI:8C1F647DD*
+  ID_OUI_FROM_DATABASE=TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
+ 
++OUI:8C1F647DE*
++ ID_OUI_FROM_DATABASE=SOCNOC AI Inc
++
+ OUI:8C1F647EC*
+  ID_OUI_FROM_DATABASE=Methods2Business B.V.
+ 
+@@ -88805,12 +90236,18 @@ OUI:8C1F647F1*
+ OUI:8C1F64801*
+  ID_OUI_FROM_DATABASE=Zhejiang Laolan Information Technology Co., Ltd
+ 
++OUI:8C1F64807*
++ ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
++
+ OUI:8C1F6481A*
+  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
+ 
+ OUI:8C1F64820*
+  ID_OUI_FROM_DATABASE=TIAMA
+ 
++OUI:8C1F64837*
++ ID_OUI_FROM_DATABASE=Rumble, Inc
++
+ OUI:8C1F6483A*
+  ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+ 
+@@ -88820,9 +90257,15 @@ OUI:8C1F6483C*
+ OUI:8C1F64848*
+  ID_OUI_FROM_DATABASE=Jena-Optronik GmbH
+ 
++OUI:8C1F6484C*
++ ID_OUI_FROM_DATABASE=AvMap srlu
++
+ OUI:8C1F6484E*
+  ID_OUI_FROM_DATABASE=West Pharmaceutical Services, Inc.
+ 
++OUI:8C1F64855*
++ ID_OUI_FROM_DATABASE=e.kundenservice Netz GmbH
++
+ OUI:8C1F64856*
+  ID_OUI_FROM_DATABASE=Garten Automation
+ 
+@@ -88832,12 +90275,18 @@ OUI:8C1F6485B*
+ OUI:8C1F64878*
+  ID_OUI_FROM_DATABASE=Green Access Ltd
+ 
++OUI:8C1F64883*
++ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
++
+ OUI:8C1F6488D*
+  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
+ 
+ OUI:8C1F64892*
+  ID_OUI_FROM_DATABASE=MDI Industrial
+ 
++OUI:8C1F6489E*
++ ID_OUI_FROM_DATABASE=Cinetix Srl
++
+ OUI:8C1F648A4*
+  ID_OUI_FROM_DATABASE=Genesis Technologies AG
+ 
+@@ -88865,27 +90314,42 @@ OUI:8C1F648C2*
+ OUI:8C1F648C4*
+  ID_OUI_FROM_DATABASE=Hermes Network Inc
+ 
++OUI:8C1F648CF*
++ ID_OUI_FROM_DATABASE=Diffraction Limited
++
+ OUI:8C1F648D1*
+  ID_OUI_FROM_DATABASE=Orlaco Products B.V.
+ 
+ OUI:8C1F648D4*
+  ID_OUI_FROM_DATABASE=Recab Sweden AB
+ 
++OUI:8C1F648D9*
++ ID_OUI_FROM_DATABASE=Pietro Fiorentini Spa
++
+ OUI:8C1F648E2*
+  ID_OUI_FROM_DATABASE=ALPHA Corporation
+ 
++OUI:8C1F648E9*
++ ID_OUI_FROM_DATABASE=Vesperix Corporation
++
+ OUI:8C1F648EE*
+  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+ 
+ OUI:8C1F64903*
+  ID_OUI_FROM_DATABASE=Portrait Displays, Inc.
+ 
++OUI:8C1F64905*
++ ID_OUI_FROM_DATABASE=Qualitrol LLC
++
+ OUI:8C1F64909*
+  ID_OUI_FROM_DATABASE=MATELEX
+ 
+ OUI:8C1F6490E*
+  ID_OUI_FROM_DATABASE=Xacti Corporation
+ 
++OUI:8C1F64911*
++ ID_OUI_FROM_DATABASE=EOLANE
++
+ OUI:8C1F64918*
+  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+ 
+@@ -88898,15 +90362,30 @@ OUI:8C1F6492A*
+ OUI:8C1F6492D*
+  ID_OUI_FROM_DATABASE=IVOR Intelligent Electrical Appliance Co., Ltd
+ 
++OUI:8C1F64939*
++ ID_OUI_FROM_DATABASE=SPIT Technology, Inc
++
++OUI:8C1F64943*
++ ID_OUI_FROM_DATABASE=Autark GmbH
++
+ OUI:8C1F64947*
+  ID_OUI_FROM_DATABASE=LLC TC Vympel
+ 
++OUI:8C1F6494E*
++ ID_OUI_FROM_DATABASE=Monnit Corporation
++
+ OUI:8C1F64956*
+  ID_OUI_FROM_DATABASE=Paulmann Licht GmbH
+ 
++OUI:8C1F64958*
++ ID_OUI_FROM_DATABASE=Sanchar Telesystems limited
++
+ OUI:8C1F6495A*
+  ID_OUI_FROM_DATABASE=Shenzhen Longyun Lighting Electric Appliances Co., Ltd
+ 
++OUI:8C1F64967*
++ ID_OUI_FROM_DATABASE=DAVE SRL
++
+ OUI:8C1F64971*
+  ID_OUI_FROM_DATABASE=INFRASAFE/ ADVANTOR SYSTEMS
+ 
+@@ -88925,6 +90404,12 @@ OUI:8C1F64998*
+ OUI:8C1F649A6*
+  ID_OUI_FROM_DATABASE=INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS
+ 
++OUI:8C1F649BA*
++ ID_OUI_FROM_DATABASE=WINTUS SYSTEM
++
++OUI:8C1F649BD*
++ ID_OUI_FROM_DATABASE=ATM SOLUTIONS
++
+ OUI:8C1F649C1*
+  ID_OUI_FROM_DATABASE=RealWear
+ 
+@@ -88937,6 +90422,9 @@ OUI:8C1F649CE*
+ OUI:8C1F649CF*
+  ID_OUI_FROM_DATABASE=ASAP Electronics GmbH
+ 
++OUI:8C1F649D4*
++ ID_OUI_FROM_DATABASE=Wolfspyre Labs
++
+ OUI:8C1F649D8*
+  ID_OUI_FROM_DATABASE=Integer.pl S.A.
+ 
+@@ -88946,6 +90434,9 @@ OUI:8C1F649F0*
+ OUI:8C1F649F2*
+  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+ 
++OUI:8C1F649FA*
++ ID_OUI_FROM_DATABASE=METRONA-Union GmbH
++
+ OUI:8C1F649FD*
+  ID_OUI_FROM_DATABASE=Vishay Nobel AB
+ 
+@@ -88958,6 +90449,9 @@ OUI:8C1F64A01*
+ OUI:8C1F64A07*
+  ID_OUI_FROM_DATABASE=GJD Manufacturing
+ 
++OUI:8C1F64A1B*
++ ID_OUI_FROM_DATABASE=Zilica Limited
++
+ OUI:8C1F64A29*
+  ID_OUI_FROM_DATABASE=Ringtail Security
+ 
+@@ -88970,8 +90464,14 @@ OUI:8C1F64A32*
+ OUI:8C1F64A38*
+  ID_OUI_FROM_DATABASE=NuGrid Power
+ 
++OUI:8C1F64A42*
++ ID_OUI_FROM_DATABASE=Rodgers Instruments US LLC
++
++OUI:8C1F64A44*
++ ID_OUI_FROM_DATABASE=Rapidev Pvt Ltd
++
+ OUI:8C1F64A4C*
+- ID_OUI_FROM_DATABASE=Flextronics International Kft.
++ ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
+ OUI:8C1F64A4E*
+  ID_OUI_FROM_DATABASE=Syscom Instruments SA
+@@ -88982,12 +90482,27 @@ OUI:8C1F64A57*
+ OUI:8C1F64A5C*
+  ID_OUI_FROM_DATABASE=Prosys
+ 
++OUI:8C1F64A5D*
++ ID_OUI_FROM_DATABASE=Shenzhen zhushida Technology lnformation Co.,Ltd
++
++OUI:8C1F64A6A*
++ ID_OUI_FROM_DATABASE=Sphere Com Services Pvt Ltd
++
++OUI:8C1F64A6D*
++ ID_OUI_FROM_DATABASE=CyberneX Co., Ltd
++
+ OUI:8C1F64A76*
+  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+ 
++OUI:8C1F64A84*
++ ID_OUI_FROM_DATABASE=Beijing Wenrise Technology Co., Ltd.
++
+ OUI:8C1F64A94*
+  ID_OUI_FROM_DATABASE=Future wave ultra tech Company
+ 
++OUI:8C1F64A97*
++ ID_OUI_FROM_DATABASE=Integer.pl S.A.
++
+ OUI:8C1F64A9A*
+  ID_OUI_FROM_DATABASE=Signasystems Elektronik San. ve Tic. Ltd. Sti.
+ 
+@@ -88997,9 +90512,18 @@ OUI:8C1F64AA4*
+ OUI:8C1F64AAB*
+  ID_OUI_FROM_DATABASE=BlueSword Intelligent Technology Co., Ltd.
+ 
++OUI:8C1F64AB4*
++ ID_OUI_FROM_DATABASE=Beijing Zhongchen Microelectronics Co.,Ltd
++
+ OUI:8C1F64AB5*
+  ID_OUI_FROM_DATABASE=JUSTMORPH PTE. LTD.
+ 
++OUI:8C1F64AC0*
++ ID_OUI_FROM_DATABASE=AIQuatro
++
++OUI:8C1F64AC5*
++ ID_OUI_FROM_DATABASE=Forever Engineering Systems Pvt. Ltd.
++
+ OUI:8C1F64ACE*
+  ID_OUI_FROM_DATABASE=Rayhaan Networks
+ 
+@@ -89009,6 +90533,9 @@ OUI:8C1F64AD2*
+ OUI:8C1F64AE1*
+  ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+ 
++OUI:8C1F64AE8*
++ ID_OUI_FROM_DATABASE=ADETEC SAS
++
+ OUI:8C1F64AED*
+  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+ 
+@@ -89018,6 +90545,9 @@ OUI:8C1F64AEF*
+ OUI:8C1F64AF7*
+  ID_OUI_FROM_DATABASE=ard sa
+ 
++OUI:8C1F64B01*
++ ID_OUI_FROM_DATABASE=noah
++
+ OUI:8C1F64B03*
+  ID_OUI_FROM_DATABASE=Shenzhen Pisoftware Technology Co.,Ltd.
+ 
+@@ -89033,6 +90563,9 @@ OUI:8C1F64B22*
+ OUI:8C1F64B2C*
+  ID_OUI_FROM_DATABASE=SANMINA ISRAEL MEDICAL SYSTEMS LTD
+ 
++OUI:8C1F64B3B*
++ ID_OUI_FROM_DATABASE=Sicon srl
++
+ OUI:8C1F64B3D*
+  ID_OUI_FROM_DATABASE=RealD, Inc.
+ 
+@@ -89051,6 +90584,12 @@ OUI:8C1F64B64*
+ OUI:8C1F64B77*
+  ID_OUI_FROM_DATABASE=Carestream Dental LLC
+ 
++OUI:8C1F64B7B*
++ ID_OUI_FROM_DATABASE=Gateview Technologies
++
++OUI:8C1F64B7C*
++ ID_OUI_FROM_DATABASE=EVERNET CO,.LTD TAIWAN
++
+ OUI:8C1F64B82*
+  ID_OUI_FROM_DATABASE=Seed Core Co., LTD.
+ 
+@@ -89060,6 +90599,9 @@ OUI:8C1F64B84*
+ OUI:8C1F64B8D*
+  ID_OUI_FROM_DATABASE=Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd
+ 
++OUI:8C1F64B92*
++ ID_OUI_FROM_DATABASE=Neurable
++
+ OUI:8C1F64B97*
+  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
+ 
+@@ -89072,18 +90614,33 @@ OUI:8C1F64BA3*
+ OUI:8C1F64BC0*
+  ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH
+ 
++OUI:8C1F64BC2*
++ ID_OUI_FROM_DATABASE=Huz Electronics Ltd
++
+ OUI:8C1F64BC6*
+  ID_OUI_FROM_DATABASE=Chengdu ZiChen Time&Frequency Technology Co.,Ltd
+ 
++OUI:8C1F64BD3*
++ ID_OUI_FROM_DATABASE=IO Master Technology
++
++OUI:8C1F64BD6*
++ ID_OUI_FROM_DATABASE=NOVA Products GmbH
++
+ OUI:8C1F64BD7*
+  ID_OUI_FROM_DATABASE=Union Electronic.
+ 
+ OUI:8C1F64BEE*
+  ID_OUI_FROM_DATABASE=Sirius LLC
+ 
++OUI:8C1F64BF0*
++ ID_OUI_FROM_DATABASE=Newtec A/S
++
+ OUI:8C1F64BF4*
+  ID_OUI_FROM_DATABASE=Fluid Components Intl
+ 
++OUI:8C1F64BFB*
++ ID_OUI_FROM_DATABASE=TechArgos
++
+ OUI:8C1F64C01*
+  ID_OUI_FROM_DATABASE=HORIBA ABX SAS
+ 
+@@ -89096,6 +90653,9 @@ OUI:8C1F64C0C*
+ OUI:8C1F64C1F*
+  ID_OUI_FROM_DATABASE=Esys Srl
+ 
++OUI:8C1F64C24*
++ ID_OUI_FROM_DATABASE=Alifax S.r.l.
++
+ OUI:8C1F64C27*
+  ID_OUI_FROM_DATABASE=Lift Ventures, Inc
+ 
+@@ -89105,21 +90665,39 @@ OUI:8C1F64C28*
+ OUI:8C1F64C2F*
+  ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+ 
++OUI:8C1F64C38*
++ ID_OUI_FROM_DATABASE=ECO-ADAPT
++
+ OUI:8C1F64C40*
+  ID_OUI_FROM_DATABASE=Sciospec Scientific Instruments GmbH
+ 
+ OUI:8C1F64C41*
+  ID_OUI_FROM_DATABASE=Katronic AG & Co. KG
+ 
++OUI:8C1F64C4C*
++ ID_OUI_FROM_DATABASE=Lumiplan Duhamel
++
+ OUI:8C1F64C50*
+  ID_OUI_FROM_DATABASE=Spacee
+ 
+ OUI:8C1F64C54*
+  ID_OUI_FROM_DATABASE=First Mode
+ 
++OUI:8C1F64C68*
++ ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC
++
++OUI:8C1F64C6B*
++ ID_OUI_FROM_DATABASE=Mediana
++
+ OUI:8C1F64C7C*
+  ID_OUI_FROM_DATABASE=MERKLE Schweissanlagen-Technik GmbH
+ 
++OUI:8C1F64C80*
++ ID_OUI_FROM_DATABASE=VECOS Europe B.V.
++
++OUI:8C1F64C8F*
++ ID_OUI_FROM_DATABASE=JW Froehlich Maschinenfabrik GmbH
++
+ OUI:8C1F64C97*
+  ID_OUI_FROM_DATABASE=Magnet-Physik Dr. Steingroever GmbH
+ 
+@@ -89135,12 +90713,18 @@ OUI:8C1F64CAD*
+ OUI:8C1F64CBE*
+  ID_OUI_FROM_DATABASE=Circa Enterprises Inc
+ 
++OUI:8C1F64CCB*
++ ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD
++
+ OUI:8C1F64CD6*
+  ID_OUI_FROM_DATABASE=USM Pty Ltd
+ 
+ OUI:8C1F64CD8*
+  ID_OUI_FROM_DATABASE=Gogo Business Aviation
+ 
++OUI:8C1F64CD9*
++ ID_OUI_FROM_DATABASE=Fingoti Limited
++
+ OUI:8C1F64CDF*
+  ID_OUI_FROM_DATABASE=Canway Technology GmbH
+ 
+@@ -89159,6 +90743,12 @@ OUI:8C1F64CF1*
+ OUI:8C1F64CF3*
+  ID_OUI_FROM_DATABASE=ABB S.p.A.
+ 
++OUI:8C1F64D02*
++ ID_OUI_FROM_DATABASE=Flextronics International Kft
++
++OUI:8C1F64D08*
++ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
++
+ OUI:8C1F64D0E*
+  ID_OUI_FROM_DATABASE=Labforge Inc.
+ 
+@@ -89189,12 +90779,24 @@ OUI:8C1F64D54*
+ OUI:8C1F64D56*
+  ID_OUI_FROM_DATABASE=Wisdom Audio
+ 
++OUI:8C1F64D69*
++ ID_OUI_FROM_DATABASE=ADiCo Corporation
++
+ OUI:8C1F64D78*
+  ID_OUI_FROM_DATABASE=Hunan Oushi Electronic Technology Co.,Ltd
+ 
++OUI:8C1F64D7C*
++ ID_OUI_FROM_DATABASE=QUERCUS TECHNOLOGIES, S.L.
++
+ OUI:8C1F64D7E*
+  ID_OUI_FROM_DATABASE=Thales Belgium
+ 
++OUI:8C1F64D92*
++ ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd.
++
++OUI:8C1F64D9A*
++ ID_OUI_FROM_DATABASE=Beijing Redlink Information Technology Co., Ltd.
++
+ OUI:8C1F64DAA*
+  ID_OUI_FROM_DATABASE=Davetech Limited
+ 
+@@ -89210,21 +90812,36 @@ OUI:8C1F64DB9*
+ OUI:8C1F64DBD*
+  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
+ 
++OUI:8C1F64DC0*
++ ID_OUI_FROM_DATABASE=Pigs Can Fly Labs LLC
++
+ OUI:8C1F64DC9*
+  ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
+ 
+ OUI:8C1F64DCA*
+  ID_OUI_FROM_DATABASE=Porsche engineering
+ 
++OUI:8C1F64DD5*
++ ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
++
+ OUI:8C1F64DE1*
+  ID_OUI_FROM_DATABASE=Franke Aquarotter GmbH
+ 
++OUI:8C1F64DF8*
++ ID_OUI_FROM_DATABASE=Wittra Networks AB
++
+ OUI:8C1F64E02*
+  ID_OUI_FROM_DATABASE=ITS Teknik A/S
+ 
++OUI:8C1F64E0E*
++ ID_OUI_FROM_DATABASE=Nokeval Oy
++
+ OUI:8C1F64E21*
+  ID_OUI_FROM_DATABASE=LG-LHT Aircraft Solutions GmbH
+ 
++OUI:8C1F64E30*
++ ID_OUI_FROM_DATABASE=VMukti Solutions Private Limited
++
+ OUI:8C1F64E41*
+  ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+ 
+@@ -89234,6 +90851,9 @@ OUI:8C1F64E43*
+ OUI:8C1F64E49*
+  ID_OUI_FROM_DATABASE=Samwell International Inc
+ 
++OUI:8C1F64E4C*
++ ID_OUI_FROM_DATABASE=TTC TELEKOMUNIKACE, s.r.o.
++
+ OUI:8C1F64E52*
+  ID_OUI_FROM_DATABASE=LcmVeloci ApS
+ 
+@@ -89243,9 +90863,15 @@ OUI:8C1F64E5C*
+ OUI:8C1F64E5D*
+  ID_OUI_FROM_DATABASE=JinYuan International Corporation
+ 
++OUI:8C1F64E5E*
++ ID_OUI_FROM_DATABASE=BRICKMAKERS GmbH
++
+ OUI:8C1F64E61*
+  ID_OUI_FROM_DATABASE=Stange Elektronik GmbH
+ 
++OUI:8C1F64E64*
++ ID_OUI_FROM_DATABASE=Indefac company
++
+ OUI:8C1F64E73*
+  ID_OUI_FROM_DATABASE=GTR Industries
+ 
+@@ -89255,6 +90881,9 @@ OUI:8C1F64E77*
+ OUI:8C1F64E7B*
+  ID_OUI_FROM_DATABASE=Dongguan Pengchen Earth Instrument CO. LT
+ 
++OUI:8C1F64E7C*
++ ID_OUI_FROM_DATABASE=Ashinne Technology Co., Ltd
++
+ OUI:8C1F64E98*
+  ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD
+ 
+@@ -89270,6 +90899,9 @@ OUI:8C1F64EAC*
+ OUI:8C1F64EB2*
+  ID_OUI_FROM_DATABASE=Aqua Broadcast Ltd
+ 
++OUI:8C1F64EB5*
++ ID_OUI_FROM_DATABASE=Meiryo Denshi Corp.
++
+ OUI:8C1F64EB7*
+  ID_OUI_FROM_DATABASE=Delta Solutions LLC
+ 
+@@ -89285,9 +90917,15 @@ OUI:8C1F64EC1*
+ OUI:8C1F64ED4*
+  ID_OUI_FROM_DATABASE=ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD.
+ 
++OUI:8C1F64ED9*
++ ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP
++
+ OUI:8C1F64EE8*
+  ID_OUI_FROM_DATABASE=Global Organ Group B.V.
+ 
++OUI:8C1F64EEA*
++ ID_OUI_FROM_DATABASE=AMESS
++
+ OUI:8C1F64EEF*
+  ID_OUI_FROM_DATABASE=AiUnion Co.,Ltd
+ 
+@@ -89303,18 +90941,36 @@ OUI:8C1F64F04*
+ OUI:8C1F64F25*
+  ID_OUI_FROM_DATABASE=Misaka Network, Inc.
+ 
++OUI:8C1F64F27*
++ ID_OUI_FROM_DATABASE=Tesat-Spacecom GmbH & Co. KG
++
++OUI:8C1F64F2C*
++ ID_OUI_FROM_DATABASE=Tunstall A/S
++
+ OUI:8C1F64F31*
+  ID_OUI_FROM_DATABASE=International Water Treatment Maritime AS
+ 
+ OUI:8C1F64F32*
+  ID_OUI_FROM_DATABASE=Shenzhen INVT Electric Co.,Ltd
+ 
++OUI:8C1F64F3C*
++ ID_OUI_FROM_DATABASE=Microlynx Systems Ltd
++
+ OUI:8C1F64F3F*
+  ID_OUI_FROM_DATABASE=Industrial Laser Machines, LLC
+ 
+ OUI:8C1F64F41*
+  ID_OUI_FROM_DATABASE=AUTOMATIZACION Y CONECTIVIDAD SA DE CV
+ 
++OUI:8C1F64F45*
++ ID_OUI_FROM_DATABASE=JBF
++
++OUI:8C1F64F4E*
++ ID_OUI_FROM_DATABASE=ADAMCZEWSKI elektronische Messtechnik GmbH
++
++OUI:8C1F64F52*
++ ID_OUI_FROM_DATABASE=AMF Medical SA
++
+ OUI:8C1F64F59*
+  ID_OUI_FROM_DATABASE=Inovonics Inc.
+ 
+@@ -89322,7 +90978,7 @@ OUI:8C1F64F5A*
+  ID_OUI_FROM_DATABASE=Telco Antennas Pty Ltd
+ 
+ OUI:8C1F64F5C*
+- ID_OUI_FROM_DATABASE=Flextronics International Kft.
++ ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
+ OUI:8C1F64F72*
+  ID_OUI_FROM_DATABASE=Contrader
+@@ -89333,6 +90989,9 @@ OUI:8C1F64F74*
+ OUI:8C1F64F78*
+  ID_OUI_FROM_DATABASE=Ternary Research Corporation
+ 
++OUI:8C1F64F7A*
++ ID_OUI_FROM_DATABASE=SiEngine Technology Co., Ltd.
++
+ OUI:8C1F64F86*
+  ID_OUI_FROM_DATABASE=INFOSTECH Co., Ltd.
+ 
+@@ -89345,12 +91004,21 @@ OUI:8C1F64F96*
+ OUI:8C1F64F9E*
+  ID_OUI_FROM_DATABASE=DREAMSWELL Technology CO.,Ltd
+ 
++OUI:8C1F64FA2*
++ ID_OUI_FROM_DATABASE=AZD Praha s.r.o., ZOZ Olomouc
++
+ OUI:8C1F64FB0*
+  ID_OUI_FROM_DATABASE=MARIAN GmbH
+ 
+ OUI:8C1F64FB1*
+  ID_OUI_FROM_DATABASE=ABB
+ 
++OUI:8C1F64FB7*
++ ID_OUI_FROM_DATABASE=Grace Design/Lunatec LLC
++
++OUI:8C1F64FBA*
++ ID_OUI_FROM_DATABASE=Onto Innovation
++
+ OUI:8C1F64FBD*
+  ID_OUI_FROM_DATABASE=SAN-AI Electronic Industries Co.,Ltd.
+ 
+@@ -89363,12 +91031,24 @@ OUI:8C1F64FD1*
+ OUI:8C1F64FD3*
+  ID_OUI_FROM_DATABASE=SMILICS TECHNOLOGIES, S.L.
+ 
++OUI:8C1F64FD4*
++ ID_OUI_FROM_DATABASE=EMBSYS SISTEMAS EMBARCADOS
++
+ OUI:8C1F64FE0*
+  ID_OUI_FROM_DATABASE=Potter Electric Signal Company
+ 
+ OUI:8C1F64FE3*
+  ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+ 
++OUI:8C1F64FED*
++ ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
++
++OUI:8C1F64FF4*
++ ID_OUI_FROM_DATABASE=SMS group GmbH
++
++OUI:8C1F64FF6*
++ ID_OUI_FROM_DATABASE=Ascon Tecnologic S.r.l.
++
+ OUI:8C1F94*
+  ID_OUI_FROM_DATABASE=RF Surgical System Inc.
+ 
+@@ -89525,6 +91205,9 @@ OUI:8C4962*
+ OUI:8C497A*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:8C49B6*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:8C4AEE*
+  ID_OUI_FROM_DATABASE=GIGA TMS INC
+ 
+@@ -89720,6 +91403,9 @@ OUI:8C6A8D*
+ OUI:8C6AE4*
+  ID_OUI_FROM_DATABASE=Viogem Limited
+ 
++OUI:8C6BDB*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:8C6D50*
+  ID_OUI_FROM_DATABASE=SHENZHEN MTC CO LTD
+ 
+@@ -89744,6 +91430,9 @@ OUI:8C736E*
+ OUI:8C73A0*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
++OUI:8C763F*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:8C76C1*
+  ID_OUI_FROM_DATABASE=Goden Tech Limited
+ 
+@@ -89903,6 +91592,9 @@ OUI:8C965F*
+ OUI:8C97EA*
+  ID_OUI_FROM_DATABASE=FREEBOX SAS
+ 
++OUI:8C9806*
++ ID_OUI_FROM_DATABASE=SHENZHEN SEI ROBOTICS CO.,LTD
++
+ OUI:8C99E6*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
+@@ -90107,6 +91799,9 @@ OUI:8CC8F4D*
+ OUI:8CC8F4E*
+  ID_OUI_FROM_DATABASE=Evaporcool Solutions
+ 
++OUI:8CCBDF*
++ ID_OUI_FROM_DATABASE=FOXCONN INTERCONNECT TECHNOLOGY
++
+ OUI:8CCDA2*
+  ID_OUI_FROM_DATABASE=ACTP, Inc.
+ 
+@@ -90443,6 +92138,9 @@ OUI:902155*
+ OUI:902181*
+  ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd
+ 
++OUI:90235B*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:9023B4*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
+@@ -90467,6 +92165,9 @@ OUI:902BD2*
+ OUI:902CC7*
+  ID_OUI_FROM_DATABASE=C-MAX Asia Limited
+ 
++OUI:902CFB*
++ ID_OUI_FROM_DATABASE=CanTops Co,.Ltd.
++
+ OUI:902E16*
+  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+ 
+@@ -90560,9 +92261,15 @@ OUI:904716*
+ OUI:90473C*
+  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+ 
++OUI:90486C*
++ ID_OUI_FROM_DATABASE=Ring LLC
++
+ OUI:90489A*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:904992*
++ ID_OUI_FROM_DATABASE=YSTen Technology Co.,Ltd
++
+ OUI:9049FA*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -90674,6 +92381,9 @@ OUI:905C44*
+ OUI:905D7C*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
++OUI:905E44*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:905F2E*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
+@@ -90770,6 +92480,9 @@ OUI:907910*
+ OUI:907990*
+  ID_OUI_FROM_DATABASE=Benchmark Electronics Romania SRL
+ 
++OUI:9079CF*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:907A0A*
+  ID_OUI_FROM_DATABASE=Gebr. Bode GmbH & Co KG
+ 
+@@ -90875,6 +92588,9 @@ OUI:909164*
+ OUI:9092B4*
+  ID_OUI_FROM_DATABASE=Diehl BGT Defence GmbH & Co. KG
+ 
++OUI:90935A*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:90940A*
+  ID_OUI_FROM_DATABASE=Analog Devices, Inc
+ 
+@@ -91109,6 +92825,9 @@ OUI:90CC24*
+ OUI:90CCDF*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:90CD1F*
++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
++
+ OUI:90CDB6*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -91124,6 +92843,9 @@ OUI:90CF7D*
+ OUI:90D11B*
+  ID_OUI_FROM_DATABASE=Palomar Medical Technologies
+ 
++OUI:90D473*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:90D74F*
+  ID_OUI_FROM_DATABASE=Bookeen
+ 
+@@ -91157,6 +92879,9 @@ OUI:90DD5D*
+ OUI:90DE80*
+  ID_OUI_FROM_DATABASE=Shenzhen Century Xinyang Technology Co., Ltd
+ 
++OUI:90DF7D*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:90DFB7*
+  ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH
+ 
+@@ -91292,6 +93017,9 @@ OUI:90F652*
+ OUI:90F72F*
+  ID_OUI_FROM_DATABASE=Phillips Machine & Welding Co., Inc.
+ 
++OUI:90F7B2*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:90F891*
+  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
+ 
+@@ -91400,6 +93128,9 @@ OUI:9408C7*
+ OUI:940937*
+  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+ 
++OUI:9409C9*
++ ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD
++
+ OUI:9409D3*
+  ID_OUI_FROM_DATABASE=shenzhen maxtopic technology co.,ltd
+ 
+@@ -91886,6 +93617,9 @@ OUI:94AAB8*
+ OUI:94ABDE*
+  ID_OUI_FROM_DATABASE=OMX Technology - FZE
+ 
++OUI:94ABFE*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:94ACCA*
+  ID_OUI_FROM_DATABASE=trivum technologies GmbH
+ 
+@@ -91982,6 +93716,9 @@ OUI:94C3E4*
+ OUI:94C4E9*
+  ID_OUI_FROM_DATABASE=PowerLayer Microsystems HongKong Limited
+ 
++OUI:94C5A6*
++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
++
+ OUI:94C691*
+  ID_OUI_FROM_DATABASE=EliteGroup Computer Systems Co., LTD
+ 
+@@ -92120,6 +93857,9 @@ OUI:94D299*
+ OUI:94D2BC*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:94D331*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:94D417*
+  ID_OUI_FROM_DATABASE=GPI KOREA INC.
+ 
+@@ -92801,6 +94541,9 @@ OUI:985945*
+ OUI:985949*
+  ID_OUI_FROM_DATABASE=LUXOTTICA GROUP S.P.A.
+ 
++OUI:98597A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:985AEB*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -93185,6 +94928,9 @@ OUI:98A5F9*
+ OUI:98A7B0*
+  ID_OUI_FROM_DATABASE=MCST ZAO
+ 
++OUI:98A92D*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:98A942*
+  ID_OUI_FROM_DATABASE=Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
+ 
+@@ -93308,6 +95054,9 @@ OUI:98C5DB*
+ OUI:98C7A4*
+  ID_OUI_FROM_DATABASE=Shenzhen HS Fiber Communication Equipment CO., LTD
+ 
++OUI:98C81C*
++ ID_OUI_FROM_DATABASE=BAYTEC LIMITED
++
+ OUI:98C845*
+  ID_OUI_FROM_DATABASE=PacketAccess
+ 
+@@ -93371,6 +95120,9 @@ OUI:98D863*
+ OUI:98D88C*
+  ID_OUI_FROM_DATABASE=Nortel Networks
+ 
++OUI:98D93D*
++ ID_OUI_FROM_DATABASE=Demant Enterprise A/S
++
+ OUI:98DA92*
+  ID_OUI_FROM_DATABASE=Vuzix Corporation
+ 
+@@ -93449,6 +95201,9 @@ OUI:98F083*
+ OUI:98F0AB*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:98F112*
++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
++
+ OUI:98F170*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+ 
+@@ -93689,6 +95444,9 @@ OUI:9C1E95*
+ OUI:9C1EA4*
+  ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+ 
++OUI:9C1FCA*
++ ID_OUI_FROM_DATABASE=Hangzhou AlmightyDigit Technology Co., Ltd
++
+ OUI:9C1FDD*
+  ID_OUI_FROM_DATABASE=Accupix Inc.
+ 
+@@ -93698,6 +95456,9 @@ OUI:9C207B*
+ OUI:9C216A*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:9C2183*
++ ID_OUI_FROM_DATABASE=Broadcom Limited
++
+ OUI:9C220E*
+  ID_OUI_FROM_DATABASE=TASCAN Systems GmbH
+ 
+@@ -93852,7 +95613,7 @@ OUI:9C431ED*
+  ID_OUI_FROM_DATABASE=HK ELEPHONE Communication Tech Co.,Limited
+ 
+ OUI:9C431EE*
+- ID_OUI_FROM_DATABASE=Phoenix Audio Technologies
++ ID_OUI_FROM_DATABASE=SHURE INCORPORATED
+ 
+ OUI:9C443D*
+  ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD
+@@ -93888,7 +95649,7 @@ OUI:9C4EBF*
+  ID_OUI_FROM_DATABASE=BoxCast
+ 
+ OUI:9C4F5F*
+- ID_OUI_FROM_DATABASE=TAP Sound System
++ ID_OUI_FROM_DATABASE=Google, Inc.
+ 
+ OUI:9C4FCF*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+@@ -93935,6 +95696,9 @@ OUI:9C5711*
+ OUI:9C57AD*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:9C57BC*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:9C583C*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -94205,6 +95969,9 @@ OUI:9C93B0*
+ OUI:9C93E4*
+  ID_OUI_FROM_DATABASE=Private
+ 
++OUI:9C9561*
++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
++
+ OUI:9C9567*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -94253,6 +96020,9 @@ OUI:9CA10A*
+ OUI:9CA134*
+  ID_OUI_FROM_DATABASE=Nike, Inc.
+ 
++OUI:9CA2F4*
++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
++
+ OUI:9CA3A9*
+  ID_OUI_FROM_DATABASE=Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd
+ 
+@@ -94346,6 +96116,9 @@ OUI:9CBD9D*
+ OUI:9CBEE0*
+  ID_OUI_FROM_DATABASE=Biosoundlab Co., Ltd.
+ 
++OUI:9CBFCD*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:9CC077*
+  ID_OUI_FROM_DATABASE=PrintCounts, LLC
+ 
+@@ -94439,6 +96212,9 @@ OUI:9CDF03*
+ OUI:9CDFB1*
+  ID_OUI_FROM_DATABASE=Shenzhen Crave Communication Co., LTD
+ 
++OUI:9CE041*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:9CE063*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -94898,6 +96674,9 @@ OUI:A028ED*
+ OUI:A02919*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:A02942*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:A029BD*
+  ID_OUI_FROM_DATABASE=Team Group Inc
+ 
+@@ -95042,6 +96821,9 @@ OUI:A0423F*
+ OUI:A04246*
+  ID_OUI_FROM_DATABASE=IT Telecom Co., Ltd.
+ 
++OUI:A042D1*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:A043B0*
+  ID_OUI_FROM_DATABASE=Hangzhou BroadLink Technology Co.,Ltd
+ 
+@@ -95051,6 +96833,9 @@ OUI:A043DB*
+ OUI:A0445C*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:A04466*
++ ID_OUI_FROM_DATABASE=Intellics
++
+ OUI:A047D7*
+  ID_OUI_FROM_DATABASE=Best IT World (India) Pvt Ltd
+ 
+@@ -95459,6 +97244,9 @@ OUI:A0B5DA*
+ OUI:A0B662*
+  ID_OUI_FROM_DATABASE=Acutvista Innovation Co., Ltd.
+ 
++OUI:A0B765*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:A0B8F8*
+  ID_OUI_FROM_DATABASE=Amgen U.S.A. Inc.
+ 
+@@ -95591,6 +97379,9 @@ OUI:A0C5F2E*
+ OUI:A0C6EC*
+  ID_OUI_FROM_DATABASE=ShenZhen ANYK Technology Co.,LTD
+ 
++OUI:A0C98B*
++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
++
+ OUI:A0C9A0*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+ 
+@@ -95729,6 +97520,9 @@ OUI:A0ECF9*
+ OUI:A0EDCD*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:A0EDFB*
++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
++
+ OUI:A0EF84*
+  ID_OUI_FROM_DATABASE=Seine Image Int'l Co., Ltd
+ 
+@@ -95840,6 +97634,9 @@ OUI:A40DBC*
+ OUI:A40E2B*
+  ID_OUI_FROM_DATABASE=Facebook Inc
+ 
++OUI:A40F98*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:A41115*
+  ID_OUI_FROM_DATABASE=Robert Bosch Engineering and Business Solutions pvt. Ltd.
+ 
+@@ -95942,6 +97739,9 @@ OUI:A41B34*
+ OUI:A41BC0*
+  ID_OUI_FROM_DATABASE=Fastec Imaging Corporation
+ 
++OUI:A41EE1*
++ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
++
+ OUI:A41F72*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -96455,6 +98255,9 @@ OUI:A47E36*
+ OUI:A47E39*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:A47EFA*
++ ID_OUI_FROM_DATABASE=Withings
++
+ OUI:A4817A*
+  ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+ 
+@@ -96497,6 +98300,9 @@ OUI:A48E0A*
+ OUI:A49005*
+  ID_OUI_FROM_DATABASE=CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
+ 
++OUI:A490CE*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:A491B1*
+  ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV
+ 
+@@ -96734,6 +98540,9 @@ OUI:A4CEDA*
+ OUI:A4CF12*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:A4CF99*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:A4CFD2*
+  ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
+ 
+@@ -96845,6 +98654,9 @@ OUI:A4DB30*
+ OUI:A4DCBE*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:A4DD58*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:A4DE26*
+  ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
+ 
+@@ -96989,6 +98801,9 @@ OUI:A4F522*
+ OUI:A4F7D0*
+  ID_OUI_FROM_DATABASE=LAN Accessories Co., Ltd.
+ 
++OUI:A4F933*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:A4F9E4*
+  ID_OUI_FROM_DATABASE=AirVine Scientific, Inc.
+ 
+@@ -97274,6 +99089,9 @@ OUI:A85081*
+ OUI:A8515B*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:A851AB*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:A8537D*
+  ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+ 
+@@ -97469,6 +99287,9 @@ OUI:A8776F*
+ OUI:A877E5*
+  ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+ 
++OUI:A8798D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A87B39*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -97625,6 +99446,9 @@ OUI:A8A159*
+ OUI:A8A198*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
++OUI:A8A237*
++ ID_OUI_FROM_DATABASE=Arcadyan Corporation
++
+ OUI:A8A5E2*
+  ID_OUI_FROM_DATABASE=MSF-Vathauer Antriebstechnik GmbH & Co KG
+ 
+@@ -97644,7 +99468,10 @@ OUI:A8B088*
+  ID_OUI_FROM_DATABASE=eero inc.
+ 
+ OUI:A8B0AE*
+- ID_OUI_FROM_DATABASE=LEONI
++ ID_OUI_FROM_DATABASE=BizLink Special Cables Germany GmbH
++
++OUI:A8B13B*
++ ID_OUI_FROM_DATABASE=HP Inc.
+ 
+ OUI:A8B1D4*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+@@ -97709,6 +99536,9 @@ OUI:A8C83A*
+ OUI:A8C87F*
+  ID_OUI_FROM_DATABASE=Roqos, Inc.
+ 
++OUI:A8C98A*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:A8CA7B*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -97838,6 +99668,9 @@ OUI:A8F5DD*
+ OUI:A8F766*
+  ID_OUI_FROM_DATABASE=ITE Tech Inc
+ 
++OUI:A8F7D9*
++ ID_OUI_FROM_DATABASE=Mist Systems, Inc.
++
+ OUI:A8F7E0*
+  ID_OUI_FROM_DATABASE=PLANET Technology Corporation
+ 
+@@ -98054,12 +99887,18 @@ OUI:AC2334*
+ OUI:AC233F*
+  ID_OUI_FROM_DATABASE=Shenzhen Minew Technologies Co., Ltd.
+ 
++OUI:AC2929*
++ ID_OUI_FROM_DATABASE=Infinix mobility limited
++
+ OUI:AC293A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+ OUI:AC2A0C*
+  ID_OUI_FROM_DATABASE=CSR ZHUZHOU INSTITUTE CO.,LTD.
+ 
++OUI:AC2AA1*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:AC2B6E*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -98201,6 +100040,9 @@ OUI:AC512C*
+ OUI:AC5135*
+  ID_OUI_FROM_DATABASE=MPI TECH
+ 
++OUI:AC51AB*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:AC51EE*
+  ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
+ 
+@@ -98375,6 +100217,9 @@ OUI:AC6FD9*
+ OUI:AC710C*
+  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+ 
++OUI:AC712E*
++ ID_OUI_FROM_DATABASE=Fortinet, Inc.
++
+ OUI:AC7236*
+  ID_OUI_FROM_DATABASE=Lexking Technology Co., Ltd.
+ 
+@@ -98454,7 +100299,7 @@ OUI:AC83E9*
+  ID_OUI_FROM_DATABASE=Beijing Zile Technology Co., Ltd
+ 
+ OUI:AC83F0*
+- ID_OUI_FROM_DATABASE=ImmediaTV Corporation
++ ID_OUI_FROM_DATABASE=Cobalt Digital Inc.
+ 
+ OUI:AC83F3*
+  ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
+@@ -98501,6 +100346,9 @@ OUI:AC8D14*
+ OUI:AC8D34*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:AC8FA9*
++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
++
+ OUI:AC8FF8*
+  ID_OUI_FROM_DATABASE=Nokia
+ 
+@@ -98558,6 +100406,9 @@ OUI:ACA22C*
+ OUI:ACA31E*
+  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+ 
++OUI:ACA32F*
++ ID_OUI_FROM_DATABASE=Solidigm Technology
++
+ OUI:ACA430*
+  ID_OUI_FROM_DATABASE=Peerless AV
+ 
+@@ -98603,6 +100454,9 @@ OUI:ACB313*
+ OUI:ACB3B5*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:ACB566*
++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
++
+ OUI:ACB57D*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -98636,6 +100490,9 @@ OUI:ACBE75*
+ OUI:ACBEB6*
+  ID_OUI_FROM_DATABASE=Visualedge Technology Co., Ltd.
+ 
++OUI:ACBF71*
++ ID_OUI_FROM_DATABASE=Bose Corporation
++
+ OUI:ACC1EE*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -98651,6 +100508,9 @@ OUI:ACC33A*
+ OUI:ACC358*
+  ID_OUI_FROM_DATABASE=Continental Automotive Czech Republic s.r.o.
+ 
++OUI:ACC4BD*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:ACC51B*
+  ID_OUI_FROM_DATABASE=Zhuhai Pantum Electronics Co., Ltd.
+ 
+@@ -98690,6 +100550,9 @@ OUI:ACCB51*
+ OUI:ACCC8E*
+  ID_OUI_FROM_DATABASE=Axis Communications AB
+ 
++OUI:ACCCFC*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:ACCE8F*
+  ID_OUI_FROM_DATABASE=HWA YAO TECHNOLOGIES CO., LTD
+ 
+@@ -98711,6 +100574,9 @@ OUI:ACD180*
+ OUI:ACD1B8*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:ACD31D*
++ ID_OUI_FROM_DATABASE=Cisco Meraki
++
+ OUI:ACD364*
+  ID_OUI_FROM_DATABASE=ABB SPA, ABB SACE DIV.
+ 
+@@ -98990,9 +100856,15 @@ OUI:B01F81E*
+ OUI:B01F81F*
+  ID_OUI_FROM_DATABASE=Private
+ 
++OUI:B01F8C*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:B0227A*
+  ID_OUI_FROM_DATABASE=HP Inc.
+ 
++OUI:B02347*
++ ID_OUI_FROM_DATABASE=Shenzhen Giant Microelectronics Company Limited
++
+ OUI:B02491*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -99011,6 +100883,9 @@ OUI:B02680*
+ OUI:B027CF*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:B0285B*
++ ID_OUI_FROM_DATABASE=JUHUA Technology Inc.
++
+ OUI:B02A1F*
+  ID_OUI_FROM_DATABASE=Wingtech Group (HongKong)Limited
+ 
+@@ -99056,6 +100931,9 @@ OUI:B03850*
+ OUI:B03893*
+  ID_OUI_FROM_DATABASE=Onda TLC GmbH
+ 
++OUI:B038E2*
++ ID_OUI_FROM_DATABASE=Wanan Hongsheng Electronic Co.Ltd
++
+ OUI:B03956*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -99077,6 +100955,9 @@ OUI:B03E51*
+ OUI:B03EB0*
+  ID_OUI_FROM_DATABASE=MICRODIA Ltd.
+ 
++OUI:B03F64*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:B04089*
+  ID_OUI_FROM_DATABASE=Senient Systems LTD
+ 
+@@ -99128,6 +101009,9 @@ OUI:B0495F*
+ OUI:B04A39*
+  ID_OUI_FROM_DATABASE=Beijing Roborock Technology Co., Ltd.
+ 
++OUI:B04A6A*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B04BBF*
+  ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA
+ 
+@@ -99221,6 +101105,9 @@ OUI:B06A41*
+ OUI:B06CBF*
+  ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
+ 
++OUI:B06E72*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:B06EBF*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
+@@ -99407,6 +101294,9 @@ OUI:B0A454*
+ OUI:B0A460*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:B0A4F0*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:B0A651*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -99446,6 +101336,9 @@ OUI:B0ADAA*
+ OUI:B0AE25*
+  ID_OUI_FROM_DATABASE=Varikorea
+ 
++OUI:B0AFF7*
++ ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd.
++
+ OUI:B0B113*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -99725,6 +101618,9 @@ OUI:B0E2E5*
+ OUI:B0E39D*
+  ID_OUI_FROM_DATABASE=CAT SYSTEM CO.,LTD.
+ 
++OUI:B0E45C*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B0E4D5*
+  ID_OUI_FROM_DATABASE=Google, Inc.
+ 
+@@ -99809,6 +101705,9 @@ OUI:B0F963*
+ OUI:B0FAEB*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:B0FBDD*
++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
++
+ OUI:B0FC0D*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -99947,9 +101846,15 @@ OUI:B4157E*
+ OUI:B41780*
+  ID_OUI_FROM_DATABASE=DTI Group Ltd
+ 
++OUI:B417A8*
++ ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
++
+ OUI:B418D1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:B41974*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:B41A1D*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -100118,6 +102023,9 @@ OUI:B439D6*
+ OUI:B43A28*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:B43AE2*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:B43D08*
+  ID_OUI_FROM_DATABASE=GX International BV
+ 
+@@ -100277,6 +102185,9 @@ OUI:B467E9*
+ OUI:B46921*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:B4695F*
++ ID_OUI_FROM_DATABASE=TCT mobile ltd
++
+ OUI:B46BFC*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -100295,6 +102206,9 @@ OUI:B46E08*
+ OUI:B46F2D*
+  ID_OUI_FROM_DATABASE=Wahoo Fitness
+ 
++OUI:B47064*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B47356*
+  ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd.
+ 
+@@ -100334,6 +102248,9 @@ OUI:B47C59*
+ OUI:B47C9C*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
++OUI:B47D76*
++ ID_OUI_FROM_DATABASE=KNS Group LLC
++
+ OUI:B47F5E*
+  ID_OUI_FROM_DATABASE=Foresight Manufacture (S) Pte Ltd
+ 
+@@ -100355,6 +102272,9 @@ OUI:B482C5*
+ OUI:B482FE*
+  ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+ 
++OUI:B48351*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:B48547*
+  ID_OUI_FROM_DATABASE=Amptown System Company GmbH
+ 
+@@ -100418,6 +102338,9 @@ OUI:B49EAC*
+ OUI:B49EE6*
+  ID_OUI_FROM_DATABASE=SHENZHEN TECHNOLOGY CO LTD
+ 
++OUI:B49F4D*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:B4A25C*
+  ID_OUI_FROM_DATABASE=Cambium Networks Limited
+ 
+@@ -100487,6 +102410,12 @@ OUI:B4A5AC*
+ OUI:B4A5EF*
+  ID_OUI_FROM_DATABASE=Sercomm Corporation.
+ 
++OUI:B4A678*
++ ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
++
++OUI:B4A7C6*
++ ID_OUI_FROM_DATABASE=SERVERCOM (INDIA) PRIVATE LIMITED
++
+ OUI:B4A828*
+  ID_OUI_FROM_DATABASE=Shenzhen Concox Information Technology Co., Ltd
+ 
+@@ -100922,6 +102851,9 @@ OUI:B8208E*
+ OUI:B820E7*
+  ID_OUI_FROM_DATABASE=Guangzhou Horizontal Information & Network Integration Co. Ltd
+ 
++OUI:B8211C*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:B8224F*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+ 
+@@ -101024,6 +102956,9 @@ OUI:B83D4E*
+ OUI:B83E59*
+  ID_OUI_FROM_DATABASE=Roku, Inc.
+ 
++OUI:B83FD2*
++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
++
+ OUI:B8415F*
+  ID_OUI_FROM_DATABASE=ASP AG
+ 
+@@ -101063,6 +102998,9 @@ OUI:B84FD5*
+ OUI:B85001*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:B850D8*
++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
++
+ OUI:B853AC*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -101102,6 +103040,9 @@ OUI:B85AFE*
+ OUI:B85D0A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:B85DC3*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:B85E7B*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -101198,6 +103139,9 @@ OUI:B87C6F*
+ OUI:B87CF2*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:B87EE5*
++ ID_OUI_FROM_DATABASE=Intelbras
++
+ OUI:B88035*
+  ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited
+ 
+@@ -101348,6 +103292,9 @@ OUI:B89EA6*
+ OUI:B89F09*
+  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+ 
++OUI:B89FCC*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:B8A14A*
+  ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD
+ 
+@@ -101405,6 +103352,9 @@ OUI:B8B2F8*
+ OUI:B8B3DC*
+  ID_OUI_FROM_DATABASE=DEREK (SHAOGUAN) LIMITED
+ 
++OUI:B8B409*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B8B42E*
+  ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen
+ 
+@@ -101543,6 +103493,9 @@ OUI:B8D526*
+ OUI:B8D56B*
+  ID_OUI_FROM_DATABASE=Mirka Ltd.
+ 
++OUI:B8D61A*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:B8D6F6*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -101675,6 +103628,9 @@ OUI:B8F009*
+ OUI:B8F080*
+  ID_OUI_FROM_DATABASE=SPS, INC.
+ 
++OUI:B8F0B9*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:B8F12A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -102212,6 +104168,9 @@ OUI:BC6D05*
+ OUI:BC6E64*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:BC6E6D*
++ ID_OUI_FROM_DATABASE=EM Microelectronic
++
+ OUI:BC6E76*
+  ID_OUI_FROM_DATABASE=Green Energy Options Ltd
+ 
+@@ -102533,6 +104492,12 @@ OUI:BCC61A*
+ OUI:BCC6DB*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:BCC746*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision IND.CO.,LTD
++
++OUI:BCC7DA*
++ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
++
+ OUI:BCC810*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -102566,6 +104531,9 @@ OUI:BCD177*
+ OUI:BCD1D3*
+  ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
+ 
++OUI:BCD206*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:BCD295*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -102629,6 +104597,9 @@ OUI:BCE796*
+ OUI:BCE92F*
+  ID_OUI_FROM_DATABASE=HP Inc.
+ 
++OUI:BCE9E2*
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems LLC
++
+ OUI:BCEA2B*
+  ID_OUI_FROM_DATABASE=CityCom GmbH
+ 
+@@ -102668,6 +104639,9 @@ OUI:BCF310*
+ OUI:BCF45F*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:BCF4D4*
++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++
+ OUI:BCF5AC*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
+@@ -102686,6 +104660,9 @@ OUI:BCF9F2*
+ OUI:BCFAB8*
+  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+ 
++OUI:BCFAEB*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:BCFE8C*
+  ID_OUI_FROM_DATABASE=Altronic, LLC
+ 
+@@ -102713,6 +104690,9 @@ OUI:C00380*
+ OUI:C005C2*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:C0060C*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:C006C3*
+  ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+ 
+@@ -102899,6 +104879,9 @@ OUI:C03DD9*
+ OUI:C03E0F*
+  ID_OUI_FROM_DATABASE=BSkyB Ltd
+ 
++OUI:C03E50*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:C03EBA*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -103067,6 +105050,9 @@ OUI:C06C6D*
+ OUI:C06D1A*
+  ID_OUI_FROM_DATABASE=Tianjin Henxinhuifeng Technology Co.,Ltd.
+ 
++OUI:C06DED*
++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
++
+ OUI:C07009*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -103199,6 +105185,9 @@ OUI:C08C60*
+ OUI:C08C71*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
++OUI:C08D51*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:C08F20*
+  ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 
+@@ -103298,6 +105287,9 @@ OUI:C09F05*
+ OUI:C09F42*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:C09F51*
++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++
+ OUI:C09FE1*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -103346,12 +105338,18 @@ OUI:C0A66D*
+ OUI:C0A8F0*
+  ID_OUI_FROM_DATABASE=Adamson Systems Engineering
+ 
++OUI:C0A938*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:C0AA68*
+  ID_OUI_FROM_DATABASE=OSASI Technos Inc.
+ 
+ OUI:C0AC54*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:C0AD97*
++ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
++
+ OUI:C0AEFD*
+  ID_OUI_FROM_DATABASE=Shenzhen HC-WLAN Technology Co.,Ltd
+ 
+@@ -103412,6 +105410,9 @@ OUI:C0BFA7*
+ OUI:C0BFC0*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:C0C170*
++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
++
+ OUI:C0C1C0*
+  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+ 
+@@ -103559,12 +105560,18 @@ OUI:C0DCD7*
+ OUI:C0DCDA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:C0DD8A*
++ ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
++
+ OUI:C0DF77*
+  ID_OUI_FROM_DATABASE=Conrad Electronic SE
+ 
+ OUI:C0E018*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:C0E01C*
++ ID_OUI_FROM_DATABASE=IoT Security Group, SL
++
+ OUI:C0E1BE*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -103592,11 +105599,17 @@ OUI:C0E7BF*
+ OUI:C0E862*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:C0E911*
++ ID_OUI_FROM_DATABASE=Private
++
+ OUI:C0EAE4*
+  ID_OUI_FROM_DATABASE=Sonicwall
+ 
++OUI:C0EDE5*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:C0EE40*
+- ID_OUI_FROM_DATABASE=Laird Technologies
++ ID_OUI_FROM_DATABASE=Laird Connectivity
+ 
+ OUI:C0EEB5*
+  ID_OUI_FROM_DATABASE=Enice Network.
+@@ -103925,6 +105938,9 @@ OUI:C436DA*
+ OUI:C43772*
+  ID_OUI_FROM_DATABASE=Virtuozzo International GmbH
+ 
++OUI:C43875*
++ ID_OUI_FROM_DATABASE=Sonos, Inc.
++
+ OUI:C438D3*
+  ID_OUI_FROM_DATABASE=TAGATEC CO.,LTD
+ 
+@@ -104402,6 +106418,51 @@ OUI:C49F4C*
+ OUI:C49FF3*
+  ID_OUI_FROM_DATABASE=Mciao Technologies, Inc.
+ 
++OUI:C4A10E0*
++ ID_OUI_FROM_DATABASE=HYOSUNG HEAVY INDUSTRIES
++
++OUI:C4A10E1*
++ ID_OUI_FROM_DATABASE=BARTEC PIXAVI AS
++
++OUI:C4A10E2*
++ ID_OUI_FROM_DATABASE=Wistron InfoComn (Kunshan) Co., Ltd.
++
++OUI:C4A10E3*
++ ID_OUI_FROM_DATABASE=Consolinno Energy GmbH
++
++OUI:C4A10E4*
++ ID_OUI_FROM_DATABASE=Harbour Cross Technology Ltd
++
++OUI:C4A10E5*
++ ID_OUI_FROM_DATABASE=O-NET Industrial Technologies (Shenzhen) Limited
++
++OUI:C4A10E6*
++ ID_OUI_FROM_DATABASE=Hainan World Electronic Science and Techology Co.,Ltd
++
++OUI:C4A10E7*
++ ID_OUI_FROM_DATABASE=Guangzhou South Satellite Navigation Instrument Co., Ltd.
++
++OUI:C4A10E8*
++ ID_OUI_FROM_DATABASE=Ayla Networks (Shenzhen) Co., Ltd.
++
++OUI:C4A10E9*
++ ID_OUI_FROM_DATABASE=XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
++
++OUI:C4A10EA*
++ ID_OUI_FROM_DATABASE=Jiangsu Perceive World Technology Co.,Ltd.
++
++OUI:C4A10EB*
++ ID_OUI_FROM_DATABASE=Clinton Electronics Corporation
++
++OUI:C4A10EC*
++ ID_OUI_FROM_DATABASE=Focus-on
++
++OUI:C4A10ED*
++ ID_OUI_FROM_DATABASE=Connectlab SRL
++
++OUI:C4A10EE*
++ ID_OUI_FROM_DATABASE=Alio, Inc
++
+ OUI:C4A151*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+ 
+@@ -104486,6 +106547,9 @@ OUI:C4BED4*
+ OUI:C4BF60*
+  ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+ 
++OUI:C4C063*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:C4C0AE*
+  ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
+ 
+@@ -104570,6 +106634,12 @@ OUI:C4DD57*
+ OUI:C4DE7B*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:C4DEE2*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
++OUI:C4DF39*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:C4E032*
+  ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group
+ 
+@@ -104789,6 +106859,9 @@ OUI:C80E95*
+ OUI:C81073*
+  ID_OUI_FROM_DATABASE=CENTURY OPTICOMM CO.,LTD
+ 
++OUI:C8120B*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:C8138B*
+  ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 
+@@ -104852,6 +106925,9 @@ OUI:C82158*
+ OUI:C821DA*
+  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+ 
++OUI:C82496*
++ ID_OUI_FROM_DATABASE=Jiangsu Yinhe  Electronics Co.,Ltd.
++
+ OUI:C825E1*
+  ID_OUI_FROM_DATABASE=Lemobile Information Technology (Beijing) Co., Ltd
+ 
+@@ -105149,6 +107225,9 @@ OUI:C869CD*
+ OUI:C86C1E*
+  ID_OUI_FROM_DATABASE=Display Systems Ltd
+ 
++OUI:C86C20*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:C86C3D*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -105344,6 +107423,9 @@ OUI:C89D18*
+ OUI:C89E43*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
++OUI:C89E61*
++ ID_OUI_FROM_DATABASE=Lyngsoe Systems LTd
++
+ OUI:C89F1A*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -105431,6 +107513,9 @@ OUI:C8B5B7*
+ OUI:C8B6D3*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:C8B82F*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:C8BA94*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
+@@ -105461,6 +107546,9 @@ OUI:C8BD69*
+ OUI:C8BE19*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:C8BE35*
++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
++
+ OUI:C8BFFE*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -105551,6 +107639,9 @@ OUI:C8D5FE*
+ OUI:C8D69D*
+  ID_OUI_FROM_DATABASE=Arab International Optronics
+ 
++OUI:C8D6B7*
++ ID_OUI_FROM_DATABASE=Solidigm Technology
++
+ OUI:C8D719*
+  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+ 
+@@ -105617,6 +107708,9 @@ OUI:C8E7F0*
+ OUI:C8EAF8*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:C8EBEC*
++ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
++
+ OUI:C8EE08*
+  ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD
+ 
+@@ -105629,6 +107723,9 @@ OUI:C8EEA6*
+ OUI:C8EF2E*
+  ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd
+ 
++OUI:C8F09E*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:C8F230*
+  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 
+@@ -106034,6 +108131,9 @@ OUI:CC3D82*
+ OUI:CC3E5F*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:CC3E79*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:CC3F1D*
+  ID_OUI_FROM_DATABASE=HMS Industrial Networks SLU
+ 
+@@ -106067,6 +108167,9 @@ OUI:CC46D6*
+ OUI:CC4703*
+  ID_OUI_FROM_DATABASE=Intercon Systems Co., Ltd.
+ 
++OUI:CC4792*
++ ID_OUI_FROM_DATABASE=ASIX Electronics Corporation
++
+ OUI:CC47BD*
+  ID_OUI_FROM_DATABASE=Rhombus Systems
+ 
+@@ -106131,7 +108234,7 @@ OUI:CC4F5CD*
+  ID_OUI_FROM_DATABASE=Beijing Neutron Technology CO.,LTD.
+ 
+ OUI:CC4F5CE*
+- ID_OUI_FROM_DATABASE=Buttons (Beijing) Technology Limited
++ ID_OUI_FROM_DATABASE=Beijing Techao Weijia Technology Limited
+ 
+ OUI:CC500A*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+@@ -106196,6 +108299,9 @@ OUI:CC5FBF*
+ OUI:CC60BB*
+  ID_OUI_FROM_DATABASE=Empower RF Systems
+ 
++OUI:CC60C8*
++ ID_OUI_FROM_DATABASE=Microsoft Corporation
++
+ OUI:CC61E5*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
+@@ -106208,6 +108314,9 @@ OUI:CC65AD*
+ OUI:CC660A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:CC6618*
++ ID_OUI_FROM_DATABASE=Adtran Inc
++
+ OUI:CC66B2*
+  ID_OUI_FROM_DATABASE=Nokia
+ 
+@@ -106307,6 +108416,9 @@ OUI:CC812A*
+ OUI:CC81DA*
+  ID_OUI_FROM_DATABASE=Phicomm (Shanghai) Co., Ltd.
+ 
++OUI:CC827F*
++ ID_OUI_FROM_DATABASE=Advantech Technology (CHINA) Co., Ltd.
++
+ OUI:CC82EB*
+  ID_OUI_FROM_DATABASE=KYOCERA CORPORATION
+ 
+@@ -106736,9 +108848,15 @@ OUI:CCDB04*
+ OUI:CCDB93*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:CCDBA7*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:CCDC55*
+  ID_OUI_FROM_DATABASE=Dragonchip Limited
+ 
++OUI:CCDD58*
++ ID_OUI_FROM_DATABASE=Robert Bosch GmbH
++
+ OUI:CCE0C3*
+  ID_OUI_FROM_DATABASE=EXTEN Technologies, Inc.
+ 
+@@ -106793,6 +108911,9 @@ OUI:CCEF48*
+ OUI:CCF0FD*
+  ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
+ 
++OUI:CCF305*
++ ID_OUI_FROM_DATABASE=SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
++
+ OUI:CCF3A5*
+  ID_OUI_FROM_DATABASE=Chi Mei Communication Systems, Inc
+ 
+@@ -106998,7 +109119,7 @@ OUI:D01E1D*
+  ID_OUI_FROM_DATABASE=SaiNXT Technologies LLP
+ 
+ OUI:D021AC*
+- ID_OUI_FROM_DATABASE=Yo Labs LLC
++ ID_OUI_FROM_DATABASE=Yohana
+ 
+ OUI:D021F9*
+  ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+@@ -107525,6 +109646,9 @@ OUI:D096FB*
+ OUI:D097FE*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:D0989C*
++ ID_OUI_FROM_DATABASE=ConMet
++
+ OUI:D099D5*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent
+ 
+@@ -107597,6 +109721,9 @@ OUI:D0A0D6*
+ OUI:D0A311*
+  ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH
+ 
++OUI:D0A46F*
++ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
++
+ OUI:D0A4B1*
+  ID_OUI_FROM_DATABASE=Sonifex Ltd.
+ 
+@@ -107945,6 +110072,9 @@ OUI:D0FA1D*
+ OUI:D0FCCC*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:D0FCD0*
++ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
++
+ OUI:D0FF50*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -108215,6 +110345,9 @@ OUI:D440F0*
+ OUI:D44165*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+ 
++OUI:D4430E*
++ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
++
+ OUI:D443A8*
+  ID_OUI_FROM_DATABASE=Changzhou Haojie Electric Co., Ltd.
+ 
+@@ -108299,6 +110432,9 @@ OUI:D45763*
+ OUI:D45800*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
++OUI:D45A3F*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:D45AB2*
+  ID_OUI_FROM_DATABASE=Galleon Systems
+ 
+@@ -108677,6 +110813,9 @@ OUI:D4A148*
+ OUI:D4A33D*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:D4A3EB*
++ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
++
+ OUI:D4A425*
+  ID_OUI_FROM_DATABASE=SMAX Technology Co., Ltd.
+ 
+@@ -108758,6 +110897,9 @@ OUI:D4BBE6*
+ OUI:D4BD1E*
+  ID_OUI_FROM_DATABASE=5VT Technologies,Taiwan LTd.
+ 
++OUI:D4BD4F*
++ ID_OUI_FROM_DATABASE=Ruckus Wireless
++
+ OUI:D4BED9*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -108845,6 +110987,9 @@ OUI:D4D7A9*
+ OUI:D4D7CF*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:D4D853*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D4D898*
+  ID_OUI_FROM_DATABASE=Korea CNO Tech Co., Ltd
+ 
+@@ -108863,9 +111008,15 @@ OUI:D4DCCD*
+ OUI:D4DF57*
+  ID_OUI_FROM_DATABASE=Alpinion Medical Systems
+ 
++OUI:D4E053*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:D4E08E*
+  ID_OUI_FROM_DATABASE=ValueHD Corporation
+ 
++OUI:D4E22F*
++ ID_OUI_FROM_DATABASE=Roku, Inc
++
+ OUI:D4E2CB*
+  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+ 
+@@ -108920,6 +111071,9 @@ OUI:D4F057*
+ OUI:D4F0B4*
+  ID_OUI_FROM_DATABASE=Napco Security Technologies
+ 
++OUI:D4F0EA*
++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
++
+ OUI:D4F143*
+  ID_OUI_FROM_DATABASE=IPROAD.,Inc
+ 
+@@ -109019,6 +111173,9 @@ OUI:D80DE3*
+ OUI:D80F99*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:D81068*
++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
++
+ OUI:D8109F*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -109158,7 +111315,10 @@ OUI:D833B7*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
+ OUI:D834EE*
+- ID_OUI_FROM_DATABASE=Stem Audio
++ ID_OUI_FROM_DATABASE=SHURE INCORPORATED
++
++OUI:D8365F*
++ ID_OUI_FROM_DATABASE=Intelbras
+ 
+ OUI:D8373B*
+  ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+@@ -109409,6 +111569,9 @@ OUI:D8803C*
+ OUI:D88083*
+  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 
++OUI:D880DC*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:D881CE*
+  ID_OUI_FROM_DATABASE=AHN INC.
+ 
+@@ -109463,6 +111626,9 @@ OUI:D8860BE*
+ OUI:D887D5*
+  ID_OUI_FROM_DATABASE=Leadcore Technology CO.,LTD
+ 
++OUI:D88863*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:D888CE*
+  ID_OUI_FROM_DATABASE=RF Technology Pty Ltd
+ 
+@@ -109544,6 +111710,9 @@ OUI:D89B3B*
+ OUI:D89C67*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:D89C8E*
++ ID_OUI_FROM_DATABASE=Comcast Cable Corporation
++
+ OUI:D89D67*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -109820,6 +111989,9 @@ OUI:D8E0B8*
+ OUI:D8E0E1*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:D8E2DF*
++ ID_OUI_FROM_DATABASE=Microsoft Corporation
++
+ OUI:D8E3AE*
+  ID_OUI_FROM_DATABASE=CIRTEC MEDICAL SYSTEMS
+ 
+@@ -110090,6 +112262,9 @@ OUI:DC3350*
+ OUI:DC35F1*
+  ID_OUI_FROM_DATABASE=Positivo Tecnologia S.A.
+ 
++OUI:DC360C*
++ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
++
+ OUI:DC36430*
+  ID_OUI_FROM_DATABASE=Meier Tobler AG
+ 
+@@ -110330,6 +112505,9 @@ OUI:DC5392*
+ OUI:DC543D*
+  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+ 
++OUI:DC5475*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:DC54D7*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -110411,6 +112589,9 @@ OUI:DC7144*
+ OUI:DC7196*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:DC71DD*
++ ID_OUI_FROM_DATABASE=AX Technologies
++
+ OUI:DC7223*
+  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+ 
+@@ -110471,6 +112652,9 @@ OUI:DC8C37*
+ OUI:DC8D8A*
+  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+ 
++OUI:DC8E95*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:DC9020*
+  ID_OUI_FROM_DATABASE=RURU TEK PRIVATE LIMITED
+ 
+@@ -110501,6 +112685,9 @@ OUI:DC9914*
+ OUI:DC99FE*
+  ID_OUI_FROM_DATABASE=Armatura LLC
+ 
++OUI:DC9A7D*
++ ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD
++
+ OUI:DC9A8E*
+  ID_OUI_FROM_DATABASE=Nanjing Cocomm electronics co., LTD
+ 
+@@ -110567,6 +112754,9 @@ OUI:DCA8CF*
+ OUI:DCA904*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:DCA956*
++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++
+ OUI:DCA971*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -110621,6 +112811,9 @@ OUI:DCBB96*
+ OUI:DCBD7A*
+  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+ 
++OUI:DCBE49*
++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
++
+ OUI:DCBE7A*
+  ID_OUI_FROM_DATABASE=Zhejiang Nurotron Biotechnology Co.
+ 
+@@ -110912,6 +113105,9 @@ OUI:E00084*
+ OUI:E002A5*
+  ID_OUI_FROM_DATABASE=ABB Robotics
+ 
++OUI:E0036B*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:E00370*
+  ID_OUI_FROM_DATABASE=ShenZhen Continental Wireless Technology Co., Ltd.
+ 
+@@ -111044,12 +113240,18 @@ OUI:E02636*
+ OUI:E0271A*
+  ID_OUI_FROM_DATABASE=TTC Next-generation Home Network System WG
+ 
++OUI:E0276C*
++ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
++
+ OUI:E02861*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:E0286D*
+  ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+ 
++OUI:E028B1*
++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
++
+ OUI:E02967*
+  ID_OUI_FROM_DATABASE=HMD Global Oy
+ 
+@@ -111152,12 +113354,18 @@ OUI:E0469A*
+ OUI:E046E5*
+  ID_OUI_FROM_DATABASE=Gosuncn Technology Group Co., Ltd.
+ 
++OUI:E046EE*
++ ID_OUI_FROM_DATABASE=NETGEAR
++
+ OUI:E048AF*
+  ID_OUI_FROM_DATABASE=Premietech Limited
+ 
+ OUI:E048D3*
+  ID_OUI_FROM_DATABASE=MOBIWIRE MOBILES (NINGBO) CO.,LTD
+ 
++OUI:E048D8*
++ ID_OUI_FROM_DATABASE=Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++
+ OUI:E049ED*
+  ID_OUI_FROM_DATABASE=Audeze LLC
+ 
+@@ -111302,12 +113510,18 @@ OUI:E06995*
+ OUI:E069BA*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:E06A05*
++ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
++
+ OUI:E06C4E*
+  ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
+ 
+ OUI:E06CA6*
+  ID_OUI_FROM_DATABASE=Creotech Instruments S.A.
+ 
++OUI:E06CC5*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:E06CF6*
+  ID_OUI_FROM_DATABASE=ESSENCORE limited
+ 
+@@ -111347,6 +113561,9 @@ OUI:E078A3*
+ OUI:E0795E*
+  ID_OUI_FROM_DATABASE=Wuxi Xiaohu Technology Co.,Ltd.
+ 
++OUI:E0798D*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:E079C4*
+  ID_OUI_FROM_DATABASE=iRay Technology Company Limited
+ 
+@@ -111368,6 +113585,9 @@ OUI:E07F53*
+ OUI:E07F88*
+  ID_OUI_FROM_DATABASE=EVIDENCE Network SIA
+ 
++OUI:E0806B*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:E08177*
+  ID_OUI_FROM_DATABASE=GreenBytes, Inc.
+ 
+@@ -111434,6 +113654,9 @@ OUI:E09861*
+ OUI:E09971*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:E09C8D*
++ ID_OUI_FROM_DATABASE=Seakeeper, Inc.
++
+ OUI:E09D13*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -111716,6 +113939,9 @@ OUI:E0D4E8*
+ OUI:E0D55E*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
++OUI:E0D738*
++ ID_OUI_FROM_DATABASE=WireStar Networks
++
+ OUI:E0D7BA*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -111833,6 +114059,9 @@ OUI:E0F5CA*
+ OUI:E0F62D*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:E0F678*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:E0F6B5*
+  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+ 
+@@ -112379,6 +114608,9 @@ OUI:E48F34*
+ OUI:E48F65*
+  ID_OUI_FROM_DATABASE=Yelatma Instrument Making Enterprise, JSC
+ 
++OUI:E4902A*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:E49069*
+  ID_OUI_FROM_DATABASE=Rockwell Automation
+ 
+@@ -112544,6 +114776,9 @@ OUI:E4B318*
+ OUI:E4B503*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:E4B633*
++ ID_OUI_FROM_DATABASE=Wuxi Stars Microsystem Technology Co., Ltd
++
+ OUI:E4B97A*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -112994,6 +115229,9 @@ OUI:E839DF*
+ OUI:E83A12*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:E83A4B*
++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
++
+ OUI:E83A97*
+  ID_OUI_FROM_DATABASE=Toshiba Corporation
+ 
+@@ -113042,6 +115280,9 @@ OUI:E84D74*
+ OUI:E84DD0*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:E84DEC*
++ ID_OUI_FROM_DATABASE=Xerox Corporation
++
+ OUI:E84E06*
+  ID_OUI_FROM_DATABASE=EDUP INTERNATIONAL (HK) CO., LTD
+ 
+@@ -113306,6 +115547,9 @@ OUI:E88152*
+ OUI:E88175*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:E881AB*
++ ID_OUI_FROM_DATABASE=Beijing Sankuai Online Technology Co.,Ltd
++
+ OUI:E8825B*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -113468,6 +115712,9 @@ OUI:E8B2AC*
+ OUI:E8B2FE*
+  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+ 
++OUI:E8B3EF*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:E8B4700*
+  ID_OUI_FROM_DATABASE=DongGuan Ramaxel Memory Technology
+ 
+@@ -113633,6 +115880,9 @@ OUI:E8D765*
+ OUI:E8D819*
+  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+ 
++OUI:E8D87E*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:E8D8D1*
+  ID_OUI_FROM_DATABASE=HP Inc.
+ 
+@@ -113651,6 +115901,9 @@ OUI:E8DAAA*
+ OUI:E8DB84*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:E8DC6C*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:E8DE00*
+  ID_OUI_FROM_DATABASE=ChongQing GuanFang Technology Co.,LTD
+ 
+@@ -113723,6 +115976,9 @@ OUI:E8EB1B*
+ OUI:E8EB34*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:E8EBD3*
++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
++
+ OUI:E8ECA3*
+  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co.Ltd
+ 
+@@ -113765,6 +116021,9 @@ OUI:E8F654*
+ OUI:E8F724*
+  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+ 
++OUI:E8F791*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:E8F928*
+  ID_OUI_FROM_DATABASE=RFTECH SRL
+ 
+@@ -113777,6 +116036,9 @@ OUI:E8FA23*
+ OUI:E8FAF7*
+  ID_OUI_FROM_DATABASE=Guangdong Uniteddata Holding Group Co., Ltd.
+ 
++OUI:E8FB1C*
++ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
++
+ OUI:E8FBE9*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -113885,6 +116147,9 @@ OUI:EC1D8B*
+ OUI:EC1F72*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
++OUI:EC2125*
++ ID_OUI_FROM_DATABASE=Toshiba Corp.
++
+ OUI:EC219F*
+  ID_OUI_FROM_DATABASE=VidaBox LLC
+ 
+@@ -113945,6 +116210,9 @@ OUI:EC2E98*
+ OUI:EC3091*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:EC30B3*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:EC316D*
+  ID_OUI_FROM_DATABASE=Hansgrohe
+ 
+@@ -114002,6 +116270,9 @@ OUI:EC4269*
+ OUI:EC42B4*
+  ID_OUI_FROM_DATABASE=ADC Corporation
+ 
++OUI:EC42CC*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:EC42F0*
+  ID_OUI_FROM_DATABASE=ADL Embedded Solutions, Inc.
+ 
+@@ -114053,6 +116324,9 @@ OUI:EC52DC*
+ OUI:EC542E*
+  ID_OUI_FROM_DATABASE=Shanghai XiMei Electronic Technology Co. Ltd
+ 
++OUI:EC551C*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:EC55F9*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -114086,9 +116360,15 @@ OUI:EC5C84*
+ OUI:EC5F23*
+  ID_OUI_FROM_DATABASE=Qinghai Kimascend Electronics Technology Co. Ltd.
+ 
++OUI:EC6073*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:EC60E0*
+  ID_OUI_FROM_DATABASE=AVI-ON LABS
+ 
++OUI:EC6260*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:EC6264*
+  ID_OUI_FROM_DATABASE=Global411 Internet Services, LLC
+ 
+@@ -114182,6 +116462,9 @@ OUI:EC8009*
+ OUI:EC8193*
+  ID_OUI_FROM_DATABASE=Logitech, Inc
+ 
++OUI:EC819C*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:EC8263*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -114986,6 +117269,9 @@ OUI:F04CD5*
+ OUI:F04DA2*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:F04DD4*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:F04F7C*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
+@@ -115076,6 +117362,9 @@ OUI:F06865*
+ OUI:F06BCA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:F06C5D*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:F06C73*
+  ID_OUI_FROM_DATABASE=Nokia
+ 
+@@ -115178,6 +117467,9 @@ OUI:F085C1*
+ OUI:F08620*
+  ID_OUI_FROM_DATABASE=Arcadyan Corporation
+ 
++OUI:F0877F*
++ ID_OUI_FROM_DATABASE=Magnetar Technology Shenzhen Co., LTD.
++
+ OUI:F08A28*
+  ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
+ 
+@@ -115400,6 +117692,9 @@ OUI:F0B5D1*
+ OUI:F0B61E*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:F0B661*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:F0B6EB*
+  ID_OUI_FROM_DATABASE=Poslab Technology Co., Ltd.
+ 
+@@ -115454,6 +117749,9 @@ OUI:F0C850*
+ OUI:F0C88C*
+  ID_OUI_FROM_DATABASE=LeddarTech Inc.
+ 
++OUI:F0C8B5*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:F0C9D1*
+  ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 
+@@ -115484,6 +117782,9 @@ OUI:F0D3A7*
+ OUI:F0D3E7*
+  ID_OUI_FROM_DATABASE=Sensometrix SA
+ 
++OUI:F0D415*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:F0D4E2*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -116135,9 +118436,15 @@ OUI:F46B8C*
+ OUI:F46BEF*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:F46C68*
++ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
++
+ OUI:F46D04*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
++OUI:F46D2F*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:F46DE2*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -116252,6 +118559,9 @@ OUI:F483E1*
+ OUI:F4844C*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:F4848D*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:F485C6*
+  ID_OUI_FROM_DATABASE=FDT Technologies
+ 
+@@ -116462,6 +118772,9 @@ OUI:F4B301*
+ OUI:F4B381*
+  ID_OUI_FROM_DATABASE=WindowMaster A/S
+ 
++OUI:F4B3B1*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:F4B520*
+  ID_OUI_FROM_DATABASE=Biostar Microtech international corp.
+ 
+@@ -116558,6 +118871,9 @@ OUI:F4C7AA*
+ OUI:F4C7C8*
+  ID_OUI_FROM_DATABASE=Kelvin Inc.
+ 
++OUI:F4C88A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:F4CA24*
+  ID_OUI_FROM_DATABASE=FreeBit Co., Ltd.
+ 
+@@ -116652,7 +118968,7 @@ OUI:F4E142*
+  ID_OUI_FROM_DATABASE=Delta Elektronika BV
+ 
+ OUI:F4E204*
+- ID_OUI_FROM_DATABASE=Traqueur
++ ID_OUI_FROM_DATABASE=COYOTE SYSTEM
+ 
+ OUI:F4E2C6*
+  ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+@@ -117161,6 +119477,9 @@ OUI:F84DFC*
+ OUI:F84E17*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:F84E58*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:F84E73*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -117194,6 +119513,9 @@ OUI:F854AF*
+ OUI:F854B8*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
++OUI:F85548*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:F855CD*
+  ID_OUI_FROM_DATABASE=Visteon Corporation
+ 
+@@ -117227,6 +119549,9 @@ OUI:F85C4D*
+ OUI:F85C7D*
+  ID_OUI_FROM_DATABASE=Shenzhen Honesty Electronics Co.,Ltd.
+ 
++OUI:F85E0B*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:F85E3C*
+  ID_OUI_FROM_DATABASE=SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+ 
+@@ -117569,6 +119894,9 @@ OUI:F8AA8A*
+ OUI:F8AB05*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:F8AB82*
++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
++
+ OUI:F8ABE5*
+  ID_OUI_FROM_DATABASE=shenzhen worldelite electronics co., LTD
+ 
+@@ -117578,6 +119906,9 @@ OUI:F8AC65*
+ OUI:F8AC6D*
+  ID_OUI_FROM_DATABASE=Deltenna Ltd
+ 
++OUI:F8AD24*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:F8ADCB*
+  ID_OUI_FROM_DATABASE=HMD Global Oy
+ 
+@@ -117662,6 +119993,9 @@ OUI:F8B797*
+ OUI:F8B7E2*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:F8B8B4*
++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
++
+ OUI:F8B95A*
+  ID_OUI_FROM_DATABASE=LG Innotek
+ 
+@@ -117737,6 +120071,9 @@ OUI:F8CAB8*
+ OUI:F8CC6E*
+  ID_OUI_FROM_DATABASE=DEPO Electronics Ltd
+ 
++OUI:F8CDC8*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:F8CE72*
+  ID_OUI_FROM_DATABASE=Wistron Corporation
+ 
+@@ -117815,6 +120152,9 @@ OUI:F8E43B*
+ OUI:F8E44E*
+  ID_OUI_FROM_DATABASE=MCOT INC.
+ 
++OUI:F8E4A4*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:F8E4E3*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -117851,6 +120191,9 @@ OUI:F8E903*
+ OUI:F8E94E*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:F8E94F*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:F8E968*
+  ID_OUI_FROM_DATABASE=Egker Kft.
+ 
+@@ -117974,6 +120317,9 @@ OUI:FC0FE6*
+ OUI:FC0FE7*
+  ID_OUI_FROM_DATABASE=Microchip Technology Inc.
+ 
++OUI:FC101A*
++ ID_OUI_FROM_DATABASE=Palo Alto Networks
++
+ OUI:FC10BD*
+  ID_OUI_FROM_DATABASE=Control Sistematizado S.A.
+ 
+@@ -118361,6 +120707,9 @@ OUI:FC8399*
+ OUI:FC83C6*
+  ID_OUI_FROM_DATABASE=N-Radio Technologies Co., Ltd.
+ 
++OUI:FC8417*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:FC8596*
+  ID_OUI_FROM_DATABASE=Axonne Inc.
+ 
+@@ -118451,6 +120800,9 @@ OUI:FC9FAE*
+ OUI:FC9FE1*
+  ID_OUI_FROM_DATABASE=CONWIN.Tech. Ltd
+ 
++OUI:FCA05A*
++ ID_OUI_FROM_DATABASE=Oray.com co., LTD.
++
+ OUI:FCA13E*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -118598,6 +120950,9 @@ OUI:FCB6D8*
+ OUI:FCB7F0*
+  ID_OUI_FROM_DATABASE=Idaho National Laboratory
+ 
++OUI:FCB97E*
++ ID_OUI_FROM_DATABASE=GE Appliances
++
+ OUI:FCBBA1*
+  ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb
+index 87eba251c2..7fdb463e10 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb
++++ b/hwdb.d/20-acpi-vendor.hwdb
+@@ -51,6 +51,9 @@ acpi:ATML*:
+ acpi:AUTH*:
+  ID_VENDOR_FROM_DATABASE=AuthenTec
+ 
++acpi:AWDZ*:
++ ID_VENDOR_FROM_DATABASE=Shanghai Aiwei Electronic Technology Co., Ltd.
++
+ acpi:BABA*:
+  ID_VENDOR_FROM_DATABASE=Alibaba Co., Ltd.
+ 
+@@ -219,6 +222,9 @@ acpi:MSHW*:
+ acpi:MXIM*:
+  ID_VENDOR_FROM_DATABASE=Maxim Integrated
+ 
++acpi:NOLO*:
++ ID_VENDOR_FROM_DATABASE=NOLO VR
++
+ acpi:NVDA*:
+  ID_VENDOR_FROM_DATABASE=Nvidia
+ 
+@@ -273,6 +279,9 @@ acpi:SECC*:
+ acpi:SHRP*:
+  ID_VENDOR_FROM_DATABASE=Sharp Corporation
+ 
++acpi:SILC*:
++ ID_VENDOR_FROM_DATABASE=Silicom Ltd. Connectivity Solutions
++
+ acpi:SNSL*:
+  ID_VENDOR_FROM_DATABASE=Sensel, Inc.
+ 
+@@ -912,6 +921,9 @@ acpi:ATV*:
+ acpi:ATX*:
+  ID_VENDOR_FROM_DATABASE=Athenix Corporation
+ 
++acpi:AUD*:
++ ID_VENDOR_FROM_DATABASE=AudioControl
++
+ acpi:AUG*:
+  ID_VENDOR_FROM_DATABASE=August Home, Inc.
+ 
+@@ -6036,6 +6048,9 @@ acpi:SBS*:
+ acpi:SBT*:
+  ID_VENDOR_FROM_DATABASE=Senseboard Technologies AB
+ 
++acpi:SCA*:
++ ID_VENDOR_FROM_DATABASE=Schneider Consumer Group
++
+ acpi:SCB*:
+  ID_VENDOR_FROM_DATABASE=SeeCubic B.V.
+ 
+@@ -6156,6 +6171,9 @@ acpi:SES*:
+ acpi:SET*:
+  ID_VENDOR_FROM_DATABASE=SendTek Corporation
+ 
++acpi:SFL*:
++ ID_VENDOR_FROM_DATABASE=Shiftall Inc.
++
+ acpi:SFM*:
+  ID_VENDOR_FROM_DATABASE=TORNADO Company
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
+index 38f3eee8a7..d1781e419f 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb.patch
++++ b/hwdb.d/20-acpi-vendor.hwdb.patch
+@@ -1,5 +1,5 @@
+---- 20-acpi-vendor.hwdb.base	2021-12-23 19:33:43.195441335 +0900
+-+++ 20-acpi-vendor.hwdb	2021-12-23 19:33:43.215441358 +0900
++--- 20-acpi-vendor.hwdb.base	2022-03-29 12:18:39.832815359 +0200
+++++ 20-acpi-vendor.hwdb	2022-03-29 12:18:39.838815428 +0200
+ @@ -3,6 +3,8 @@
+  # Data imported from:
+  #     https://uefi.org/uefi-pnp-export
+@@ -19,7 +19,7 @@
+  acpi:AMDI*:
+   ID_VENDOR_FROM_DATABASE=AMD
+  
+-@@ -325,6 +324,9 @@
++@@ -334,6 +333,9 @@
+  acpi:AAA*:
+   ID_VENDOR_FROM_DATABASE=Avolites Ltd
+  
+@@ -29,7 +29,7 @@
+  acpi:AAE*:
+   ID_VENDOR_FROM_DATABASE=Anatek Electronics Inc.
+  
+-@@ -352,6 +354,9 @@
++@@ -361,6 +363,9 @@
+  acpi:ABO*:
+   ID_VENDOR_FROM_DATABASE=D-Link Systems Inc
+  
+@@ -39,7 +39,7 @@
+  acpi:ABS*:
+   ID_VENDOR_FROM_DATABASE=Abaco Systems, Inc.
+  
+-@@ -397,7 +402,7 @@
++@@ -406,7 +411,7 @@
+  acpi:ACO*:
+   ID_VENDOR_FROM_DATABASE=Allion Computer Inc.
+  
+@@ -48,7 +48,7 @@
+   ID_VENDOR_FROM_DATABASE=Aspen Tech Inc
+  
+  acpi:ACR*:
+-@@ -673,6 +678,9 @@
++@@ -682,6 +687,9 @@
+  acpi:AMT*:
+   ID_VENDOR_FROM_DATABASE=AMT International Industry
+  
+@@ -58,7 +58,7 @@
+  acpi:AMX*:
+   ID_VENDOR_FROM_DATABASE=AMX LLC
+  
+-@@ -721,6 +729,9 @@
++@@ -730,6 +738,9 @@
+  acpi:AOA*:
+   ID_VENDOR_FROM_DATABASE=AOpen Inc.
+  
+@@ -68,7 +68,7 @@
+  acpi:AOE*:
+   ID_VENDOR_FROM_DATABASE=Advanced Optics Electronics, Inc.
+  
+-@@ -730,6 +741,9 @@
++@@ -739,6 +750,9 @@
+  acpi:AOT*:
+   ID_VENDOR_FROM_DATABASE=Alcatel
+  
+@@ -78,7 +78,7 @@
+  acpi:APC*:
+   ID_VENDOR_FROM_DATABASE=American Power Conversion
+  
+-@@ -905,7 +919,7 @@
++@@ -917,7 +931,7 @@
+   ID_VENDOR_FROM_DATABASE=ALPS ALPINE CO., LTD.
+  
+  acpi:AUO*:
+@@ -87,7 +87,7 @@
+  
+  acpi:AUR*:
+   ID_VENDOR_FROM_DATABASE=Aureal Semiconductor
+-@@ -985,6 +999,9 @@
++@@ -997,6 +1011,9 @@
+  acpi:AXE*:
+   ID_VENDOR_FROM_DATABASE=Axell Corporation
+  
+@@ -97,7 +97,7 @@
+  acpi:AXI*:
+   ID_VENDOR_FROM_DATABASE=American Magnetics
+  
+-@@ -1135,6 +1152,9 @@
++@@ -1147,6 +1164,9 @@
+  acpi:BML*:
+   ID_VENDOR_FROM_DATABASE=BIOMED Lab
+  
+@@ -107,7 +107,7 @@
+  acpi:BMS*:
+   ID_VENDOR_FROM_DATABASE=BIOMEDISYS
+  
+-@@ -1147,6 +1167,9 @@
++@@ -1159,6 +1179,9 @@
+  acpi:BNO*:
+   ID_VENDOR_FROM_DATABASE=Bang & Olufsen
+  
+@@ -117,7 +117,7 @@
+  acpi:BNS*:
+   ID_VENDOR_FROM_DATABASE=Boulder Nonlinear Systems
+  
+-@@ -1390,6 +1413,9 @@
++@@ -1402,6 +1425,9 @@
+  acpi:CHA*:
+   ID_VENDOR_FROM_DATABASE=Chase Research PLC
+  
+@@ -127,7 +127,7 @@
+  acpi:CHD*:
+   ID_VENDOR_FROM_DATABASE=ChangHong Electric Co.,Ltd
+  
+-@@ -1552,6 +1578,9 @@
++@@ -1564,6 +1590,9 @@
+  acpi:COD*:
+   ID_VENDOR_FROM_DATABASE=CODAN Pty. Ltd.
+  
+@@ -137,7 +137,7 @@
+  acpi:COI*:
+   ID_VENDOR_FROM_DATABASE=Codec Inc.
+  
+-@@ -1961,7 +1990,7 @@
++@@ -1973,7 +2002,7 @@
+   ID_VENDOR_FROM_DATABASE=Dragon Information Technology
+  
+  acpi:DJE*:
+@@ -146,7 +146,7 @@
+  
+  acpi:DJP*:
+   ID_VENDOR_FROM_DATABASE=Maygay Machines, Ltd
+-@@ -2299,6 +2328,9 @@
++@@ -2311,6 +2340,9 @@
+  acpi:EIN*:
+   ID_VENDOR_FROM_DATABASE=Elegant Invention
+  
+@@ -156,7 +156,7 @@
+  acpi:EKA*:
+   ID_VENDOR_FROM_DATABASE=MagTek Inc.
+  
+-@@ -2563,6 +2595,9 @@
++@@ -2575,6 +2607,9 @@
+  acpi:FCG*:
+   ID_VENDOR_FROM_DATABASE=First International Computer Ltd
+  
+@@ -166,7 +166,7 @@
+  acpi:FCS*:
+   ID_VENDOR_FROM_DATABASE=Focus Enhancements, Inc.
+  
+-@@ -2939,7 +2974,7 @@
++@@ -2951,7 +2986,7 @@
+   ID_VENDOR_FROM_DATABASE=General Standards Corporation
+  
+  acpi:GSM*:
+@@ -175,7 +175,7 @@
+  
+  acpi:GSN*:
+   ID_VENDOR_FROM_DATABASE=Grandstream Networks, Inc.
+-@@ -3040,6 +3075,9 @@
++@@ -3052,6 +3087,9 @@
+  acpi:HEC*:
+   ID_VENDOR_FROM_DATABASE=Hisense Electric Co., Ltd.
+  
+@@ -185,7 +185,7 @@
+  acpi:HEL*:
+   ID_VENDOR_FROM_DATABASE=Hitachi Micro Systems Europe Ltd
+  
+-@@ -3172,6 +3210,9 @@
++@@ -3184,6 +3222,9 @@
+  acpi:HSD*:
+   ID_VENDOR_FROM_DATABASE=HannStar Display Corp
+  
+@@ -195,7 +195,7 @@
+  acpi:HSM*:
+   ID_VENDOR_FROM_DATABASE=AT&T Microelectronics
+  
+-@@ -3298,6 +3339,9 @@
++@@ -3310,6 +3351,9 @@
+  acpi:ICI*:
+   ID_VENDOR_FROM_DATABASE=Infotek Communication Inc
+  
+@@ -205,7 +205,7 @@
+  acpi:ICM*:
+   ID_VENDOR_FROM_DATABASE=Intracom SA
+  
+-@@ -3394,6 +3438,9 @@
++@@ -3406,6 +3450,9 @@
+  acpi:IKE*:
+   ID_VENDOR_FROM_DATABASE=Ikegami Tsushinki Co. Ltd.
+  
+@@ -215,7 +215,7 @@
+  acpi:IKS*:
+   ID_VENDOR_FROM_DATABASE=Ikos Systems Inc
+  
+-@@ -3439,6 +3486,9 @@
++@@ -3451,6 +3498,9 @@
+  acpi:IMT*:
+   ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation
+  
+@@ -225,7 +225,7 @@
+  acpi:INA*:
+   ID_VENDOR_FROM_DATABASE=Inventec Corporation
+  
+-@@ -3955,6 +4005,9 @@
++@@ -3967,6 +4017,9 @@
+  acpi:LAN*:
+   ID_VENDOR_FROM_DATABASE=Sodeman Lancom Inc
+  
+@@ -235,7 +235,7 @@
+  acpi:LAS*:
+   ID_VENDOR_FROM_DATABASE=LASAT Comm. A/S
+  
+-@@ -4003,6 +4056,9 @@
++@@ -4015,6 +4068,9 @@
+  acpi:LED*:
+   ID_VENDOR_FROM_DATABASE=Long Engineering Design Inc
+  
+@@ -245,7 +245,7 @@
+  acpi:LEG*:
+   ID_VENDOR_FROM_DATABASE=Legerity, Inc
+  
+-@@ -4018,6 +4074,9 @@
++@@ -4030,6 +4086,9 @@
+  acpi:LGC*:
+   ID_VENDOR_FROM_DATABASE=Logic Ltd
+  
+@@ -255,7 +255,7 @@
+  acpi:LGI*:
+   ID_VENDOR_FROM_DATABASE=Logitech Inc
+  
+-@@ -4075,6 +4134,9 @@
++@@ -4087,6 +4146,9 @@
+  acpi:LND*:
+   ID_VENDOR_FROM_DATABASE=Land Computer Company Ltd
+  
+@@ -265,7 +265,7 @@
+  acpi:LNK*:
+   ID_VENDOR_FROM_DATABASE=Link Tech Inc
+  
+-@@ -4109,7 +4171,7 @@
++@@ -4121,7 +4183,7 @@
+   ID_VENDOR_FROM_DATABASE=Design Technology
+  
+  acpi:LPL*:
+@@ -274,7 +274,7 @@
+  
+  acpi:LSC*:
+   ID_VENDOR_FROM_DATABASE=LifeSize Communications
+-@@ -4285,6 +4347,9 @@
++@@ -4297,6 +4359,9 @@
+  acpi:MCX*:
+   ID_VENDOR_FROM_DATABASE=Millson Custom Solutions Inc.
+  
+@@ -284,7 +284,7 @@
+  acpi:MDA*:
+   ID_VENDOR_FROM_DATABASE=Media4 Inc
+  
+-@@ -4525,6 +4590,9 @@
++@@ -4537,6 +4602,9 @@
+  acpi:MOM*:
+   ID_VENDOR_FROM_DATABASE=Momentum Data Systems
+  
+@@ -294,7 +294,7 @@
+  acpi:MOS*:
+   ID_VENDOR_FROM_DATABASE=Moses Corporation
+  
+-@@ -4759,6 +4827,9 @@
++@@ -4771,6 +4839,9 @@
+  acpi:NAL*:
+   ID_VENDOR_FROM_DATABASE=Network Alchemy
+  
+@@ -304,7 +304,7 @@
+  acpi:NAT*:
+   ID_VENDOR_FROM_DATABASE=NaturalPoint Inc.
+  
+-@@ -5281,6 +5352,9 @@
++@@ -5293,6 +5364,9 @@
+  acpi:PCX*:
+   ID_VENDOR_FROM_DATABASE=PC Xperten
+  
+@@ -314,7 +314,7 @@
+  acpi:PDM*:
+   ID_VENDOR_FROM_DATABASE=Psion Dacom Plc.
+  
+-@@ -5344,9 +5418,6 @@
++@@ -5356,9 +5430,6 @@
+  acpi:PHE*:
+   ID_VENDOR_FROM_DATABASE=Philips Medical Systems Boeblingen GmbH
+  
+@@ -324,7 +324,7 @@
+  acpi:PHL*:
+   ID_VENDOR_FROM_DATABASE=Philips Consumer Electronics Company
+  
+-@@ -5437,9 +5508,6 @@
++@@ -5449,9 +5520,6 @@
+  acpi:PNL*:
+   ID_VENDOR_FROM_DATABASE=Panelview, Inc.
+  
+@@ -334,7 +334,7 @@
+  acpi:PNR*:
+   ID_VENDOR_FROM_DATABASE=Planar Systems, Inc.
+  
+-@@ -5575,15 +5643,9 @@
++@@ -5587,15 +5655,9 @@
+  acpi:PTS*:
+   ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc
+  
+@@ -350,7 +350,7 @@
+  acpi:PVG*:
+   ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd
+  
+-@@ -5899,9 +5961,6 @@
++@@ -5911,9 +5973,6 @@
+  acpi:RTI*:
+   ID_VENDOR_FROM_DATABASE=Rancho Tech Inc
+  
+@@ -360,7 +360,7 @@
+  acpi:RTL*:
+   ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Company Ltd
+  
+-@@ -6070,9 +6129,6 @@
++@@ -6085,9 +6144,6 @@
+  acpi:SEE*:
+   ID_VENDOR_FROM_DATABASE=SeeColor Corporation
+  
+@@ -370,7 +370,7 @@
+  acpi:SEI*:
+   ID_VENDOR_FROM_DATABASE=Seitz & Associates Inc
+  
+-@@ -6541,6 +6597,9 @@
++@@ -6559,6 +6615,9 @@
+  acpi:SVD*:
+   ID_VENDOR_FROM_DATABASE=SVD Computer
+  
+@@ -380,7 +380,7 @@
+  acpi:SVI*:
+   ID_VENDOR_FROM_DATABASE=Sun Microsystems
+  
+-@@ -6625,6 +6684,9 @@
++@@ -6643,6 +6702,9 @@
+  acpi:SZM*:
+   ID_VENDOR_FROM_DATABASE=Shenzhen MTC Co., Ltd
+  
+@@ -390,7 +390,7 @@
+  acpi:TAA*:
+   ID_VENDOR_FROM_DATABASE=Tandberg
+  
+-@@ -6715,6 +6777,9 @@
++@@ -6733,6 +6795,9 @@
+  acpi:TDG*:
+   ID_VENDOR_FROM_DATABASE=Six15 Technologies
+  
+@@ -400,7 +400,7 @@
+  acpi:TDM*:
+   ID_VENDOR_FROM_DATABASE=Tandem Computer Europe Inc
+  
+-@@ -6757,6 +6822,9 @@
++@@ -6775,6 +6840,9 @@
+  acpi:TEV*:
+   ID_VENDOR_FROM_DATABASE=Televés, S.A.
+  
+@@ -410,7 +410,7 @@
+  acpi:TEZ*:
+   ID_VENDOR_FROM_DATABASE=Tech Source Inc.
+  
+-@@ -6880,9 +6948,6 @@
++@@ -6898,9 +6966,6 @@
+  acpi:TNC*:
+   ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd
+  
+@@ -420,7 +420,7 @@
+  acpi:TNM*:
+   ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA
+  
+-@@ -7192,14 +7257,14 @@
++@@ -7210,14 +7275,14 @@
+  acpi:UNC*:
+   ID_VENDOR_FROM_DATABASE=Unisys Corporation
+  
+@@ -441,7 +441,7 @@
+  
+  acpi:UNI*:
+   ID_VENDOR_FROM_DATABASE=Uniform Industry Corp.
+-@@ -7234,6 +7299,9 @@
++@@ -7252,6 +7317,9 @@
+  acpi:USA*:
+   ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG
+  
+@@ -451,7 +451,7 @@
+  acpi:USD*:
+   ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation
+  
+-@@ -7489,9 +7557,6 @@
++@@ -7507,9 +7575,6 @@
+  acpi:WAL*:
+   ID_VENDOR_FROM_DATABASE=Wave Access
+  
+@@ -461,7 +461,7 @@
+  acpi:WAV*:
+   ID_VENDOR_FROM_DATABASE=Wavephore
+  
+-@@ -7616,7 +7681,7 @@
++@@ -7634,7 +7699,7 @@
+   ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC
+  
+  acpi:WYS*:
+@@ -470,7 +470,7 @@
+  
+  acpi:WYT*:
+   ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd.
+-@@ -7630,9 +7695,6 @@
++@@ -7648,9 +7713,6 @@
+  acpi:XDM*:
+   ID_VENDOR_FROM_DATABASE=XDM Ltd.
+  
+@@ -480,7 +480,7 @@
+  acpi:XES*:
+   ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc.
+  
+-@@ -7663,9 +7725,6 @@
++@@ -7681,9 +7743,6 @@
+  acpi:XNT*:
+   ID_VENDOR_FROM_DATABASE=XN Technologies, Inc.
+  
+@@ -490,7 +490,7 @@
+  acpi:XQU*:
+   ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD
+  
+-@@ -7732,6 +7791,9 @@
++@@ -7750,6 +7809,9 @@
+  acpi:ZBX*:
+   ID_VENDOR_FROM_DATABASE=Zebax Technologies
+  
+diff --git a/hwdb.d/20-pci-classes.hwdb b/hwdb.d/20-pci-classes.hwdb
+index 3dca78b05f..52603ebadd 100644
+--- a/hwdb.d/20-pci-classes.hwdb
++++ b/hwdb.d/20-pci-classes.hwdb
+@@ -612,7 +612,7 @@ pci:v*d*sv*sd*bc12sc00*
+  ID_PCI_SUBCLASS_FROM_DATABASE=Processing accelerators
+ 
+ pci:v*d*sv*sd*bc12sc01*
+- ID_PCI_SUBCLASS_FROM_DATABASE=AI Inference Accelerator
++ ID_PCI_SUBCLASS_FROM_DATABASE=SNIA Smart Data Accelerator Interface (SDXI) controller
+ 
+ pci:v*d*sv*sd*bc13*
+  ID_PCI_CLASS_FROM_DATABASE=Non-Essential Instrumentation
+diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
+index 745f5545c8..dba7d96d3e 100644
+--- a/hwdb.d/20-pci-vendor-model.hwdb
++++ b/hwdb.d/20-pci-vendor-model.hwdb
+@@ -218,6 +218,15 @@ pci:v00000731d00009200*
+ pci:v00000731d0000920A*
+  ID_MODEL_FROM_DATABASE=JH920
+ 
++pci:v00000731d0000920Asv00000731sd0000920A*
++ ID_MODEL_FROM_DATABASE=JH920
++
++pci:v00000731d0000920Asv00000731sd0000920B*
++ ID_MODEL_FROM_DATABASE=JH920 (-I)
++
++pci:v00000731d0000920Asv00000731sd0000920C*
++ ID_MODEL_FROM_DATABASE=JH920 (-M)
++
+ pci:v00000731d0000920B*
+  ID_MODEL_FROM_DATABASE=JH920-I
+ 
+@@ -227,21 +236,42 @@ pci:v00000731d0000920C*
+ pci:v00000731d00009210*
+  ID_MODEL_FROM_DATABASE=JM9210
+ 
++pci:v00000731d00009210sv00000731sd00009210*
++ ID_MODEL_FROM_DATABASE=JM9210
++
++pci:v00000731d00009210sv00000731sd00009211*
++ ID_MODEL_FROM_DATABASE=JM9210 (-I)
++
+ pci:v00000731d00009211*
+  ID_MODEL_FROM_DATABASE=JM9210-I
+ 
+ pci:v00000731d00009230*
+  ID_MODEL_FROM_DATABASE=JM9230
+ 
++pci:v00000731d00009230sv00000731sd00009230*
++ ID_MODEL_FROM_DATABASE=JM9230
++
++pci:v00000731d00009230sv00000731sd00009231*
++ ID_MODEL_FROM_DATABASE=JM9230 (-I)
++
+ pci:v00000731d00009231*
+  ID_MODEL_FROM_DATABASE=JM9231-I
+ 
+ pci:v00000731d00009250*
+  ID_MODEL_FROM_DATABASE=JM9250
+ 
++pci:v00000731d00009250sv00000731sd00009250*
++ ID_MODEL_FROM_DATABASE=JM9250
++
+ pci:v00000731d0000930A*
+  ID_MODEL_FROM_DATABASE=JH930-I
+ 
++pci:v00000731d0000930Asv00000731sd0000930A*
++ ID_MODEL_FROM_DATABASE=JH930-I
++
++pci:v00000731d0000930Asv00000731sd0000930B*
++ ID_MODEL_FROM_DATABASE=JH930-I (JH930-M)
++
+ pci:v00000731d0000930B*
+  ID_MODEL_FROM_DATABASE=JH930-M
+ 
+@@ -2297,9 +2327,15 @@ pci:v00001000d000000E6sv00001028sd0000200D*
+ pci:v00001000d000000E6sv00001028sd0000200E*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MX)
+ 
++pci:v00001000d000000E6sv00001028sd00002170*
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MM)
++
+ pci:v00001000d000000E6sv00001028sd00002175*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i Adapter)
+ 
++pci:v00001000d000000E6sv00001028sd00002197*
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MM LP)
++
+ pci:v00001000d000000E6sv00001D49sd00000205*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA)
+ 
+@@ -2316,10 +2352,10 @@ pci:v00001000d000000E6sv00001D49sd00000209*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-8e SAS/SATA PCIe Gen4 12Gb HBA)
+ 
+ pci:v00001000d000000E6sv00008086sd00004050*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4QF160F)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4QF160J)
+ 
+ pci:v00001000d000000E6sv00008086sd00004070*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4GF016F)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4GF016J)
+ 
+ pci:v00001000d000000E7*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx
+@@ -2615,6 +2651,9 @@ pci:v00001000d000010E2*
+ pci:v00001000d000010E2sv00001000sd00004000*
+  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9560-16i)
+ 
++pci:v00001000d000010E2sv00001000sd00004002*
++ ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9561-16i)
++
+ pci:v00001000d000010E2sv00001000sd00004010*
+  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9560-8i)
+ 
+@@ -2705,6 +2744,9 @@ pci:v00001000d000010E6sv00001028sd00002174*
+ pci:v00001000d000010E6sv00001028sd00002177*
+  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (PERC H350 Adapter)
+ 
++pci:v00001000d000010E6sv00001028sd00002199*
++ ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (PERC H350 Mini LP)
++
+ pci:v00001000d000010E6sv00001D49sd00000505*
+  ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter)
+ 
+@@ -2768,6 +2810,9 @@ pci:v00001000d0000C012*
+ pci:v00001000d0000C012sv00001D49sd00000003*
+  ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter)
+ 
++pci:v00001000d0000C030*
++ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch
++
+ pci:v00001001*
+  ID_VENDOR_FROM_DATABASE=Kolter Electronic
+ 
+@@ -2994,7 +3039,7 @@ pci:v00001002d0000164D*
+  ID_MODEL_FROM_DATABASE=Rembrandt
+ 
+ pci:v00001002d00001681*
+- ID_MODEL_FROM_DATABASE=Rembrandt
++ ID_MODEL_FROM_DATABASE=Rembrandt [Radeon 680M]
+ 
+ pci:v00001002d00001714*
+  ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
+@@ -5889,13 +5934,16 @@ pci:v00001002d00006611sv00001B0Asd000090D3*
+  ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R5 430 OEM / R7 240/340 / Radeon 520 OEM] (Radeon R7 240 OEM)
+ 
+ pci:v00001002d00006613*
+- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340]
++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520]
+ 
+ pci:v00001002d00006613sv0000148Csd00007340*
+- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] (Radeon R7 340)
++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] (Radeon R7 340)
+ 
+ pci:v00001002d00006613sv00001682sd00007240*
+- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] (R7 240 2048 MB)
++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] (R7 240 2048 MB)
++
++pci:v00001002d00006613sv00001DCFsd00003000*
++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520]
+ 
+ pci:v00001002d00006631*
+  ID_MODEL_FROM_DATABASE=Oland
+@@ -10976,18 +11024,27 @@ pci:v00001002d000073A3*
+ pci:v00001002d000073A4*
+  ID_MODEL_FROM_DATABASE=Navi 21 USB
+ 
++pci:v00001002d000073A5*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6950 XT]
++
+ pci:v00001002d000073AB*
+  ID_MODEL_FROM_DATABASE=Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
+ 
+ pci:v00001002d000073AF*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT]
+ 
++pci:v00001002d000073AFsv0000148Csd00002414*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT] (Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate])
++
+ pci:v00001002d000073BF*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+ 
+ pci:v00001002d000073BFsv00001002sd00000E3A*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Radeon RX 6900 XT)
+ 
++pci:v00001002d000073BFsv0000148Csd00002408*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Red Devil AMD Radeon RX 6900 XT)
++
+ pci:v00001002d000073BFsv00001EAEsd00006701*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black)
+ 
+@@ -10998,7 +11055,7 @@ pci:v00001002d000073C4*
+  ID_MODEL_FROM_DATABASE=Navi 22 USB
+ 
+ pci:v00001002d000073DF*
+- ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT / 6800M]
++ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+ 
+ pci:v00001002d000073E0*
+  ID_MODEL_FROM_DATABASE=Navi 23
+@@ -11012,6 +11069,9 @@ pci:v00001002d000073E3*
+ pci:v00001002d000073E4*
+  ID_MODEL_FROM_DATABASE=Navi 23 USB
+ 
++pci:v00001002d000073EF*
++ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6650 XT]
++
+ pci:v00001002d000073FF*
+  ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M]
+ 
+@@ -11027,6 +11087,12 @@ pci:v00001002d0000740C*
+ pci:v00001002d0000740F*
+  ID_MODEL_FROM_DATABASE=Aldebaran
+ 
++pci:v00001002d0000743F*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT]
++
++pci:v00001002d0000743Fsv00001DA2sd0000E457*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] (PULSE AMD Radeon RX 6500 XT)
++
+ pci:v00001002d00007833*
+  ID_MODEL_FROM_DATABASE=RS350 Host Bridge
+ 
+@@ -12204,7 +12270,7 @@ pci:v00001002d0000AB20*
+  ID_MODEL_FROM_DATABASE=Vega 20 HDMI Audio [Radeon VII]
+ 
+ pci:v00001002d0000AB28*
+- ID_MODEL_FROM_DATABASE=Navi 21 HDMI Audio [Radeon RX 6800/6800 XT / 6900 XT]
++ ID_MODEL_FROM_DATABASE=Navi 21/23 HDMI/DP Audio Controller
+ 
+ pci:v00001002d0000AB38*
+  ID_MODEL_FROM_DATABASE=Navi 10 HDMI Audio
+@@ -14577,28 +14643,28 @@ pci:v00001022d000015E1sv0000EA50sd0000CE19*
+  ID_MODEL_FROM_DATABASE=Raven USB 3.1 (mCOM10-L1900)
+ 
+ pci:v00001022d000015E2*
+- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor
++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor
+ 
+ pci:v00001022d000015E2sv000017AAsd00005124*
+- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor (ThinkPad E595)
++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor (ThinkPad E595)
+ 
+ pci:v00001022d000015E2sv0000EA50sd0000CE19*
+- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor (mCOM10-L1900)
++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor (mCOM10-L1900)
+ 
+ pci:v00001022d000015E3*
+- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller
++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller
+ 
+ pci:v00001022d000015E3sv0000103Csd00008615*
+- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (Pavilion Laptop 15-cw1xxx)
++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (Pavilion Laptop 15-cw1xxx)
+ 
+ pci:v00001022d000015E3sv00001043sd000086C7*
+- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (PRIME B450M-A Motherboard)
++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (PRIME B450M-A Motherboard)
+ 
+ pci:v00001022d000015E3sv000017AAsd00005124*
+- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (ThinkPad E595)
++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (ThinkPad E595)
+ 
+ pci:v00001022d000015E4*
+- ID_MODEL_FROM_DATABASE=Raven/Raven2/Renoir Sensor Fusion Hub
++ ID_MODEL_FROM_DATABASE=Sensor Fusion Hub
+ 
+ pci:v00001022d000015E5*
+  ID_MODEL_FROM_DATABASE=Raven2 USB 3.1
+@@ -15122,6 +15188,21 @@ pci:v00001022d000043C8*
+ pci:v00001022d000043D5*
+  ID_MODEL_FROM_DATABASE=400 Series Chipset USB 3.1 XHCI Controller
+ 
++pci:v00001022d000043E9*
++ ID_MODEL_FROM_DATABASE=500 Series Chipset Switch Upstream Port
++
++pci:v00001022d000043EB*
++ ID_MODEL_FROM_DATABASE=500 Series Chipset SATA Controller
++
++pci:v00001022d000043EBsv00001B21sd00001062*
++ ID_MODEL_FROM_DATABASE=500 Series Chipset SATA Controller (ASM1062 Serial ATA Controller)
++
++pci:v00001022d000043EE*
++ ID_MODEL_FROM_DATABASE=500 Series Chipset USB 3.1 XHCI Controller
++
++pci:v00001022d000043EEsv00001B21sd00001142*
++ ID_MODEL_FROM_DATABASE=500 Series Chipset USB 3.1 XHCI Controller (ASM1042A USB 3.0 Host Controller)
++
+ pci:v00001022d000057A3*
+  ID_MODEL_FROM_DATABASE=Matisse PCIe GPP Bridge
+ 
+@@ -34004,6 +34085,9 @@ pci:v000010DEd000010F0*
+ pci:v000010DEd000010F1*
+  ID_MODEL_FROM_DATABASE=GP106 High Definition Audio Controller
+ 
++pci:v000010DEd000010F1sv00001043sd000085B6*
++ ID_MODEL_FROM_DATABASE=GP106 High Definition Audio Controller (DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual])
++
+ pci:v000010DEd000010F7*
+  ID_MODEL_FROM_DATABASE=TU102 High Definition Audio Controller
+ 
+@@ -36092,6 +36176,9 @@ pci:v000010DEd00001C02*
+ pci:v000010DEd00001C03*
+  ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 6GB]
+ 
++pci:v000010DEd00001C03sv00001043sd000085B6*
++ ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 6GB] (DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual])
++
+ pci:v000010DEd00001C04*
+  ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 5GB]
+ 
+@@ -36488,6 +36575,9 @@ pci:v000010DEd00001F02*
+ pci:v000010DEd00001F02sv00001043sd00008673*
+  ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070] (TURBO RTX 2070)
+ 
++pci:v000010DEd00001F03*
++ ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 12GB]
++
+ pci:v000010DEd00001F04*
+  ID_MODEL_FROM_DATABASE=TU106
+ 
+@@ -36587,6 +36677,12 @@ pci:v000010DEd00001F9C*
+ pci:v000010DEd00001F9D*
+  ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile / Max-Q]
+ 
++pci:v000010DEd00001F9F*
++ ID_MODEL_FROM_DATABASE=TU117M [GeForce MX550]
++
++pci:v000010DEd00001FA0*
++ ID_MODEL_FROM_DATABASE=TU117M [GeForce MX550]
++
+ pci:v000010DEd00001FAE*
+  ID_MODEL_FROM_DATABASE=TU117GL
+ 
+@@ -36599,6 +36695,12 @@ pci:v000010DEd00001FB1*
+ pci:v000010DEd00001FB2*
+  ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T400 Mobile]
+ 
++pci:v000010DEd00001FB6*
++ ID_MODEL_FROM_DATABASE=TU117GLM [T600 Laptop GPU]
++
++pci:v000010DEd00001FB7*
++ ID_MODEL_FROM_DATABASE=TU117GLM [T550 Laptop GPU]
++
+ pci:v000010DEd00001FB8*
+  ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T2000 Mobile / Max-Q]
+ 
+@@ -36611,6 +36713,9 @@ pci:v000010DEd00001FBA*
+ pci:v000010DEd00001FBB*
+  ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T500 Mobile]
+ 
++pci:v000010DEd00001FBC*
++ ID_MODEL_FROM_DATABASE=TU117GLM [T1200 Laptop GPU]
++
+ pci:v000010DEd00001FBF*
+  ID_MODEL_FROM_DATABASE=TU117GL
+ 
+@@ -36620,9 +36725,18 @@ pci:v000010DEd00001FD9*
+ pci:v000010DEd00001FDD*
+  ID_MODEL_FROM_DATABASE=TU117BM [GeForce GTX 1650 Mobile Refresh]
+ 
++pci:v000010DEd00001FF0*
++ ID_MODEL_FROM_DATABASE=TU117GL [T1000 8GB]
++
++pci:v000010DEd00001FF2*
++ ID_MODEL_FROM_DATABASE=TU117GL [T400 4GB]
++
+ pci:v000010DEd00001FF9*
+  ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T1000 Mobile]
+ 
++pci:v000010DEd00002082*
++ ID_MODEL_FROM_DATABASE=GA100 [CMP 170HX]
++
+ pci:v000010DEd000020B0*
+  ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 40GB]
+ 
+@@ -36632,6 +36746,9 @@ pci:v000010DEd000020B1*
+ pci:v000010DEd000020B2*
+  ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 80GB]
+ 
++pci:v000010DEd000020B3*
++ ID_MODEL_FROM_DATABASE=GA100 [PG506-242/243]
++
+ pci:v000010DEd000020B5*
+  ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 80GB]
+ 
+@@ -36653,9 +36770,15 @@ pci:v000010DEd000020BF*
+ pci:v000010DEd000020C2*
+  ID_MODEL_FROM_DATABASE=GA100 [CMP 170HX]
+ 
++pci:v000010DEd000020F0*
++ ID_MODEL_FROM_DATABASE=GA100 [A100-PG506-207]
++
+ pci:v000010DEd000020F1*
+  ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 40GB]
+ 
++pci:v000010DEd000020F2*
++ ID_MODEL_FROM_DATABASE=GA100 [A100-PG506-217]
++
+ pci:v000010DEd00002182*
+  ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 Ti]
+ 
+@@ -36722,6 +36845,9 @@ pci:v000010DEd00002206sv00001462sd00003892*
+ pci:v000010DEd00002208*
+  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Ti]
+ 
++pci:v000010DEd0000220A*
++ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 12GB]
++
+ pci:v000010DEd0000220D*
+  ID_MODEL_FROM_DATABASE=GA102 [CMP 90HX]
+ 
+@@ -36743,6 +36869,9 @@ pci:v000010DEd00002231*
+ pci:v000010DEd00002232*
+  ID_MODEL_FROM_DATABASE=GA102GL [RTX A4500]
+ 
++pci:v000010DEd00002233*
++ ID_MODEL_FROM_DATABASE=GA102GL [RTX A5500]
++
+ pci:v000010DEd00002235*
+  ID_MODEL_FROM_DATABASE=GA102GL [A40]
+ 
+@@ -36752,6 +36881,9 @@ pci:v000010DEd00002236*
+ pci:v000010DEd00002237*
+  ID_MODEL_FROM_DATABASE=GA102GL [A10G]
+ 
++pci:v000010DEd00002238*
++ ID_MODEL_FROM_DATABASE=GA102GL [A10M]
++
+ pci:v000010DEd0000223F*
+  ID_MODEL_FROM_DATABASE=GA102GL
+ 
+@@ -36767,9 +36899,18 @@ pci:v000010DEd00002302*
+ pci:v000010DEd00002321*
+  ID_MODEL_FROM_DATABASE=GA103
+ 
++pci:v000010DEd00002414*
++ ID_MODEL_FROM_DATABASE=GA103 [GeForce RTX 3060 Ti]
++
+ pci:v000010DEd00002420*
+  ID_MODEL_FROM_DATABASE=GA103M [GeForce RTX 3080 Ti Mobile]
+ 
++pci:v000010DEd00002438*
++ ID_MODEL_FROM_DATABASE=GA103GLM [RTX A5500 Laptop GPU]
++
++pci:v000010DEd00002460*
++ ID_MODEL_FROM_DATABASE=GA103M [GeForce RTX 3080 Ti Laptop GPU]
++
+ pci:v000010DEd00002482*
+  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti]
+ 
+@@ -36833,6 +36974,15 @@ pci:v000010DEd000024B7*
+ pci:v000010DEd000024B8*
+  ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 Mobile]
+ 
++pci:v000010DEd000024B9*
++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 12GB Laptop GPU]
++
++pci:v000010DEd000024BA*
++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A4500 Laptop GPU]
++
++pci:v000010DEd000024BB*
++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 Laptop GPU]
++
+ pci:v000010DEd000024BF*
+  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
+ 
+@@ -36842,6 +36992,12 @@ pci:v000010DEd000024DC*
+ pci:v000010DEd000024DD*
+  ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
+ 
++pci:v000010DEd000024E0*
++ ID_MODEL_FROM_DATABASE=GA104M [Geforce RTX 3070 Ti Laptop GPU]
++
++pci:v000010DEd000024FA*
++ ID_MODEL_FROM_DATABASE=GA104 [RTX A4500 Embedded GPU ]
++
+ pci:v000010DEd00002501*
+  ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060]
+ 
+@@ -36854,6 +37010,9 @@ pci:v000010DEd00002504*
+ pci:v000010DEd00002505*
+  ID_MODEL_FROM_DATABASE=GA106
+ 
++pci:v000010DEd00002507*
++ ID_MODEL_FROM_DATABASE=GA106 [Geforce RTX 3050]
++
+ pci:v000010DEd00002520*
+  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 
+@@ -36863,12 +37022,18 @@ pci:v000010DEd00002523*
+ pci:v000010DEd0000252F*
+  ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample]
+ 
++pci:v000010DEd00002531*
++ ID_MODEL_FROM_DATABASE=GA106 [RTX A2000]
++
+ pci:v000010DEd00002560*
+  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 
+ pci:v000010DEd00002563*
+  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
+ 
++pci:v000010DEd00002571*
++ ID_MODEL_FROM_DATABASE=GA106 [RTX A2000 12GB]
++
+ pci:v000010DEd00002583*
+  ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050]
+ 
+@@ -36884,15 +37049,33 @@ pci:v000010DEd000025A4*
+ pci:v000010DEd000025A5*
+  ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 Mobile]
+ 
++pci:v000010DEd000025A6*
++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570]
++
++pci:v000010DEd000025A7*
++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570]
++
++pci:v000010DEd000025A9*
++ ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 2050]
++
+ pci:v000010DEd000025AF*
+  ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample]
+ 
+ pci:v000010DEd000025B5*
+  ID_MODEL_FROM_DATABASE=GA107GLM [RTX A4 Mobile]
+ 
++pci:v000010DEd000025B6*
++ ID_MODEL_FROM_DATABASE=GA107GL [A2 / A16]
++
+ pci:v000010DEd000025B8*
+  ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 Mobile]
+ 
++pci:v000010DEd000025B9*
++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A1000 Laptop GPU]
++
++pci:v000010DEd000025BA*
++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 8GB Laptop GPU]
++
+ pci:v000010DEd000025E0*
+  ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Ti Mobile]
+ 
+@@ -36902,6 +37085,12 @@ pci:v000010DEd000025E2*
+ pci:v000010DEd000025E5*
+  ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Mobile]
+ 
++pci:v000010DEd000025F9*
++ ID_MODEL_FROM_DATABASE=GA107 [RTX A1000 Embedded GPU ]
++
++pci:v000010DEd000025FA*
++ ID_MODEL_FROM_DATABASE=GA107 [RTX A2000 Embedded GPU]
++
+ pci:v000010DF*
+  ID_VENDOR_FROM_DATABASE=Emulex Corporation
+ 
+@@ -37586,6 +37775,9 @@ pci:v000010ECd0000525Asv000017AAsd0000224F*
+ pci:v000010ECd00005260*
+  ID_MODEL_FROM_DATABASE=RTS5260 PCI Express Card Reader
+ 
++pci:v000010ECd00005261*
++ ID_MODEL_FROM_DATABASE=RTS5261 PCI Express Card Reader
++
+ pci:v000010ECd00005286*
+  ID_MODEL_FROM_DATABASE=RTS5286 PCI Express Card Reader
+ 
+@@ -37889,6 +38081,9 @@ pci:v000010ECd00008168sv0000103Csd0000825B*
+ pci:v000010ECd00008168sv0000103Csd00008615*
+  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion Laptop 15-cw1xxx)
+ 
++pci:v000010ECd00008168sv0000103Csd00008882*
++ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (HP ProDesk 405 G8 Desktop Mini PC)
++
+ pci:v000010ECd00008168sv00001043sd000011F5*
+  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Notebook motherboard (one of many models))
+ 
+@@ -40556,6 +40751,9 @@ pci:v00001106d00009140*
+ pci:v00001106d00009201*
+  ID_MODEL_FROM_DATABASE=USB3.0 Controller
+ 
++pci:v00001106d00009380*
++ ID_MODEL_FROM_DATABASE=Ncore Coprocessor
++
+ pci:v00001106d00009530*
+  ID_MODEL_FROM_DATABASE=VX800/820/900 Series Secure Digital Memory Card Controller
+ 
+@@ -49715,6 +49913,9 @@ pci:v000012D8d00000508*
+ pci:v000012D8d00002304*
+  ID_MODEL_FROM_DATABASE=PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
+ 
++pci:v000012D8d00002308*
++ ID_MODEL_FROM_DATABASE=PI7C9X2G308GP 8-lane PCI Express 2.0 Switch with 3 PCI Express ports
++
+ pci:v000012D8d00002404*
+  ID_MODEL_FROM_DATABASE=PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch
+ 
+@@ -51683,6 +51884,12 @@ pci:v000013A3d00000037*
+ pci:v000013A3d00000037sv000013A3sd00000036*
+  ID_MODEL_FROM_DATABASE=8204 Acceleration Processor (DX1740 Acceleration Card)
+ 
++pci:v000013A3d00009240*
++ ID_MODEL_FROM_DATABASE=XR9240 Compression and Security Coprocessor [Panther II]
++
++pci:v000013A3d00009240sv000013A3sd00009200*
++ ID_MODEL_FROM_DATABASE=XR9240 Compression and Security Coprocessor [Panther II] (DX2040 Compression and Security Acceleration Card [Panther II])
++
+ pci:v000013A4*
+  ID_VENDOR_FROM_DATABASE=Rascom Inc
+ 
+@@ -56477,9 +56684,18 @@ pci:v000014C2*
+ pci:v000014C3*
+  ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
+ 
++pci:v000014C3d00000608*
++ ID_MODEL_FROM_DATABASE=RZ608 Wi-Fi 6E 80MHz
++
++pci:v000014C3d00000616*
++ ID_MODEL_FROM_DATABASE=MT7922 802.11ax PCI Express Wireless Network Adapter
++
+ pci:v000014C3d00007612*
+  ID_MODEL_FROM_DATABASE=MT7612E 802.11acbgn PCI Express Wireless Network Adapter
+ 
++pci:v000014C3d00007615*
++ ID_MODEL_FROM_DATABASE=MT7615E 802.11ac PCI Express Wireless Network Adapter
++
+ pci:v000014C3d00007630*
+  ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter
+ 
+@@ -56489,6 +56705,9 @@ pci:v000014C3d00007662*
+ pci:v000014C3d00007915*
+  ID_MODEL_FROM_DATABASE=MT7915E 802.11ax PCI Express Wireless Network Adapter
+ 
++pci:v000014C3d00007961*
++ ID_MODEL_FROM_DATABASE=MT7921 802.11ax PCI Express Wireless Network Adapter
++
+ pci:v000014C4*
+  ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd
+ 
+@@ -57503,6 +57722,12 @@ pci:v000014E4d00001688sv00001259sd00002708*
+ pci:v000014E4d0000168A*
+  ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet
+ 
++pci:v000014E4d0000168Asv00001014sd00000493*
++ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3))
++
++pci:v000014E4d0000168Asv00001014sd00000494*
++ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3))
++
+ pci:v000014E4d0000168Asv00001028sd00001F5C*
+  ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (BCM57800 10-Gigabit Ethernet)
+ 
+@@ -61079,6 +61304,9 @@ pci:v000015ADd000007C0*
+ pci:v000015ADd000007E0*
+  ID_MODEL_FROM_DATABASE=SATA AHCI controller
+ 
++pci:v000015ADd000007F0*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller
++
+ pci:v000015ADd00000801*
+  ID_MODEL_FROM_DATABASE=Virtual Machine Interface
+ 
+@@ -61178,6 +61406,12 @@ pci:v000015B3d0000021E*
+ pci:v000015B3d0000021F*
+  ID_MODEL_FROM_DATABASE=CX8 Family [ConnectX-8 Secure Flash Recovery]
+ 
++pci:v000015B3d00000220*
++ ID_MODEL_FROM_DATABASE=BF4 Family Flash Recovery [BlueField-4 SoC Flash Recovery]
++
++pci:v000015B3d00000221*
++ ID_MODEL_FROM_DATABASE=BF4 Family Secure Flash Recovery [BlueField-4 Secure Flash Recovery]
++
+ pci:v000015B3d0000024E*
+  ID_MODEL_FROM_DATABASE=MT53100 [Spectrum-2, Flash recovery mode]
+ 
+@@ -61211,6 +61445,9 @@ pci:v000015B3d00000257*
+ pci:v000015B3d00000258*
+  ID_MODEL_FROM_DATABASE=Quantum-2 RMA
+ 
++pci:v000015B3d00000259*
++ ID_MODEL_FROM_DATABASE=Abir Chiplet
++
+ pci:v000015B3d00000262*
+  ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN
+ 
+@@ -61232,6 +61469,9 @@ pci:v000015B3d00000274*
+ pci:v000015B3d00000275*
+  ID_MODEL_FROM_DATABASE=Spectrum-4C RMA
+ 
++pci:v000015B3d00000277*
++ ID_MODEL_FROM_DATABASE=Spectrum-4TOR RMA
++
+ pci:v000015B3d00000281*
+  ID_MODEL_FROM_DATABASE=NPS-600 Flash Recovery
+ 
+@@ -61727,6 +61967,15 @@ pci:v000015B3d0000A2DB*
+ pci:v000015B3d0000A2DC*
+  ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 integrated ConnectX-7 network controller
+ 
++pci:v000015B3d0000A2DD*
++ ID_MODEL_FROM_DATABASE=BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled]
++
++pci:v000015B3d0000A2DE*
++ ID_MODEL_FROM_DATABASE=BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled]
++
++pci:v000015B3d0000A2DF*
++ ID_MODEL_FROM_DATABASE=BF4 Family integrated network controller [BlueField-4 integrated network controller]
++
+ pci:v000015B3d0000C2D2*
+  ID_MODEL_FROM_DATABASE=MT416842 BlueField SoC management interfac
+ 
+@@ -61739,6 +61988,9 @@ pci:v000015B3d0000C2D4*
+ pci:v000015B3d0000C2D5*
+  ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 SoC Management Interface
+ 
++pci:v000015B3d0000C2D6*
++ ID_MODEL_FROM_DATABASE=BF4 Family Management Interface [BlueField-4 SoC Management Interface]
++
+ pci:v000015B3d0000C738*
+  ID_MODEL_FROM_DATABASE=MT51136
+ 
+@@ -62019,10 +62271,10 @@ pci:v000015CE*
+  ID_VENDOR_FROM_DATABASE=Genrad Inc
+ 
+ pci:v000015CF*
+- ID_VENDOR_FROM_DATABASE=Hilscher GmbH
++ ID_VENDOR_FROM_DATABASE=Hilscher Gesellschaft für Systemautomation mbH
+ 
+ pci:v000015CFd00000000*
+- ID_MODEL_FROM_DATABASE=CIFX 50E-DP(M/S)
++ ID_MODEL_FROM_DATABASE=CIFX PCI/PCIe
+ 
+ pci:v000015D1*
+  ID_VENDOR_FROM_DATABASE=Infineon Technologies AG
+@@ -64556,6 +64808,48 @@ pci:v0000177Dd0000A037*
+ pci:v0000177Dd0000A040*
+  ID_MODEL_FROM_DATABASE=THUNDERX CPT Cryptographic Accelerator
+ 
++pci:v0000177Dd0000A059*
++ ID_MODEL_FROM_DATABASE=Octeon TX2 CGX (MAC)
++
++pci:v0000177Dd0000A060*
++ ID_MODEL_FROM_DATABASE=Octeon 10 RPM (MAC)
++
++pci:v0000177Dd0000A061*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 Loopback Interface (LBK)
++
++pci:v0000177Dd0000A063*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Physical Function
++
++pci:v0000177Dd0000A064*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Virtual Function
++
++pci:v0000177Dd0000A065*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Admin Function
++
++pci:v0000177Dd0000A09E*
++ ID_MODEL_FROM_DATABASE=Octeon 10 PTP controller
++
++pci:v0000177Dd0000A0F2*
++ ID_MODEL_FROM_DATABASE=Octeon 10 CPT Cryptographic Accelerator, Physical function
++
++pci:v0000177Dd0000A0F3*
++ ID_MODEL_FROM_DATABASE=Octeon 10 CPT Cryptographic Accelerator, Virtual function
++
++pci:v0000177Dd0000A0F6*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 SDP Physical Function
++
++pci:v0000177Dd0000A0F7*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 SDP Virtual Function
++
++pci:v0000177Dd0000A0F8*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 Loopback Interface Virtual Function (LBKVF)
++
++pci:v0000177Dd0000A0FD*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 CPT Cryptographic Accelerator, Physical function
++
++pci:v0000177Dd0000A0FE*
++ ID_MODEL_FROM_DATABASE=Octeon Tx2 CPT Cryptographic Accelerator, Virtual function
++
+ pci:v0000177Dd0000A100*
+  ID_MODEL_FROM_DATABASE=THUNDERX CN88XX 48 core SoC
+ 
+@@ -64871,6 +65165,12 @@ pci:v000017CBd00001000*
+ pci:v000017CBd00001101*
+  ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
+ 
++pci:v000017CBd00001103*
++ ID_MODEL_FROM_DATABASE=Atheros QCNFA765
++
++pci:v000017CBd00001104*
++ ID_MODEL_FROM_DATABASE=QCN6024/9024/9074 Wireless Network Adapter
++
+ pci:v000017CC*
+  ID_VENDOR_FROM_DATABASE=NetChip Technology, Inc
+ 
+@@ -67367,6 +67667,12 @@ pci:v00001974d00000018*
+ pci:v00001974d00000019*
+  ID_MODEL_FROM_DATABASE=FlexCard PCIe3
+ 
++pci:v00001974d0000001A*
++ ID_MODEL_FROM_DATABASE=FlexCard PXIe Ethernet
++
++pci:v00001974d0000001B*
++ ID_MODEL_FROM_DATABASE=FlexCard PCIe Ethernet
++
+ pci:v00001976*
+  ID_VENDOR_FROM_DATABASE=TRENDnet
+ 
+@@ -68339,6 +68645,21 @@ pci:v00001AA8d00000009*
+ pci:v00001AA8d0000000A*
+  ID_MODEL_FROM_DATABASE=RAIDCore Controller
+ 
++pci:v00001AA9*
++ ID_VENDOR_FROM_DATABASE=Schweitzer Engineering Laboratories
++
++pci:v00001AA9d0000000D*
++ ID_MODEL_FROM_DATABASE=SEL-3390S8 Serial Adapter
++
++pci:v00001AA9d0000000E*
++ ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter
++
++pci:v00001AA9d00000014*
++ ID_MODEL_FROM_DATABASE=SEL-3390T Time and Ethernet Adapter
++
++pci:v00001AA9d00000018*
++ ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter
++
+ pci:v00001AAE*
+  ID_VENDOR_FROM_DATABASE=Global Velocity, Inc.
+ 
+@@ -68483,6 +68804,9 @@ pci:v00001AE8d00000A58*
+ pci:v00001AE8d00000A5A*
+  ID_MODEL_FROM_DATABASE=microEnable 5 AD8-CL
+ 
++pci:v00001AE8d00000A64*
++ ID_MODEL_FROM_DATABASE=imaWorx CXP-12 Quad
++
+ pci:v00001AE8d00000B52*
+  ID_MODEL_FROM_DATABASE=mE5 Abacus 4G Base
+ 
+@@ -68732,6 +69056,9 @@ pci:v00001B21d00001080sv00001849sd00001080*
+ pci:v00001B21d00001142*
+  ID_MODEL_FROM_DATABASE=ASM1042A USB 3.0 Host Controller
+ 
++pci:v00001B21d00001166*
++ ID_MODEL_FROM_DATABASE=ASM1166 Serial ATA Controller
++
+ pci:v00001B21d00001182*
+  ID_MODEL_FROM_DATABASE=ASM1182e 2-Port PCIe x1 Gen2 Packet Switch
+ 
+@@ -68744,12 +69071,18 @@ pci:v00001B21d00001184*
+ pci:v00001B21d00001184sv00001849sd00001184*
+  ID_MODEL_FROM_DATABASE=ASM1184e 4-Port PCIe x1 Gen2 Packet Switch
+ 
++pci:v00001B21d00001187*
++ ID_MODEL_FROM_DATABASE=ASM1187e 7-Port PCIe x1 Gen2 Packet Switch
++
+ pci:v00001B21d00001242*
+  ID_MODEL_FROM_DATABASE=ASM1142 USB 3.1 Host Controller
+ 
+ pci:v00001B21d00001343*
+  ID_MODEL_FROM_DATABASE=ASM1143 USB 3.1 Host Controller
+ 
++pci:v00001B21d00001812*
++ ID_MODEL_FROM_DATABASE=ASM1812 6-Port PCIe x4 Gen2 Packet Switch
++
+ pci:v00001B21d00002142*
+  ID_MODEL_FROM_DATABASE=ASM2142 USB 3.1 Host Controller
+ 
+@@ -68966,6 +69299,12 @@ pci:v00001B4Bd00002241sv00001028sd00002112*
+ pci:v00001B4Bd00002241sv00001028sd00002113*
+  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular)
+ 
++pci:v00001B4Bd00002241sv00001028sd00002151*
++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular ET)
++
++pci:v00001B4Bd00002241sv00001028sd00002196*
++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ROR-N100)
++
+ pci:v00001B4Bd00002241sv00001D49sd00000306*
+  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit)
+ 
+@@ -68993,6 +69332,9 @@ pci:v00001B4Bd00009130*
+ pci:v00001B4Bd00009130sv00001043sd00008438*
+  ID_MODEL_FROM_DATABASE=88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo (P8P67 Deluxe Motherboard)
+ 
++pci:v00001B4Bd00009170*
++ ID_MODEL_FROM_DATABASE=88SE9170 PCIe 2.0 x1 2-port SATA 6 Gb/s Controller
++
+ pci:v00001B4Bd00009172*
+  ID_MODEL_FROM_DATABASE=88SE9172 SATA 6Gb/s Controller
+ 
+@@ -69323,6 +69665,24 @@ pci:v00001BB1d00000100sv00001BB1sd00000151*
+ pci:v00001BB1d00000100sv00001BB1sd00000152*
+  ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5520 TCG)
+ 
++pci:v00001BB1d00000100sv00001BB1sd00000153*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050H)
++
++pci:v00001BB1d00000100sv00001BB1sd00000154*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050H TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000155*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M)
++
++pci:v00001BB1d00000100sv00001BB1sd00000156*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000157*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M 7mm)
++
++pci:v00001BB1d00000100sv00001BB1sd00000158*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG 7mm)
++
+ pci:v00001BB1d00000100sv00001BB1sd000001A1*
+  ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XP7102)
+ 
+@@ -69332,6 +69692,9 @@ pci:v00001BB1d00005012*
+ pci:v00001BB1d00005016*
+  ID_MODEL_FROM_DATABASE=FireCuda 520 SSD
+ 
++pci:v00001BB1d00005018*
++ ID_MODEL_FROM_DATABASE=FireCuda 530 SSD
++
+ pci:v00001BB3*
+  ID_VENDOR_FROM_DATABASE=Bluecherry
+ 
+@@ -69779,12 +70142,54 @@ pci:v00001C5Cd00002839sv00001028sd0000214A*
+ pci:v00001C5Cd00002839sv00001C5Csd00000100*
+  ID_MODEL_FROM_DATABASE=PE8000 Series NVMe Solid State Drive
+ 
++pci:v00001C5Cd00002849*
++ ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive
++
+ pci:v00001C5F*
+  ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd.
+ 
+ pci:v00001C5Fd0000000D*
+  ID_MODEL_FROM_DATABASE=PBlaze5 520/526
+ 
++pci:v00001C5Fd0000000E*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B20*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B21*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G 2.5" U.2)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B30*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B31*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G 2.5" U.2)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B40*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00000B41*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G 2.5" U.2)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B20*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B21*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G 2.5" U.2)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B30*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B31*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G 2.5" U.2)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B40*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G AIC)
++
++pci:v00001C5Fd0000000Esv00001C5Fsd00004B41*
++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G 2.5" U.2)
++
+ pci:v00001C5Fd0000003D*
+  ID_MODEL_FROM_DATABASE=PBlaze5 920/926
+ 
+@@ -69908,6 +70313,9 @@ pci:v00001CB8*
+ pci:v00001CC1*
+  ID_VENDOR_FROM_DATABASE=ADATA Technology Co., Ltd.
+ 
++pci:v00001CC1d00005766*
++ ID_MODEL_FROM_DATABASE=ADATA XPG GAMMIXS1 1L Media
++
+ pci:v00001CC1d00008201*
+  ID_MODEL_FROM_DATABASE=XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive
+ 
+@@ -69947,6 +70355,9 @@ pci:v00001CC4d00001203sv00001CC4sd0000A214*
+ pci:v00001CC4d000017AB*
+  ID_MODEL_FROM_DATABASE=NVMe 256G SSD device
+ 
++pci:v00001CC4d00006303*
++ ID_MODEL_FROM_DATABASE=AM630 PCIe 4.0 x4 NVMe SSD Controller
++
+ pci:v00001CC5*
+  ID_VENDOR_FROM_DATABASE=Embedded Intelligence, Inc.
+ 
+@@ -70523,6 +70934,9 @@ pci:v00001D6Cd0000101D*
+ pci:v00001D6Cd0000101E*
+  ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile]
+ 
++pci:v00001D6Cd0000101F*
++ ID_MODEL_FROM_DATABASE=AR-TK242 [2x100GbE Packet Capture Device]
++
+ pci:v00001D6Cd00004200*
+  ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
+ 
+@@ -71141,6 +71555,12 @@ pci:v00001DE5d00003000*
+ pci:v00001DED*
+  ID_VENDOR_FROM_DATABASE=Alibaba (China) Co., Ltd.
+ 
++pci:v00001DEDd0000107F*
++ ID_MODEL_FROM_DATABASE=Elastic RDMA Adapter
++
++pci:v00001DEDd00005007*
++ ID_MODEL_FROM_DATABASE=Elastic RDMA Adapter
++
+ pci:v00001DEDd00008000*
+  ID_MODEL_FROM_DATABASE=M1 Root Port
+ 
+@@ -71409,7 +71829,7 @@ pci:v00001E0Fd00000007sv00001028sd00002110*
+  ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Dell Ent NVMe FIPS CM6 MU 6.4TB)
+ 
+ pci:v00001E0Fd00000007sv00001E0Fsd00000001*
+- ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6 RI 3.84TB)
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6)
+ 
+ pci:v00001E0Fd00000009*
+  ID_MODEL_FROM_DATABASE=NVMe SSD
+@@ -71417,6 +71837,39 @@ pci:v00001E0Fd00000009*
+ pci:v00001E0Fd00000009sv00001E0Fsd00000001*
+  ID_MODEL_FROM_DATABASE=NVMe SSD (Toshiba RC500 NVMe SSD 500GB)
+ 
++pci:v00001E0Fd00000011*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7
++
++pci:v00001E0Fd00000011sv00001028sd00002189*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 960GB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218A*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 960GB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218B*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 1.92TB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218C*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 1.92TB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218D*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 3.84TB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218E*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 3.84TB)
++
++pci:v00001E0Fd00000011sv00001028sd0000218F*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 7.68TB)
++
++pci:v00001E0Fd00000011sv00001028sd00002190*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 7.68TB)
++
++pci:v00001E0Fd00000011sv00001028sd00002191*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 15.36TB)
++
++pci:v00001E0Fd00000011sv00001028sd00002192*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 15.36TB)
++
+ pci:v00001E17*
+  ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
+ 
+@@ -71490,7 +71943,7 @@ pci:v00001E39*
+  ID_VENDOR_FROM_DATABASE=MEDION AG
+ 
+ pci:v00001E3B*
+- ID_VENDOR_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd
++ ID_VENDOR_FROM_DATABASE=DapuStor Corporation
+ 
+ pci:v00001E3Bd00000600*
+  ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600
+@@ -71678,6 +72131,9 @@ pci:v00001E3D*
+ pci:v00001E49*
+  ID_VENDOR_FROM_DATABASE=Yangtze Memory Technologies Co.,Ltd
+ 
++pci:v00001E49d00000041*
++ ID_MODEL_FROM_DATABASE=ZHITAI TiPro7000
++
+ pci:v00001E49d00001013*
+  ID_MODEL_FROM_DATABASE=PC210
+ 
+@@ -71726,6 +72182,15 @@ pci:v00001E59*
+ pci:v00001E59d00000001*
+  ID_MODEL_FROM_DATABASE=MinION Mk1C
+ 
++pci:v00001E5D*
++ ID_VENDOR_FROM_DATABASE=ASR Microelectronics
++
++pci:v00001E5Dd00007000*
++ ID_MODEL_FROM_DATABASE=AI controller A7000
++
++pci:v00001E5Dd00007010*
++ ID_MODEL_FROM_DATABASE=AI controller A7010
++
+ pci:v00001E60*
+  ID_VENDOR_FROM_DATABASE=Hailo Technologies Ltd.
+ 
+@@ -71834,6 +72299,15 @@ pci:v00001EABd0000300A*
+ pci:v00001EABd0000300B*
+  ID_MODEL_FROM_DATABASE=NVMe SSD Controller 300B
+ 
++pci:v00001EAC*
++ ID_VENDOR_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
++
++pci:v00001EACd00001001*
++ ID_MODEL_FROM_DATABASE=EM120R-GL LTE Modem
++
++pci:v00001EACd00001002*
++ ID_MODEL_FROM_DATABASE=EM160R-GL LTE Modem
++
+ pci:v00001EAE*
+  ID_VENDOR_FROM_DATABASE=XFX Limited
+ 
+@@ -71843,6 +72317,12 @@ pci:v00001EB1*
+ pci:v00001EB1d00001001*
+  ID_MODEL_FROM_DATABASE=Video Accelerator
+ 
++pci:v00001EB4*
++ ID_VENDOR_FROM_DATABASE=Quantum Nebula Microelectronics Technology Co.,Ltd.
++
++pci:v00001EB4d00003401*
++ ID_MODEL_FROM_DATABASE=SSD Contoller
++
+ pci:v00001EBD*
+  ID_VENDOR_FROM_DATABASE=EMERGETECH Company Ltd.
+ 
+@@ -71858,6 +72338,15 @@ pci:v00001ED2d00000000*
+ pci:v00001ED3*
+  ID_VENDOR_FROM_DATABASE=Yeston
+ 
++pci:v00001ED5*
++ ID_VENDOR_FROM_DATABASE=Moore Threads Technology Co.,Ltd
++
++pci:v00001ED5d00000100*
++ ID_MODEL_FROM_DATABASE=MTT S10
++
++pci:v00001ED5d00000101*
++ ID_MODEL_FROM_DATABASE=MTT S30
++
+ pci:v00001ED8*
+  ID_VENDOR_FROM_DATABASE=Digiteq Automotive
+ 
+@@ -71909,6 +72398,27 @@ pci:v00001F03d00005236*
+ pci:v00001F03d00005636*
+  ID_MODEL_FROM_DATABASE=IG5636-Based NVMe SSD
+ 
++pci:v00001F2F*
++ ID_VENDOR_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co.Ltd.
++
++pci:v00001F2Fd00001513*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller
++
++pci:v00001F2Fd00001513sv00001F2Fsd00006113*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM660 U.2 1.6TB NVMe SSD)
++
++pci:v00001F2Fd00001513sv00001F2Fsd00006114*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 1.92TB NVMe SSD)
++
++pci:v00001F2Fd00001513sv00001F2Fsd00006115*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM660 U.2 3.2TB NVMe SSD)
++
++pci:v00001F2Fd00001513sv00001F2Fsd00006116*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 3.84TB NVMe SSD)
++
++pci:v00001F2Fd00001513sv00001F2Fsd00006118*
++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 7.68TB NVMe SSD)
++
+ pci:v00001FAB*
+  ID_VENDOR_FROM_DATABASE=Unifabrix Ltd.
+ 
+@@ -74114,6 +74624,24 @@ pci:v00006688d00001600*
+ pci:v00006688d00001800*
+  ID_MODEL_FROM_DATABASE=CooVOX TDM BRI Module
+ 
++pci:v00006766*
++ ID_VENDOR_FROM_DATABASE=Glenfly Tech Co., Ltd.
++
++pci:v00006766d00003D00*
++ ID_MODEL_FROM_DATABASE=Arise-GT-10C0
++
++pci:v00006766d00003D02*
++ ID_MODEL_FROM_DATABASE=Arise 1020
++
++pci:v00006766d00003D40*
++ ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller
++
++pci:v00006766d00003D41*
++ ID_MODEL_FROM_DATABASE=Arise 1020 High Definition Audio Controller
++
++pci:v00006899*
++ ID_VENDOR_FROM_DATABASE=ZT Systems
++
+ pci:v00006900*
+  ID_VENDOR_FROM_DATABASE=Red Hat, Inc.
+ 
+@@ -74147,6 +74675,15 @@ pci:v00007401d0000E100*
+ pci:v00007470*
+  ID_VENDOR_FROM_DATABASE=TP-LINK Technologies Co., Ltd.
+ 
++pci:v00007526*
++ ID_VENDOR_FROM_DATABASE=HongQin (Beijing) Technology Co., Ltd.
++
++pci:v00007526d00000082*
++ ID_MODEL_FROM_DATABASE=HQ SSD 1TB
++
++pci:v00007526d00000083*
++ ID_MODEL_FROM_DATABASE=HQ SSD 2TB M.2 NVMe
++
+ pci:v00007604*
+  ID_VENDOR_FROM_DATABASE=O.N. Electronic Co Ltd.
+ 
+@@ -76160,6 +76697,24 @@ pci:v00008086d00000B60sv00001028sd00002103*
+ pci:v00008086d00000B60sv00001028sd00002104*
+  ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe RI U.2 7.68TB (P5500))
+ 
++pci:v00008086d00000B60sv00001028sd0000219A*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe P5316 RI 15.36TB)
++
++pci:v00008086d00000B60sv00001028sd0000219B*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe P5316 RI 30.72TB)
++
++pci:v00008086d00000B60sv00001028sd0000219C*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED P5316 RI 15.36)
++
++pci:v00008086d00000B60sv00001028sd0000219D*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED P5316 RI 30.72)
++
++pci:v00008086d00000B60sv00001028sd0000219E*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe FIPS P5316 RI 15.36TB)
++
++pci:v00008086d00000B60sv00001028sd0000219F*
++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe FIPS P5316 RI 30.72)
++
+ pci:v00008086d00000B60sv00008086sd00008008*
+  ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510))
+ 
+@@ -76484,12 +77039,33 @@ pci:v00008086d00000D9F*
+ pci:v00008086d00000DD2*
+  ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710
+ 
++pci:v00008086d00000DD2sv00001137sd00000000*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (I710T4LG 4x1 GbE RJ45 PCIe NIC)
++
++pci:v00008086d00000DD2sv00001137sd000002E3*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (I710T4LG 4x1 GbE RJ45 PCIe NIC)
++
++pci:v00008086d00000DD2sv00008086sd00000000*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L)
++
+ pci:v00008086d00000DD2sv00008086sd0000000D*
+  ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L)
+ 
+ pci:v00008086d00000DD2sv00008086sd00000010*
+  ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0)
+ 
++pci:v00008086d00000DD2sv00008086sd0000401A*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L)
++
++pci:v00008086d00000DD2sv00008086sd0000401B*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0)
++
++pci:v00008086d00000DDA*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+
++
++pci:v00008086d00000DDAsv00001BD4sd00000076*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+
++
+ pci:v00008086d00000E00*
+  ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
+ 
+@@ -80507,6 +81083,9 @@ pci:v00008086d00001592sv00008086sd0000000D*
+ pci:v00008086d00001592sv00008086sd0000000E*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-2C-Q2)
+ 
++pci:v00008086d00001592sv00008086sd00000010*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-stg Adapter)
++
+ pci:v00008086d00001593*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
+ 
+@@ -80543,9 +81122,18 @@ pci:v00008086d00001593sv00008086sd0000000D*
+ pci:v00008086d00001593sv00008086sd0000000E*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4T)
+ 
++pci:v00008086d00001593sv00008086sd0000000F*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-stg Adapter)
++
++pci:v00008086d00001593sv00008086sd00000010*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-st Adapter)
++
+ pci:v00008086d00001599*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane
+ 
++pci:v00008086d00001599sv00008086sd00000001*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane (Ethernet 25G 2P E810-XXV-k Mezz)
++
+ pci:v00008086d0000159A*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for QSFP
+ 
+@@ -91634,6 +92222,9 @@ pci:v00008086d00003433*
+ pci:v00008086d00003438*
+  ID_MODEL_FROM_DATABASE=7500/5520/5500/X58 I/O Hub Throttle Registers
+ 
++pci:v00008086d0000347E*
++ ID_MODEL_FROM_DATABASE=Ice Lake Xeon Non-Transparent Bridge
++
+ pci:v00008086d00003482*
+  ID_MODEL_FROM_DATABASE=Ice Lake-LP LPC Controller
+ 
+@@ -94064,12 +94655,18 @@ pci:v00008086d0000444E*
+ pci:v00008086d0000460D*
+  ID_MODEL_FROM_DATABASE=12th Gen Core Processor PCI Express x16 Controller #1
+ 
++pci:v00008086d0000461D*
++ ID_MODEL_FROM_DATABASE=Alder Lake Innovation Platform Framework Processor Participant
++
+ pci:v00008086d0000461E*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 USB Controller
+ 
+ pci:v00008086d0000461F*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #3
+ 
++pci:v00008086d00004626*
++ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller
++
+ pci:v00008086d00004629*
+  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
+ 
+@@ -94094,6 +94691,9 @@ pci:v00008086d0000464D*
+ pci:v00008086d0000464F*
+  ID_MODEL_FROM_DATABASE=12th Gen Core Processor Gaussian & Neural Accelerator
+ 
++pci:v00008086d00004660*
++ ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers
++
+ pci:v00008086d0000466D*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #1
+ 
+@@ -94118,6 +94718,9 @@ pci:v00008086d000046A1*
+ pci:v00008086d000046A3*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P GT1 [UHD Graphics]
+ 
++pci:v00008086d000046A6*
++ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller
++
+ pci:v00008086d000046C0*
+  ID_MODEL_FROM_DATABASE=AlderLake-M GT1
+ 
+@@ -94152,10 +94755,13 @@ pci:v00008086d00004C9A*
+  ID_MODEL_FROM_DATABASE=RocketLake-S [UHD Graphics]
+ 
+ pci:v00008086d00004DA3*
+- ID_MODEL_FROM_DATABASE=JaserLake SMBus
++ ID_MODEL_FROM_DATABASE=Jasper Lake SMBus
+ 
+ pci:v00008086d00004DA4*
+- ID_MODEL_FROM_DATABASE=JaserLake SPI (flash) Controller
++ ID_MODEL_FROM_DATABASE=Jasper Lake SPI Controller
++
++pci:v00008086d00004DC8*
++ ID_MODEL_FROM_DATABASE=Jasper Lake HD Audio
+ 
+ pci:v00008086d00004DE0*
+  ID_MODEL_FROM_DATABASE=Management Engine Interface
+@@ -94337,12 +94943,21 @@ pci:v00008086d0000504C*
+ pci:v00008086d00005181*
+  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P LPC/eSPI Controller
+ 
++pci:v00008086d00005182*
++ ID_MODEL_FROM_DATABASE=Alder Lake PCH eSPI Controller
++
+ pci:v00008086d000051A3*
+  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P SMBus Host Controller
+ 
+ pci:v00008086d000051A4*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P PCH SPI Controller
+ 
++pci:v00008086d000051A8*
++ ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #0
++
++pci:v00008086d000051A9*
++ ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #1
++
+ pci:v00008086d000051BF*
+  ID_MODEL_FROM_DATABASE=Alder Lake PCH-P PCI Express Root Port #9
+ 
+@@ -95486,6 +96101,45 @@ pci:v00008086d00007800sv00008086sd00000000*
+ pci:v00008086d00007800sv00008086sd00000100*
+  ID_MODEL_FROM_DATABASE=82740 (i740) AGP Graphics Accelerator (Intel740 Graphics Accelerator)
+ 
++pci:v00008086d00007A84*
++ ID_MODEL_FROM_DATABASE=Z690 Chipset LPC/eSPI Controller
++
++pci:v00008086d00007AA3*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SMBus Controller
++
++pci:v00008086d00007AA4*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SPI Controller
++
++pci:v00008086d00007AA7*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Shared SRAM
++
++pci:v00008086d00007AB4*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #13
++
++pci:v00008086d00007ABD*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #6
++
++pci:v00008086d00007ACC*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH I2C Controller #0
++
++pci:v00008086d00007AD0*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S HD Audio Controller
++
++pci:v00008086d00007AE0*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller
++
++pci:v00008086d00007AE2*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SATA Controller [AHCI Mode]
++
++pci:v00008086d00007AE8*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH HECI Controller #1
++
++pci:v00008086d00007AF0*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi
++
++pci:v00008086d00007AF0sv00008086sd00000094*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz)
++
+ pci:v00008086d00008002*
+  ID_MODEL_FROM_DATABASE=Trusted Execution Technology Registers
+ 
+@@ -96593,6 +97247,9 @@ pci:v00008086d00009B63*
+ pci:v00008086d00009B64*
+  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
+ 
++pci:v00008086d00009BA8*
++ ID_MODEL_FROM_DATABASE=CometLake-S GT1 [UHD Graphics 610]
++
+ pci:v00008086d00009BC4*
+  ID_MODEL_FROM_DATABASE=CometLake-H GT2 [UHD Graphics]
+ 
+@@ -97193,6 +97850,9 @@ pci:v00008086d00009D3Dsv0000103Csd00008079*
+ pci:v00008086d00009D3Dsv000017AAsd00002247*
+  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Active Management Technology - SOL (ThinkPad T570)
+ 
++pci:v00008086d00009D3E*
++ ID_MODEL_FROM_DATABASE=iTouch Controller
++
+ pci:v00008086d00009D43*
+  ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
+ 
+@@ -97355,6 +98015,9 @@ pci:v00008086d00009DA8*
+ pci:v00008086d00009DAA*
+  ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO SPI Controller
+ 
++pci:v00008086d00009DAB*
++ ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO SPI Controller
++
+ pci:v00008086d00009DB0*
+  ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #9
+ 
+@@ -97385,6 +98048,9 @@ pci:v00008086d00009DBE*
+ pci:v00008086d00009DBF*
+  ID_MODEL_FROM_DATABASE=Cannon Point PCI Express Root Port #8
+ 
++pci:v00008086d00009DC4*
++ ID_MODEL_FROM_DATABASE=Cannon Point-LP SD Host Controller
++
+ pci:v00008086d00009DC5*
+  ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO I2C Host Controller
+ 
+@@ -98475,7 +99141,7 @@ pci:v00008086d0000A39A*
+  ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port 11
+ 
+ pci:v00008086d0000A3A1*
+- ID_MODEL_FROM_DATABASE=Memory controller
++ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Power Management Controller
+ 
+ pci:v00008086d0000A3A3*
+  ID_MODEL_FROM_DATABASE=Comet Lake PCH-V SMBus Host Controller
+@@ -99923,6 +100589,12 @@ pci:v00009005d0000028Fsv00001BD4sd00000071*
+ pci:v00009005d0000028Fsv00001BD4sd00000072*
+  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16i)
+ 
++pci:v00009005d0000028Fsv00001CC4sd00000101*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8204)
++
++pci:v00009005d0000028Fsv00001CC4sd00000201*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8222)
++
+ pci:v00009005d0000028Fsv00001D49sd00000220*
+  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (ThinkSystem 4350-8i SAS/SATA 12Gb HBA)
+ 
+@@ -100754,6 +101426,12 @@ pci:v0000CDDDd00000200*
+ pci:v0000CEBA*
+  ID_VENDOR_FROM_DATABASE=KEBA AG
+ 
++pci:v0000CF86*
++ ID_VENDOR_FROM_DATABASE=Spectrum-4TOR
++
++pci:v0000CF86d00000276*
++ ID_MODEL_FROM_DATABASE=Spectrum-4TOR in Flash Recovery Mode
++
+ pci:v0000D161*
+  ID_VENDOR_FROM_DATABASE=Digium, Inc.
+ 
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index 9f457d9f65..4bcb238815 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -8078,6 +8078,12 @@ usb:v046Dp0846*
+ usb:v046Dp084B*
+  ID_MODEL_FROM_DATABASE=ConferenceCam Connect Video
+ 
++usb:v046Dp084C*
++ ID_MODEL_FROM_DATABASE=ConferenceCam Connect Audio
++
++usb:v046Dp084E*
++ ID_MODEL_FROM_DATABASE=ConferenceCam Connect
++
+ usb:v046Dp0850*
+  ID_MODEL_FROM_DATABASE=QuickCam Web
+ 
+@@ -8235,7 +8241,7 @@ usb:v046Dp08D9*
+  ID_MODEL_FROM_DATABASE=QuickCam IM/Connect
+ 
+ usb:v046Dp08DA*
+- ID_MODEL_FROM_DATABASE=QuickCam Messanger
++ ID_MODEL_FROM_DATABASE=QuickCam Messenger
+ 
+ usb:v046Dp08DD*
+  ID_MODEL_FROM_DATABASE=QuickCam for Notebooks
+@@ -8652,7 +8658,7 @@ usb:v046DpC06C*
+  ID_MODEL_FROM_DATABASE=Optical Mouse
+ 
+ usb:v046DpC077*
+- ID_MODEL_FROM_DATABASE=M105 Optical Mouse
++ ID_MODEL_FROM_DATABASE=Mouse
+ 
+ usb:v046DpC07C*
+  ID_MODEL_FROM_DATABASE=M-R0017 [G700s Rechargeable Gaming Mouse]
+@@ -8676,7 +8682,7 @@ usb:v046DpC08B*
+  ID_MODEL_FROM_DATABASE=G502 SE HERO Gaming Mouse
+ 
+ usb:v046DpC092*
+- ID_MODEL_FROM_DATABASE=G203 LIGHTSYNC Gaming Mouse
++ ID_MODEL_FROM_DATABASE=G102/G203 LIGHTSYNC Gaming Mouse
+ 
+ usb:v046DpC101*
+  ID_MODEL_FROM_DATABASE=UltraX Media Remote
+@@ -9122,6 +9128,9 @@ usb:v046DpC534*
+ usb:v046DpC537*
+  ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver
+ 
++usb:v046DpC539*
++ ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver
++
+ usb:v046DpC53A*
+  ID_MODEL_FROM_DATABASE=PowerPlay Wireless Charging System
+ 
+@@ -58655,6 +58664,9 @@ usb:v1A86p5523*
+ usb:v1A86p5584*
+  ID_MODEL_FROM_DATABASE=CH341 in parallel mode, usb to printer port converter
+ 
++usb:v1A86p7522*
++ ID_MODEL_FROM_DATABASE=CH340 serial converter
++
+ usb:v1A86p7523*
+  ID_MODEL_FROM_DATABASE=CH340 serial converter
+ 
+@@ -58665,7 +58677,7 @@ usb:v1A86p7584*
+  ID_MODEL_FROM_DATABASE=CH340S
+ 
+ usb:v1A86pE008*
+- ID_MODEL_FROM_DATABASE=HID-based serial adapater
++ ID_MODEL_FROM_DATABASE=HID-based serial adapter
+ 
+ usb:v1A89*
+  ID_VENDOR_FROM_DATABASE=Dynalith Systems Co., Ltd.
+@@ -60954,7 +60966,7 @@ usb:v1D50p6054*
+  ID_MODEL_FROM_DATABASE=Satlab/AAUSAT3 BlueBox
+ 
+ usb:v1D50p6055*
+- ID_MODEL_FROM_DATABASE=RADiuS ER900TRS-02 transciever with SMA Connector
++ ID_MODEL_FROM_DATABASE=RADiuS ER900TRS-02 transceiver with SMA Connector
+ 
+ usb:v1D50p6056*
+  ID_MODEL_FROM_DATABASE=The Glitch
+@@ -61365,16 +61377,16 @@ usb:v1D50p60EE*
+  ID_MODEL_FROM_DATABASE=Duet 3 motion control electronics
+ 
+ usb:v1D50p60F0*
+- ID_MODEL_FROM_DATABASE=UDAD-T1 data aquisition device (boot)
++ ID_MODEL_FROM_DATABASE=UDAD-T1 data acquisition device (boot)
+ 
+ usb:v1D50p60F1*
+- ID_MODEL_FROM_DATABASE=UDAD-T1 data aquisition device
++ ID_MODEL_FROM_DATABASE=UDAD-T1 data acquisition device
+ 
+ usb:v1D50p60F2*
+- ID_MODEL_FROM_DATABASE=UDAD-T2 data aquisition device (boot)
++ ID_MODEL_FROM_DATABASE=UDAD-T2 data acquisition device (boot)
+ 
+ usb:v1D50p60F3*
+- ID_MODEL_FROM_DATABASE=UDAD-T2 data aquisition device
++ ID_MODEL_FROM_DATABASE=UDAD-T2 data acquisition device
+ 
+ usb:v1D50p60F4*
+  ID_MODEL_FROM_DATABASE=Uniti ARC motor controller
+@@ -61421,6 +61433,9 @@ usb:v1D50p6122*
+ usb:v1D50p614C*
+  ID_MODEL_FROM_DATABASE=dwtk In-Circuit Emulator
+ 
++usb:v1D50p614D*
++ ID_MODEL_FROM_DATABASE=Generic Display
++
+ usb:v1D50p8085*
+  ID_MODEL_FROM_DATABASE=Box0 (box0-v5)
+ 
+@@ -61473,7 +61488,7 @@ usb:v1D57pAF03*
+  ID_MODEL_FROM_DATABASE=Wireless Receiver
+ 
+ usb:v1D57pFA20*
+- ID_MODEL_FROM_DATABASE=2.4GHz Wireless Reciever (Mini Keyboard & Mouse)
++ ID_MODEL_FROM_DATABASE=2.4GHz Wireless Receiver (Mini Keyboard & Mouse)
+ 
+ usb:v1D5B*
+  ID_VENDOR_FROM_DATABASE=Smartronix, Inc.
+@@ -62397,7 +62412,22 @@ usb:v1FBD*
+  ID_VENDOR_FROM_DATABASE=Delphin Technology AG
+ 
+ usb:v1FBDp0001*
+- ID_MODEL_FROM_DATABASE=Expert Key - Data aquisition system
++ ID_MODEL_FROM_DATABASE=Expert Key - Data acquisition system
++
++usb:v1FBDp0004*
++ ID_MODEL_FROM_DATABASE=MetiOS Device (RNDIS)
++
++usb:v1FBDp0005*
++ ID_MODEL_FROM_DATABASE=Loggito
++
++usb:v1FBDp0006*
++ ID_MODEL_FROM_DATABASE=LoggitoLab 8 AI-RTD
++
++usb:v1FBDp0007*
++ ID_MODEL_FROM_DATABASE=LoggitoLab 8 TC
++
++usb:v1FBDp0008*
++ ID_MODEL_FROM_DATABASE=LoggitoLab 4 AI-RTD 4 TC
+ 
+ usb:v1FC9*
+  ID_VENDOR_FROM_DATABASE=NXP Semiconductors
+@@ -67871,6 +67901,30 @@ usb:v3195pF280*
+ usb:v3195pF281*
+  ID_MODEL_FROM_DATABASE=MSO-28
+ 
++usb:v3197*
++ ID_VENDOR_FROM_DATABASE=Katusha
++
++usb:v3197p1001*
++ ID_MODEL_FROM_DATABASE=M151
++
++usb:v3197p1002*
++ ID_MODEL_FROM_DATABASE=M250
++
++usb:v3197p1003*
++ ID_MODEL_FROM_DATABASE=P130
++
++usb:v3197p1004*
++ ID_MODEL_FROM_DATABASE=M130
++
++usb:v3197p1101*
++ ID_MODEL_FROM_DATABASE=P247
++
++usb:v3197p1102*
++ ID_MODEL_FROM_DATABASE=M247
++
++usb:v3197p1103*
++ ID_MODEL_FROM_DATABASE=M348
++
+ usb:v31C9*
+  ID_VENDOR_FROM_DATABASE=BeiJing LanXum Computer Technology Co., Ltd.
+ 
+@@ -69653,9 +69707,24 @@ usb:v8086p07D3*
+ usb:v8086p07DC*
+  ID_MODEL_FROM_DATABASE=Bluetooth 4.0* Smart Ready (low energy)
+ 
++usb:v8086p0A66*
++ ID_MODEL_FROM_DATABASE=RealSense 3D Camera (Front F200)
++
++usb:v8086p0AA5*
++ ID_MODEL_FROM_DATABASE=RealSense SR300
++
++usb:v8086p0AD2*
++ ID_MODEL_FROM_DATABASE=RealSense D410
++
++usb:v8086p0AD3*
++ ID_MODEL_FROM_DATABASE=RealSense D415
++
+ usb:v8086p0B07*
+  ID_MODEL_FROM_DATABASE=RealSense D435
+ 
++usb:v8086p0B64*
++ ID_MODEL_FROM_DATABASE=RealSense L515
++
+ usb:v8086p0DAD*
+  ID_MODEL_FROM_DATABASE=Cherry MiniatureCard Keyboard
+ 
+@@ -69731,6 +69800,9 @@ usb:v8086p9500*
+ usb:v8086p9890*
+  ID_MODEL_FROM_DATABASE=82930 Test Board
+ 
++usb:v8086pA36D*
++ ID_MODEL_FROM_DATABASE=Host Controller
++
+ usb:v8086pBEEF*
+  ID_MODEL_FROM_DATABASE=SCM Miniature Card Reader/Writer
+ 
+diff --git a/hwdb.d/acpi_id_registry.html b/hwdb.d/acpi_id_registry.html
+index 5c37d1ae66..b2a6844521 100644
+--- a/hwdb.d/acpi_id_registry.html
++++ b/hwdb.d/acpi_id_registry.html
+@@ -110,6 +110,9 @@
+  <tr class="even"><td>Purism SPC</td><td>PURI</td><td>06/10/2021</td> </tr>
+  <tr class="odd"><td>Lontium Semiconductor Corporation</td><td>LTSC</td><td>07/21/2021</td> </tr>
+  <tr class="even"><td>Wacom Technology</td><td>WACF</td><td>09/21/2021</td> </tr>
++ <tr class="odd"><td>Shanghai Aiwei Electronic Technology Co., Ltd.</td><td>AWDZ</td><td>12/31/2021</td> </tr>
++ <tr class="even"><td>Silicom Ltd. Connectivity Solutions</td><td>SILC</td><td>03/28/2022</td> </tr>
++ <tr class="odd"><td>NOLO VR</td><td>NOLO</td><td>03/28/2022</td> </tr>
+       </tbody>
+     </table>
+   </body>
+diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
+index 82cbdee336..eb99ea7fb0 100644
+--- a/hwdb.d/ma-large.txt
++++ b/hwdb.d/ma-large.txt
+@@ -10088,12 +10088,6 @@ AC9A22     (base 16)		NXP Semiconductors
+ 				Hefei  Anhui  230088
+ 				CN
+ 
+-80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F.,H-3 Building,OCT Eastern lndustrial Park
+-				Nanshan District, Shenzhen  GUANGDONG  518053
+-				CN
+-
+ 48-AD-08   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 48AD08     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -18563,12 +18557,6 @@ D4C766     (base 16)		Acentic GmbH
+ 				Sungnam-Si  Kyunggi-Do  463-870
+ 				KR
+ 
+-00-26-04   (hex)		Audio Processing Technology Ltd
+-002604     (base 16)		Audio Processing Technology Ltd
+-				Whiterock Business Park
+-				Belfast    BT12 7FP
+-				GB
+-
+ 00-26-59   (hex)		Nintendo Co., Ltd.
+ 002659     (base 16)		Nintendo Co., Ltd.
+ 				  11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU
+@@ -31049,12 +31037,6 @@ D4C766     (base 16)		Acentic GmbH
+ 				GOLDEN  CO  80401
+ 				US
+ 
+-00-00-BD   (hex)		Mitsubishi Cable Industries, Ltd. / Ryosei Systems
+-0000BD     (base 16)		Mitsubishi Cable Industries, Ltd. / Ryosei Systems
+-				 8, NISHINO-CHO, HIGASHI-MUKOJIMA
+-				AMAGASAKI  HYOGO  660-0856
+-				JP
+-
+ 00-00-2E   (hex)		SOCIETE EVIRA
+ 00002E     (base 16)		SOCIETE EVIRA
+ 				ZONE PORTUAIRE DE BREGAILLON
+@@ -34475,12 +34457,6 @@ DCCD74     (base 16)		Japan E.M.Solutions Co., Ltd.
+ 				Kato    673-1447
+ 				JP
+ 
+-00-12-93   (hex)		ABB Power Protection (CH)
+-001293     (base 16)		ABB Power Protection (CH)
+-				1501 Roanoke Blvd.
+-				Salem  VA  24153
+-				US
+-
+ A0-3B-01   (hex)		Kyung In Electronics
+ A03B01     (base 16)		Kyung In Electronics
+ 				#1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu
+@@ -34619,12 +34595,6 @@ A0A3F0     (base 16)		D-Link International
+ 				 Shenzhen    518000
+ 				CN
+ 
+-E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ F0-25-8E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ F0258E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -35279,12 +35249,6 @@ C87B23     (base 16)		Bose Corporation
+ 				Moulineaux    92370
+ 				FR
+ 
+-30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+ 9C-1C-37   (hex)		AltoBeam (China) Inc.
+ 9C1C37     (base 16)		AltoBeam (China) Inc.
+ 				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+@@ -37232,12 +37196,6 @@ A41752     (base 16)		Hifocus Electronics India Private Limited
+ 				Chennai  Tamil Nadu  600002
+ 				IN
+ 
+-2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+ 40-FE-95   (hex)		New H3C Technologies Co., Ltd
+ 40FE95     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+@@ -37496,12 +37454,6 @@ AC567B     (base 16)		Sunnovo International Limited
+ 				Beijing  Beijing  100083
+ 				CN
+ 
+-A0-B4-BF   (hex)		InfiNet LLC
+-A0B4BF     (base 16)		InfiNet LLC
+-				office 11, 24 S.Deryabinoy st.
+-				Yekaterinburg  Sverdlovsk region  620102
+-				RU
+-
+ 9C-C1-2D   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 9CC12D     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 				Midea Global Innovation Center,Beijiao Town,Shunde
+@@ -37526,18 +37478,36 @@ DC8084     (base 16)		Apple, Inc.
+ 				Ernakulam  KL  686662
+ 				IN
+ 
+-B0-5C-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-B05C16     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
++E4-DA-DF   (hex)		Taicang T&W Electronics
++E4DADF     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
+ 				CN
+ 
+-08-E0-21   (hex)		Honor Device Co., Ltd.
+-08E021     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
++7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
++7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
++				CN
++
++74-26-FF   (hex)		zte corporation
++7426FF     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++C4-27-28   (hex)		zte corporation
++C42728     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
++C8-58-95   (hex)		Motorola Mobility LLC, a Lenovo Company
++C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
+ A8-53-7D   (hex)		Mist Systems, Inc.
+ A8537D     (base 16)		Mist Systems, Inc.
+ 				1601 South De Anza Blvd, Suite 248
+@@ -37550,42 +37520,657 @@ A8537D     (base 16)		Mist Systems, Inc.
+ 				San Francisco  CA  94107
+ 				US
+ 
++08-E0-21   (hex)		Honor Device Co., Ltd.
++08E021     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++B0-5C-16   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++B05C16     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
+ E8-D3-22   (hex)		Cisco Systems, Inc
+ E8D322     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+ 				San Jose  CA  94568
+ 				US
+ 
+-E4-DA-DF   (hex)		Taicang T&W Electronics
+-E4DADF     (base 16)		Taicang T&W Electronics
+-				89# Jiang Nan RD
+-				Suzhou  Jiangsu  215412
++30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
++302BDC     (base 16)		Top-Unum Electronics Co., LTD
++				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
++				New Taipei City 239,  Taiwan  239
+ 				CN
+ 
+-7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
+-7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+-				Hangzhou  Zhejiang  310024
++8C-15-53   (hex)		Beijing Memblaze Technology Co Ltd
++8C1553     (base 16)		Beijing Memblaze Technology Co Ltd
++				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
++				Beijing  Beijing  100192
+ 				CN
+ 
+-74-26-FF   (hex)		zte corporation
+-7426FF     (base 16)		zte corporation
++D4-BD-4F   (hex)		Ruckus Wireless
++D4BD4F     (base 16)		Ruckus Wireless
++				350 West Java Drive
++				Sunnyvale  CA  94089
++				US
++
++5C-C9-C0   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++5CC9C0     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++6C-B1-58   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
++6CB158     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
++				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
++				Shenzhen  Guangdong  518057
++				CN
++
++E8-81-AB   (hex)		Beijing Sankuai Online Technology Co.,Ltd
++E881AB     (base 16)		Beijing Sankuai Online Technology Co.,Ltd
++				BC Building, China Electronic Science Taiji Information Technology Industry Base, Yard 7, Rongda Road, Chaoyang District
++				Beijing    100102
++				CN
++
++1C-47-F6   (hex)		Zhidao Network Technology(Shenzhen) Co.,Ltd
++1C47F6     (base 16)		Zhidao Network Technology(Shenzhen) Co.,Ltd
++				B3, 11 / F, Exiang Technology Building, No. 31, Zhongsi Road, Gaoxin, Maling Community, Yuehai Street, Nanshan District
++				Shenzhen    518000
++				CN
++
++A0-B4-BF   (hex)		InfiNet LLC
++A0B4BF     (base 16)		InfiNet LLC
++				Office 425, 69/75 Vavilova str.
++				Moscow\    117335
++				RU
++
++E8-EB-D3   (hex)		Mellanox Technologies, Inc.
++E8EBD3     (base 16)		Mellanox Technologies, Inc.
++				350 Oakmead Parkway, Suite 100 
++				Sunnyvale  CA  94085
++				US
++
++C0-06-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C0060C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++B0-A4-F0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++24-75-3A   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++24753A     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++90-F7-B2   (hex)		New H3C Technologies Co., Ltd
++90F7B2     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++04-E3-1A   (hex)		Sagemcom Broadband SAS
++04E31A     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++6C-99-9D   (hex)		Amazon Technologies Inc.
++6C999D     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++7C-6A-60   (hex)		China Mobile Group Device Co.,Ltd.
++7C6A60     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++68-18-D9   (hex)		Hill AFB - CAPRE Group
++6818D9     (base 16)		Hill AFB - CAPRE Group
++				7278 4th Street
++				Hill AFB  UT  84056
++				US
++
++18-BC-57   (hex)		ADVA Optical Networking Ltd.
++18BC57     (base 16)		ADVA Optical Networking Ltd.
++				ADVAntage House
++				York    YO30 4RY
++				GB
++
++9C-A2-F4   (hex)		TP-Link Corporation Limited
++9CA2F4     (base 16)		TP-Link Corporation Limited
++				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
++				 Tsim Sha Tsui  Kowloon  999077
++				HK
++
++1C-61-B4   (hex)		TP-Link Corporation Limited
++1C61B4     (base 16)		TP-Link Corporation Limited
++				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
++				 Tsim Sha Tsui  Kowloon  999077
++				HK
++
++B4-69-5F   (hex)		TCT mobile ltd
++B4695F     (base 16)		TCT mobile ltd
++				No.86 hechang 7th road, zhongkai, Hi-Tech District
++				Hui Zhou  Guang Dong  516006
++				CN
++
++D8-E2-DF   (hex)		Microsoft Corporation
++D8E2DF     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
++6C-93-08   (hex)		IEEE Registration Authority
++6C9308     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++38-8F-30   (hex)		Samsung Electronics Co.,Ltd
++388F30     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++84-C6-92   (hex)		Texas Instruments
++84C692     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++6C-B2-FD   (hex)		Texas Instruments
++6CB2FD     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++6C-0F-61   (hex)		Hypervolt Ltd
++6C0F61     (base 16)		Hypervolt Ltd
++				25 Churchill Place
++				London    E14 5EY
++				GB
++
++A0-44-66   (hex)		Intellics
++A04466     (base 16)		Intellics
++				697, Pangyo-ro, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13511
++				KR
++
++CC-66-18   (hex)		Adtran Inc
++CC6618     (base 16)		Adtran Inc
++				901 Explorer Blvd.
++				Huntsville  AL  35806-2807
++				US
++
++C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++50-42-89   (hex)		zte corporation
++504289     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-C4-27-28   (hex)		zte corporation
+-C42728     (base 16)		zte corporation
++30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++C0-6D-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++C06DED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++				No.555 Qianmo Road
++				Hangzhou  Zhejiang  310052
++				CN
++
++44-6D-7F   (hex)		Amazon Technologies Inc.
++446D7F     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno    89507
++				US
++
++E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
++E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
++				No.6, 4th Yunpu Road, Yunpu industry District
++				Guangzhou  Guangdong  510530
++				CN
++
++90-93-5A   (hex)		ARRIS Group, Inc.
++90935A     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++AC-8F-A9   (hex)		Nokia Solutions and Networks GmbH & Co. KG
++AC8FA9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
++				Werinherstrasse 91
++				München  Bavaria  D-81541
++				DE
++
++4C-73-4F   (hex)		Juniper Networks
++4C734F     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++24-EB-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++24EBED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++AC-51-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++48-CD-D3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++48CDD3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
++A8C98A     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++44-29-1E   (hex)		AltoBeam (China) Inc.
++44291E     (base 16)		AltoBeam (China) Inc.
++				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
++				Beijing  Beijing  100083
++				CN
++
++DC-8E-95   (hex)		Silicon Laboratories
++DC8E95     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++7C-EF-40   (hex)		Nextorage Corporation
++7CEF40     (base 16)		Nextorage Corporation
++				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
++				Kawasaki City  Kanagawa  210-0007
++				JP
++
++28-BE-43   (hex)		vivo Mobile Communication Co., Ltd.
++28BE43     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++2C-FC-8B   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++2CFC8B     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
++2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
++				Werinherstrasse 91
++				München  Bavaria  D-81541
++				DE
++
++B0-1F-8C   (hex)		Aruba, a Hewlett Packard Enterprise Company
++B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++C0-E0-1C   (hex)		IoT Security Group, SL
++C0E01C     (base 16)		IoT Security Group, SL
++				Calle Pez Dorado, 27, local 2
++				Torremolinos  Malaga  29620
++				ES
++
++00-26-04   (hex)		WorldCast Systems
++002604     (base 16)		WorldCast Systems
++				20 Avenue Neil Armstrong 
++				Mérignac    33700
++				FR
++
++00-CB-7A   (hex)		Technicolor CH USA Inc.
++00CB7A     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++F8-AB-82   (hex)		Xiaomi Communications Co Ltd
++F8AB82     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++EC-30-B3   (hex)		Xiaomi Communications Co Ltd
++EC30B3     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++1C-AF-4A   (hex)		Samsung Electronics Co.,Ltd
++1CAF4A     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++C8-12-0B   (hex)		Samsung Electronics Co.,Ltd
++C8120B     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++90-2C-FB   (hex)		CanTops Co,.Ltd.
++902CFB     (base 16)		CanTops Co,.Ltd.
++				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
++				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
++				KR
++
++A8-A2-37   (hex)		Arcadyan Corporation
++A8A237     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
++
++00-00-BD   (hex)		RYOSEI, Ltd.
++0000BD     (base 16)		RYOSEI, Ltd.
++				16-4, kitahatsushima-cho
++				Amagasaki-shi  Hyogo   660-0834
++				JP
++
++AC-CC-FC   (hex)		Amazon Technologies Inc.
++ACCCFC     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++08-E6-3B   (hex)		zte corporation
++08E63B     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-C8-58-95   (hex)		Motorola Mobility LLC, a Lenovo Company
+-C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
+-				222 West Merchandise Mart Plaza
+-				Chicago  IL  60654
++88-C1-74   (hex)		zte corporation
++88C174     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++C8-9E-61   (hex)		Lyngsoe Systems LTd
++C89E61     (base 16)		Lyngsoe Systems LTd
++				101 Simona Dr., Unit 2
++				Bolton  Ontario  L7E 4E8
++				CA
++
++9C-57-BC   (hex)		eero inc.
++9C57BC     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++2C-82-17   (hex)		Apple, Inc.
++2C8217     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
+ 				US
+ 
++14-2D-4D   (hex)		Apple, Inc.
++142D4D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++EC-42-CC   (hex)		Apple, Inc.
++EC42CC     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++B8-21-1C   (hex)		Apple, Inc.
++B8211C     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++D4-5A-3F   (hex)		Juniper Networks
++D45A3F     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++E8-DC-6C   (hex)		Cisco Systems, Inc
++E8DC6C     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
++48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++B0-3F-64   (hex)		Apple, Inc.
++B03F64     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++68-A7-B4   (hex)		Honor Device Co., Ltd.
++68A7B4     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++E0-28-B1   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++E028B1     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
++C0-8D-51   (hex)		Amazon Technologies Inc.
++C08D51     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++44-B4-B2   (hex)		Amazon Technologies Inc.
++44B4B2     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++6C-15-24   (hex)		IEEE Registration Authority
++6C1524     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++78-03-4F   (hex)		Nokia
++78034F     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++00-12-93   (hex)		ABB Switzerland Ltd.
++001293     (base 16)		ABB Switzerland Ltd.
++				Via Luserte Sud 9  Quartino 
++				Quartino     6572
++				CH
++
++C0-E9-11   (hex)		Private
++C0E911     (base 16)		Private
++
++14-F5-92   (hex)		Shenzhen SDG DONZHI Technology Co., Ltd
++14F592     (base 16)		Shenzhen SDG DONZHI Technology Co., Ltd
++				1001 SDG Information Technology Building, No.2 Qiongyu Road, Science park Community, Yuehai Street, Nanshan District,
++				Shenzhen  GuangDong  518000
++				CN
++
++4C-09-FA   (hex)		FRONTIER SMART TECHNOLOGIES LTD
++4C09FA     (base 16)		FRONTIER SMART TECHNOLOGIES LTD
++				17 Waterloo Place
++				London    SW1Y 4AR
++				GB
++
++24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
++242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
++				CN
++
++A0-42-D1   (hex)		Huawei Device Co., Ltd.
++A042D1     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++2C-DC-78   (hex)		Descartes Systems (USA) LLC
++2CDC78     (base 16)		Descartes Systems (USA) LLC
++				2030 Powers Ferry Road SE
++				Atlanta  GA  303339
++				US
++
++58-87-9F   (hex)		Huawei Device Co., Ltd.
++58879F     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++E8-D8-7E   (hex)		Amazon Technologies Inc.
++E8D87E     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++9C-1F-CA   (hex)		Hangzhou AlmightyDigit Technology Co., Ltd
++9C1FCA     (base 16)		Hangzhou AlmightyDigit Technology Co., Ltd
++				Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District
++				Hangzhou  Zhejiang   310000
++				CN
++
++84-70-D7   (hex)		eero inc.
++8470D7     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
++E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++58-1D-D8   (hex)		Sagemcom Broadband SAS
++581DD8     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
++806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++F4-B3-B1   (hex)		Silicon Laboratories
++F4B3B1     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++04-69-8F   (hex)		Juniper Networks
++04698F     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++14-9B-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++149BF3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++10-07-1D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++10071D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++				No.218 Qianwangang Road
++				Qingdao  Shangdong  266510
++				CN
++
++B8-50-D8   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
++				CN
++
++C0-9F-51   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
++				Suzhou    215021
++				CN
++
++80-02-F4   (hex)		IEEE Registration Authority
++8002F4     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++5C-53-C3   (hex)		Ubee Interactive Co., Limited
++5C53C3     (base 16)		Ubee Interactive Co., Limited
++				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
++				North Point    00000
++				HK
++
+ 9C-FF-C2   (hex)		AVI Systems GmbH
+ 9CFFC2     (base 16)		AVI Systems GmbH
+ 				Dr. Franz Wilhelmstraße 2A
+@@ -39044,12 +39629,6 @@ BC3E07     (base 16)		Hitron Technologies. Inc
+ 				Gyeonggi-do    KSXX0024
+ 				KR
+ 
+-0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 9C-DB-07   (hex)		Thum+Mahr GmbH
+ 9CDB07     (base 16)		Thum+Mahr GmbH
+ 				Heinrich-Hertz-Strasse 1-3
+@@ -44579,12 +45158,6 @@ E47B3F     (base 16)		BEIJING CO-CLOUD TECHNOLOGY LTD.
+ 				Shanghai  Shanghai  201114
+ 				CN
+ 
+-00-18-48   (hex)		Vecima Networks Inc.
+-001848     (base 16)		Vecima Networks Inc.
+-				150 Cardinal Place
+-				Saskatoon  SK  S7L 6H7
+-				CA
+-
+ 00-16-FB   (hex)		SHENZHEN MTC CO LTD
+ 0016FB     (base 16)		SHENZHEN MTC CO LTD
+ 				5/F BenYuan Bldg,6015 ShenNan Road
+@@ -46655,12 +47228,6 @@ DCC0EB     (base 16)		ASSA ABLOY CÔTE PICARDE
+ 				Cupertino  CA  95014
+ 				US
+ 
+-A0-F8-95   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F.,H-3 Building,OCT Eastern lndustrial Park.
+-				Nanshan District, Shenzhen  GUANGDONG  518053
+-				CN
+-
+ 00-78-CD   (hex)		Ignition Design Labs
+ 0078CD     (base 16)		Ignition Design Labs
+ 				1550 Technology Drive
+@@ -50480,12 +51047,6 @@ B8F828     (base 16)		Changshu Gaoshida Optoelectronic Technology Co. Ltd.
+ 				Glockengießerweg 2  Bielefeld  33659
+ 				DE
+ 
+-2C-55-3C   (hex)		Gainspeed, Inc.
+-2C553C     (base 16)		Gainspeed, Inc.
+-				295 Santa Ana Court
+-				Sunnyvale  CA  94085
+-				US
+-
+ 24-80-00   (hex)		Westcontrol AS
+ 248000     (base 16)		Westcontrol AS
+ 				Breivikvg 7
+@@ -55382,12 +55943,6 @@ D4AAFF     (base 16)		MICRO WORLD
+ 				Shanghai    200127
+ 				CN
+ 
+-00-25-CA   (hex)		LS Research, LLC
+-0025CA     (base 16)		LS Research, LLC
+-				W66 N220 Commerce Court
+-				Cedarburg  WI  53012
+-				US
+-
+ 00-25-B4   (hex)		Cisco Systems, Inc
+ 0025B4     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -55532,12 +56087,6 @@ D4AAFF     (base 16)		MICRO WORLD
+ 				Menlo Park  CA  94025-1431
+ 				US
+ 
+-00-24-E4   (hex)		Withings
+-0024E4     (base 16)		Withings
+-				37bis rue du General Leclerc
+-				Issy les Moulineaux    92442
+-				FR
+-
+ 00-24-DE   (hex)		GLOBAL Technology Inc.
+ 0024DE     (base 16)		GLOBAL Technology Inc.
+ 				No.168,Shanshan Rd., Wangchun Industrial Park,
+@@ -57893,12 +58442,6 @@ D4AAFF     (base 16)		MICRO WORLD
+ 				Vuokatti  Kainuu  88610
+ 				FI
+ 
+-00-1A-35   (hex)		BARTEC GmbH
+-001A35     (base 16)		BARTEC GmbH
+-				Schulstraße 30
+-				Gotteszell  Bavaria  94239
+-				DE
+-
+ 00-1A-37   (hex)		Lear Corporation
+ 001A37     (base 16)		Lear Corporation
+ 				Industriestrasse 48
+@@ -59633,12 +60176,6 @@ D4AAFF     (base 16)		MICRO WORLD
+ 				Soenderborg  DK  6400
+ 				DK
+ 
+-00-13-B4   (hex)		Appear TV
+-0013B4     (base 16)		Appear TV
+-				P.O. Box 8 Lilleaker
+-				Oslo    NO-0216
+-				NO
+-
+ 00-13-AE   (hex)		Radiance Technologies, Inc.
+ 0013AE     (base 16)		Radiance Technologies, Inc.
+ 				350 Wynn Dr.
+@@ -68321,12 +68858,6 @@ F854B8     (base 16)		Amazon Technologies Inc.
+ 				York    YO30 4RY
+ 				GB
+ 
+-B4-39-39   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ A0-AB-51   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+ A0AB51     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
+ 				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
+@@ -71657,12 +72188,6 @@ E428A4     (base 16)		Prama India Private Limited
+ 				Reno  NV  89507
+ 				US
+ 
+-00-0F-A0   (hex)		CANON KOREA BUSINESS SOLUTIONS INC.
+-000FA0     (base 16)		CANON KOREA BUSINESS SOLUTIONS INC.
+-				Canon BS Tower, 607 Teheran-ro
+-				Seoul  Gangnam-gu  06173
+-				KR
+-
+ 40-8C-1F   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 408C1F     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				NO.18 HAIBIN ROAD,
+@@ -72809,12 +73334,6 @@ ECA81F     (base 16)		Technicolor CH USA Inc.
+ 				Lawrenceville  GA  30044
+ 				US
+ 
+-90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+ C0-F8-27   (hex)		Rapidmax Technology Corporation
+ C0F827     (base 16)		Rapidmax Technology Corporation
+ 				3F., No.531, Zhongzheng Rd. Xindian Dist.
+@@ -74633,6 +75152,24 @@ D850A1     (base 16)		Hunan Danuo Technology Co.,LTD
+ 				Ankara    06520
+ 				TR
+ 
++48-51-D0   (hex)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
++4851D0     (base 16)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
++				18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China
++				Changzhou  Jiangsu  213000
++				CN
++
++80-77-A4   (hex)		TECNO MOBILE LIMITED
++8077A4     (base 16)		TECNO MOBILE LIMITED
++				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
++				Hong Kong  Hong Kong  999077
++				HK
++
++7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
++7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
++				Shenzhen   guangdong  518053
++				CN
++
+ 00-C3-0A   (hex)		Xiaomi Communications Co Ltd
+ 00C30A     (base 16)		Xiaomi Communications Co Ltd
+ 				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+@@ -74663,29 +75200,713 @@ B42875     (base 16)		Futecho Solutions Private Limited
+ 				San Francisco  CA  94107
+ 				US
+ 
+-48-51-D0   (hex)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
+-4851D0     (base 16)		Jiangsu Xinsheng Intelligent Technology Co., Ltd. 
+-				18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China
+-				Changzhou  Jiangsu  213000
++00-A0-A2   (hex)		B810 S.R.L.
++00A0A2     (base 16)		B810 S.R.L.
++				Via E. Lazzaretti 2/1
++				Reggio Emilia (RE)    42122
++				IT
++
++38-68-BE   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++3868BE     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
+ 				CN
+ 
+-80-77-A4   (hex)		TECNO MOBILE LIMITED
+-8077A4     (base 16)		TECNO MOBILE LIMITED
+-				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+-				Hong Kong  Hong Kong  999077
++DC-9A-7D   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
++DC9A7D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
++				Qianwangang Road 218
++				Qingdao  Shandong  266510
++				CN
++
++28-A5-3F   (hex)		vivo Mobile Communication Co., Ltd.
++28A53F     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++8C-49-B6   (hex)		vivo Mobile Communication Co., Ltd.
++8C49B6     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++84-F1-D0   (hex)		EHOOME IOT PRIVATE LIMITED
++84F1D0     (base 16)		EHOOME IOT PRIVATE LIMITED
++				A-13, SECTOR-83, 
++				NOIDA  UTTAR PRADESH  201301
++				IN
++
++20-8B-D1   (hex)		NXP Semiconductor (Tianjin) LTD.
++208BD1     (base 16)		NXP Semiconductor (Tianjin) LTD.
++				No.15 Xinghua Avenue, Xiqing Economic Development Area
++				Tianjin    300385
++				CN
++
++00-0F-A0   (hex)		Canon Korea Inc.
++000FA0     (base 16)		Canon Korea Inc.
++				607, Teheran-ro, Gangnam-gu
++				Seoul  Gangnam-gu  06173
++				KR
++
++30-BB-7D   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
++30BB7D     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
++				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
++				Shenzhen  Guangdong  518000
++				CN
++
++6C-67-EF   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++6C67EF     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++88-69-3D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++88693D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++00-99-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++00991D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++30-CB-36   (hex)		Belden Singapore Pte. Ltd.
++30CB36     (base 16)		Belden Singapore Pte. Ltd.
++				151 Lorong Chuan #05-01 New Tech Park Singapore
++				Singapore    556741
++				SG
++
++B8-3F-D2   (hex)		Mellanox Technologies, Inc.
++B83FD2     (base 16)		Mellanox Technologies, Inc.
++				350 Oakmead Parkway, Suite 100 
++				Sunnyvale  CA  94085
++				US
++
++28-3E-0C   (hex)		Preferred Robotics, Inc.
++283E0C     (base 16)		Preferred Robotics, Inc.
++				Otemachi Bldg. 1-6-1 Otemachi
++				 Chiyoda-ku  Tokyo  100-0004
++				JP
++
++8C-17-59   (hex)		Intel Corporate
++8C1759     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++04-BC-9F   (hex)		Calix Inc.
++04BC9F     (base 16)		Calix Inc.
++				2777 Orchard Pkwy
++				San Jose  CA  95131
++				US
++
++6C-A4-01   (hex)		essensys plc
++6CA401     (base 16)		essensys plc
++				Aldgate Tower, Leman Street
++				London    E1 8FA
++				GB
++
++34-92-C2   (hex)		Square Route Co., Ltd.
++3492C2     (base 16)		Square Route Co., Ltd.
++				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
++				Tokyo  Tokyo  108-0075
++				JP
++
++34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
++34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
++				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
++				Hangzhou    310052
++				CN
++
++64-C2-69   (hex)		eero inc.
++64C269     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++B0-4A-6A   (hex)		Samsung Electronics Co.,Ltd
++B04A6A     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++A8-79-8D   (hex)		Samsung Electronics Co.,Ltd
++A8798D     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++5C-ED-F4   (hex)		Samsung Electronics Co.,Ltd
++5CEDF4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++28-3D-C2   (hex)		Samsung Electronics Co.,Ltd
++283DC2     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++BC-6E-6D   (hex)		EM Microelectronic
++BC6E6D     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++00-D4-9E   (hex)		Intel Corporate
++00D49E     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++CC-F3-05   (hex)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
++CCF305     (base 16)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
++				Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District
++				Shenzhen  Guangdong  518126
++				CN
++
++AC-2A-A1   (hex)		Cisco Systems, Inc
++AC2AA1     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++F8-E9-4F   (hex)		Cisco Systems, Inc
++F8E94F     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++30-89-4A   (hex)		Intel Corporate
++30894A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++E0-6C-C5   (hex)		Huawei Device Co., Ltd.
++E06CC5     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++30-96-3B   (hex)		Huawei Device Co., Ltd.
++30963B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++8C-6B-DB   (hex)		Huawei Device Co., Ltd.
++8C6BDB     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++10-DA-49   (hex)		Huawei Device Co., Ltd.
++10DA49     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++60-18-3A   (hex)		Huawei Device Co., Ltd.
++60183A     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++18-C0-07   (hex)		Huawei Device Co., Ltd.
++18C007     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++98-59-7A   (hex)		Intel Corporate
++98597A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++64-49-7D   (hex)		Intel Corporate
++64497D     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++B8-D6-1A   (hex)		Espressif Inc.
++B8D61A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++00-25-CA   (hex)		Laird Connectivity
++0025CA     (base 16)		Laird Connectivity
++				W66 N220 Commerce Court
++				Cedarburg  WI  53012
++				US
++
++90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
++				Pin-Jen  Taoyuan  324
++				TW
++
++D8-9C-8E   (hex)		Comcast Cable Corporation
++D89C8E     (base 16)		Comcast Cable Corporation
++				1800 Arch Street
++				Philadelphia  PA  19103
++				US
++
++04-B9-7D   (hex)		AiVIS Co., Itd.
++04B97D     (base 16)		AiVIS Co., Itd.
++				112, Dumipo-ro, Jung-gu 
++				Incheon  Incheon  22394
++				KR
++
++BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++C4-C0-63   (hex)		New H3C Technologies Co., Ltd
++C4C063     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++E0-79-8D   (hex)		Silicon Laboratories
++E0798D     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++B4-83-51   (hex)		Intel Corporate
++B48351     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++34-AD-61   (hex)		CELESTICA INC.
++34AD61     (base 16)		CELESTICA INC.
++				1900-5140 Yonge Street PO Box 42   
++				Toronto  Ontario  M2N 6L7
++				CA
++
++54-43-B2   (hex)		Espressif Inc.
++5443B2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++C0-DD-8A   (hex)		Facebook Technologies, LLC
++C0DD8A     (base 16)		Facebook Technologies, LLC
++				1601 Willow Rd
++				Menlo Park  CA  94025
++				US
++
++AC-D3-1D   (hex)		Cisco Meraki
++ACD31D     (base 16)		Cisco Meraki
++				500 Terry A. Francois Blvd
++				San Francisco    94158
++				US
++
++10-96-1A   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
++10961A     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
++				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
++				SHEN ZHEN  GUANG DONG  518000
++				CN
++
++BC-E9-E2   (hex)		Brocade Communications Systems LLC
++BCE9E2     (base 16)		Brocade Communications Systems LLC
++				1320 Ridder Park Dr
++				San Jose  CA  95131
++				US
++
++00-18-48   (hex)		Vecima Networks Inc.
++001848     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
++2C-55-3C   (hex)		Vecima Networks Inc.
++2C553C     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
++AC-BF-71   (hex)		Bose Corporation
++ACBF71     (base 16)		Bose Corporation
++				The Mountain
++				Framingham  MA  01701-9168
++				US
++
++18-A5-9C   (hex)		IEEE Registration Authority
++18A59C     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++74-84-69   (hex)		Nintendo Co.,Ltd
++748469     (base 16)		Nintendo Co.,Ltd
++				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
++				KYOTO  KYOTO  601-8501
++				JP
++
++74-71-8B   (hex)		Apple, Inc.
++74718B     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++70-31-7F   (hex)		Apple, Inc.
++70317F     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++A4-CF-99   (hex)		Apple, Inc.
++A4CF99     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++4C-2E-B4   (hex)		Apple, Inc.
++4C2EB4     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++B4-19-74   (hex)		Apple, Inc.
++B41974     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++04-E8-92   (hex)		SHENNAN CIRCUITS CO.,LTD
++04E892     (base 16)		SHENNAN CIRCUITS CO.,LTD
++				Gao Qiao Industrial Park East,Long Gang District,
++				Shenzhen  Guangdong  518117
++				CN
++
++60-95-BD   (hex)		Apple, Inc.
++6095BD     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++00-1A-35   (hex)		BARTEC GmbH
++001A35     (base 16)		BARTEC GmbH
++				Max-Eyth-Straße 16
++				Bad Mergentheim  Bavaria  97980
++				DE
++
++8C-CB-DF   (hex)		FOXCONN INTERCONNECT TECHNOLOGY 
++8CCBDF     (base 16)		FOXCONN INTERCONNECT TECHNOLOGY 
++				66-1 Zhongshan Road, Tucheng District
++				New Taipei City  Taiwan  23680
++				TW
++
++98-F1-12   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++98F112     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++				No.555 Qianmo Road
++				Hangzhou  Zhejiang  310052
++				CN
++
++84-69-93   (hex)		HP Inc.
++846993     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
++				US
++
++74-6F-88   (hex)		zte corporation
++746F88     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++98-C8-1C   (hex)		BAYTEC LIMITED
++98C81C     (base 16)		BAYTEC LIMITED
++				107C, 31/f, The gateway, Tower 5, Harbour City, 15 canton road, Tsim Sha Tsui, Hong Kong
++				Harbour    999077
+ 				HK
+ 
+-7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
++D0-98-9C   (hex)		ConMet
++D0989C     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
++1C-A4-10   (hex)		Amlogic, Inc.
++1CA410     (base 16)		Amlogic, Inc.
++				2518 Mission College Blvd, Suite 120
++				Santa Clara  CA  95054
++				US
++
++24-26-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++2426D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-00-A0-A2   (hex)		B810 S.R.L.
+-00A0A2     (base 16)		B810 S.R.L.
+-				Via E. Lazzaretti 2/1
+-				Reggio Emilia (RE)    42122
+-				IT
++70-A6-BD   (hex)		Honor Device Co., Ltd.
++70A6BD     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++EC-81-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++EC819C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++20-0B-16   (hex)		Texas Instruments
++200B16     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++88-01-F9   (hex)		Texas Instruments
++8801F9     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++F8-55-48   (hex)		Texas Instruments
++F85548     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++68-E7-4A   (hex)		Texas Instruments
++68E74A     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++4C-9E-6C   (hex)		BROADEX TECHNOLOGIES CO.LTD
++4C9E6C     (base 16)		BROADEX TECHNOLOGIES CO.LTD
++				NO.306 YATAI ROAD
++				JIAXING  ZHEJIANG  314006
++				CN
++
++AC-A3-2F   (hex)		Solidigm Technology
++ACA32F     (base 16)		Solidigm Technology
++				1921 Corporate Center Circle, Suite 3B
++				Longmont    80501
++				US
++
++AC-71-2E   (hex)		Fortinet, Inc.
++AC712E     (base 16)		Fortinet, Inc.
++				899 Kifer Road
++				Sunnyvale    94086
++				US
++
++E4-B6-33   (hex)		Wuxi Stars Microsystem Technology Co., Ltd
++E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
++				Room 2101, Tower C, Swan Tower, Wuxi Software Park, 111 Linghu Avenue, Xinwu District
++				Wuxi    214135
++				CN
++
++08-51-04   (hex)		Huawei Device Co., Ltd.
++085104     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++78-5B-64   (hex)		Huawei Device Co., Ltd.
++785B64     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++98-D9-3D   (hex)		Demant Enterprise A/S
++98D93D     (base 16)		Demant Enterprise A/S
++				Kongebakken 9
++				Smorum    2765
++				DK
++
++B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
++B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
++				CN
++
++AC-C4-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++ACC4BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++54-E1-5B   (hex)		Huawei Device Co., Ltd.
++54E15B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
++542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
++				Bldg 1,No.401,Caobao RD,Xuhui Dist
++				Shanghai    200233
++				CN
++
++C4-A1-0E   (hex)		IEEE Registration Authority
++C4A10E     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
++0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++B4-39-39   (hex)		Shenzhen TINNO Mobile Technology Corp.
++B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++8C-98-06   (hex)		SHENZHEN SEI ROBOTICS CO.,LTD
++8C9806     (base 16)		SHENZHEN SEI ROBOTICS CO.,LTD
++				the 4th floor,Productivity Building D,#5 Hi-Tech Middle 2nd Road,Shenzhen Hi-Tech Industrial Park, Nanshan District,Shenzhen,China
++				Shenzhen    518000
++				CN
++
++20-08-89   (hex)		zte corporation
++200889     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++70-70-FC   (hex)		GOLD&WATER INDUSTRIAL LIMITED
++7070FC     (base 16)		GOLD&WATER INDUSTRIAL LIMITED
++				NO.77 Leighton Road, 17/F Leighton Centre Causeway Bay ,HongKong
++				HongKong    999077
++				HK
++
++88-F2-BD   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++88F2BD     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++				Midea Global Innovation Center,Beijiao Town,Shunde
++				Foshan  Guangdong  528311
++				CN
++
++A0-F8-95   (hex)		Shenzhen TINNO Mobile Technology Corp.
++A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++6C-08-31   (hex)		ANALOG SYSTEMS
++6C0831     (base 16)		ANALOG SYSTEMS
++				UNIT 12, 38 DLF INDUSTRIAL AREA KIRTI NAGAR NEW DELHI 
++				NEW DELHI  DELHI  110015
++				IN
++
++70-AC-08   (hex)		Silicon Laboratories
++70AC08     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++2C-07-F6   (hex)		SKG Health Technologies Co., Ltd. 
++2C07F6     (base 16)		SKG Health Technologies Co., Ltd. 
++				23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China
++				Shenzhen    518000
++				CN
++
++00-24-E4   (hex)		Withings
++0024E4     (base 16)		Withings
++				2 rue Maurice Hartmann
++				Issy-les-Moulineaux    92130
++				FR
++
++A4-7E-FA   (hex)		Withings
++A47EFA     (base 16)		Withings
++				2 rue Maurice Hartmann
++				Issy-les-Moulineaux    92130
++				FR
++
++3C-26-E4   (hex)		Cisco Systems, Inc
++3C26E4     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++38-91-B7   (hex)		Cisco Systems, Inc
++3891B7     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++34-5D-A8   (hex)		Cisco Systems, Inc
++345DA8     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++78-91-DE   (hex)		Guangdong ACIGA Science&Technology Co.,Ltd
++7891DE     (base 16)		Guangdong ACIGA Science&Technology Co.,Ltd
++				L203 Biguiyuan International Club, Beijiao Town, Shunde District
++				Fo Shan  Guangdong  528312
++				CN
++
++E0-80-6B   (hex)		Xiaomi Communications Co Ltd
++E0806B     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++70-50-E7   (hex)		IEEE Registration Authority
++7050E7     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++00-13-B4   (hex)		Appear AS
++0013B4     (base 16)		Appear AS
++				P.O. Box 8 Lilleaker
++				Oslo    NO-0216
++				NO
++
++38-FD-F5   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++38FDF5     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++38-12-7B   (hex)		Crenet Labs Co., Ltd.
++38127B     (base 16)		Crenet Labs Co., Ltd.
++				Rm. 1, 10F., No. 181, Sec. 1, Datong Rd.
++				New Taipei City  Xizhi Dist.  221451
++				TW
++
++B0-E4-5C   (hex)		Samsung Electronics Co.,Ltd
++B0E45C     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++DC-36-0C   (hex)		Hitron Technologies. Inc
++DC360C     (base 16)		Hitron Technologies. Inc
++				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
++				Hsin-chu  Taiwan  300
++				TW
+ 
+ 84-80-94   (hex)		Meter, Inc.
+ 848094     (base 16)		Meter, Inc.
+@@ -78839,12 +80060,6 @@ D843ED     (base 16)		Suzuken
+ 				Nagoya  Aich  4610015
+ 				JP
+ 
+-BC-41-01   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 04-3A-0D   (hex)		SM Optics S.r.l.
+ 043A0D     (base 16)		SM Optics S.r.l.
+ 				via Michelangelo Buonarroti, 1
+@@ -79847,12 +81062,6 @@ DCA904     (base 16)		Apple, Inc.
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
+-A0-4C-5B   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-A04C5B     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 48-88-03   (hex)		ManTechnology Inc.
+ 488803     (base 16)		ManTechnology Inc.
+ 				12th Fl, 308-4 Seongsoodong 2ga, Seongdonggu
+@@ -80579,12 +81788,6 @@ E80945     (base 16)		Integrated Device Technology (Malaysia) Sdn. Bhd.
+ 				Bayan Lepas  Penang  11900
+ 				MY
+ 
+-B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 7C-25-87   (hex)		chaowifi.com
+ 7C2587     (base 16)		chaowifi.com
+ 				No. 502 1th Building TaiHe Square
+@@ -86237,12 +87440,6 @@ E83A12     (base 16)		Samsung Electronics Co.,Ltd
+ 				Chicago  IL  60654
+ 				US
+ 
+-30-E0-90   (hex)		Linctronix Ltd,
+-30E090     (base 16)		Linctronix Ltd,
+-				​9F-1, No.66, Chongqing Rd.,
+-				Banqiao Dist.,  China  22063
+-				TW
+-
+ A4-DC-BE   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ A4DCBE     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -91655,12 +92852,6 @@ E08A7E     (base 16)		Exponent
+ 				Menlo Park  CA  94025
+ 				US
+ 
+-A8-B0-AE   (hex)		LEONI 
+-A8B0AE     (base 16)		LEONI 
+-				3945 Freedom Circle
+-				Santa Clara  California  95054
+-				US
+-
+ E4-27-71   (hex)		Smartlabs
+ E42771     (base 16)		Smartlabs
+ 				72, Oktyabrskaya Street
+@@ -91739,12 +92930,6 @@ B4A4E3     (base 16)		Cisco Systems, Inc
+ 				Tainan    70955
+ 				TW
+ 
+-AC-83-F0   (hex)		ImmediaTV Corporation
+-AC83F0     (base 16)		ImmediaTV Corporation
+-				2005 De La Cruz Blvd
+-				Santa Clara  California  95050
+-				US
+-
+ CC-6B-98   (hex)		Minetec Wireless Technologies
+ CC6B98     (base 16)		Minetec Wireless Technologies
+ 				10 Kembla Way
+@@ -97226,12 +98411,6 @@ D8D67E     (base 16)		GSK CNC EQUIPMENT CO.,LTD
+ 				Portland  OR  97223
+ 				US
+ 
+-00-13-95   (hex)		congatec AG
+-001395     (base 16)		congatec AG
+-				Auwiesenstrasse 5
+-				Deggendorf    94469
+-				DE
+-
+ 00-13-56   (hex)		FLIR Radiation Inc
+ 001356     (base 16)		FLIR Radiation Inc
+ 				100 Midland Rd
+@@ -98519,12 +99698,6 @@ D8D67E     (base 16)		GSK CNC EQUIPMENT CO.,LTD
+ 				Allendale  NJ  07401
+ 				US
+ 
+-00-0D-A9   (hex)		T.E.A.M. S.L.
+-000DA9     (base 16)		T.E.A.M. S.L.
+-				Parque Tecnologico Edificio 108
+-				ZAMUDIO  Bizkaia  48170
+-				ES
+-
+ 00-0D-AB   (hex)		Parker Hannifin GmbH Electromechanical Division Europe
+ 000DAB     (base 16)		Parker Hannifin GmbH Electromechanical Division Europe
+ 				Robert-Bosch-Straße 22
+@@ -107270,12 +108443,6 @@ B848AA     (base 16)		EM Microelectronic
+ 				Marin-Epagnier  Neuchatel  2074
+ 				CH
+ 
+-D8-34-EE   (hex)		Stem Audio
+-D834EE     (base 16)		Stem Audio
+-				2552 White Road, Suite A
+-				Irvine  CA  92614
+-				US
+-
+ F8-57-2E   (hex)		Core Brands, LLC
+ F8572E     (base 16)		Core Brands, LLC
+ 				5919 Sea Otter Place
+@@ -107798,12 +108965,6 @@ CCDB93     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 54-48-E6   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ 5448E6     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District
+@@ -109565,12 +110726,6 @@ F845C4     (base 16)		Shenzhen Netforward Micro-Electronic Co., Ltd.
+ 				Beijing    100053
+ 				CN
+ 
+-9C-4F-5F   (hex)		TAP Sound System
+-9C4F5F     (base 16)		TAP Sound System
+-				15 rue Castel
+-				Fontenay-sous-Bois    94120
+-				FR
+-
+ 00-08-0C   (hex)		VDA Group S.p.a.
+ 00080C     (base 16)		VDA Group S.p.a.
+ 				Viale Lino Zanussi 3
+@@ -112079,6 +113234,30 @@ B4B742     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
++60-BE-B4   (hex)		S-Bluetech co., limited
++60BEB4     (base 16)		S-Bluetech co., limited
++				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
++				Shenzhen  Guangdong  518000
++				CN
++
++90-DF-7D   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++90DF7D     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
++50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
++				No.15 Xinghua Avenue, Xiqing Economic Development Area
++				Tianjin    300385
++				CN
++
++F4-84-8D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
++F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
++				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
++				Shenzhen  Guangdong  518057
++				CN
++
+ A8-54-A2   (hex)		Heimgard Technologies AS
+ A854A2     (base 16)		Heimgard Technologies AS
+ 				Dronning Mauds gate 15
+@@ -112097,6 +113276,570 @@ BC1D89     (base 16)		Motorola Mobility LLC, a Lenovo Company
+ 				Chicago  IL  60654
+ 				US
+ 
++B8-7E-E5   (hex)		Intelbras
++B87EE5     (base 16)		Intelbras
++				BR 101, km 210, S/N°
++				São José  Santa Catarina  88104800
++				BR
++
++58-11-22   (hex)		ASUSTek COMPUTER INC.
++581122     (base 16)		ASUSTek COMPUTER INC.
++				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
++				Taipei  Taiwan  112
++				TW
++
++74-69-4A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++74694A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++78-15-2D   (hex)		UNION CHIP TECHNOLOGY LIMITED
++78152D     (base 16)		UNION CHIP TECHNOLOGY LIMITED
++				5th Floor, Building A1, Hangcheng Jinchi Industrial Park, 8TH North Road, Hangcheng Street, Bao 'an District, Shenzhen
++				shenzhen    518000
++				CN
++
++94-AB-FE   (hex)		Nokia
++94ABFE     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++98-A9-2D   (hex)		New H3C Technologies Co., Ltd
++98A92D     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++00-A5-54   (hex)		Intel Corporate
++00A554     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++0C-86-29   (hex)		IEEE Registration Authority
++0C8629     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++50-DC-D0   (hex)		Observint Technologies, Inc.
++50DCD0     (base 16)		Observint Technologies, Inc.
++				11000 N Mopac Expressway Suite 300
++				Austin  TX  78759
++				US
++
++D4-F0-EA   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
++				CN
++
++58-76-AC   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++5876AC     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
++				Suzhou    215021
++				CN
++
++E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
++E0036B     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++80-69-1A   (hex)		Belkin International Inc.
++80691A     (base 16)		Belkin International Inc.
++				12045 East Waterfront Drive
++				Playa Vista    90094
++				US
++
++64-31-72   (hex)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
++643172     (base 16)		ZHEJIANG HISING TECHNOLOGY CO.,LTD
++				Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing
++				Shaoxing  Zhejiang  312000
++				CN
++
++D0-FC-D0   (hex)		HUMAX Co., Ltd.
++D0FCD0     (base 16)		HUMAX Co., Ltd.
++				HUMAX Village, 216, Hwangsaeul-ro, Bu
++				Seongnam-si  Gyeonggi-do  463-875
++				KR
++
++20-FA-DB   (hex)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
++20FADB     (base 16)		Huahao Kunpeng Technology (chengDu)  Co.,Ltd.
++				No.99, Hangtian Road, Section 2, East Third Ring Road,Chenghua District, Chengdu
++				Chengdu    610051
++				CN
++
++0C-8B-95   (hex)		Espressif Inc.
++0C8B95     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++68-5E-1C   (hex)		Texas Instruments
++685E1C     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++38-AB-41   (hex)		Texas Instruments
++38AB41     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++CC-47-92   (hex)		ASIX Electronics Corporation
++CC4792     (base 16)		ASIX Electronics Corporation
++				4F, No. 8, Hsin Ann Road, Hsinchu Science Park
++				Hsinchu    30078
++				TW
++
++E0-46-EE   (hex)		NETGEAR
++E046EE     (base 16)		NETGEAR
++				350 East Plumeria Drive
++				San Jose  CA  95134
++				US
++
++9C-4F-5F   (hex)		Google, Inc.
++9C4F5F     (base 16)		Google, Inc.
++				15 rue Castel
++				Fontenay-sous-Bois    94120
++				FR
++
++A0-29-42   (hex)		Intel Corporate
++A02942     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++10-71-B3   (hex)		Zyxel Communications Corporation
++1071B3     (base 16)		Zyxel Communications Corporation
++				No. 6 Innovation Road II, Science Park
++				Hsichu  Taiwan  300
++				TW
++
++04-63-D0   (hex)		Huawei Device Co., Ltd.
++0463D0     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++F0-D4-15   (hex)		Intel Corporate
++F0D415     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++18-69-D4   (hex)		Samsung Electronics Co.,Ltd
++1869D4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				No.75,Zhongkai High-Tech Development District,Huizhou
++				Hui Zhou  Guangdong  516006
++				CN
++
++DC-BE-49   (hex)		ITEL MOBILE LIMITED
++DCBE49     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
++14-44-8F   (hex)		Edgecore Networks Corporation
++14448F     (base 16)		Edgecore Networks Corporation
++				1 Creation RD 3.
++				Hsinchu    30077
++				TW
++
++34-25-BE   (hex)		Amazon Technologies Inc.
++3425BE     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++D4-A3-EB   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++D4A3EB     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++9C-BF-CD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++9CBFCD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++B8-9F-CC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B89FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++9C-E0-41   (hex)		Nokia
++9CE041     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++78-34-86   (hex)		Nokia
++783486     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++D4-D8-53   (hex)		Intel Corporate
++D4D853     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++8C-76-3F   (hex)		ARRIS Group, Inc.
++8C763F     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++28-12-93   (hex)		Honor Device Co., Ltd.
++281293     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++C0-A9-38   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C0A938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++10-A5-62   (hex)		Iton Technology Corp.
++10A562     (base 16)		Iton Technology Corp.
++				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
++				Shenzhen  Guangdong   518116
++				CN
++
++5C-24-E2   (hex)		Suzhou Denbom Electronic S&T Co., Ltd
++5C24E2     (base 16)		Suzhou Denbom Electronic S&T Co., Ltd
++				3F,Building 2, No.415,Changyang Street
++				Suzhou  Jiangsu  215000
++				CN
++
++64-98-9E   (hex)		TRINNOV AUDIO
++64989E     (base 16)		TRINNOV AUDIO
++				5 rue Edmond Michelet
++				NEUILLY PLAISANCE  Ile-de-France  93360
++				FR
++
++BC-C7-46   (hex)		Hon Hai Precision IND.CO.,LTD
++BCC746     (base 16)		Hon Hai Precision IND.CO.,LTD
++				No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN 
++				TAIPEI  TAIWAN  33859
++				CN
++
++30-E8-E4   (hex)		Qorvo International Pte. Ltd.
++30E8E4     (base 16)		Qorvo International Pte. Ltd.
++				1 Changi Business Park Avenue 1
++				#04-01    486058
++				SG
++
++00-0D-A9   (hex)		INGETEAM
++000DA9     (base 16)		INGETEAM
++				Parque Tecnologico de Bizkaia, Edificio 110
++				Zamudio  Bizkaia  48170
++				ES
++
++30-E0-90   (hex)		Genevisio Ltd.
++30E090     (base 16)		Genevisio Ltd.
++				13F, No.33, Sec. 1, Minsheng Rd.
++				New Taipei City  Banqiao Dist.  220871
++				TW
++
++64-FD-96   (hex)		Sagemcom Broadband SAS
++64FD96     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++FC-B9-7E   (hex)		GE Appliances
++FCB97E     (base 16)		GE Appliances
++				4000 Buechel Bank Road
++				Louisville  KY  40225
++				US
++
++88-03-4C   (hex)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
++88034C     (base 16)		WEIFANG GOERTEK ELECTRONICS CO.,LTD
++				Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China
++				Weifang  Shandong  261205
++				CN
++
++48-DC-9D   (hex)		Grandprint(Beijing) Technology Co., LTD.
++48DC9D     (base 16)		Grandprint(Beijing) Technology Co., LTD.
++				Room 259, 2 / F, Building 5, 8 Dongbeiwang West Road, Haidian District,
++				Beijing    100089
++				CN
++
++C8-EB-EC   (hex)		Shenzhen YOUHUA Technology Co., Ltd
++C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
++				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
++				Shenzhen  Guangdong  518055
++				CN
++
++04-7C-16   (hex)		Micro-Star INTL CO., LTD.
++047C16     (base 16)		Micro-Star INTL CO., LTD.
++				No.69, Lide St.,
++				New Taipei City  Taiwan  235
++				TW
++
++E0-D7-38   (hex)		WireStar Networks
++E0D738     (base 16)		WireStar Networks
++				PO Box 10966
++				College Station  TX  77842
++				US
++
++40-42-44   (hex)		Cisco Systems, Inc
++404244     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++04-B6-BE   (hex)		CIG SHANGHAI CO LTD
++04B6BE     (base 16)		CIG SHANGHAI CO LTD
++				5th Floor, Building 8 No 2388 Chenhang Road
++				SHANGHAI    201114
++				CN
++
++7C-EC-B1   (hex)		Apple, Inc.
++7CECB1     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++5C-E9-1E   (hex)		Apple, Inc.
++5CE91E     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++A8-B0-AE   (hex)		BizLink Special Cables Germany GmbH
++A8B0AE     (base 16)		BizLink Special Cables Germany GmbH
++				Eschstrasse 1
++				Friesoythe    26169
++				DE
++
++94-C5-A6   (hex)		ITEL MOBILE LIMITED
++94C5A6     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
++48-57-D2   (hex)		Broadcom Limited
++4857D2     (base 16)		Broadcom Limited
++				15191 Alton Parkway
++				Irvine  CA  92618
++				US
++
++9C-21-83   (hex)		Broadcom Limited
++9C2183     (base 16)		Broadcom Limited
++				15191 Alton Parkway
++				Irvine  CA  92618
++				US
++
++24-1F-BD   (hex)		Extreme Networks, Inc.
++241FBD     (base 16)		Extreme Networks, Inc.
++				6480 Via Del Oro
++				San Jose  CA  95119
++				US
++
++D8-34-EE   (hex)		SHURE INCORPORATED
++D834EE     (base 16)		SHURE INCORPORATED
++				5800 W. TOUHY AVE.
++				NILES  IL  60714 
++				US
++
++F0-B6-61   (hex)		eero inc.
++F0B661     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++04-25-F0   (hex)		Nokia
++0425F0     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++1C-BC-EC   (hex)		silex technology, Inc.
++1CBCEC     (base 16)		silex technology, Inc.
++				2-3-1 Hikaridai, Seika-cho, Souraku-gun
++				Kyoto    619-0237
++				JP
++
++E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
++E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
++				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
++				Shenzhen  Guangdong  518055
++				CN
++
++90-CD-1F   (hex)		Quectel Wireless Solutions Co.,Ltd.
++90CD1F     (base 16)		Quectel Wireless Solutions Co.,Ltd.
++				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
++				Shanghai    200233
++				CN
++
++90-23-5B   (hex)		Amazon Technologies Inc.
++90235B     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++14-13-0B   (hex)		Garmin International
++14130B     (base 16)		Garmin International
++				1200 E. 151st St
++				Olathe  KS  66062
++				US
++
++48-9B-E0   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++489BE0     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++5C-FA-25   (hex)		Sagemcom Broadband SAS
++5CFA25     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++40-3B-7B   (hex)		Huawei Device Co., Ltd.
++403B7B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
++B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++A0-4C-5B   (hex)		Shenzhen TINNO Mobile Technology Corp.
++A04C5B     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++BC-41-01   (hex)		Shenzhen TINNO Mobile Technology Corp.
++BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++74-97-79   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++749779     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++F8-CD-C8   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++F8CDC8     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++B0-28-5B   (hex)		JUHUA Technology Inc.
++B0285B     (base 16)		JUHUA Technology Inc.
++				No.8,Yanbao Block,Hutian Road,Pingdi Street,Longgang District
++				Shenzhen City  Guangdong Province  518117
++				CN
++
++18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
++18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
++34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
++				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
++				Hangzhou  Zhejiang  310003
++				CN
++
++E0-F6-78   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++E0F678     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++28-F7-D6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++28F7D6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
++C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
++				No.188 Nanhuan Road, TangQiao Town
++				Zhangjiagang   Jiangsu   215611
++				CN
++
++24-18-C0   (hex)		E. Wehrle GmbH
++2418C0     (base 16)		E. Wehrle GmbH
++				Obertalstraße 8
++				78120 Furtwangen  Baden-Württemberg  78120
++				DE
++
++14-5B-B9   (hex)		ConMet
++145BB9     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
++AC-83-F0   (hex)		Cobalt Digital Inc.
++AC83F0     (base 16)		Cobalt Digital Inc.
++				2506 Galen Drive
++				Champaign  IL  61821
++				US
++
++40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
++B8B409     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++00-13-95   (hex)		congatec GmbH
++001395     (base 16)		congatec GmbH
++				Auwiesenstrasse 5
++				Deggendorf    94469
++				DE
++
++D4-E2-2F   (hex)		Roku, Inc
++D4E22F     (base 16)		Roku, Inc
++				1155 Coleman Ave
++				San Jose  CA  95110
++				US
++
+ F8-D0-27   (hex)		Seiko Epson Corporation
+ F8D027     (base 16)		Seiko Epson Corporation
+ 				2070 Kotobuki Koaka
+@@ -114863,12 +116606,6 @@ C08135     (base 16)		Ningbo Forfan technology Co., LTD
+ 				LIBERTYVILLE  IL  60048
+ 				US
+ 
+-B4-C0-F5   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-B4C0F5     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 40-62-31   (hex)		GIFA
+ 406231     (base 16)		GIFA
+ 				11th Fl., Suojia Business Building , No.7 Hangkong Road , Baoan District
+@@ -118919,12 +120656,6 @@ D8E0B8     (base 16)		BULAT LLC
+ 				Hsichu  Taiwan  300
+ 				TW
+ 
+-C0-C9-76   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-C0C976     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 58-8B-F3   (hex)		Zyxel Communications Corporation
+ 588BF3     (base 16)		Zyxel Communications Corporation
+ 				No. 6 Innovation Road II, Science Park
+@@ -121199,12 +122930,6 @@ A8CA7B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 04-BF-6D   (hex)		Zyxel Communications Corporation
+ 04BF6D     (base 16)		Zyxel Communications Corporation
+ 				No. 6 Innovation Road II, Science Park
+@@ -123221,12 +124946,6 @@ E855B4     (base 16)		SAI Technology Inc.
+ 				Vikmanshyttan  Dalarna  SE-776 70
+ 				SE
+ 
+-C0-EE-40   (hex)		Laird Technologies
+-C0EE40     (base 16)		Laird Technologies
+-				50 South Main St
+-				Akron  Ohio  44308
+-				US
+-
+ F4-B8-A7   (hex)		zte corporation
+ F4B8A7     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+@@ -124712,12 +126431,6 @@ C098E5     (base 16)		University of Michigan
+ 				Seoul    152-789
+ 				KR
+ 
+-44-3C-9C   (hex)		Pintsch Tiefenbach GmbH
+-443C9C     (base 16)		Pintsch Tiefenbach GmbH
+-				Beisenbruchstrasse 10
+-				Sprockhoevel    45549
+-				DE
+-
+ 28-FC-51   (hex)		The Electric Controller and Manufacturing Co., LLC
+ 28FC51     (base 16)		The Electric Controller and Manufacturing Co., LLC
+ 				PO Box 468
+@@ -135533,12 +137246,6 @@ A07332     (base 16)		Cashmaster International Limited
+ 				Hubbard  OR  97032
+ 				US
+ 
+-00-0E-DD   (hex)		SHURE INCORPORATED
+-000EDD     (base 16)		SHURE INCORPORATED
+-				5800 W. TOUHY AVE.
+-				NILES  IL  60714
+-				US
+-
+ 00-0E-C2   (hex)		Lowrance Electronics, Inc.
+ 000EC2     (base 16)		Lowrance Electronics, Inc.
+ 				12000 E. Skelly Drive
+@@ -138539,12 +140246,6 @@ A06A00     (base 16)		Verilink Corporation
+ 				Elmsford  NY  10523
+ 				US
+ 
+-00-04-35   (hex)		InfiNet LLC
+-000435     (base 16)		InfiNet LLC
+-				Serafimy Deryabinoy str. 24
+-				Yekaterinburg    620149
+-				RU
+-
+ 00-04-37   (hex)		Powin Information Technology, Inc.
+ 000437     (base 16)		Powin Information Technology, Inc.
+ 				8F, No. 70, Zhou-Z St.
+@@ -140483,12 +142184,6 @@ A06A00     (base 16)		Verilink Corporation
+ 				Yokohama City    226
+ 				JP
+ 
+-00-10-43   (hex)		A2 CORPORATION
+-001043     (base 16)		A2 CORPORATION
+-				6-14-11 YUTAKA-CHO
+-				TOKYO    
+-				JP
+-
+ 00-10-A5   (hex)		OXFORD INSTRUMENTS
+ 0010A5     (base 16)		OXFORD INSTRUMENTS
+ 				Halifax Road
+@@ -145481,18 +147176,6 @@ C440F6     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-A4-7D-9F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+-84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 501A,Block B,Digital Building,Garden City,No.1079 Nanhai Road,Nanshan District
+-				Shenzhen    518067
+-				CN
+-
+ 00-55-B1   (hex)		Shanghai Baud Data Communication Co.,Ltd.
+ 0055B1     (base 16)		Shanghai Baud Data Communication Co.,Ltd.
+ 				NO.123 JULI RD
+@@ -145613,12 +147296,6 @@ C094AD     (base 16)		zte corporation
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-D0-21-AC   (hex)		Yo Labs LLC
+-D021AC     (base 16)		Yo Labs LLC
+-				3460 Hillview Ave.
+-				Palo Alto  CA  94304
+-				US
+-
+ 34-2B-70   (hex)		Arris
+ 342B70     (base 16)		Arris
+ 				2500 Walsh Ave.
+@@ -146039,12 +147716,6 @@ A8F766     (base 16)		ITE Tech Inc
+ 				Hsinchu  Taiwan  30076
+ 				TW
+ 
+-14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+ 00-21-3E   (hex)		TomTom International BV
+ 00213E     (base 16)		TomTom International BV
+ 				Oosterdoksstraat 114
+@@ -147884,12 +149555,6 @@ FC5C45     (base 16)		Ruckus Wireless
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.
+-				Shenzhen    518067
+-				CN
+-
+ 4C-02-20   (hex)		Xiaomi Communications Co Ltd
+ 4C0220     (base 16)		Xiaomi Communications Co Ltd
+ 				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+@@ -148139,12 +149804,6 @@ E0B72E     (base 16)		ShenZhen Qualmesh Technology Co.,Ltd.
+ 				Shenzhen  Guangdong  518055
+ 				CN
+ 
+-80-C3-BA   (hex)		Sennheiser electronic GmbH & Co. KG
+-80C3BA     (base 16)		Sennheiser electronic GmbH & Co. KG
+-				Am Labor 1
+-				Wedemark  Niedersachsen  30900
+-				DE
+-
+ 04-42-1A   (hex)		ASUSTek COMPUTER INC.
+ 04421A     (base 16)		ASUSTek COMPUTER INC.
+ 				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+@@ -149240,12 +150899,6 @@ F0A951     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-00-90-3F   (hex)		WorldCast Systems
+-00903F     (base 16)		WorldCast Systems
+-				20 Avenue Neil Armstrong
+-				Mérignac    33700
+-				FR
+-
+ 64-D6-9A   (hex)		Intel Corporate
+ 64D69A     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -149522,6 +151175,30 @@ D83DCC     (base 16)		shenzhen UDD Technologies,co.,Ltd
+ 				Round Rock  TX  78682
+ 				US
+ 
++B4-E2-65   (hex)		Shenzhen SDMC Technology Co.,LTD
++B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
++				19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District
++				Shenzhen  GUANGDONG  518027
++				CN
++
++EC-7C-5C   (hex)		Juniper Networks
++EC7C5C     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
++00EBD8     (base 16)		MERCUSYS TECHNOLOGIES CO., LTD.
++				3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen
++				Shenzhen  Guangdong  518057
++				CN
++
++CC-60-C8   (hex)		Microsoft Corporation
++CC60C8     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
+ 6C-8D-77   (hex)		Cisco Systems, Inc
+ 6C8D77     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -149534,11 +151211,11 @@ D83DCC     (base 16)		shenzhen UDD Technologies,co.,Ltd
+ 				San Jose  CA  94568
+ 				US
+ 
+-B4-E2-65   (hex)		Shenzhen SDMC Technology Co.,LTD
+-B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
+-				19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District
+-				Shenzhen  GUANGDONG  518027
+-				CN
++B4-17-A8   (hex)		Facebook Technologies, LLC
++B417A8     (base 16)		Facebook Technologies, LLC
++				1 Hacker Way
++				Menlo Park  CA  94025
++				US
+ 
+ 10-54-D2   (hex)		IEEE Registration Authority
+ 1054D2     (base 16)		IEEE Registration Authority
+@@ -149546,18 +151223,738 @@ B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-EC-7C-5C   (hex)		Juniper Networks
+-EC7C5C     (base 16)		Juniper Networks
+-				1133 Innovation Way
++00-10-43   (hex)		A2 CORPORATION
++001043     (base 16)		A2 CORPORATION
++				1-7-1 Togoshi
++				Tokyo  Shinagawa-ku  1420041
++				JP
++
++C4-DF-39   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++C4DF39     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
++				Shenzhen  Guangdong  518057
++				CN
++
++80-97-33   (hex)		 Shenzhen Elebao Technology Co., Ltd
++809733     (base 16)		 Shenzhen Elebao Technology Co., Ltd
++				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
++				shenzhen  GUANGDONG  518126
++				CN
++
++F4-6D-2F   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
++F46D2F     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
++				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
++				Shenzhen  Guangdong  518057
++				CN
++
++00-A2-65   (hex)		M2Motive Technology Inc.
++00A265     (base 16)		M2Motive Technology Inc.
++				Room 402,No. 125 North Jiangsu Road, Changning District
++				Shanghai  Shanghai  200042
++				CN
++
++D8-36-5F   (hex)		Intelbras
++D8365F     (base 16)		Intelbras
++				BR 101, km 210, S/N°
++				São José  Santa Catarina  88104800
++				BR
++
++74-04-F1   (hex)		Intel Corporate
++7404F1     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++00-04-35   (hex)		InfiNet LLC
++000435     (base 16)		InfiNet LLC
++				Office 425, 69/75 Vavilova str.
++				Moscow\    117335
++				RU
++
++E8-4D-EC   (hex)		Xerox Corporation
++E84DEC     (base 16)		Xerox Corporation
++				800 Phillips Rd
++				Webster  NY  14450
++				US
++
++C8-B8-2F   (hex)		eero inc.
++C8B82F     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++54-78-C9   (hex)		AMPAK Technology,Inc.
++5478C9     (base 16)		AMPAK Technology,Inc.
++				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
++				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
++				TW
++
++FC-10-1A   (hex)		Palo Alto Networks
++FC101A     (base 16)		Palo Alto Networks
++				3000 Tannery Way
++				Santa Clara  CA  95054
++				US
++
++6C-AE-E3   (hex)		Nokia
++6CAEE3     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++0C-AC-8A   (hex)		Sagemcom Broadband SAS
++0CAC8A     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++B4-3A-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B43AE2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++D0-A4-6F   (hex)		China Dragon Technology Limited
++D0A46F     (base 16)		China Dragon Technology Limited
++				B4 Bldg.Haoshan 1st Industry Park,
++				Shenzhen  Guangdong  518104
++				CN
++
++F0-C8-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++F0C8B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++2C-60-CD   (hex)		NR ELECTRIC CO., LTD
++2C60CD     (base 16)		NR ELECTRIC CO., LTD
++				69,Suyuan Avenue
++				Nanjing  Jiangsu  211102
++				CN
++
++8C-1E-80   (hex)		Cisco Systems, Inc
++8C1E80     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++A4-1E-E1   (hex)		Taicang T&W Electronics
++A41EE1     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
++				CN
++
++E8-FB-1C   (hex)		AzureWave Technology Inc.
++E8FB1C     (base 16)		AzureWave Technology Inc.
++				8F., No. 94, Baozhong Rd.
++				New Taipei City  Taiwan  231
++				TW
++
++B4-A7-C6   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
++B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
++				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
++				NEW DELHI    NA
++				IN
++
++1C-76-F2   (hex)		Samsung Electronics Co.,Ltd
++1C76F2     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++80-C3-BA   (hex)		Sennheiser Consumer Audio GmbH
++80C3BA     (base 16)		Sennheiser Consumer Audio GmbH
++				Am Labor 1
++				Wedemark  Niedersachsen  30900
++				DE
++
++40-35-E6   (hex)		Samsung Electronics Co.,Ltd
++4035E6     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++28-6B-35   (hex)		Intel Corporate
++286B35     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++30-43-D7   (hex)		IEEE Registration Authority
++3043D7     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++C0-EE-40   (hex)		Laird Connectivity
++C0EE40     (base 16)		Laird Connectivity
++				50 South Main St
++				Akron  Ohio  44308
++				US
++
++A4-7D-9F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++30-04-5C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++30045C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++90-79-CF   (hex)		zte corporation
++9079CF     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++88-8F-A4   (hex)		Huawei Device Co., Ltd.
++888FA4     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++3C-82-C0   (hex)		Technicolor CH USA Inc.
++3C82C0     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++C4-DE-E2   (hex)		Espressif Inc.
++C4DEE2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++68-B6-B3   (hex)		Espressif Inc.
++68B6B3     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++FC-A0-5A   (hex)		Oray.com co., LTD.
++FCA05A     (base 16)		Oray.com co., LTD.
++				8008Rm, building No.1 GuoDing d. Yangpu District
++				Shanghai  Shanghai  200433
++				CN
++
++90-48-6C   (hex)		Ring LLC
++90486C     (base 16)		Ring LLC
++				1523 26th St
++				Santa Monica  CA  90404
++				US
++
++3C-46-45   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
++3C4645     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
++				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
++				Shanghai  Shanghai  200082
++				CN
++
++A4-F9-33   (hex)		Intel Corporate
++A4F933     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++10-F6-0A   (hex)		Intel Corporate
++10F60A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++70-D8-23   (hex)		Intel Corporate
++70D823     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++50-68-AC   (hex)		Huawei Device Co., Ltd.
++5068AC     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++50-39-2F   (hex)		INGRAM MICRO SERVICES
++50392F     (base 16)		INGRAM MICRO SERVICES
++				100 CHEMIN DE BAILLOT
++				MONTAUBAN    82000
++				FR
++
++FC-84-17   (hex)		Honor Device Co., Ltd.
++FC8417     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++2C-A7-9E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++2CA79E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++0C-7F-B2   (hex)		ARRIS Group, Inc.
++0C7FB2     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++10-24-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++102407     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++74-D9-EB   (hex)		Petabit Scale, Inc.
++74D9EB     (base 16)		Petabit Scale, Inc.
++				5814 Lonetree Blvd, Ste 200
++				Rocklin  CA  95765
++				US
++
++D0-21-AC   (hex)		Yohana
++D021AC     (base 16)		Yohana
++				3460 Hillview Ave.
++				Palo Alto  CA  94304
++				US
++
++38-1F-26   (hex)		IEEE Registration Authority
++381F26     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++7C-E1-52   (hex)		THE GOODYEAR TIRE & RUBBER COMPANY
++7CE152     (base 16)		THE GOODYEAR TIRE & RUBBER COMPANY
++				200 Innovation Way
++				Akron  OH  44316
++				US
++
++28-CD-C1   (hex)		Raspberry Pi Trading Ltd
++28CDC1     (base 16)		Raspberry Pi Trading Ltd
++				Maurice Wilkes Building, Cowley Road
++				Cambridge    CB4 0DS
++				GB
++
++00-90-3F   (hex)		WorldCast Systems
++00903F     (base 16)		WorldCast Systems
++				20 Avenue Neil Armstrong 
++				Mérignac    33700
++				FR
++
++50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++				Alt-Moabit 95
++				Berlin  Berlin  10559
++				DE
++
++78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
++7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
++				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
++				Beijing    100085
++				CN
++
++EC-21-25   (hex)		Toshiba Corp.
++EC2125     (base 16)		Toshiba Corp.
++				1-1 Shibaura 1-Chome, Minato-Ku
++				Tokyo    105-8001
++				JP
++
++68-4E-05   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
++684E05     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
++				No.8, Litong Road, Liuyan Economic & Tec
++				Changsha  HUNAN  410329
++				CN
++
++04-99-BB   (hex)		Apple, Inc.
++0499BB     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++F0-4D-D4   (hex)		Sagemcom Broadband SAS
++F04DD4     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++00-E5-F1   (hex)		BUFFALO.INC
++00E5F1     (base 16)		BUFFALO.INC
++				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
++				Nagoya  Aichi Pref.  460-8315
++				JP
++
++A8-51-AB   (hex)		Apple, Inc.
++A851AB     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++5C-1B-F4   (hex)		Apple, Inc.
++5C1BF4     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++34-EE-2A   (hex)		ConMet
++34EE2A     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
++78-66-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++78669D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				 No.2, Jin-da Road, Huinan High-tech Industrial Park, Hui-ao Avenue
++				Huizhou  Guangdong  516025
++				CN
++
++48-46-8D   (hex)		Zepcam B.V.
++48468D     (base 16)		Zepcam B.V.
++				Delftechpark, 17-19
++				Delft    2628 XJ
++				NL
++
++90-49-92   (hex)		YSTen Technology Co.,Ltd
++904992     (base 16)		YSTen Technology Co.,Ltd
++				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
++				Beijing    100101
++				CN
++
++AC-29-29   (hex)		Infinix mobility limited
++AC2929     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
++3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
++3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
++00-0E-DD   (hex)		SHURE INCORPORATED
++000EDD     (base 16)		SHURE INCORPORATED
++				5800 W. TOUHY AVE.
++				NILES  IL  60714 
++				US
++
++18-FD-74   (hex)		Routerboard.com
++18FD74     (base 16)		Routerboard.com
++				Mikrotikls SIA
++				Riga  Riga  LV1009
++				LV
++
++40-D9-5A   (hex)		AMPAK Technology,Inc.
++40D95A     (base 16)		AMPAK Technology,Inc.
++				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
++				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
++				TW
++
++4C-D0-DD   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++4CD0DD     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++E4-90-2A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E4902A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++90-5E-44   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++905E44     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
++E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
++240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
++				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
++				Shenzhen  GuangDong  518000
++				CN
++
++6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
++6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
++6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++10-F0-68   (hex)		Ruckus Wireless
++10F068     (base 16)		Ruckus Wireless
++				350 West Java Drive
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
+-00EBD8     (base 16)		MERCUSYS TECHNOLOGIES CO., LTD.
+-				3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen
++F0-87-7F   (hex)		Magnetar Technology Shenzhen Co., LTD.
++F0877F     (base 16)		Magnetar Technology Shenzhen Co., LTD.
++				Room211, Building1, No.26 Puzai Road, Pingdi Longgang
++				Shenzhen  GUANGDONG  518117
++				CN
++
++74-D4-DD   (hex)		Quanta Computer Inc.
++74D4DD     (base 16)		Quanta Computer Inc.
++				No. 211, Wenhua 2nd Rd., Guishan Dist.
++				Taoyuan City  Taiwan  33377
++				TW
++
++C8-D6-B7   (hex)		Solidigm Technology
++C8D6B7     (base 16)		Solidigm Technology
++				1921 Corporate Center Circle, Suite 3B
++				Longmont  CO  80501
++				US
++
++60-5B-30   (hex)		Dell Inc.
++605B30     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
++44-3C-9C   (hex)		Pintsch GmbH
++443C9C     (base 16)		Pintsch GmbH
++				Huenxer Strasse 149
++				Dinslaken    46537
++				DE
++
++D8-80-DC   (hex)		Huawei Device Co., Ltd.
++D880DC     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++E8-B3-EF   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++E8B3EF     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++B4-9F-4D   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++B49F4D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++F4-6C-68   (hex)		Wistron Neweb Corporation
++F46C68     (base 16)		Wistron Neweb Corporation
++				No.20,Park Avenue II,Hsinchu Science Park
++				Hsin-Chu  R.O.C.  308
++				TW
++
++84-93-B2   (hex)		zte corporation
++8493B2     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
++2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
++				3F.,No.98-1,Mincyuan Rd.Sindian City
++				Taipei County 231    231141
++				CN
++
++74-B7-25   (hex)		Huawei Device Co., Ltd.
++74B725     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++40-8E-DF   (hex)		Huawei Device Co., Ltd.
++408EDF     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
++BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++70-66-2A   (hex)		Sony Interactive Entertainment Inc.
++70662A     (base 16)		Sony Interactive Entertainment Inc.
++				1-7-1 Konan
++				Minato-ku  Tokyo  108-0075
++				JP
++
++34-AC-11   (hex)		China Mobile Group Device Co.,Ltd.
++34AC11     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++44-32-C2   (hex)		GOAL Co., Ltd.
++4432C2     (base 16)		GOAL Co., Ltd.
++				2-16-6 Mitsuyakita Yodogawa-ku
++				Osaka-shi  Osaka-fu  532-0032
++				JP
++
++18-B1-85   (hex)		Qiao Information Technology (Zhengzhou) Co., Ltd.
++18B185     (base 16)		Qiao Information Technology (Zhengzhou) Co., Ltd.
++				Room 405-1, Area A, 4th Floor, Wisdom Island Building, No.6, Zhongdao East, Zhengdong New District,
++				Zhengzhou  Henan  450000
++				CN
++
++A0-B7-65   (hex)		Espressif Inc.
++A0B765     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++CC-DB-A7   (hex)		Espressif Inc.
++CCDBA7     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++C8-6C-20   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++C86C20     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++C0-C9-76   (hex)		Shenzhen TINNO Mobile Technology Corp.
++C0C976     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++B4-C0-F5   (hex)		Shenzhen TINNO Mobile Technology Corp.
++B4C0F5     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++E8-F7-91   (hex)		Xiaomi Communications Co Ltd
++E8F791     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++0C-97-5F   (hex)		Aruba, a Hewlett Packard Enterprise Company
++0C975F     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++DC-71-DD   (hex)		AX Technologies
++DC71DD     (base 16)		AX Technologies
++				1400 Broadway, 18th Floor
++				New York City  NY  10018
++				US
++
++54-A9-C8   (hex)		Home Control Singapore Pte Ltd
++54A9C8     (base 16)		Home Control Singapore Pte Ltd
++				151 Lorong Chuan
++				Singapore    556741
++				SG
++
++30-7F-10   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++307F10     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++A4-90-CE   (hex)		vivo Mobile Communication Co., Ltd.
++A490CE     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++F8-B8-B4   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++F8B8B4     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
++B0-FB-DD   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++B0FBDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
++3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
++				Peter-Dornier Strasse 10
++				Lindau  Bavaria  88131
++				DE
++
++E0-9C-8D   (hex)		Seakeeper, Inc.
++E09C8D     (base 16)		Seakeeper, Inc.
++				45310 Abell House Lane Suite 350
++				California  MD  20619
++				US
++
++04-BA-D6   (hex)		D-Link Corporation
++04BAD6     (base 16)		D-Link Corporation
++				No.289, Sinhu 3rd Rd., Neihu District, 
++				Taipei City     114
++				TW
++
++30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
++303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
++				JL.PALEM 1 BLOK DS-6
++				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
++				ID
++
+ 7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+@@ -151094,12 +153491,6 @@ A8F5DD     (base 16)		ARRIS Group, Inc.
+ 				San Diego  CA  92121
+ 				US
+ 
+-44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 9C-82-75   (hex)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+ 9C8275     (base 16)		Yichip Microelectronics (Hangzhou) Co.,Ltd
+ 				Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park
+@@ -153608,12 +155999,6 @@ F4F5DB     (base 16)		Xiaomi Communications Co Ltd
+ 				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+ 				CN
+ 
+-F4-E2-04   (hex)		Traqueur
+-F4E204     (base 16)		Traqueur
+-				1, rue Royale
+-				Saint-Cloud    92210
+-				FR
+-
+ CC-22-37   (hex)		IEEE Registration Authority
+ CC2237     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -159467,12 +161852,6 @@ ACCF85     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Cupertino  CA  95014
+ 				US
+ 
+-00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road.
+-				GuangDong    518053
+-				US
+-
+ 34-BA-75   (hex)		Everest Networks, Inc
+ 34BA75     (base 16)		Everest Networks, Inc
+ 				2933 Bunker Hill Ln., Suite 100
+@@ -171515,12 +173894,6 @@ EC6C9F     (base 16)		Chengdu Volans Technology CO.,LTD
+ 				Kennesaw  Georgia  30144
+ 				US
+ 
+-00-16-A3   (hex)		Ingeteam Transmission&Distribution, S.A.
+-0016A3     (base 16)		Ingeteam Transmission&Distribution, S.A.
+-				C/ Usausuaga, 7
+-				Basauri  Bizkaia  48970
+-				ES
+-
+ 00-16-A0   (hex)		Auto-Maskin
+ 0016A0     (base 16)		Auto-Maskin
+ 				Sophie Radichs Vei 7
+@@ -182996,12 +185369,6 @@ ECC302     (base 16)		HUMAX Co., Ltd.
+ 				Seongnam-si  Gyeonggi-do  463-875
+ 				KR
+ 
+-98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 504A,Block B,Digital Building,Garden City,No.1079 Nanhai Road,Nanshan District,Shenzhen
+-				shenzhen  Guangdong  518067
+-				CN
+-
+ 00-C3-43   (hex)		E-T-A Circuit Breakers Ltd
+ 00C343     (base 16)		E-T-A Circuit Breakers Ltd
+ 				6 Telford Close
+@@ -186803,18 +189170,6 @@ BC6193     (base 16)		Xiaomi Communications Co Ltd
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
+-94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+-C8-54-A4   (hex)		Infinix mobility limited
+-C854A4     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+ EC-71-DB   (hex)		Reolink Innovation Limited
+ EC71DB     (base 16)		Reolink Innovation Limited
+ 				705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET
+@@ -186833,6 +189188,12 @@ F8E57E     (base 16)		Cisco Systems, Inc
+ 				Seoul  Seocho-Gu  #137-902
+ 				KR
+ 
++94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
+ 38-5B-44   (hex)		Silicon Laboratories
+ 385B44     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+@@ -186863,8 +189224,632 @@ CCEB18     (base 16)		OOO TSS
+ 				Moscow  Moscow  105187
+ 				RU
+ 
++6C-24-08   (hex)		LCFC(Hefei) Electronics Technology Co., Ltd
++6C2408     (base 16)		LCFC(Hefei) Electronics Technology Co., Ltd
++				No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area
++				HEFEI  ANHUI  230601
++				CN
++
++EC-60-73   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
++EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
++				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
++				Shenzhen  Guangdong  518057
++				CN
++
++10-4D-15   (hex)		Viaanix Inc
++104D15     (base 16)		Viaanix Inc
++				434 N Main St.
++				Wichita   KS  67202
++				US
++
++50-A0-15   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
++50A015     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
++				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
++				Shenzhen  Nanshan District  518000
++				CN
++
++C8-54-A4   (hex)		Infinix mobility limited
++C854A4     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
+ A0-09-2E   (hex)		zte corporation
+ A0092E     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ 				shenzhen  guangdong  518057
+ 				CN
++
++B0-AF-F7   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
++B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
++				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
++				Shenzhen  Nanshan District  518000
++				CN
++
++70-85-C4   (hex)		Ruijie Networks Co.,LTD
++7085C4     (base 16)		Ruijie Networks Co.,LTD
++				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
++				Fuzhou  Fujian  350002
++				CN
++
++5C-C5-63   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
++5CC563     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
++				No.8, Litong Road, Liuyan Economic & Tec
++				Changsha  HUNAN  410329
++				CN
++
++74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
++74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
++				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
++				SHENZHEN    518000
++				CN
++
++A8-B1-3B   (hex)		HP Inc.
++A8B13B     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
++				US
++
++C4-38-75   (hex)		Sonos, Inc.
++C43875     (base 16)		Sonos, Inc.
++				614 Chapala St
++				Santa Barbara    93101
++				US
++
++68-B6-91   (hex)		Amazon Technologies Inc.
++68B691     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++DC-A9-56   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++DCA956     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++48-27-C5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++4827C5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++BC-D2-06   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++BCD206     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
++14-75-5B   (hex)		Intel Corporate
++14755B     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++F4-E2-04   (hex)		COYOTE SYSTEM
++F4E204     (base 16)		COYOTE SYSTEM
++				1, rue Royale
++				Saint-Cloud    92210
++				FR
++
++F8-4E-58   (hex)		Samsung Electronics Co.,Ltd
++F84E58     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++B4-70-64   (hex)		Samsung Electronics Co.,Ltd
++B47064     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
++CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
++				No.666, Han-Pu Rd. Yu-Shan
++				Kun-Shan  Jiang Su  215316
++				CN
++
++88-3F-0C   (hex)		system a.v. co., ltd.
++883F0C     (base 16)		system a.v. co., ltd.
++				5-16-1,Aoe,KIta-Ku
++				Okayama  Okayama  700-0941
++				JP
++
++C8-BE-35   (hex)		Extreme Networks, Inc.
++C8BE35     (base 16)		Extreme Networks, Inc.
++				6480 Via Del Oro
++				San Jose  CA  95119
++				US
++
++78-AF-08   (hex)		Intel Corporate
++78AF08     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
++D81068     (base 16)		Murata Manufacturing Co., Ltd.
++				1-10-1, Higashikotari
++				Nagaokakyo-shi  Kyoto  617-8555
++				JP
++
++5C-04-5A   (hex)		Company NA Stage & Light
++5C045A     (base 16)		Company NA Stage & Light
++				Lambertu 9
++				M?rupe    LV-2167
++				LV
++
++58-C3-56   (hex)		EM Microelectronic
++58C356     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++A0-ED-FB   (hex)		Quectel Wireless Solutions Co.,Ltd.
++A0EDFB     (base 16)		Quectel Wireless Solutions Co.,Ltd.
++				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
++				Shanghai    200233
++				CN
++
++B0-23-47   (hex)		Shenzhen Giant Microelectronics Company Limited
++B02347     (base 16)		Shenzhen Giant Microelectronics Company Limited
++				Room 2108,  21 Floor, Building No.1 of Chang Fu Jin Mao Tower, No.5 Shi Hua Road, Futian District
++				Shenzhen  Guangdong  518000
++				CN
++
++CC-DD-58   (hex)		Robert Bosch GmbH
++CCDD58     (base 16)		Robert Bosch GmbH
++				Mittlerer Pfad 9
++				Stuttgart    70499
++				DE
++
++4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
++4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
++645DF4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++88-FC-5D   (hex)		Cisco Systems, Inc
++88FC5D     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++F4-C8-8A   (hex)		Intel Corporate
++F4C88A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++18-3C-98   (hex)		Shenzhen Hengyi Technology Co., LTD
++183C98     (base 16)		Shenzhen Hengyi Technology Co., LTD
++				Floor 5, Zone 1, Block B, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
++				Shenzhen  Guangdong  518102
++				CN
++
++78-71-04   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++787104     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++64-C5-82   (hex)		China Mobile Group Device Co.,Ltd.
++64C582     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
++D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++5C-A4-F4   (hex)		zte corporation
++5CA4F4     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++94-09-C9   (hex)		ALPSALPINE CO .,LTD
++9409C9     (base 16)		ALPSALPINE CO .,LTD
++				nishida 6-1
++				kakuda-City  Miyagi-Pref  981-1595
++				JP
++
++50-28-4A   (hex)		Intel Corporate
++50284A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++24-6C-60   (hex)		Huawei Device Co., Ltd.
++246C60     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++28-A3-31   (hex)		Sierra Wireless
++28A331     (base 16)		Sierra Wireless
++				13811 Wireless Way
++				Richmond  BC  V6V 3A4
++				CA
++
++18-34-AF   (hex)		Kaonmedia CO., LTD.
++1834AF     (base 16)		Kaonmedia CO., LTD.
++				884-3, Seongnam-daero, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13517
++				KR
++
++EC-62-60   (hex)		Espressif Inc.
++EC6260     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++B0-6E-72   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++30-3E-A7   (hex)		Intel Corporate
++303EA7     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++60-7D-09   (hex)		Luxshare Precision Industry Co., Ltd
++607D09     (base 16)		Luxshare Precision Industry Co., Ltd
++				2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District
++				Shenzhen City  Guangdong Province  518100
++				CN
++
++CC-3E-79   (hex)		ARRIS Group, Inc.
++CC3E79     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++28-F5-D1   (hex)		ARRIS Group, Inc.
++28F5D1     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++10-E1-77   (hex)		ARRIS Group, Inc.
++10E177     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++				No.17 Longmen Road
++				Changzhou  JiangSu  213164
++				CN
++
++90-D4-73   (hex)		vivo Mobile Communication Co., Ltd.
++90D473     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++08-EB-F6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++08EBF6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C8-F0-9E   (hex)		Espressif Inc.
++C8F09E     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++DC-54-75   (hex)		Espressif Inc.
++DC5475     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++0C-7B-C8   (hex)		Cisco Meraki
++0C7BC8     (base 16)		Cisco Meraki
++				500 Terry A. Francois Blvd
++				San Francisco    94158
++				US
++
++00-16-A3   (hex)		INGETEAM
++0016A3     (base 16)		INGETEAM
++				Parque Tecnologico de Bizkaia, Edificio 110
++				Zamudio  Bizkaia  48170
++				ES
++
++24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
++				CN
++
++1C-0D-7D   (hex)		Apple, Inc.
++1C0D7D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++14-F2-87   (hex)		Apple, Inc.
++14F287     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++58-55-95   (hex)		Apple, Inc.
++585595     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
++F06C5D     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++40-B0-2F   (hex)		Miele & Cie. KG
++40B02F     (base 16)		Miele & Cie. KG
++				Carl-Miele-Straße 29
++				Gütersloh    33332
++				DE
++
++18-66-F0   (hex)		Jupiter Systems
++1866F0     (base 16)		Jupiter Systems
++				31015 Huntwood Ave
++				Hayward  CA  94544-7007
++				US
++
++74-60-4C   (hex)		RØDE
++74604C     (base 16)		RØDE
++				107 Carnarvon St
++				Silverwater  NSW  2128
++				AU
++
++28-6F-40   (hex)		Tonly Technology Co. Ltd 
++286F40     (base 16)		Tonly Technology Co. Ltd 
++				Section 37, Zhongkai Hi-Tech Development Zone
++				Huizhou  Guangdong  516006
++				CN
++
++BC-C7-DA   (hex)		Earda Technologies co Ltd
++BCC7DA     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
++				CN
++
++0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
++0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
++				Huangpu 128, JunCheng Road
++				GuangZhou  Guangdong  510530
++				CN
++
++14-94-6C   (hex)		Apple, Inc.
++14946C     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++1C-59-74   (hex)		IEEE Registration Authority
++1C5974     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++58-00-32   (hex)		Genexis B.V.
++580032     (base 16)		Genexis B.V.
++				Lodewijkstraat 1A
++				Eindhoven    5652AC
++				NL
++
++B4-7D-76   (hex)		KNS Group LLC
++B47D76     (base 16)		KNS Group LLC
++				Room 4, Office IV, Floor 4 Rochdelskaya street, 15, b.15 Moscow, 123376 Russia
++				Moscow    123376
++				RU
++
++C0-AD-97   (hex)		TECNO MOBILE LIMITED
++C0AD97     (base 16)		TECNO MOBILE LIMITED
++				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
++				Hong Kong  Hong Kong  999077
++				HK
++
++B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
++B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
++				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
++				Wanan  China/jiangxi  343800
++				CN
++
++4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
++				ChongQing  ChongQing  400025
++				CN
++
++70-A9-83   (hex)		Cisco Systems, Inc
++70A983     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++BC-FA-EB   (hex)		Cisco Systems, Inc
++BCFAEB     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++74-76-7D   (hex)		shenzhen kexint technology co.,ltd
++74767D     (base 16)		shenzhen kexint technology co.,ltd
++				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
++				shenzhen  guangdong  518000
++				CN
++
++E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
++				Guangzhou    510623
++				CN
++
++F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++84-85-53   (hex)		Biznes Systema Telecom, LLC
++848553     (base 16)		Biznes Systema Telecom, LLC
++				room XXII/1, fl 3, block 3, 6 Barklaya street, Moscow, 121087, Russia
++				Moscow    121087
++				RU
++
++D8-88-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++D88863     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C0-3E-50   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C03E50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++80-60-36   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++806036     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++A0-C9-8B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
++A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
++				Werinherstrasse 91
++				München  Bavaria  D-81541
++				DE
++
++18-BB-1C   (hex)		Huawei Device Co., Ltd.
++18BB1C     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++4C-9D-22   (hex)		ACES Co.,Ltd
++4C9D22     (base 16)		ACES Co.,Ltd
++				TianGong Avenue #916, Tianfu New Area
++				ChengDu  Sichuan Province  610000
++				CN
++
++88-C9-E8   (hex)		Sony Corporation
++88C9E8     (base 16)		Sony Corporation
++				Sony City Osaki 2-10-1
++				Shinagawa-ku   Tokyo  141-8610
++				JP
++
++B8-F0-B9   (hex)		zte corporation
++B8F0B9     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++80-5B-65   (hex)		LG Innotek
++805B65     (base 16)		LG Innotek
++				26, Hanamsandan 5beon-ro
++				Gwangju  Gwangsan-gu  506-731
++				KR
++
++D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
++D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
++				No.1199,Waterfront Road 
++				Hangzhou  Zhejiang  310053
++				CN
++
++00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
++00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
++44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++94-D3-31   (hex)		Xiaomi Communications Co Ltd
++94D331     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++5C-8C-30   (hex)		Taicang T&W Electronics
++5C8C30     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
++				CN
++
++2C-9D-65   (hex)		vivo Mobile Communication Co., Ltd.
++2C9D65     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++44-88-16   (hex)		Cisco Systems, Inc
++448816     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++34-DD-04   (hex)		Minut AB
++34DD04     (base 16)		Minut AB
++				Baltzarsgatan 23
++				Malmö    21136
++				SE
++
++60-1E-98   (hex)		Axevast Technology
++601E98     (base 16)		Axevast Technology
++				5F., No. 20, Guanqian Road, Zhongzheng District
++				Taipei City    100007
++				TW
++
++A8-F7-D9   (hex)		Mist Systems, Inc.
++A8F7D9     (base 16)		Mist Systems, Inc.
++				1601 South De Anza Blvd, Suite 248
++				Cupertino  CA  95014
++				US
++
++2C-3B-70   (hex)		AzureWave Technology Inc.
++2C3B70     (base 16)		AzureWave Technology Inc.
++				8F., No. 94, Baozhong Rd.
++				New Taipei City  Taiwan  231
++				TW
+diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
+index aa83fc256f..0410acdf80 100644
+--- a/hwdb.d/ma-medium.txt
++++ b/hwdb.d/ma-medium.txt
+@@ -2258,12 +2258,6 @@ C00000-CFFFFF     (base 16)		Goetting KG
+ 				Lehrte  Select Your State or Province  31275
+ 				DE
+ 
+-50-FF-99   (hex)		Coyote Sytem
+-100000-1FFFFF     (base 16)		Coyote Sytem
+-				24 quai Gallieni
+-				Suresnes    92150
+-				FR
+-
+ 50-FF-99   (hex)		Shenzhen Haipengxin Electronic Co., Ltd.
+ D00000-DFFFFF     (base 16)		Shenzhen Haipengxin Electronic Co., Ltd.
+ 				Block C3,Mingzhuo Xingye Technology Park,Guangming Avenue
+@@ -3719,12 +3713,6 @@ B00000-BFFFFF     (base 16)		Fibergate Inc.
+ 				Beijing  Beijing  100037
+ 				CN
+ 
+-9C-43-1E   (hex)		Phoenix Audio Technologies
+-E00000-EFFFFF     (base 16)		Phoenix Audio Technologies
+-				2552 White Road, Suite A
+-				Irvine  CA  92614
+-				US
+-
+ 70-69-79   (hex)		Rivian Automotive LLC
+ C00000-CFFFFF     (base 16)		Rivian Automotive LLC
+ 				13250 N. Haggerty Road
+@@ -4874,6 +4862,168 @@ C00000-CFFFFF     (base 16)		Shenzhen Micro&Nano Perception Computing Technology
+ 				Tokyo  Minato  108-0023
+ 				JP
+ 
++0C-86-29   (hex)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
++D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
++				27 Shucun West Road, Haidian District,
++				Beijing    100089
++				CN
++
++0C-86-29   (hex)		Shenzhen protostellar technology Co., Ltd
++500000-5FFFFF     (base 16)		Shenzhen protostellar technology Co., Ltd
++				 4/F, #16, DaKan Yangmen industrial park, XiLi town,  Nanshan district
++				ShenZhen  GuangDong  518055
++				CN
++
++0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
++				HONGKONG    999077
++				CN
++
++0C-86-29   (hex)		Akribis Systems
++B00000-BFFFFF     (base 16)		Akribis Systems
++				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
++				Singapore  Singapore  569876
++				SG
++
++6C-93-08   (hex)		Shenzhen C & D Electronics Co., Ltd.
++500000-5FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
++				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
++				ShenZhen  GuangDong  518000
++				CN
++
++6C-93-08   (hex)		Braums
++000000-0FFFFF     (base 16)		Braums
++				Unit M 10-16 South st
++				Rydalmere   NSW  2116
++				AU
++
++50-FF-99   (hex)		COYOTE SYSTEM
++100000-1FFFFF     (base 16)		COYOTE SYSTEM
++				24 quai Gallieni
++				Suresnes    92150
++				FR
++
++30-43-D7   (hex)		Apollo Infoways Private Limited
++200000-2FFFFF     (base 16)		Apollo Infoways Private Limited
++				G-149, Sector-63
++				Noida  Uttar Pradesh  201301
++				IN
++
++30-43-D7   (hex)		Luxshare Electronic Technology (Kunshan) LTD
++300000-3FFFFF     (base 16)		Luxshare Electronic Technology (Kunshan) LTD
++				No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China
++				Kunshan  Jiangsu  215324
++				CN
++
++6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
++100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
++				7430 NEW TECHNOLOGY WAY, Suite 150
++				FREDERICK    21703
++				US
++
++30-43-D7   (hex)		DIGICITI Technology Co.,Ltd
++700000-7FFFFF     (base 16)		DIGICITI Technology Co.,Ltd
++				Room 3502,Building 1,Huide Building,North Station Community,Minzhi Street,Longhua District
++				Shenzhen  Guangdong  518000
++				CN
++
++38-1F-26   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++100000-1FFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
++				Suzhou    215021
++				CN
++
++38-1F-26   (hex)		Avon Protection
++800000-8FFFFF     (base 16)		Avon Protection
++				503 8th Street
++				Cadillac  MI  49601
++				US
++
++18-A5-9C   (hex)		Thermia AB
++500000-5FFFFF     (base 16)		Thermia AB
++				Snickaregatan 1
++				Arvika    67134
++				SE
++
++38-1F-26   (hex)		SMS Evoko Group AB
++900000-9FFFFF     (base 16)		SMS Evoko Group AB
++				Hastholmsvagen 32
++				Nacka    13130
++				SE
++
++18-A5-9C   (hex)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
++B00000-BFFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA
++				AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80
++				MANAUS  AMAZONAS  69041-025
++				BR
++
++18-A5-9C   (hex)		BlueEyes Technology
++C00000-CFFFFF     (base 16)		BlueEyes Technology
++				7F-3, No.200, Sec. 4, Wenxin Rd.,
++				Taichung City  Taiwan  40462
++				TW
++
++9C-43-1E   (hex)		SHURE INCORPORATED
++E00000-EFFFFF     (base 16)		SHURE INCORPORATED
++				2552 White Road, Suite A
++				Irvine  CA  92614
++				US
++
++1C-59-74   (hex)		Globe Tracker ApS
++E00000-EFFFFF     (base 16)		Globe Tracker ApS
++				Strandgade 91
++				kobenhavn  State / Province*  1401
++				DK
++
++C4-A1-0E   (hex)		Connectlab SRL
++D00000-DFFFFF     (base 16)		Connectlab SRL
++				via donatello 30
++				Milano  Milano  20131 - Milano
++				IT
++
++C4-A1-0E   (hex)		BARTEC PIXAVI AS
++100000-1FFFFF     (base 16)		BARTEC PIXAVI AS
++				Vestre Svanholmen 24
++				SANDNES  Rogaland  4313
++				NO
++
++C4-A1-0E   (hex)		HYOSUNG HEAVY INDUSTRIES
++000000-0FFFFF     (base 16)		HYOSUNG HEAVY INDUSTRIES
++				119, Mapo-daero (Gongdeok-dong), Mapo-gu
++				Seoul    04144
++				KR
++
++C4-A1-0E   (hex)		Consolinno Energy GmbH
++300000-3FFFFF     (base 16)		Consolinno Energy GmbH
++				Franz-Mayer-Straße 1
++				Regensburg  Bayern  93053
++				DE
++
++C4-A1-0E   (hex)		Ayla Networks (Shenzhen) Co., Ltd.
++800000-8FFFFF     (base 16)		Ayla Networks (Shenzhen) Co., Ltd.
++				Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, 
++				Shenzhen    518000
++				CN
++
++70-50-E7   (hex)		Shenzhen Dangs Science and Technology CO.,Ltd.
++800000-8FFFFF     (base 16)		Shenzhen Dangs Science and Technology CO.,Ltd.
++				9th Floor of GDC Building, Gaoxin Middle 3rd St.,Nanshan District
++				Shenzhen  GuangDong  518063
++				CN
++
++70-50-E7   (hex)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
++E00000-EFFFFF     (base 16)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
++				3F,No.4Building,Yuyao Technology Innovation Center
++				Ningbo  ZheJiang Province, P.R.C.  315400
++				CN
++
++80-02-F4   (hex)		BK Networks Co,. Ltd.
++000000-0FFFFF     (base 16)		BK Networks Co,. Ltd.
++				330 Suin-ro, Gwonseon-gu
++				Suwon-si  Gyeonggi-do  16371
++				KR
++
+ 4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+ 400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+ 				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+@@ -9452,23 +9602,227 @@ D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+ 				Guangzhou    511400
+ 				CN
+ 
++10-54-D2   (hex)		Raylogic Control Systems Private Limited
++400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
++				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
++				Mumbai  Maharashtra  400054
++				IN
++
++10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
++900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
++				No.146, Sec. 1,Donxing Rd.
++				Zhubei City, Hsinchu County   Taiwan  302058
++				TW
++
+ 10-54-D2   (hex)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+ 700000-7FFFFF     (base 16)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+ 				Bldg.7, N.Industrial Park,No.18 Makan Rd,Xili,Nanshan,
+ 				SHENZHEN    518000
+ 				CN
+ 
+-10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
+-900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
+-				No.146, Sec. 1,Donxing Rd.
+-				Zhubei City, Hsinchu County   Taiwan  302058
++0C-86-29   (hex)		Shanghai Prophet Electronic Technology Co.,Ltd
++000000-0FFFFF     (base 16)		Shanghai Prophet Electronic Technology Co.,Ltd
++				9th Floor, Building 3, 1535 Hongmei Road, Xuhui District,
++				Shanghai    200030
++				CN
++
++0C-86-29   (hex)		Beijing Qinmu Data Technology Co., Ltd.
++100000-1FFFFF     (base 16)		Beijing Qinmu Data Technology Co., Ltd.
++				Room101,Office 701,Floor7,Building4,Courtyard1,Nongda South Road,Haidian District.
++				Beijing    100085
++				CN
++
++0C-86-29   (hex)		C&A Marketing, INC.
++600000-6FFFFF     (base 16)		C&A Marketing, INC.
++				114 Tived Lane East
++				Edison   NJ  08837
++				US
++
++10-54-D2   (hex)		Sybersense
++500000-5FFFFF     (base 16)		Sybersense
++				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
++				Hong Kong    999077
++				CN
++
++0C-86-29   (hex)		MyGregor Ltd
++800000-8FFFFF     (base 16)		MyGregor Ltd
++				11A, Carnegie str.
++				Sofia    1000
++				BG
++
++6C-93-08   (hex)		Annapurna labs
++D00000-DFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
++A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
++				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
++				ShenZhen  Guangdong  518055
++				CN
++
++6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
++900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
++				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
++				Shenzhen  Guangdong  518000
++				CN
++
++30-43-D7   (hex)		SYMES SA
++000000-0FFFFF     (base 16)		SYMES SA
++				4 allée technopolis, chemin des presses
++				Cagnes sur mer  PACA  06800
++				FR
++
++30-43-D7   (hex)		Shenzhen Mees Hi-Tech Co., Ltd
++500000-5FFFFF     (base 16)		Shenzhen Mees Hi-Tech Co., Ltd
++				2F & 4F,Building 3 North District,2nd Qianjin Road,Liutang Village, Xixiang,Bao'an District
++				Shenzhen  Guangdong  518102
++				CN
++
++30-43-D7   (hex)		Annapurna labs
++D00000-DFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++6C-93-08   (hex)		ANDDORO LLC
++E00000-EFFFFF     (base 16)		ANDDORO LLC
++				1430 Broadway NY 
++				New York  NY  10018
++				US
++
++38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
++				Jiaxing    314000
++				CN
++
++38-1F-26   (hex)		Synamedia
++200000-2FFFFF     (base 16)		Synamedia
++				Luipaardstraat 12
++				Kortrijk  West-Vlaanderen  8500
++				BE
++
++38-1F-26   (hex)		Jade Bird Fire Co., Ltd.
++C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
++				Jade Bird Building, 207 Chengfu Road, Haidian District, Beijing, P.R.China
++				Beijing    100871
++				CN
++
++18-A5-9C   (hex)		Omwave
++000000-0FFFFF     (base 16)		Omwave
++				5 rue Barbes
++				Montrouge    92120
++				FR
++
++18-A5-9C   (hex)		INTEGRAL PLUS
++600000-6FFFFF     (base 16)		INTEGRAL PLUS
++				ul. Khalitova, 2
++				Kazan    420029
++				RU
++
++18-A5-9C   (hex)		estun automation co.,ltd
++900000-9FFFFF     (base 16)		estun automation co.,ltd
++				1888 Jiyin Avenue,Jiangning District
++				nanjing    211100
++				CN
++
++1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
++D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
++				12th Floor, Block B, Building 7, International Innovation Valley
++				Shenzhen  Gunagdong  518000
++				CN
++
++1C-59-74   (hex)		King-On Technology Ltd.
++C00000-CFFFFF     (base 16)		King-On Technology Ltd.
++				13F, No.207-2, Sec#3, Beixin Rd., Xindian District.
++				New Taipei  Taiwan  23146
+ 				TW
+ 
+-10-54-D2   (hex)		Raylogic Control Systems Private Limited
+-400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
+-				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
+-				Mumbai  Maharashtra  400054
+-				IN
++1C-59-74   (hex)		Topway Global Technology Limited
++800000-8FFFFF     (base 16)		Topway Global Technology Limited
++				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
++				Hong Kong  Hong Kong  999077
++				HK
++
++18-A5-9C   (hex)		Annapurna labs
++D00000-DFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++18-A5-9C   (hex)		BMC Messsysteme GmbH
++E00000-EFFFFF     (base 16)		BMC Messsysteme GmbH
++				Haupstr. 21
++				Maisach    82216
++				DE
++
++1C-59-74   (hex)		Jiangsu Welm Technology Co.,Ltd
++300000-3FFFFF     (base 16)		Jiangsu Welm Technology Co.,Ltd
++				No.158 Jianghai WestRoad,Haian
++				Haian  Jiangsu  226100
++				CN
++
++1C-59-74   (hex)		Logical Infrastructure PTY LTD
++100000-1FFFFF     (base 16)		Logical Infrastructure PTY LTD
++				unit 2, 8 Carbine way
++				Mornington  Victoria  3931
++				AU
++
++1C-59-74   (hex)		Shenzhen Shi Fang Communication Technology Co., Ltd
++500000-5FFFFF     (base 16)		Shenzhen Shi Fang Communication Technology Co., Ltd
++				601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct
++				Shenzhen   Guangdong  518118
++				CN
++
++1C-59-74   (hex)		Lynxi Technologies Co.,Ltd.
++700000-7FFFFF     (base 16)		Lynxi Technologies Co.,Ltd.
++				RM 801, 8/F, No. 67 North 4th Ring West Road
++				Beijing  Beijing  100084
++				CN
++
++6C-15-24   (hex)		D-HOME SMAART
++900000-9FFFFF     (base 16)		D-HOME SMAART
++				8, rue Edouard Herriot
++				Marigny le Châtel    10350
++				FR
++
++6C-15-24   (hex)		Forcite Helmet Systems Pty Ltd
++300000-3FFFFF     (base 16)		Forcite Helmet Systems Pty Ltd
++				35-39 Bourke Road, Alexandria
++				Sydney  NSW  2015
++				AU
++
++6C-15-24   (hex)		Kunshan Abram Software Technology Co.,Ltd.
++600000-6FFFFF     (base 16)		Kunshan Abram Software Technology Co.,Ltd.
++				Room 704, No. 666, Changjiang South Road
++				Kunshan  Jiangsu  215300
++				CN
++
++6C-15-24   (hex)		Magicyo Technology CO., LTD.
++400000-4FFFFF     (base 16)		Magicyo Technology CO., LTD.
++				7F, Tower A, YuZhou Building, No.78 North Keyuan
++				Shenzhen  Nanshan District  518057
++				CN
++
++70-50-E7   (hex)		shenzhen newbridge communication equipment CO.,LTD
++C00000-CFFFFF     (base 16)		shenzhen newbridge communication equipment CO.,LTD
++				5 / F, No. 1 building, Jinli Industrial Park, No. 1, LanJin Sixth Road, Nanbu community, Longtian street, Pingshan District, Shenzhen
++				SHENZHEN  GUANGDONG  518000
++				CN
++
++70-50-E7   (hex)		Quantumdoor Technologies, Inc.
++400000-4FFFFF     (base 16)		Quantumdoor Technologies, Inc.
++				1st Floor 108-1,Buiding5,East Districe,No.10 Xibeiwang East Road,haidian Districe,
++				beijing    102629
++				CN
++
++80-02-F4   (hex)		Shenzhen Suanzi Technology Co., Ltd
++300000-3FFFFF     (base 16)		Shenzhen Suanzi Technology Co., Ltd
++				Room 207, Research Building, Tsinghua Information Port, No.1, Songpingshan New East Road, Nanshan District
++				Shenzhen  Guangdong  518057
++				CN
+ 
+ 20-85-93   (hex)		UNILUMIN GROUP CO.,LTD
+ 300000-3FFFFF     (base 16)		UNILUMIN GROUP CO.,LTD
+@@ -14333,18 +14687,204 @@ A00000-AFFFFF     (base 16)		Pavana Technologies JSC.
+ 				Vinh Phuc    35000
+ 				VN
+ 
+-10-54-D2   (hex)		LUXSHARE-ICT Co., Ltd.
+-C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
+-				1F, No. 22, Lane 35, Jihu Road, Neihu district
+-				Taipei City  Taiwan  114754
++10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
++E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
++				Haier Information Industrial Complex, No.1 HaierRoad
++				Qingdao  Shandong  266101
++				CN
++
++10-54-D2   (hex)		GIPS Technology Co., Ltd.
++000000-0FFFFF     (base 16)		GIPS Technology Co., Ltd.
++				Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist.
++				 Tainan City  TAIWAN  701024
+ 				TW
+ 
++10-54-D2   (hex)		Embion B.V.
++A00000-AFFFFF     (base 16)		Embion B.V.
++				Biestraat 1b
++				Gilze  Noord-Brabant  5126NH
++				NL
++
+ 10-54-D2   (hex)		Little Array Technology (Shenzhen) Co., Ltd.
+ 300000-3FFFFF     (base 16)		Little Array Technology (Shenzhen) Co., Ltd.
+ 				Unit 215, 2F, A1, Zhimei Industry Park, Fuhai Industrial Zone B2, Fuyong Street, Baoan District
+ 				Shenzhen  Guangdong  518103
+ 				CN
+ 
++10-54-D2   (hex)		LUXSHARE-ICT Co., Ltd.
++C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
++				1F, No. 22, Lane 35, Jihu Road, Neihu district
++				Taipei City  Taiwan  114754
++				TW
++
++0C-86-29   (hex)		SHENZHEN YINGMU TECHNOLOGY.,LTD
++C00000-CFFFFF     (base 16)		SHENZHEN YINGMU TECHNOLOGY.,LTD
++				8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District,
++				Shenzhen    518000
++				CN
++
++0C-86-29   (hex)		Nipron Co.,Ltd
++A00000-AFFFFF     (base 16)		Nipron Co.,Ltd
++				1-3-30 Nishinagasucho
++				Amagasaki-shi  Hyogo-ken  660-0805
++				JP
++
++0C-86-29   (hex)		FX TECHNOLOGY LIMITED
++E00000-EFFFFF     (base 16)		FX TECHNOLOGY LIMITED
++				38a High Street, Northwood
++				Middlesex  -  HA6 1BN
++				GB
++
++6C-93-08   (hex)		LightnTec GmbH
++300000-3FFFFF     (base 16)		LightnTec GmbH
++				Haid-und-Neu-Strasse 7
++				Karlsruhe    76131
++				DE
++
++30-43-D7   (hex)		Sprocomm Technologies Co., Ltd.Guangming Branch
++600000-6FFFFF     (base 16)		Sprocomm Technologies Co., Ltd.Guangming Branch
++				Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, 
++				Shenzhen    518000
++				CN
++
++6C-93-08   (hex)		Shenzhen haichangxing Technology Co., Ltd.
++C00000-CFFFFF     (base 16)		Shenzhen haichangxing Technology Co., Ltd.
++				Room 3102, 31 / F, Wen an Center, Wenjin Square, Luohu
++				SHENZHEN  GUANGZHOU  518000
++				CN
++
++30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
++100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
++30-43-D7   (hex)		Guangdong Hongqin Telecom  Technology Co. Ltd.
++E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
++				10 Keyuan Road, Songshan Lake
++				Dongguan  Guangdong   523808
++				CN
++
++38-1F-26   (hex)		Bosch Automotive Electronics India Pvt. Ltd.
++300000-3FFFFF     (base 16)		Bosch Automotive Electronics India Pvt. Ltd.
++				Naganathapura
++				Bengaluru  Karnataka  560100
++				IN
++
++18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
++700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
++				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
++				New Taipei City ,    242063
++				TW
++
++18-A5-9C   (hex)		Erba Lachema s.r.o.
++A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
++				Karasek1d
++				Brno    62100
++				CZ
++
++1C-59-74   (hex)		Shenzhen Hanshine Technology Co.Ltd.
++000000-0FFFFF     (base 16)		Shenzhen Hanshine Technology Co.Ltd.
++				Buiding 2 ,row 3,number 2 industrail  zone,yulv community,Yutang street 
++				Shenzhen  Guangdong  518000
++				CN
++
++1C-59-74   (hex)		Chongqing Taishan Cable Co., Ltd
++200000-2FFFFF     (base 16)		Chongqing Taishan Cable Co., Ltd
++				17 Shiyan Avenue, Yufengshan Town, Yubei District,
++				Chongqing    400000
++				CN
++
++6C-15-24   (hex)		Telsonic AG
++100000-1FFFFF     (base 16)		Telsonic AG
++				Industriestrasse 6b
++				Bronschhofen  St.Gallen  9552
++				CH
++
++18-A5-9C   (hex)		Beijing QS Medical Technology Co., Ltd.
++300000-3FFFFF     (base 16)		Beijing QS Medical Technology Co., Ltd.
++				Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area
++				Beijing    100176
++				CN
++
++6C-15-24   (hex)		SYMLINK CORPORATION
++D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
++				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
++				Taipei    11492
++				TW
++
++C4-A1-0E   (hex)		Clinton Electronics Corporation
++B00000-BFFFFF     (base 16)		Clinton Electronics Corporation
++				6701 Clinton Road
++				Loves Park  IL  61111
++				US
++
++C4-A1-0E   (hex)		Wistron InfoComn (Kunshan) Co., Ltd.
++200000-2FFFFF     (base 16)		Wistron InfoComn (Kunshan) Co., Ltd.
++				No.88 Hongyan Road, Kunshan Economic & Technological Development Zone
++				Kunshan  Jiangsu  215300
++				CN
++
++C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
++700000-7FFFFF     (base 16)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
++				Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District,
++				Guangzhou  GuangDong  510663
++				CN
++
++6C-15-24   (hex)		Motium Pty Ltd
++700000-7FFFFF     (base 16)		Motium Pty Ltd
++				11/4 Brodie Hall Drive,
++				Bentley  Western Australia  6102
++				AU
++
++6C-15-24   (hex)		AEC s.r.l.
++E00000-EFFFFF     (base 16)		AEC s.r.l.
++				Via Zambon, 33/A
++				Creazzo  Vicenza  36051
++				IT
++
++70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
++000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
++				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
++				ShenZhen  GuangDong  518000
++				CN
++
++70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
++B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
++				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
++				beijing  beijing  100029
++				CN
++
++C4-A1-0E   (hex)		Harbour Cross Technology Ltd
++400000-4FFFFF     (base 16)		Harbour Cross Technology Ltd
++				Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang,
++				Hong Kong  China  000000
++				HK
++
++70-50-E7   (hex)		Annapurna labs
++100000-1FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
++				XIAMEN    361106
++				CN
++
++80-02-F4   (hex)		PassiveLogic
++A00000-AFFFFF     (base 16)		PassiveLogic
++				6405 S 3000 E, Suite 300
++				Holladay  UT  84121
++				US
++
++80-02-F4   (hex)		Sichuan Fanyi Technology Co. Ltd.
++500000-5FFFFF     (base 16)		Sichuan Fanyi Technology Co. Ltd.
++				No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District
++				Chengdu  Sichuan  650000
++				CN
++
+ 4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+ 600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+ 				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+@@ -17420,12 +17960,6 @@ A00000-AFFFFF     (base 16)		Winsonic Electronics Co., Ltd.
+ 				Suwon-si  Gyeonggi-do  443-270
+ 				KR
+ 
+-7C-70-BC   (hex)		Ametek VIS
+-A00000-AFFFFF     (base 16)		Ametek VIS
+-				287 27 Road
+-				Grand Junction  CO  81503
+-				US
+-
+ BC-34-00   (hex)		Parlay Labs dba Highfive
+ C00000-CFFFFF     (base 16)		Parlay Labs dba Highfive
+ 				471 Emerson St.
+@@ -19067,12 +19601,6 @@ DC-36-43   (hex)		Hangzhou Chingan Tech Co., Ltd.
+ 				hangzhou  zhejiang  310000
+ 				CN
+ 
+-08-26-AE   (hex)		Flextronics International Kft.
+-A00000-AFFFFF     (base 16)		Flextronics International Kft.
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
+-
+ 08-26-AE   (hex)		Wuhan Tianyu Information Industry Co., Ltd.
+ 000000-0FFFFF     (base 16)		Wuhan Tianyu Information Industry Co., Ltd.
+ 				Tianyu Building, S.&T.Park, Huazhong University of S.&T.,East Lake Development Zone
+@@ -19109,12 +19637,6 @@ DC-36-43   (hex)		Hefei EA Excelsior Information Security Co., Ltd.
+ 				Wijk en Aalburg    4261 LN
+ 				NL
+ 
+-10-54-D2   (hex)		ComNav Technology Ltd.
+-200000-2FFFFF     (base 16)		ComNav Technology Ltd.
+-				3 floor Building 2,No.618 Chengliu Middle RD. Malu town,
+-				Shanghai    200000
+-				CN
+-
+ 10-54-D2   (hex)		Shenzhen Dinstech Technology Co.,Ltd.
+ B00000-BFFFFF     (base 16)		Shenzhen Dinstech Technology Co.,Ltd.
+ 				Shenzhen Qianhai Shenzhen-Hong Kong Cooperation Zone Nanshan Street Linhai Avenue No. 59 Seaside Avenue 3rd Floor D378, Port Building, Shipping Center
+@@ -19127,6 +19649,186 @@ D00000-DFFFFF     (base 16)		Sun wealth technology corporation limited
+ 				shenzhen   Guang dong   518000
+ 				CN
+ 
++10-54-D2   (hex)		ComNav Technology Ltd.
++200000-2FFFFF     (base 16)		ComNav Technology Ltd.
++				3 floor Building 2,No.618 Chengliu Middle RD. Malu town,
++				Shanghai    200000
++				CN
++
++10-54-D2   (hex)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
++100000-1FFFFF     (base 16)		Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd.
++				Building 2 and 3,Intelligent Technology Industrial Park,high-tech industrial Development Zone, 
++				Yingtan     335000
++				CN
++
++0C-86-29   (hex)		BADA SYSTEM co., Ltd
++200000-2FFFFF     (base 16)		BADA SYSTEM co., Ltd
++				Saemalro 99 Kumsuk building 501
++				Seoul    05808
++				KR
++
++0C-86-29   (hex)		HagerEnergy GmbH
++700000-7FFFFF     (base 16)		HagerEnergy GmbH
++				Karlstrasse 5
++				Osnabrueck    49074
++				DE
++
++6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
++B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
++				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
++				shenz  guangdong  518055
++				CN
++
++30-43-D7   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
++C00000-CFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
++				Room 706, building 3, no.20 east road, jingan district.
++				Shang hai    200040
++				CN
++
++6C-93-08   (hex)		Estelar s.r.o
++400000-4FFFFF     (base 16)		Estelar s.r.o
++				Palackého 744/1
++				Holešov  ?eská republika  76901
++				CZ
++
++08-26-AE   (hex)		Flextronics International Kft
++A00000-AFFFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
++
++38-1F-26   (hex)		HWACHANG CORPORATION 
++D00000-DFFFFF     (base 16)		HWACHANG CORPORATION 
++				90, NONGGONGANJI-GIL
++				SOCHO-SI    24899
++				KR
++
++38-1F-26   (hex)		Airmaster A/S
++400000-4FFFFF     (base 16)		Airmaster A/S
++				Industrivej 59
++				Aars    9600
++				DK
++
++18-A5-9C   (hex)		Actiontec Electronics Inc.
++200000-2FFFFF     (base 16)		Actiontec Electronics Inc.
++				2445 Augustine Dr #501
++				Santa Clara   CA  95054
++				US
++
++18-A5-9C   (hex)		IT-1
++400000-4FFFFF     (base 16)		IT-1
++				260, Changnyong-daero
++				Yeongtong-gu, Suwon-si  Gyeonggi-do  16229
++				KR
++
++18-A5-9C   (hex)		Residence Control Ltd
++800000-8FFFFF     (base 16)		Residence Control Ltd
++				Cvetan Vuchkov 7
++				Sofia  Sofia  1614
++				BG
++
++7C-70-BC   (hex)		Motec GmbH
++A00000-AFFFFF     (base 16)		Motec GmbH
++				287 27 Road
++				Grand Junction  CO  81503
++				US
++
++1C-59-74   (hex)		Syntax technology(tianjin)Co.,LTD
++400000-4FFFFF     (base 16)		Syntax technology(tianjin)Co.,LTD
++				Room 510-5,Comprehensive Office Building,Carpet Industrial Park,Wuqing District 
++				Tianjin  Tianjin  301700
++				CN
++
++1C-59-74   (hex)		Beijing Flintec Electronic Technology Co.,Ltd.
++B00000-BFFFFF     (base 16)		Beijing Flintec Electronic Technology Co.,Ltd.
++				Room 102,Building No.6,China Technology Venture Park,No.8,LaiGuangYing West Road,ChaoYang District 
++				Beijing  Beijing  100012
++				CN
++
++1C-59-74   (hex)		Shanghai Laisi Information Technology Co.,Ltd
++900000-9FFFFF     (base 16)		Shanghai Laisi Information Technology Co.,Ltd
++				1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai
++				shanghai    201614
++				CN
++
++6C-15-24   (hex)		Shenzhen Electron Technology Co., LTD.
++500000-5FFFFF     (base 16)		Shenzhen Electron Technology Co., LTD.
++				Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District
++				Shenzhen  Guangzhou  51800
++				CN
++
++6C-15-24   (hex)		ShenZhen Chainway Information Technology Co., Ltd.
++800000-8FFFFF     (base 16)		ShenZhen Chainway Information Technology Co., Ltd.
++				 9F Building2, Phase2, Gaoxinqi Industrial Park ,  Bao'an District
++				ShenZhen  GuangDong  518102
++				CN
++
++6C-15-24   (hex)		Annapurna labs
++B00000-BFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++1C-59-74   (hex)		Square Inc.
++600000-6FFFFF     (base 16)		Square Inc.
++				1455 Market St.
++				San Francisco  CA  94103
++				US
++
++6C-15-24   (hex)		DEFA AS
++000000-0FFFFF     (base 16)		DEFA AS
++				Blingsmovegen 30
++				Nesbyen    3540
++				NO
++
++6C-15-24   (hex)		Linkplay
++200000-2FFFFF     (base 16)		Linkplay
++				891 W. Washington Ave.
++				Sunnyvale  CA  94086
++				US
++
++6C-15-24   (hex)		CORAL-TAIYI
++C00000-CFFFFF     (base 16)		CORAL-TAIYI
++				8F-3, No. 200, Gangqian Rd, Neihu District
++				Taipei City    114
++				TW
++
++C4-A1-0E   (hex)		O-NET Industrial Technologies (Shenzhen) Limited
++500000-5FFFFF     (base 16)		O-NET Industrial Technologies (Shenzhen) Limited
++				501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District
++				Shenzhen  Guangdong  518118
++				CN
++
++70-50-E7   (hex)		Nippon Pulse America, Inc.
++600000-6FFFFF     (base 16)		Nippon Pulse America, Inc.
++				4 Corporate Drive
++				Radford  VA  24141-5100
++				US
++
++C4-A1-0E   (hex)		Focus-on
++C00000-CFFFFF     (base 16)		Focus-on
++				Kerkeplaat 12
++				Dordrecht    3313LC
++				NL
++
++70-50-E7   (hex)		Eta Compute Inc.
++D00000-DFFFFF     (base 16)		Eta Compute Inc.
++				182 S. Murphy Ave
++				Sunnyvale  CA  94086
++				US
++
++80-02-F4   (hex)		Sichuan lookout environment protection technology co.,Ltd
++100000-1FFFFF     (base 16)		Sichuan lookout environment protection technology co.,Ltd
++				No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone
++				Chengdu  Sichuan  610052
++				CN
++
++80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
++				Wuhan  Hubei  430073
++				CN
++
+ 20-85-93   (hex)		Great Lite International
+ 700000-7FFFFF     (base 16)		Great Lite International
+ 				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
+@@ -22970,12 +23672,6 @@ CC-4F-5C   (hex)		Dtrovision
+ 				Fair Lawn  NJ  07410
+ 				US
+ 
+-CC-4F-5C   (hex)		Buttons (Beijing) Technology Limited
+-E00000-EFFFFF     (base 16)		Buttons (Beijing) Technology Limited
+-				Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District
+-				Beijing    100101
+-				CN
+-
+ CC-4F-5C   (hex)		AZ-TECHNOLOGY SDN BHD
+ A00000-AFFFFF     (base 16)		AZ-TECHNOLOGY SDN BHD
+ 				A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
+@@ -23180,12 +23876,6 @@ A0-02-4A   (hex)		Vitec Imaging Solutions Spa
+ 				Cassola  Vicenza  36022
+ 				IT
+ 
+-78-D4-F1   (hex)		Cartender
+-100000-1FFFFF     (base 16)		Cartender
+-				Via della Meccanica 2a
+-				Padova  PD  35127
+-				IT
+-
+ 78-D4-F1   (hex)		Jiangsu byzoro intelligent technology Co.,Ltd
+ B00000-BFFFFF     (base 16)		Jiangsu byzoro intelligent technology Co.,Ltd
+ 				Room 301, Building D, Yunmi City, No.19 Ningshuang Road, Yuhuatai District
+@@ -23923,3 +24613,201 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				Matam Scientific Industries Center,   Building 8.2
+ 				Mail box 15123  Haifa  3508409
+ 				IL
++
++10-54-D2   (hex)		Lanao Communication Technology Limited
++600000-6FFFFF     (base 16)		Lanao Communication Technology Limited
++				#B2, Zhongbaotong Creative Park Changfa West Road No.34 Bantian
++				Shenzhen    518029
++				CN
++
++0C-86-29   (hex)		Ag Express Electronics
++400000-4FFFFF     (base 16)		Ag Express Electronics
++				6280 NE 14th St
++				Des Moines  IA  50313
++				US
++
++6C-93-08   (hex)		Liberty AV Solutions
++700000-7FFFFF     (base 16)		Liberty AV Solutions
++				1490 Garden of the Gods Road
++				Colorado Springs  CO  80907
++				US
++
++6C-93-08   (hex)		Uconfree technology(shenzhen)limited
++600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
++				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
++				SHENZHEN    518111
++				CN
++
++0C-86-29   (hex)		Annapurna labs
++300000-3FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++6C-93-08   (hex)		Hangzhou Risco System Co.,Ltd
++800000-8FFFFF     (base 16)		Hangzhou Risco System Co.,Ltd
++				No. 19, Naxian street, Liangzhu street, Yuhang District
++				Hangzhou City  Zhejiang Province  31000
++				CN
++
++30-43-D7   (hex)		Bodhi
++A00000-AFFFFF     (base 16)		Bodhi
++				3150 W. Prospect Road, Suite 330
++				Fort Lauderdale  FL  33309
++				US
++
++6C-93-08   (hex)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
++200000-2FFFFF     (base 16)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
++				Room 103,1st F,unit A,Buliding 3,No. 8,Xiyuan 1st Road,Sandun Town,Xihu District
++				HANGZHOU  ZHEJIANG  310000
++				CN
++
++30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
++800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
++				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
++				Shanghai    202150
++				CN
++
++30-43-D7   (hex)		PK Solutions LLC
++900000-9FFFFF     (base 16)		PK Solutions LLC
++				10811 E Harry
++				Wichita  KS  67207
++				US
++
++30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
++400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
++				1749 Old Meadow Rd.
++				McLean  VA  22102
++				US
++
++38-1F-26   (hex)		NOITAC sp. z o.o. sp.k.
++600000-6FFFFF     (base 16)		NOITAC sp. z o.o. sp.k.
++				Szlak 28/3
++				Kraków    31-153
++				PL
++
++38-1F-26   (hex)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
++000000-0FFFFF     (base 16)		JAESUNG INFORMATION & COMMUNICATION CO.LTD
++				41-69, POWOL SAEMALGIL, YANG YANG-EUP
++				YANG YANG GUN    25017
++				KR
++
++38-1F-26   (hex)		Deutronic Elektronik GmbH
++B00000-BFFFFF     (base 16)		Deutronic Elektronik GmbH
++				Deutronicstraße 5
++				Adlkofen  Bayern  84166
++				DE
++
++38-1F-26   (hex)		Annapurna labs
++E00000-EFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++38-1F-26   (hex)		RCE systems s.r.o.
++700000-7FFFFF     (base 16)		RCE systems s.r.o.
++				Svatopluka Cecha 2008/1d
++				Brno  CR  61200
++				CZ
++
++38-1F-26   (hex)		Sercomm Corporation.
++A00000-AFFFFF     (base 16)		Sercomm Corporation.
++				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
++				Miao-Lih Hsuan    115
++				TW
++
++30-43-D7   (hex)		Motec GmbH
++B00000-BFFFFF     (base 16)		Motec GmbH
++				287 27 Road
++				Grand Junction  CO  81503
++				US
++
++CC-4F-5C   (hex)		Beijing Techao Weijia Technology Limited
++E00000-EFFFFF     (base 16)		Beijing Techao Weijia Technology Limited
++				Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District
++				Beijing    100101
++				CN
++
++1C-59-74   (hex)		Council Rock
++A00000-AFFFFF     (base 16)		Council Rock
++				11 Centre Park
++				Rochester    14614
++				US
++
++C4-A1-0E   (hex)		Hainan World Electronic Science and Techology Co.,Ltd
++600000-6FFFFF     (base 16)		Hainan World Electronic Science and Techology Co.,Ltd
++				Room 1502,15th Floor,Building 20,NO.487 Tianlin Road,Shanghai,200233 China
++				Shanghai  Shanghai  200233
++				CN
++
++C4-A1-0E   (hex)		Jiangsu Perceive World Technology Co.,Ltd.
++A00000-AFFFFF     (base 16)		Jiangsu Perceive World Technology Co.,Ltd.
++				4-5F,Hengsheng Science Park 70#,Zhonghui Ave 1588#,HuiShan District,Wuxi,Jiangsu,China
++				Wu xi  Jiangsu  214181
++				CN
++
++78-D4-F1   (hex)		Silla Industries
++100000-1FFFFF     (base 16)		Silla Industries
++				Via della Meccanica 2a
++				Padova  PD  35127
++				IT
++
++18-A5-9C   (hex)		Cuman
++100000-1FFFFF     (base 16)		Cuman
++				Al-Farabi 97/1
++				Nur-Sultan    010000
++				KZ
++
++C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
++900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
++				No.211 Tiangu 8th Road, High-tech Zone
++				Xi 'an   Shaanxi  710065
++				CN
++
++6C-15-24   (hex)		STERIS
++A00000-AFFFFF     (base 16)		STERIS
++				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
++				Bishops Stortford  herts  CM23 5GZ
++				GB
++
++C4-A1-0E   (hex)		Alio, Inc
++E00000-EFFFFF     (base 16)		Alio, Inc
++				10901 W. 120th Ave, Suite 380
++				Bloomfield  CO  80021
++				US
++
++70-50-E7   (hex)		Wall Box Chargers, S.L.
++500000-5FFFFF     (base 16)		Wall Box Chargers, S.L.
++				Paseo Castellana 95, 28 floor
++				Madrid  Madrid  28046
++				ES
++
++70-50-E7   (hex)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
++A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company
++				D01, Zone D, No. 6 (Yishun), Huangcun North Road, Tianhe District
++				Guangzhou    510660
++				CN
++
++70-50-E7   (hex)		Electronic's Time SRL
++200000-2FFFFF     (base 16)		Electronic's Time SRL
++				Via Madonna Piccola 32R/Q
++				Martina Franca  Taranto  74015
++				IT
++
++70-50-E7   (hex)		Yoctopuce
++700000-7FFFFF     (base 16)		Yoctopuce
++				Route de Cartigny 33
++				Cartigny    1236
++				CH
++
++70-50-E7   (hex)		Skychers Creations ShenZhen Limited
++300000-3FFFFF     (base 16)		Skychers Creations ShenZhen Limited
++				Room 907A, 9/F, Block T2, FongDa City, Longjing Village, Longzhu Avenue, Nanshan District
++				Shenzhen  Guangdong  518073
++				CN
++
++70-50-E7   (hex)		Elastics.cloud
++900000-9FFFFF     (base 16)		Elastics.cloud
++				1730 North First Street, 5th Floor
++				San Jose  CA  95112
++				US
+diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
+index d6fd58e50a..6a21795559 100644
+--- a/hwdb.d/ma-small.txt
++++ b/hwdb.d/ma-small.txt
+@@ -5687,6 +5687,12 @@ F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
+ 				Shanghai    200241
+ 				CN
+ 
++8C-1F-64   (hex)		Shenzhen zhushida Technology lnformation Co.,Ltd
++A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
++				1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, 
++				SHENZHEN    518000
++				CN
++
+ 8C-1F-64   (hex)		EnviroNode IoT Solutions
+ 1AF000-1AFFFF     (base 16)		EnviroNode IoT Solutions
+ 				4 Malvern  Avenue
+@@ -5699,6 +5705,204 @@ F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
+ 				Weyarn  Bayern  83629
+ 				DE
+ 
++8C-1F-64   (hex)		Gateview Technologies
++B7B000-B7BFFF     (base 16)		Gateview Technologies
++				 104 White St #201
++				Wake Forest    27587
++				US
++
++8C-1F-64   (hex)		Suntech Engineering
++7D3000-7D3FFF     (base 16)		Suntech Engineering
++				30, Gukgasandan-daero 34-gil, Guji-myeon, Dalseong-gun, Daegu, Republic of Korea
++				Daegu    43008
++				KR
++
++8C-1F-64   (hex)		Ascon Tecnologic S.r.l.
++FF6000-FF6FFF     (base 16)		Ascon Tecnologic S.r.l.
++				via Indipendenza, 56
++				Vigevano  PV  27029
++				IT
++
++8C-1F-64   (hex)		Delta Computers LLC.
++59F000-59FFFF     (base 16)		Delta Computers LLC.
++				Office 22/10, room part 22, room IV, floor 3, 41A, 3-rd Parkovaya str.
++				Moscow    105425
++				RU
++
++8C-1F-64   (hex)		Newtec A/S
++BF0000-BF0FFF     (base 16)		Newtec A/S
++				Stærmosegårdsvej  18
++				Odense SV  Region Syd  5230
++				DK
++
++8C-1F-64   (hex)		Onto Innovation
++FBA000-FBAFFF     (base 16)		Onto Innovation
++				16 Jonspin rd
++				Wilmington  MA  01887
++				US
++
++8C-1F-64   (hex)		Becton Dickinson
++775000-775FFF     (base 16)		Becton Dickinson
++				7 Loveton Circle
++				Sparks  MD  21152
++				US
++
++8C-1F-64   (hex)		FIBERME COMMUNICATIONS LLC
++C68000-C68FFF     (base 16)		FIBERME COMMUNICATIONS LLC
++				1749 Old Meadow Rd.
++				McLean  VA  22102
++				US
++
++8C-1F-64   (hex)		TechArgos
++BFB000-BFBFFF     (base 16)		TechArgos
++				Nizhnyaya Krasnoselskaya Str. 35-64
++				Moscow     105066
++				RU
++
++8C-1F-64   (hex)		DAVE SRL
++967000-967FFF     (base 16)		DAVE SRL
++				VIA TALPONEDO 29/A
++				PORCIA  PORDENONE  330850
++				IT
++
++8C-1F-64   (hex)		e.kundenservice Netz GmbH
++855000-855FFF     (base 16)		e.kundenservice Netz GmbH
++				Steindamm 100
++				Hamburg    20099
++				DE
++
++8C-1F-64   (hex)		Meiryo Denshi Corp.
++EB5000-EB5FFF     (base 16)		Meiryo Denshi Corp.
++				38-23 higashi maeda
++				Nishin City  Aichi  470-0124
++				JP
++
++8C-1F-64   (hex)		Baker Hughes EMEA
++40E000-40EFFF     (base 16)		Baker Hughes EMEA
++				Sensing House, Shannon Free Zone East
++				Shannon  Co. Clare  V14 V99
++				IE
++
++8C-1F-64   (hex)		Calnex Solutions plc
++703000-703FFF     (base 16)		Calnex Solutions plc
++				Oracle Campus
++				 Linlithgow  West Lothian  EH49 7LR
++				GB
++
++8C-1F-64   (hex)		LLC NTPC
++660000-660FFF     (base 16)		LLC NTPC
++				Kharkovsky alley 36g, office room 1
++				Belgorod    308012
++				RU
++
++8C-1F-64   (hex)		Renukas Castle Hard- and Software
++4E5000-4E5FFF     (base 16)		Renukas Castle Hard- and Software
++				Renukas Castle, 35th Ward, Kalyan Nagar, Ring Road, near Lions School
++				Gadag  Karnataka  582103
++				IN
++
++8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
++F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
++				Gerberstrasse 49
++				Backnang    71522
++				DE
++
++8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
++059000-059FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
++				Winnettener Straße 6
++				Dinkelsbuehl  Bavaria  91550
++				DE
++
++8C-1F-64   (hex)		JBF
++F45000-F45FFF     (base 16)		JBF
++				via goretta 90
++				mappano  torino  10079
++				IT
++
++8C-1F-64   (hex)		REFU Storage System GmbH
++53B000-53BFFF     (base 16)		REFU Storage System GmbH
++				Marktstraße 185
++				Pfullingen    72793
++				DE
++
++8C-1F-64   (hex)		DEUTA-WERKE GmbH
++883000-883FFF     (base 16)		DEUTA-WERKE GmbH
++				Paffrather Str. 140
++				Bergisch Gladbach  North Rhine-Westphalia  51465
++				DE
++
++8C-1F-64   (hex)		Micro Electroninc Products
++765000-765FFF     (base 16)		Micro Electroninc Products
++				TT Vasumweg 150
++				Amsterdam    1033 SH
++				NL
++
++8C-1F-64   (hex)		Logical Product
++622000-622FFF     (base 16)		Logical Product
++				2-25-5,matoba,minamiku
++				Fukuoka  Fukuoka  811-1314
++				JP
++
++8C-1F-64   (hex)		Dan Smith LLC
++4D6000-4D6FFF     (base 16)		Dan Smith LLC
++				4638 Cameron Ridge Drive, Apt 138
++				Indianapolis  IN  46240
++				US
++
++8C-1F-64   (hex)		INVIXIUM ACCESS INC
++274000-274FFF     (base 16)		INVIXIUM ACCESS INC
++				111 Gordon Baker Road, Suite #300
++				Toronto  Ontario  M2H 3R1
++				CA
++
++8C-1F-64   (hex)		Sicon srl
++B3B000-B3BFFF     (base 16)		Sicon srl
++				Via Sila 1/3
++				Isola Vicentina  Vicenza  36033
++				IT
++
++8C-1F-64   (hex)		Sanchar Telesystems limited
++958000-958FFF     (base 16)		Sanchar Telesystems limited
++				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
++				New Delhi  Delhi  110020
++				IN
++
++8C-1F-64   (hex)		Tantronic AG
++1EF000-1EFFFF     (base 16)		Tantronic AG
++				Gewerbering 12
++				Wohlen  AG  5610
++				CH
++
++8C-1F-64   (hex)		Tunstall A/S
++F2C000-F2CFFF     (base 16)		Tunstall A/S
++				Niels Bohrs vej 42
++				Stilling  Skanderborg  8660
++				DK
++
++8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
++0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
++				644-1 Tenjingoe,Ooaza-Kamiishizuka
++				Oyama  Tochigi  323-0063
++				JP
++
++8C-1F-64   (hex)		Rodgers Instruments US LLC
++A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
++				6497 NE Croeni Avenue
++				Hillsboro    97124
++				US
++
++8C-1F-64   (hex)		Potter Electric Signal Company
++316000-316FFF     (base 16)		Potter Electric Signal Company
++				1609 Park 370 Place
++				Hazelwood  MO  63042
++				US
++
++8C-1F-64   (hex)		Diffraction Limited
++8CF000-8CFFFF     (base 16)		Diffraction Limited
++				59 Grenfell Crescent, Unit B
++				Ottawa  ON  K2G 0G3
++				CA
++
+ 70-B3-D5   (hex)		EVCO SPA
+ A80000-A80FFF     (base 16)		EVCO SPA
+ 				VIA FELTRE N. 81
+@@ -9089,12 +9293,6 @@ CF3000-CF3FFF     (base 16)		Mesh Motion Inc
+ 				Kocaeli  Kocaeli  41470
+ 				TR
+ 
+-70-B3-D5   (hex)		Nke
+-E75000-E75FFF     (base 16)		Nke
+-				Rue Gutenberg
+-				Hennebont  Brittany  56700
+-				FR
+-
+ 70-B3-D5   (hex)		UNISOR MULTISYSTEMS LTD
+ 05F000-05FFFF     (base 16)		UNISOR MULTISYSTEMS LTD
+ 				HAYETZIRA 6 ST
+@@ -11063,12 +11261,6 @@ AD2000-AD2FFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				Tehran    1533655514
+ 				IR
+ 
+-8C-1F-64   (hex)		Flextronics International Kft.
+-A4C000-A4CFFF     (base 16)		Flextronics International Kft.
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
+-
+ 8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+ 9F2000-9F2FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+ 				Winnettener Straße 6
+@@ -11267,6 +11459,204 @@ E02000-E02FFF     (base 16)		ITS Teknik A/S
+ 				Vejle    7100
+ 				DK
+ 
++8C-1F-64   (hex)		NETGEN HITECH SOLUTIONS LLP
++ED9000-ED9FFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
++				B 301 KNOX PLAZA MALAD WEST
++				MUMBAI  MAHARASHTRA  400064
++				IN
++
++8C-1F-64   (hex)		Wolfspyre Labs
++9D4000-9D4FFF     (base 16)		Wolfspyre Labs
++				5007 Highland Ct #WPL-IEEE
++				Austin  TX  78731
++				US
++
++8C-1F-64   (hex)		Vekto
++4AC000-4ACFFF     (base 16)		Vekto
++				Televisieweg 75
++				Almere    1322AK
++				NL
++
++8C-1F-64   (hex)		SpectraDynamics, Inc.
++581000-581FFF     (base 16)		SpectraDynamics, Inc.
++				1849 Cherry St.
++				Louisville  CO  80027
++				US
++
++8C-1F-64   (hex)		IO Master Technology
++BD3000-BD3FFF     (base 16)		IO Master Technology
++				4F?1 No. 258, Lian  Cheng Rd, Zhong He Dist
++				New Taipei City 235  Taipei  235
++				TW
++
++8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
++05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
++				Escadstr. 1
++				Pfullendorf    88630
++				DE
++
++8C-1F-64   (hex)		TIFLEX
++194000-194FFF     (base 16)		TIFLEX
++				10 Avenue de la 1ère Armée Française Rhin - Danube
++				PONCIN    01450
++				FR
++
++8C-1F-64   (hex)		Neuralog LP
++115000-115FFF     (base 16)		Neuralog LP
++				4800 Sugar Grove Blvd., Ste. 200
++				Stafford  TX  77479
++				US
++
++8C-1F-64   (hex)		Sichuan Aiyijan Technology Company Ltd.
++40C000-40CFFF     (base 16)		Sichuan Aiyijan Technology Company Ltd.
++				C1102 No. 65 Wuke West 1st Rd Wuhou District
++				Chengdu  Sichuan  61000
++				CN
++
++8C-1F-64   (hex)		Rapidev Pvt Ltd
++A44000-A44FFF     (base 16)		Rapidev Pvt Ltd
++				Office # G201-204 NSTP, NUST ISLAMABAD
++				ISLAMABAD  Islamabad Capital Territory  44000
++				PK
++
++8C-1F-64   (hex)		Opgal Optronic Industries ltd
++35C000-35CFFF     (base 16)		Opgal Optronic Industries ltd
++				Hanapach 11
++				Karmiel     2165317
++				IL
++
++8C-1F-64   (hex)		Alifax S.r.l.
++C24000-C24FFF     (base 16)		Alifax S.r.l.
++				VIA PETRARCA 2/1
++				POLVERARA  PD  35020
++				IT
++
++8C-1F-64   (hex)		Flextronics International Kft
++A4C000-A4CFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
++
++8C-1F-64   (hex)		Pietro Fiorentini Spa
++8D9000-8D9FFF     (base 16)		Pietro Fiorentini Spa
++				Via Armenia, 16
++				San Vito al Tagliamento (PN)    33078
++				IT
++
++8C-1F-64   (hex)		Flextronics International Kft
++D02000-D02FFF     (base 16)		Flextronics International Kft
++				38. Zrinyi Str.
++				Zalaegerszeg  Zala  8900
++				HU
++
++8C-1F-64   (hex)		VMukti Solutions Private Limited
++E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
++				3-4, Shivalik Plaza, Panjrapole, Ambawadi
++				Ahmedabad  Gujarat  380015
++				IN
++
++8C-1F-64   (hex)		Autark GmbH
++943000-943FFF     (base 16)		Autark GmbH
++				Platz des Friedens 8
++				Baunatal  Hessen  D-34225
++				DE
++
++8C-1F-64   (hex)		ACTELSER S.L.
++3F4000-3F4FFF     (base 16)		ACTELSER S.L.
++				CARRER ALBERT EINSTEIN, 44
++				TERRASSA  BARCELONA  08223
++				ES
++
++8C-1F-64   (hex)		Timegate Instruments Ltd.
++7A7000-7A7FFF     (base 16)		Timegate Instruments Ltd.
++				Tutkijantie 7
++				Oulu    90540
++				FI
++
++8C-1F-64   (hex)		GSP Sprachtechnologie GmbH
++FED000-FEDFFF     (base 16)		GSP Sprachtechnologie GmbH
++				Teltowkanalstraße 1
++				Berlin    12247
++				DE
++
++8C-1F-64   (hex)		Wartsila Voyage Limited
++38E000-38EFFF     (base 16)		Wartsila Voyage Limited
++				13-18 City Quay
++				Dublin 2    D02 ED70
++				IE
++
++8C-1F-64   (hex)		AZD Praha s.r.o., ZOZ Olomouc
++FA2000-FA2FFF     (base 16)		AZD Praha s.r.o., ZOZ Olomouc
++				Zeleznicni
++				Olomouc  czech republic  77900
++				CZ
++
++8C-1F-64   (hex)		Cubic ITS, Inc. dba GRIDSMART Technologies
++52D000-52DFFF     (base 16)		Cubic ITS, Inc. dba GRIDSMART Technologies
++				10545 Hardin Valley Rd
++				Knoxville  TN  37932
++				US
++
++70-B3-D5   (hex)		Watteco
++E75000-E75FFF     (base 16)		Watteco
++				Rue Gutenberg
++				Hennebont  Brittany  56700
++				FR
++
++8C-1F-64   (hex)		Toolplanet Co., Ltd.
++54F000-54FFFF     (base 16)		Toolplanet Co., Ltd.
++				43-2 Himigaike-cho
++				Gifu-shi  Gifu  500-8122
++				JP
++
++8C-1F-64   (hex)		AIDirections
++702000-702FFF     (base 16)		AIDirections
++				Torch Tower
++				Dubai  Dubai  74249
++				AE
++
++8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
++AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
++				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
++				Beijing  Beijing  100081
++				CN
++
++8C-1F-64   (hex)		Weidmann Tecnologia Electrica de Mexico
++7B7000-7B7FFF     (base 16)		Weidmann Tecnologia Electrica de Mexico
++				Oscar Flores Tapia No. 304, Col. El Llano
++				Arteaga   Coahuila  25350 
++				MX
++
++8C-1F-64   (hex)		Ashinne Technology Co., Ltd
++E7C000-E7CFFF     (base 16)		Ashinne Technology Co., Ltd
++				10F-1, No.18, Lane 609, Sec.5, Chung Hsin Rd., San Chung Dist.
++				New Taipei City    241
++				TW
++
++8C-1F-64   (hex)		Forever Engineering Systems Pvt. Ltd.
++AC5000-AC5FFF     (base 16)		Forever Engineering Systems Pvt. Ltd.
++				B-817, 8th floor, Advant Navis Business Park, Sector-142
++				NOIDA  Uttar Pradesh  201301
++				IN
++
++8C-1F-64   (hex)		AMESS
++EEA000-EEAFFF     (base 16)		AMESS
++				C-1501, 60, Haan-ro
++				Gwangmyeong-si  Gyeonggi-do  14322
++				KR
++
++8C-1F-64   (hex)		EVERNET CO,.LTD TAIWAN
++B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
++				12 F., No. 206-2, Sec. 2, Daxing W. Rd
++				Taoyuan  Taiwan   330
++				TW
++
++8C-1F-64   (hex)		Farmote Limited
++017000-017FFF     (base 16)		Farmote Limited
++				92 Collingwood Street, Nelson
++				Nelson  Nelson  7010
++				NZ
++
+ 70-B3-D5   (hex)		System West dba ICS Electronics
+ E06000-E06FFF     (base 16)		System West dba ICS Electronics
+ 				7034 Commerce Circle Suite A
+@@ -16826,6 +17216,150 @@ E61000-E61FFF     (base 16)		Stange Elektronik GmbH
+ 				yokohama  kanagawa  2220033
+ 				JP
+ 
++8C-1F-64   (hex)		Beijing Tongtech Technology Co., Ltd.
++12B000-12BFFF     (base 16)		Beijing Tongtech Technology Co., Ltd.
++				Room 3017, Building 1, Hongfu Science Park, Changping District
++				Beijing  Beijing  100029
++				CN
++
++8C-1F-64   (hex)		EOLANE
++911000-911FFF     (base 16)		EOLANE
++				ZI DU VAL D OMBREE
++				COMBREE  -  49520
++				FR
++
++8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
++429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
++				P. O.  Box 6863 Rodeløkka
++				Oslo  Oslo  0504
++				NO
++
++8C-1F-64   (hex)		Huz Electronics Ltd
++BC2000-BC2FFF     (base 16)		Huz Electronics Ltd
++				10 Avondale road
++				Cwmbran  S Wales  NP44 1UD
++				GB
++
++8C-1F-64   (hex)		Microlynx Systems Ltd
++F3C000-F3CFFF     (base 16)		Microlynx Systems Ltd
++				#107, 1925 - 18 Ave NE
++				Calgary  AB  T2E 7T8
++				CA
++
++8C-1F-64   (hex)		ANDDORO LLC
++6F9000-6F9FFF     (base 16)		ANDDORO LLC
++				1430 Broadway NY 
++				New York  NY  10018
++				US
++
++8C-1F-64   (hex)		GIORDANO CONTROLS SPA
++807000-807FFF     (base 16)		GIORDANO CONTROLS SPA
++				VIA PARALLELA 2/4
++				VILLA BARTOLOMEA  IT  37049
++				IT
++
++8C-1F-64   (hex)		VEILUX INC.
++045000-045FFF     (base 16)		VEILUX INC.
++				802 GREENVIEW DR. STE 200
++				GRAND PRAIRIE    75050
++				US
++
++8C-1F-64   (hex)		Cleanwatts Digital, S.A.
++0E6000-0E6FFF     (base 16)		Cleanwatts Digital, S.A.
++				Ladeira da Paula, 6
++				Antanhol-Coimbra    3040-574
++				PT
++
++8C-1F-64   (hex)		FORSEE POWER
++0AF000-0AFFFF     (base 16)		FORSEE POWER
++				2 chemin du ruisseau
++				ECULLY    69130
++				FR
++
++8C-1F-64   (hex)		Sakura Seiki Co.,Ltd.
++28C000-28CFFF     (base 16)		Sakura Seiki Co.,Ltd.
++				75-5, Imojiya
++				Chikuma-city  Nagano Prefecture  387-0015
++				JP
++
++8C-1F-64   (hex)		Indefac company
++E64000-E64FFF     (base 16)		Indefac company
++				Ka-211, Whangmool ro 190, DongDaemoon Gu 
++				Seoul    02622
++				KR
++
++8C-1F-64   (hex)		Jide Car Rastreamento e Monitoramento LTDA
++22E000-22EFFF     (base 16)		Jide Car Rastreamento e Monitoramento LTDA
++				Rua Arcipreste Andrade 630
++				São Paulo  São Paulo  04268020
++				BR
++
++8C-1F-64   (hex)		Real Digital
++3B2000-3B2FFF     (base 16)		Real Digital
++				655 SW James Pl
++				Pullman  WA  99163
++				US
++
++8C-1F-64   (hex)		Fingoti Limited
++CD9000-CD9FFF     (base 16)		Fingoti Limited
++				Barnam Ham Farm
++				Bickleigh, Plymouth  Devon  PL6 7AL
++				GB
++
++8C-1F-64   (hex)		Grace Design/Lunatec LLC
++FB7000-FB7FFF     (base 16)		Grace Design/Lunatec LLC
++				4689 Ute Highway
++				Longmont  CO  80503
++				US
++
++8C-1F-64   (hex)		Farmobile LLC
++672000-672FFF     (base 16)		Farmobile LLC
++				4001 W. 114th, Suite 300
++				Leawood  KS  66251
++				US
++
++8C-1F-64   (hex)		Zhuhai Yunzhou Intelligence Technology Ltd.
++254000-254FFF     (base 16)		Zhuhai Yunzhou Intelligence Technology Ltd.
++				Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town
++				Zhuhai  Guangdong  519000
++				CN
++
++8C-1F-64   (hex)		AIQuatro
++AC0000-AC0FFF     (base 16)		AIQuatro
++				143B
++				São Paulo  São Paulo  02433-070
++				BR
++
++8C-1F-64   (hex)		Active Research Limited
++0C0000-0C0FFF     (base 16)		Active Research Limited
++				21 Harwell Road
++				Poole  Dorset  BH17 0GE
++				GB
++
++8C-1F-64   (hex)		Beijing Redlink Information Technology Co., Ltd.
++D9A000-D9AFFF     (base 16)		Beijing Redlink Information Technology Co., Ltd.
++				Room 5, 2nd floor, Deshi Building, Haidian District, Beijing, China
++				Beijing    100085
++				CN
++
++8C-1F-64   (hex)		Sphere Com Services Pvt Ltd
++A6A000-A6AFFF     (base 16)		Sphere Com Services Pvt Ltd
++				Sphere Com Services Pvt Ltd, F-16-22, pankaj plaza, plot-no-7, Sector - 12, Dwarka, New Delhi - 110075, New Delhi
++				New Delhi  Delhi  110075
++				IN
++
++8C-1F-64   (hex)		suzhou yuecrown Electronic Technology Co.,LTD
++CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
++				B6,no.1599,West Chengbei Road,Gusu District
++				suzhou  jiangsu  215000
++				CN
++
++8C-1F-64   (hex)		Paragraf
++01A000-01AFFF     (base 16)		Paragraf
++				7-8 West Newlands
++				Somersham  Cambridgeshire  PE28 3EB
++				GB
++
+ 70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+ BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				3-3-1
+@@ -19259,12 +19793,6 @@ E9B000-E9BFFF     (base 16)		NUMATA R&D Co.,Ltd
+ 				Osaki city    989-6161
+ 				JP
+ 
+-70-B3-D5   (hex)		Active Research Limited
+-6A0000-6A0FFF     (base 16)		Active Research Limited
+-				Unit 5, Wessex Trade Centre, Ringwood Road
+-				Poole  Dorset  BH12 3PF
+-				GB
+-
+ 70-B3-D5   (hex)		Scame Sistemi srl
+ 2F3000-2F3FFF     (base 16)		Scame Sistemi srl
+ 				Via Lombardia 5
+@@ -21287,12 +21815,6 @@ E73000-E73FFF     (base 16)		Zeus Control Systems Ltd
+ 				Nuneaton    CV13 0PE
+ 				GB
+ 
+-70-B3-D5   (hex)		Flextronics International Kft.
+-E2F000-E2FFFF     (base 16)		Flextronics International Kft.
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
+-
+ 70-B3-D5   (hex)		Beijing Lihong Create Co., Ltd.
+ ED3000-ED3FFF     (base 16)		Beijing Lihong Create Co., Ltd.
+ 				Changping, Zhenxinglu. 46
+@@ -22328,12 +22850,6 @@ CCB000-CCBFFF     (base 16)		RealD, Inc.
+ 				Wakefield  West Yorkshire  WF1 2ED
+ 				GB
+ 
+-8C-1F-64   (hex)		Flextronics International Kft.
+-F5C000-F5CFFF     (base 16)		Flextronics International Kft.
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
+-
+ 8C-1F-64   (hex)		Bulwark
+ 6A8000-6A8FFF     (base 16)		Bulwark
+ 				2/3 Sahra Grove
+@@ -22484,12 +23000,174 @@ EFB000-EFBFFF     (base 16)		WARECUBE,INC
+ 				Suwon-si    16648
+ 				KR
+ 
++8C-1F-64   (hex)		Missing Link Electronics, Inc.
++47A000-47AFFF     (base 16)		Missing Link Electronics, Inc.
++				2880 Zanker Road, Ste 203
++				San Jose    95134
++				US
++
+ 8C-1F-64   (hex)		Gemini Electronics B.V.
+ 81A000-81AFFF     (base 16)		Gemini Electronics B.V.
+ 				Burg. van Meeuwenstraat 14
+ 				Beek  Limburg  6191 ND
+ 				NL
+ 
++8C-1F-64   (hex)		AixControl GmbH
++08F000-08FFFF     (base 16)		AixControl GmbH
++				Sonnenweg 15
++				Aachen  NRW  52070
++				DE
++
++8C-1F-64   (hex)		Zilica Limited
++A1B000-A1BFFF     (base 16)		Zilica Limited
++				8 Hasting Close, Bray, Bray
++				Maidenhead Bray  Berks  SL6 2DA
++				GB
++
++8C-1F-64   (hex)		REO AG
++73C000-73CFFF     (base 16)		REO AG
++				Brühlerstr. 100
++				Solingen    42657
++				DE
++
++8C-1F-64   (hex)		Borrell USA Corp
++38B000-38BFFF     (base 16)		Borrell USA Corp
++				240 RIGGS AV
++				MERCED    95341
++				US
++
++8C-1F-64   (hex)		NOVA Products GmbH
++BD6000-BD6FFF     (base 16)		NOVA Products GmbH
++				Thierschstr. 11
++				Munich    80538
++				DE
++
++8C-1F-64   (hex)		ECO-ADAPT
++C38000-C38FFF     (base 16)		ECO-ADAPT
++				39 Rue de Chateaudun
++				Paris  Ile-de-France  75009
++				FR
++
++8C-1F-64   (hex)		Flextronics International Kft
++F5C000-F5CFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
++
++70-B3-D5   (hex)		Flextronics International Kft
++E2F000-E2FFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
++
++8C-1F-64   (hex)		ADETEC SAS
++AE8000-AE8FFF     (base 16)		ADETEC SAS
++				8 rue de l'Angoumois
++				ARGENTEUIL    95100
++				FR
++
++8C-1F-64   (hex)		AML
++634000-634FFF     (base 16)		AML
++				2190 Regal Parkway
++				Euless  TX  76040
++				US
++
++8C-1F-64   (hex)		In-lite Design BV
++557000-557FFF     (base 16)		In-lite Design BV
++				Stephensonweg 18
++				Gorinchem  Zuid-Holland  4207 HB
++				NL
++
++8C-1F-64   (hex)		SMS group GmbH
++FF4000-FF4FFF     (base 16)		SMS group GmbH
++				Hirtenwiese 4
++				Elkenroth  Rhineland-Palantine  57578
++				DE
++
++8C-1F-64   (hex)		CyberneX Co., Ltd
++A6D000-A6DFFF     (base 16)		CyberneX Co., Ltd
++				Kamata, 5-26-8, Ardel Kamata #1107
++				O-taku  Tokyo-to  1440052
++				JP
++
++8C-1F-64   (hex)		Enestone Corporation
++2FD000-2FDFFF     (base 16)		Enestone Corporation
++				3-24-5 Shin yokohama Kohoku
++				YOKOHAMA  Kanagawa  222-0033
++				JP
++
++70-B3-D5   (hex)		Active Research Limited
++6A0000-6A0FFF     (base 16)		Active Research Limited
++				21 Harwell Road
++				Poole  Dorset  BH17 0GE
++				GB
++
++8C-1F-64   (hex)		SiEngine Technology Co., Ltd.
++F7A000-F7AFFF     (base 16)		SiEngine Technology Co., Ltd.
++				6th floor,Building 23,No.1999,Yi Shan Road
++				Shanghai  Shanghai  201114
++				CN
++
++8C-1F-64   (hex)		Vesperix Corporation
++8E9000-8E9FFF     (base 16)		Vesperix Corporation
++				803 West Broad St Suite 520
++				Falls Church  VA  22046
++				US
++
++8C-1F-64   (hex)		SOCNOC AI Inc
++7DE000-7DEFFF     (base 16)		SOCNOC AI Inc
++				 2800 Innovation Avenue, Innovation Industrial Park?
++				Hefei  Anhui  230000
++				CN
++
++8C-1F-64   (hex)		Sontay Ltd.
++697000-697FFF     (base 16)		Sontay Ltd.
++				Four Elms Road
++				Edenbridge    TN86AB
++				GB
++
++8C-1F-64   (hex)		Lumiplan Duhamel
++C4C000-C4CFFF     (base 16)		Lumiplan Duhamel
++				2 rue de l'industrie
++				Domène  Isère  38420
++				FR
++
++8C-1F-64   (hex)		BRICKMAKERS GmbH
++E5E000-E5EFFF     (base 16)		BRICKMAKERS GmbH
++				Am Plan 14-16
++				Koblenz    56068
++				DE
++
++8C-1F-64   (hex)		AvMap srlu
++84C000-84CFFF     (base 16)		AvMap srlu
++				Viale Zaccagna 6
++				Carrara    54033
++				IT
++
++8C-1F-64   (hex)		Neurable
++B92000-B92FFF     (base 16)		Neurable
++				45 Bromfield St
++				Chicago  IL  60641
++				US
++
++8C-1F-64   (hex)		ADiCo Corporation
++D69000-D69FFF     (base 16)		ADiCo Corporation
++				2045-32, Takaragi-honcho
++				Utsunomiya-shi  Tochigi  320-0075
++				JP
++
++8C-1F-64   (hex)		Wittra Networks AB
++DF8000-DF8FFF     (base 16)		Wittra Networks AB
++				Västra Järnvägsgatan 39th floor(Convendum)
++				Stockholm  Stockholm  111 64
++				SE
++
++8C-1F-64   (hex)		METRONA-Union GmbH
++9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
++				Aidenbachstr. 40
++				München    81379
++				DE
++
+ 70-B3-D5   (hex)		DISMUNTEL SAL
+ 92C000-92CFFF     (base 16)		DISMUNTEL SAL
+ 				Pol ind cotes
+@@ -22952,12 +23630,6 @@ E1F000-E1FFFF     (base 16)		THETA432
+ 				El Segundo  CA  90245
+ 				US
+ 
+-70-B3-D5   (hex)		Root Automation
+-6A2000-6A2FFF     (base 16)		Root Automation
+-				1916 Fort Jones Rd
+-				Yreka  CA  96097
+-				US
+-
+ 70-B3-D5   (hex)		DIEHL Connectivity Solutions
+ 1F1000-1F1FFF     (base 16)		DIEHL Connectivity Solutions
+ 				Stephanstraße 49
+@@ -27934,3 +28606,225 @@ A9A000-A9AFFF     (base 16)		Signasystems Elektronik San. ve Tic. Ltd. Sti.
+ 				2683 151st Place NE
+ 				Redmond  WA  98052
+ 				US
++
++8C-1F-64   (hex)		Pigs Can Fly Labs LLC
++DC0000-DC0FFF     (base 16)		Pigs Can Fly Labs LLC
++				9450 SW Gemini Dr, PMB 41687
++				Beaverton  OR  97008
++				US
++
++8C-1F-64   (hex)		EMBSYS SISTEMAS EMBARCADOS
++FD4000-FD4FFF     (base 16)		EMBSYS SISTEMAS EMBARCADOS
++				AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324
++				MARILIA  SAO PAULO  17512752
++				BR
++
++8C-1F-64   (hex)		Cardinal Scales Manufacturing Co
++DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
++				203 East Daugherty Street
++				Webb City  MO  64870
++				US
++
++8C-1F-64   (hex)		United States Technologies Inc.
++525000-525FFF     (base 16)		United States Technologies Inc.
++				1701 Pollitt Drive
++				Fair Lawn  NJ  07410
++				US
++
++8C-1F-64   (hex)		Rumble, Inc
++837000-837FFF     (base 16)		Rumble, Inc
++				Bluebonnet Ln
++				Austin  TX  78704
++				US
++
++8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
++504000-504FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
++				Helmholtzstraße 31-33
++				Viersen  NRW  41747
++				DE
++
++8C-1F-64   (hex)		PuS GmbH und Co. KG
++4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
++				Hainstr. 13
++				Gera  Germany  07545
++				DE
++
++8C-1F-64   (hex)		Cinetix Srl
++89E000-89EFFF     (base 16)		Cinetix Srl
++				Via Armentera, 8
++				Borgo Valsugana  Trento  38051
++				IT
++
++8C-1F-64   (hex)		ATM SOLUTIONS
++9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
++				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
++				Navi Mumbai  Maharashatra  400709
++				IN
++
++8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
++D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
++				EL3, J BLOCK, M.I.D.C. Bhosari
++				PUNE  Maharastra  411027
++				IN
++
++8C-1F-64   (hex)		Integer.pl S.A.
++A97000-A97FFF     (base 16)		Integer.pl S.A.
++				Wielicka 28
++				Krakow    30-552
++				PL
++
++8C-1F-64   (hex)		Monnit Corporation
++94E000-94EFFF     (base 16)		Monnit Corporation
++				450 South Simmons STE 670
++				Kaysville  UT  84037
++				US
++
++8C-1F-64   (hex)		SASYS e.K.
++1CB000-1CBFFF     (base 16)		SASYS e.K.
++				Spannstiftstr. 16
++				Hagen    58119
++				DE
++
++8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
++F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
++				Felix-Wankel-Str. 13
++				Zaberfeld  Baden-Württemberg  74374
++				DE
++
++8C-1F-64   (hex)		XSENSOR Technology Corp.
++7AA000-7AAFFF     (base 16)		XSENSOR Technology Corp.
++				133 12 Ave SE
++				Calgary  Alberta  T2G 0Z9
++				CA
++
++8C-1F-64   (hex)		MG s.r.l.
++67A000-67AFFF     (base 16)		MG s.r.l.
++				via Monte Bianco, 1
++				Solbiate Olona  VA  21058
++				IT
++
++8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
++A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
++				No.10 Shangdi Road, Haidian District
++				Beijing  Beijing  100085
++				CN
++
++8C-1F-64   (hex)		AMF Medical SA
++F52000-F52FFF     (base 16)		AMF Medical SA
++				Chemin de la Dent-d'Oche 1 A
++				Ecublens VD  Vaud  1024 
++				CH
++
++8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
++01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
++				6600 rue St. Urbain, Suite 300
++				Montreal  Quebec  H2S 3G8
++				CA
++
++8C-1F-64   (hex)		HUPI
++489000-489FFF     (base 16)		HUPI
++				45 allée théodore monod
++				Bidart  Sélectionnez un département / état  64210
++				FR
++
++8C-1F-64   (hex)		Qualitrol LLC
++905000-905FFF     (base 16)		Qualitrol LLC
++				1385 Fairport Rd
++				Fairport  NY  14450
++				US
++
++8C-1F-64   (hex)		WINTUS SYSTEM
++9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
++				E1102, 7 yeonmujang 5ga gil, seongdong-gu
++				SEOUL  SEOUL  04782 
++				KR
++
++8C-1F-64   (hex)		TTC TELEKOMUNIKACE, s.r.o.
++E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
++				Trebohosticka 5
++				Praha 10  Praha  10000
++				CZ
++
++70-B3-D5   (hex)		Root Automation
++6A2000-6A2FFF     (base 16)		Root Automation
++				112 4 H Way
++				Yreka  CA  96097
++				US
++
++8C-1F-64   (hex)		Proterra, Inc
++552000-552FFF     (base 16)		Proterra, Inc
++				1 Whitlee Court
++				Greenville  SC  29607
++				US
++
++8C-1F-64   (hex)		eumig industrie-TV GmbH.
++5B3000-5B3FFF     (base 16)		eumig industrie-TV GmbH.
++				Gewerbeparkstrasse 9
++				Anif  Salzburg  5081
++				AT
++
++8C-1F-64   (hex)		TeraDiode / Panasonic
++2C3000-2C3FFF     (base 16)		TeraDiode / Panasonic
++				30 Upton Dr
++				Wilmington  MA  01887
++				US
++
++8C-1F-64   (hex)		QUERCUS TECHNOLOGIES, S.L.
++D7C000-D7CFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
++				Av. Onze de Setembre 19
++				Reus  Tarragona  43203
++				ES
++
++8C-1F-64   (hex)		SPIT Technology, Inc
++939000-939FFF     (base 16)		SPIT Technology, Inc
++				2F, 91-1, Gyeongui-ro
++				Uijeongbu-si  Gyonggi-do  11652
++				KR
++
++8C-1F-64   (hex)		VECOS Europe B.V.
++C80000-C80FFF     (base 16)		VECOS Europe B.V.
++				ESP 237
++				Eindhoven  Noord-Brabant  5633 AD
++				NL
++
++8C-1F-64   (hex)		EMIT GmbH
++3D1000-3D1FFF     (base 16)		EMIT GmbH
++				Johannes-Mauthe-Straße 14
++				Albstadt  Baden Württemberg  72458
++				DE
++
++8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
++721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
++				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
++				Pune  Maharashtra  411051
++				IN
++
++8C-1F-64   (hex)		JW Froehlich Maschinenfabrik GmbH
++C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
++				Kohlhammerstrasse 18-24
++				Leinfelden-Echterdingen    70771
++				DE
++
++8C-1F-64   (hex)		Power Electronics Espana, S.L.
++D08000-D08FFF     (base 16)		Power Electronics Espana, S.L.
++				Poligono Industrial Carrases. Ronda del camp d Aviacio 4
++				Lliria  Valencia  46160
++				ES
++
++8C-1F-64   (hex)		Mediana
++C6B000-C6BFFF     (base 16)		Mediana
++				Wonju Medical Industry Park, 1650-1 Donghwa-Ri,
++				Wonju-Si  Gangwon-Do  220-801
++				KR
++
++8C-1F-64   (hex)		noah
++B01000-B01FFF     (base 16)		noah
++				Augustusplatz 1-4
++				Leipzig    04109
++				DE
++
++8C-1F-64   (hex)		Nokeval Oy
++E0E000-E0EFFF     (base 16)		Nokeval Oy
++				Rounionkatu 107
++				Nokia    37150
++				FI
+diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
+index 4c99c149f4..19832a58b3 100644
+--- a/hwdb.d/pci.ids
++++ b/hwdb.d/pci.ids
+@@ -1,8 +1,8 @@
+ #
+ #	List of PCI ID's
+ #
+-#	Version: 2021.12.15
+-#	Date:    2021-12-15 03:15:02
++#	Version: 2022.03.22
++#	Date:    2022-03-22 03:15:02
+ #
+ #	Maintained by Albert Pool, Martin Mares, and other volunteers from
+ #	the PCI ID Project at https://pci-ids.ucw.cz/.
+@@ -105,14 +105,24 @@
+ 		0731 7215  JM7200
+ 	9200  JM9200
+ 	920a  JH920
++		0731 920a  JH920
++		0731 920b  JH920-I
++		0731 920c  JH920-M
+ 	920b  JH920-I
+ 	920c  JH920-M
+ 	9210  JM9210
++		0731 9210  JM9210
++		0731 9211  JM9210-I
+ 	9211  JM9210-I
+ 	9230  JM9230
++		0731 9230  JM9230
++		0731 9231  JM9230-I
+ 	9231  JM9231-I
+ 	9250  JM9250
++		0731 9250  JM9250
+ 	930a  JH930-I
++		0731 930a  JH930-I
++		0731 930b  JH930-M
+ 	930b  JH930-M
+ 0777  Ubiquiti Networks, Inc.
+ 0795  Wired Inc.
+@@ -821,14 +831,16 @@
+ 		1028 200c  HBA355i Front
+ 		1028 200d  HBA355e Adapter
+ 		1028 200e  HBA350i MX
++		1028 2170  HBA350i MM
+ 		1028 2175  HBA350i Adapter
++		1028 2197  HBA350i MM LP
+ 		1d49 0205  ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA
+ 		1d49 0206  ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA
+ 		1d49 0207  ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA
+ 		1d49 0208  ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb HBA
+ 		1d49 0209  ThinkSystem 440-8e SAS/SATA PCIe Gen4 12Gb HBA
+-		8086 4050  Storage Controller RS3P4QF160F
+-		8086 4070  Storage Controller RS3P4GF016F
++		8086 4050  Storage Controller RS3P4QF160J
++		8086 4070  Storage Controller RS3P4GF016J
+ 	00e7  Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx
+ # Tampered part
+ 		1028 200b  HBA355i Adapter Tampered
+@@ -932,6 +944,8 @@
+ 	10e2  MegaRAID 12GSAS/PCIe Secure SAS39xx
+ # 9560 16 internal port RAID controller
+ 		1000 4000  MegaRAID 9560-16i
++# 9561 16 internal port RAID controller
++		1000 4002  MegaRAID 9561-16i
+ # 9560 8 internal port RAID controller
+ 		1000 4010  MegaRAID 9560-8i
+ # 9580 8 internal & 8 external port RAID controller
+@@ -965,6 +979,7 @@
+ 		1028 2173  PERC H355 Front
+ 		1028 2174  PERC H350 Mini
+ 		1028 2177  PERC H350 Adapter
++		1028 2199  PERC H350 Mini LP
+ 		1d49 0505  ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter
+ 		1d49 0506  ThinkSystem RAID 540-16i PCIe Gen4 12Gb Adapter
+ 	10e7  MegaRAID 12GSAS/PCIe Unsupported SAS38xx
+@@ -986,6 +1001,7 @@
+ 	c010  PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform
+ 	c012  PEX880xx PCIe Gen 4 Switch
+ 		1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
++	c030  PEX890xx PCIe Gen 5 Switch
+ 1001  Kolter Electronic
+ 	0010  PCI 1616 Measurement card with 32 digital I/O lines
+ 	0011  OPTO-PCI Opto-Isolated digital I/O board
+@@ -1062,7 +1078,7 @@
+ 	163f  VanGogh
+ 	164c  Lucienne
+ 	164d  Rembrandt
+-	1681  Rembrandt
++	1681  Rembrandt [Radeon 680M]
+ 	1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
+ 		103c 168b  ProBook 4535s
+ 	3150  RV380/M24 [Mobility Radeon X600]
+@@ -2032,9 +2048,10 @@
+ 		174b a240  Radeon R7 240 OEM
+ 		174b d340  Radeon R7 340 OEM
+ 		1b0a 90d3  Radeon R7 240 OEM
+-	6613  Oland PRO [Radeon R7 240/340]
++	6613  Oland PRO [Radeon R7 240/340 / Radeon 520]
+ 		148c 7340  Radeon R7 340
+ 		1682 7240  R7 240 2048 MB
++		1dcf 3000  Oland PRO [Radeon R7 240/340 / Radeon 520]
+ 	6631  Oland
+ 	6640  Saturn XT [FirePro M6100]
+ 		106b 014b  Tropo XT [Radeon R9 M380 Mac Edition]
+@@ -3742,23 +3759,29 @@
+ 	73a2  Navi 21 Pro-XTA [Radeon Pro W6900X]
+ 	73a3  Navi 21 GL-XL [Radeon PRO W6800]
+ 	73a4  Navi 21 USB
++	73a5  Navi 21 [Radeon RX 6950 XT]
+ 	73ab  Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
+ 	73af  Navi 21 [Radeon RX 6900 XT]
++		148c 2414  Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate]
+ 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+ 		1002 0e3a  Radeon RX 6900 XT
++		148c 2408  Red Devil AMD Radeon RX 6900 XT
+ 		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
+ 	73c3  Navi 22
+ 	73c4  Navi 22 USB
+-	73df  Navi 22 [Radeon RX 6700/6700 XT / 6800M]
++	73df  Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+ 	73e0  Navi 23
+ 	73e1  Navi 23 WKS-XM [Radeon PRO W6600M]
+ 	73e3  Navi 23 WKS-XL [Radeon PRO W6600]
+ 	73e4  Navi 23 USB
++	73ef  Navi 23 [Radeon RX 6650 XT]
+ 	73ff  Navi 23 [Radeon RX 6600/6600 XT/6600M]
+ 		148c 2412  PowerColor Red Devil RX 6600 XT
+ 	7408  Aldebaran
+ 	740c  Aldebaran
+ 	740f  Aldebaran
++	743f  Navi 24 [Radeon RX 6400 / 6500 XT]
++		1da2 e457  PULSE AMD Radeon RX 6500 XT
+ 	7833  RS350 Host Bridge
+ 	7834  RS350 [Radeon 9100 PRO/XT IGP]
+ 	7835  RS350M [Mobility Radeon 9000 IGP]
+@@ -4161,7 +4184,7 @@
+ 	ab10  Lexa HDMI Audio
+ 	ab18  Vega 12 HDMI Audio
+ 	ab20  Vega 20 HDMI Audio [Radeon VII]
+-	ab28  Navi 21 HDMI Audio [Radeon RX 6800/6800 XT / 6900 XT]
++	ab28  Navi 21/23 HDMI/DP Audio Controller
+ 	ab38  Navi 10 HDMI Audio
+ 	ac00  Theater 506 World-Wide Analog Decoder
+ 	ac01  Theater 506 World-Wide Analog Decoder
+@@ -4956,14 +4979,14 @@
+ 		1043 876b  PRIME Motherboard
+ 		17aa 5124  ThinkPad E595
+ 		ea50 ce19  mCOM10-L1900
+-	15e2  Raven/Raven2/FireFlight/Renoir Audio Processor
++	15e2  ACP/ACP3X/ACP6x Audio Coprocessor
+ 		17aa 5124  ThinkPad E595
+ 		ea50 ce19  mCOM10-L1900
+-	15e3  Family 17h (Models 10h-1fh) HD Audio Controller
++	15e3  Family 17h/19h HD Audio Controller
+ 		103c 8615  Pavilion Laptop 15-cw1xxx
+ 		1043 86c7  PRIME B450M-A Motherboard
+ 		17aa 5124  ThinkPad E595
+-	15e4  Raven/Raven2/Renoir Sensor Fusion Hub
++	15e4  Sensor Fusion Hub
+ 	15e5  Raven2 USB 3.1
+ 		ea50 ce19  mCOM10-L1900
+ 	15e6  Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver
+@@ -5139,6 +5162,13 @@
+ 	43c7  400 Series Chipset PCIe Port
+ 	43c8  400 Series Chipset SATA Controller
+ 	43d5  400 Series Chipset USB 3.1 XHCI Controller
++	43e9  500 Series Chipset Switch Upstream Port
++	43eb  500 Series Chipset SATA Controller
++# or ASM106X Serial ATA Controller
++		1b21 1062  ASM1062 Serial ATA Controller
++	43ee  500 Series Chipset USB 3.1 XHCI Controller
++# maybe
++		1b21 1142  ASM1042A USB 3.0 Host Controller
+ 	57a3  Matisse PCIe GPP Bridge
+ 	57a4  Matisse PCIe GPP Bridge
+ 	57ad  Matisse Switch Upstream
+@@ -11492,6 +11522,7 @@
+ 	10ef  GP102 HDMI Audio Controller
+ 	10f0  GP104 High Definition Audio Controller
+ 	10f1  GP106 High Definition Audio Controller
++		1043 85b6  DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual]
+ 	10f7  TU102 High Definition Audio Controller
+ 	10f8  TU104 HD Audio Controller
+ 	10f9  TU106 High Definition Audio Controller
+@@ -12189,6 +12220,7 @@
+ 	1c01  GP106
+ 	1c02  GP106 [GeForce GTX 1060 3GB]
+ 	1c03  GP106 [GeForce GTX 1060 6GB]
++		1043 85b6  DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual]
+ 	1c04  GP106 [GeForce GTX 1060 5GB]
+ 	1c06  GP106 [GeForce GTX 1060 6GB Rev. 2]
+ 	1c07  GP106 [P106-100]
+@@ -12321,6 +12353,7 @@
+ 	1ef5  TU104GLM [Quadro RTX 5000 Mobile Refresh]
+ 	1f02  TU106 [GeForce RTX 2070]
+ 		1043 8673  TURBO RTX 2070
++	1f03  TU106 [GeForce RTX 2060 12GB]
+ 	1f04  TU106
+ 	1f06  TU106 [GeForce RTX 2060 SUPER]
+ 	1f07  TU106 [GeForce RTX 2070 Rev. A]
+@@ -12354,21 +12387,32 @@
+ 	1f99  TU117M
+ 	1f9c  TU117M [GeForce MX450]
+ 	1f9d  TU117M [GeForce GTX 1650 Mobile / Max-Q]
++# via Lenovo 496.90
++	1f9f  TU117M [GeForce MX550]
++	1fa0  TU117M [GeForce MX550]
+ 	1fae  TU117GL
+ 	1fb0  TU117GLM [Quadro T1000 Mobile]
+ 	1fb1  TU117GL [T600]
+ 	1fb2  TU117GLM [Quadro T400 Mobile]
++	1fb6  TU117GLM [T600 Laptop GPU]
++	1fb7  TU117GLM [T550 Laptop GPU]
+ 	1fb8  TU117GLM [Quadro T2000 Mobile / Max-Q]
+ 	1fb9  TU117GLM [Quadro T1000 Mobile]
+ 	1fba  TU117GLM [T600 Mobile]
+ 	1fbb  TU117GLM [Quadro T500 Mobile]
++	1fbc  TU117GLM [T1200 Laptop GPU]
+ 	1fbf  TU117GL
+ 	1fd9  TU117BM [GeForce GTX 1650 Mobile Refresh]
+ 	1fdd  TU117BM [GeForce GTX 1650 Mobile Refresh]
++	1ff0  TU117GL [T1000 8GB]
++	1ff2  TU117GL [T400 4GB]
+ 	1ff9  TU117GLM [Quadro T1000 Mobile]
++	2082  GA100 [CMP 170HX]
+ 	20b0  GA100 [A100 SXM4 40GB]
+ 	20b1  GA100 [A100 PCIe 40GB]
+ 	20b2  GA100 [A100 SXM4 80GB]
++# 20B3 14A7 10DE PG506-242 / 20B3 14A8 10DE PG506-243
++	20b3  GA100 [PG506-242/243]
+ 	20b5  GA100 [A100 PCIe 80GB]
+ 	20b6  GA100GL [PG506-232]
+ 	20b7  GA100GL [A30 PCIe]
+@@ -12376,7 +12420,9 @@
+ 	20be  GA100 [GRID A100A]
+ 	20bf  GA100 [GRID A100B]
+ 	20c2  GA100 [CMP 170HX]
++	20f0  GA100 [A100-PG506-207]
+ 	20f1  GA100 [A100 PCIe 40GB]
++	20f2  GA100 [A100-PG506-217]
+ 	2182  TU116 [GeForce GTX 1660 Ti]
+ 	2183  TU116
+ 	2184  TU116 [GeForce GTX 1660]
+@@ -12399,6 +12445,7 @@
+ 		10de 146d  GA102 [GeForce RTX 3080 20GB]
+ 		1462 3892  RTX 3080 10GB GAMING X TRIO
+ 	2208  GA102 [GeForce RTX 3080 Ti]
++	220a  GA102 [GeForce RTX 3080 12GB]
+ 	220d  GA102 [CMP 90HX]
+ 	2216  GA102 [GeForce RTX 3080 Lite Hash Rate]
+ 	222b  GA102 [GeForce RTX 3090 Engineering Sample]
+@@ -12406,15 +12453,20 @@
+ 	2230  GA102GL [RTX A6000]
+ 	2231  GA102GL [RTX A5000]
+ 	2232  GA102GL [RTX A4500]
++	2233  GA102GL [RTX A5500]
+ 	2235  GA102GL [A40]
+ 	2236  GA102GL [A10]
+ 	2237  GA102GL [A10G]
++	2238  GA102GL [A10M]
+ 	223f  GA102GL
+ 	228b  GA104 High Definition Audio Controller
+ 	2296  Tegra PCIe Endpoint Virtual Network
+ 	2302  GA103
+ 	2321  GA103
++	2414  GA103 [GeForce RTX 3060 Ti]
+ 	2420  GA103M [GeForce RTX 3080 Ti Mobile]
++	2438  GA103GLM [RTX A5500 Laptop GPU]
++	2460  GA103M [GeForce RTX 3080 Ti Laptop GPU]
+ 	2482  GA104 [GeForce RTX 3070 Ti]
+ 	2483  GA104
+ 	2484  GA104 [GeForce RTX 3070]
+@@ -12436,29 +12488,46 @@
+ 	24b6  GA104GLM [RTX A5000 Mobile]
+ 	24b7  GA104GLM [RTX A4000 Mobile]
+ 	24b8  GA104GLM [RTX A3000 Mobile]
++	24b9  GA104GLM [RTX A3000 12GB Laptop GPU]
++	24ba  GA104GLM [RTX A4500 Laptop GPU]
++	24bb  GA104GLM [RTX A3000 Laptop GPU]
+ 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
+ 	24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
+ 	24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
++	24e0  GA104M [Geforce RTX 3070 Ti Laptop GPU]
++	24fa  GA104 [RTX A4500 Embedded GPU ]
+ 	2501  GA106 [GeForce RTX 3060]
+ 	2503  GA106 [GeForce RTX 3060]
+ 	2504  GA106 [GeForce RTX 3060 Lite Hash Rate]
+ 	2505  GA106
++	2507  GA106 [Geforce RTX 3050]
+ 	2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 	2523  GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
+ 	252f  GA106 [GeForce RTX 3060 Engineering Sample]
++	2531  GA106 [RTX A2000]
+ 	2560  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 	2563  GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
++	2571  GA106 [RTX A2000 12GB]
+ 	2583  GA107 [GeForce RTX 3050]
+ 	25a0  GA107M [GeForce RTX 3050 Ti Mobile]
+ 	25a2  GA107M [GeForce RTX 3050 Mobile]
+ 	25a4  GA107
+ 	25a5  GA107M [GeForce RTX 3050 Mobile]
++	25a6  GA107M [GeForce MX570]
++	25a7  GA107M [GeForce MX570]
++	25a9  GA107M [GeForce RTX 2050]
+ 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
+ 	25b5  GA107GLM [RTX A4 Mobile]
++# A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E
++	25b6  GA107GL [A2 / A16]
+ 	25b8  GA107GLM [RTX A2000 Mobile]
++	25b9  GA107GLM [RTX A1000 Laptop GPU]
++	25ba  GA107GLM [RTX A2000 8GB Laptop GPU]
+ 	25e0  GA107BM [GeForce RTX 3050 Ti Mobile]
+ 	25e2  GA107BM [GeForce RTX 3050 Mobile]
+ 	25e5  GA107BM [GeForce RTX 3050 Mobile]
++	25f9  GA107 [RTX A1000 Embedded GPU ]
++	25fa  GA107 [RTX A2000 Embedded GPU]
+ 10df  Emulex Corporation
+ 	0720  OneConnect NIC (Skyhawk)
+ 		103c 1934  FlexFabric 20Gb 2-port 650M Adapter
+@@ -12689,6 +12758,7 @@
+ 		1028 09be  Latitude 7410
+ 		17aa 224f  ThinkPad X1 Carbon 5th Gen
+ 	5260  RTS5260 PCI Express Card Reader
++	5261  RTS5261 PCI Express Card Reader
+ 	5286  RTS5286 PCI Express Card Reader
+ 	5287  RTL8411B PCI Express Card Reader
+ 		1025 1094  Acer Aspire E5-575G
+@@ -12790,6 +12860,8 @@
+ 		103c 2a6f  Asus IPIBL-LB Motherboard
+ 		103c 825b  OMEN-17-w001nv
+ 		103c 8615  Pavilion Laptop 15-cw1xxx
++# Rev 29, uses r8169 Driver on Linux
++		103c 8882  HP ProDesk 405 G8 Desktop Mini PC
+ 		1043 11f5  Notebook motherboard (one of many models)
+ 		1043 16d5  U6V/U31J laptop
+ 		1043 81aa  P5B
+@@ -13699,6 +13771,8 @@
+ 	9082  Standard AHCI 1.0 SATA Controller
+ 	9140  HDMI Audio Device
+ 	9201  USB3.0 Controller
++# Centaur CNS Coprocessor
++	9380  Ncore Coprocessor
+ 	9530  VX800/820/900 Series Secure Digital Memory Card Controller
+ 	95d0  VX800/820/900 Series SDIO Host Controller
+ 	a208  PT890 PCI to PCI Bridge Controller
+@@ -16795,6 +16869,7 @@
+ # PI7C9X20508GP 5Port-8Lane PCI Express Switch GreenPacket Family
+ 	0508  PI7C9X20508GP PCI Express Switch 5Port-8Lane
+ 	2304  PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
++	2308  PI7C9X2G308GP 8-lane PCI Express 2.0 Switch with 3 PCI Express ports
+ 	2404  PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch
+ 	2608  PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
+ 		ea50 cc10  RXi2-BP
+@@ -17454,6 +17529,8 @@
+ 		13a3 0036  DX1730 Acceleration Card
+ 	0037  8204 Acceleration Processor
+ 		13a3 0036  DX1740 Acceleration Card
++	9240  XR9240 Compression and Security Coprocessor [Panther II]
++		13a3 9200  DX2040 Compression and Security Acceleration Card [Panther II]
+ 13a4  Rascom Inc
+ 13a5  Audio Digital Imaging Inc
+ 13a6  Videonics Inc
+@@ -19077,11 +19154,15 @@
+ 		103c 1240  Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM)
+ 14c2  DTK Computer
+ 14c3  MEDIATEK Corp.
++	0608  RZ608 Wi-Fi 6E 80MHz
++	0616  MT7922 802.11ax PCI Express Wireless Network Adapter
+ 	7612  MT7612E 802.11acbgn PCI Express Wireless Network Adapter
++	7615  MT7615E 802.11ac PCI Express Wireless Network Adapter
+ 	7630  MT7630e 802.11bgn Wireless Network Adapter
+ # MT7612E too?
+ 	7662  MT7662E 802.11ac PCI Express Wireless Network Adapter
+ 	7915  MT7915E 802.11ax PCI Express Wireless Network Adapter
++	7961  MT7921 802.11ax PCI Express Wireless Network Adapter
+ 14c4  IWASAKI Information Systems Co Ltd
+ 14c5  Automation Products AB
+ 14c6  Data Race Inc
+@@ -19424,6 +19505,10 @@
+ 		1259 2708  AT-2712 FX
+ # The Broadcom 57800 device has two 1Gig ports and two 10Gig ports. The subsystem information can be used to differentiate.
+ 	168a  NetXtreme II BCM57800 1/10 Gigabit Ethernet
++# SFP+ ports
++		1014 0493  PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3)
++# RJ-45 ports
++		1014 0494  PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3)
+ 		1028 1f5c  BCM57800 10-Gigabit Ethernet
+ 		1028 1f5d  BCM57800 10-Gigabit Ethernet
+ 		1028 1f67  BCM57800 1-Gigabit Ethernet
+@@ -20635,6 +20720,7 @@
+ 	07b0  VMXNET3 Ethernet Controller
+ 	07c0  PVSCSI SCSI Controller
+ 	07e0  SATA AHCI controller
++	07f0  NVMe SSD Controller
+ 	0801  Virtual Machine Interface
+ 		15ad 0800  Hypervisor ROM Interface
+ 	0820  Paravirtual RDMA controller
+@@ -20668,6 +20754,8 @@
+ 	021d  MT43244 Family [BlueField-3 Secure Flash Recovery]
+ 	021e  CX8 Family [ConnectX-8 Flash Recovery]
+ 	021f  CX8 Family [ConnectX-8 Secure Flash Recovery]
++	0220  BF4 Family Flash Recovery [BlueField-4 SoC Flash Recovery]
++	0221  BF4 Family Secure Flash Recovery [BlueField-4 Secure Flash Recovery]
+ 	024e  MT53100 [Spectrum-2, Flash recovery mode]
+ 	024f  MT53100 [Spectrum-2, Secure Flash recovery mode]
+ 	0250  Spectrum-3, Flash recovery mode
+@@ -20679,6 +20767,7 @@
+ 	0256  Abir GearBox
+ 	0257  Quantum-2 in Flash Recovery Mode
+ 	0258  Quantum-2 RMA
++	0259  Abir Chiplet
+ 	0262  MT27710 [ConnectX-4 Lx Programmable] EN
+ 	0263  MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN
+ 	0264  Innova-2 Flex Burn image
+@@ -20686,6 +20775,7 @@
+ 	0271  Spectrum-4L, RMA
+ 	0274  Spectrum-4C, Flash recovery mode
+ 	0275  Spectrum-4C RMA
++	0277  Spectrum-4TOR RMA
+ 	0281  NPS-600 Flash Recovery
+ 	1002  MT25400 Family [ConnectX-2 Virtual Function]
+ 	1003  MT27500 Family [ConnectX-3]
+@@ -20857,10 +20947,14 @@
+ 	a2da  MT43244 BlueField-3 SoC Crypto enabled
+ 	a2db  MT43244 BlueField-3 SoC Crypto disabled
+ 	a2dc  MT43244 BlueField-3 integrated ConnectX-7 network controller
++	a2dd  BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled]
++	a2de  BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled]
++	a2df  BF4 Family integrated network controller [BlueField-4 integrated network controller]
+ 	c2d2  MT416842 BlueField SoC management interfac
+ 	c2d3  MT42822 BlueField-2 SoC Management Interface
+ 	c2d4  MT43162 BlueField-3 Lx SoC Management Interface
+ 	c2d5  MT43244 BlueField-3 SoC Management Interface
++	c2d6  BF4 Family Management Interface [BlueField-4 SoC Management Interface]
+ # SwitchX-2, 40GbE switch
+ 	c738  MT51136
+ 	c739  MT51136 GW
+@@ -20956,8 +21050,9 @@
+ 15cc  Hotrail Inc
+ 15cd  Dreamtech Co Ltd
+ 15ce  Genrad Inc
+-15cf  Hilscher GmbH
+-	0000  CIFX 50E-DP(M/S)
++# https://www.hilscher.com/imprint/
++15cf  Hilscher Gesellschaft für Systemautomation mbH
++	0000  CIFX PCI/PCIe
+ 15d1  Infineon Technologies AG
+ 15d2  FIC (First International Computer Inc)
+ 15d3  NDS Technologies Israel Ltd
+@@ -21819,6 +21914,32 @@
+ 	a036  ThunderX RAD (RAID acceleration engine) virtual function
+ 	a037  THUNDERX ZIP virtual function
+ 	a040  THUNDERX CPT Cryptographic Accelerator
++# MAC found on OcteonTx2 series of silicons
++	a059  Octeon TX2 CGX (MAC)
++# MAC found on Octeon 10 series of silicons
++	a060  Octeon 10 RPM (MAC)
++# Octeon Tx2 Loopback Interface block
++	a061  Octeon Tx2 Loopback Interface (LBK)
++# Octeon Tx2 Resource Virtualization Unit Physical Function
++	a063  Octeon Tx2 RVU Physical Function
++# Octeon Tx2 Resource Virtualization Unit Virtual Function
++	a064  Octeon Tx2 RVU Virtual Function
++# Octeon Tx2 Resource Virtualization Unit Admin Function
++	a065  Octeon Tx2 RVU Admin Function
++# PTP Timestamping unit on Octeon 10 silicon series
++	a09e  Octeon 10 PTP controller
++# Cryptographic Accelerator found on Octeon 10 series of silicons
++	a0f2  Octeon 10 CPT Cryptographic Accelerator, Physical function
++	a0f3  Octeon 10 CPT Cryptographic Accelerator, Virtual function
++# Octeon Tx2 System DPI Interface (SDP) Physical Function
++	a0f6  Octeon Tx2 SDP Physical Function
++# Octeon Tx2 System DPI Interface (SDP) Virtual Function
++	a0f7  Octeon Tx2 SDP Virtual Function
++	a0f8  Octeon Tx2 Loopback Interface Virtual Function (LBKVF)
++# Cryptographic Accelerator found on OcteonTx2 series of silicons
++	a0fd  Octeon Tx2 CPT Cryptographic Accelerator, Physical function
++# Cryptographic Accelerator found on OcteonTx2 series of silicons
++	a0fe  Octeon Tx2 CPT Cryptographic Accelerator, Virtual function
+ 	a100  THUNDERX CN88XX 48 core SoC
+ 	a200  OCTEON TX CN81XX/CN80XX
+ 	a300  OCTEON TX CN83XX
+@@ -21933,6 +22054,8 @@
+ 	0401  Datacenter Technologies QDF2400 PCI Express Root Port
+ 	1000  QCS405 PCIe Root Complex
+ 	1101  QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
++	1103  Atheros QCNFA765
++	1104  QCN6024/9024/9074 Wireless Network Adapter
+ 17cc  NetChip Technology, Inc
+ 	2280  USB 2.0
+ 17cd  Cadence Design Systems, Inc.
+@@ -22806,6 +22929,10 @@
+ 	0011  FlexCard PMC-II Ethernet
+ 	0018  FlexCard PXIe3
+ 	0019  FlexCard PCIe3
++# IO card for std ethernet and automotive ethernet (ieee 1000Base-T1)
++	001a  FlexCard PXIe Ethernet
++# IO card for std ethernet and automotive ethernet (ieee 1000Base-T1)
++	001b  FlexCard PCIe Ethernet
+ 1976  TRENDnet
+ 1977  Parsec
+ 197b  JMicron Technology Corp.
+@@ -23137,6 +23264,11 @@
+ 1aa8  Ciprico, Inc.
+ 	0009  RAIDCore Controller
+ 	000a  RAIDCore Controller
++1aa9  Schweitzer Engineering Laboratories
++	000d  SEL-3390S8 Serial Adapter
++	000e  SEL-3390E4 Ethernet Adapter
++	0014  SEL-3390T Time and Ethernet Adapter
++	0018  SEL-3390E4 Ethernet Adapter
+ 1aae  Global Velocity, Inc.
+ 1ab4  Distributed Management Task Force, Inc. (DMTF)
+ 1ab6  CalDigit, Inc.
+@@ -23207,6 +23339,8 @@
+ 	0a58  microEnable 5 VD8-CL
+ # CameraLink frame grabber
+ 	0a5a  microEnable 5 AD8-CL
++# CoaXpress frame grabber
++	0a64  imaWorx CXP-12 Quad
+ # OEM product
+ 	0b52  mE5 Abacus 4G Base
+ # OEM product
+@@ -23311,12 +23445,15 @@
+ 	1080  ASM1083/1085 PCIe to PCI Bridge
+ 		1849 1080  Motherboard
+ 	1142  ASM1042A USB 3.0 Host Controller
++	1166  ASM1166 Serial ATA Controller
+ 	1182  ASM1182e 2-Port PCIe x1 Gen2 Packet Switch
+ 		1b21 118f  ASM1182e 2-Port PCIe x1 Gen2 Packet Switch
+ 	1184  ASM1184e 4-Port PCIe x1 Gen2 Packet Switch
+ 		1849 1184  ASM1184e 4-Port PCIe x1 Gen2 Packet Switch
++	1187  ASM1187e 7-Port PCIe x1 Gen2 Packet Switch
+ 	1242  ASM1142 USB 3.1 Host Controller
+ 	1343  ASM1143 USB 3.1 Host Controller
++	1812  ASM1812 6-Port PCIe x4 Gen2 Packet Switch
+ 	2142  ASM2142 USB 3.1 Host Controller
+ 		1462 7a72  H270 PC MATE
+ 	2824  ASM2824 PCIe Gen3 Packet Switch
+@@ -23392,6 +23529,8 @@
+ 	2241  88NR2241 Non-Volatile memory controller
+ 		1028 2112  BOSS-N1 Monolithic
+ 		1028 2113  BOSS-N1 Modular
++		1028 2151  BOSS-N1 Modular ET
++		1028 2196  ROR-N100
+ 		1d49 0306  ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit
+ 		1d49 0307  ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
+ 	9120  88SE9120 SATA 6Gb/s Controller
+@@ -23401,6 +23540,7 @@
+ 	9128  88SE9128 PCIe SATA 6 Gb/s RAID controller
+ 	9130  88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo
+ 		1043 8438  P8P67 Deluxe Motherboard
++	9170  88SE9170 PCIe 2.0 x1 2-port SATA 6 Gb/s Controller
+ 	9172  88SE9172 SATA 6Gb/s Controller
+ 	9178  88SE9170 PCIe SATA 6Gb/s Controller
+ 	917a  88SE9172 SATA III 6Gb/s RAID Controller
+@@ -23532,9 +23672,22 @@
+ 		1bb1 0151  Nytro 5520
+ # Kersey 2.5" TCG
+ 		1bb1 0152  Nytro 5520 TCG
++# Nytro 5050H (Ebonhawk - High Performance)
++		1bb1 0153  Nytro 5050H
++# Nytro 5050H TCG (Ebonhawk High Performance)
++		1bb1 0154  Nytro 5050H TCG
++# Nytro 5050M (Ebonhawk Mainstream Performance)
++		1bb1 0155  Nytro 5050M
++# Nytro 5050M TCG (Ebonhawk Mainstream Performance)
++		1bb1 0156  Nytro 5050M TCG
++# Nytro 5050M (Ebonhawk Mainstream Performance) - 7mm
++		1bb1 0157  Nytro 5050M 7mm
++# Nytro 5050M (Ebonhawk Mainstream Performance) TCG - 7mm
++		1bb1 0158  Nytro 5050M TCG 7mm
+ 		1bb1 01a1  Nytro XP7102
+ 	5012  FireCuda 510 SSD
+ 	5016  FireCuda 520 SSD
++	5018  FireCuda 530 SSD
+ 1bb3  Bluecherry
+ 	4304  BC-04120A MPEG4 4 port video encoder / decoder
+ 	4309  BC-08240A MPEG4 4 port video encoder / decoder
+@@ -23688,8 +23841,22 @@
+ 		1028 2149  DC NVMe SED PE8010 RI U.2 7.68TB
+ 		1028 214a  DC NVMe PE8010 RI U.2 7.68TB
+ 		1c5c 0100  PE8000 Series NVMe Solid State Drive
++	2849  PE81x0 U.2/3 NVMe Solid State Drive
+ 1c5f  Beijing Memblaze Technology Co. Ltd.
+ 	000d  PBlaze5 520/526
++	000e  PBlaze6 6530
++		1c5f 0b20  NVMe SSD PBlaze6 6530 1920G AIC
++		1c5f 0b21  NVMe SSD PBlaze6 6530 1920G 2.5" U.2
++		1c5f 0b30  NVMe SSD PBlaze6 6530 3840G AIC
++		1c5f 0b31  NVMe SSD PBlaze6 6530 3840G 2.5" U.2
++		1c5f 0b40  NVMe SSD PBlaze6 6530 7680G AIC
++		1c5f 0b41  NVMe SSD PBlaze6 6530 7680G 2.5" U.2
++		1c5f 4b20  NVMe SSD PBlaze6 6530 1600G AIC
++		1c5f 4b21  NVMe SSD PBlaze6 6530 1600G 2.5" U.2
++		1c5f 4b30  NVMe SSD PBlaze6 6530 3200G AIC
++		1c5f 4b31  NVMe SSD PBlaze6 6530 3200G 2.5" U.2
++		1c5f 4b40  NVMe SSD PBlaze6 6530 6400G AIC
++		1c5f 4b41  NVMe SSD PBlaze6 6530 6400G 2.5" U.2
+ 	003d  PBlaze5 920/926
+ 	003e  PBlaze6 6920
+ 		1c5f 0a31  NVMe SSD PBlaze6 6920 3840GB 2.5" U.2
+@@ -23738,6 +23905,8 @@
+ 	0002  Clarett
+ 1cb8  Dawning Information Industry Co., Ltd.
+ 1cc1  ADATA Technology Co., Ltd.
++# 256GB NVMe SSD
++	5766  ADATA XPG GAMMIXS1 1L Media
+ 	8201  XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive
+ 1cc4  Union Memory (Shenzhen)
+ 	1203  NVMe SSD Controller UHXXXa series
+@@ -23751,6 +23920,7 @@
+ 		1cc4 a213  NVMe SSD UHXXXa series U.2 3200GB
+ 		1cc4 a214  NVMe SSD UHXXXa series U.2 6400GB
+ 	17ab  NVMe 256G SSD device
++	6303  AM630 PCIe 4.0 x4 NVMe SSD Controller
+ 1cc5  Embedded Intelligence, Inc.
+ 	0100  CAN-PCIe-02
+ 1cc7  Radian Memory Systems Inc.
+@@ -23946,6 +24116,7 @@
+ 	101c  AR-ARK-SRIOV-VF [Arkville Virtual Function]
+ 	101d  AR-ARK-NIC [Arkville ArkNIC Kernel Path Device]
+ 	101e  AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile]
++	101f  AR-TK242 [2x100GbE Packet Capture Device]
+ 	4200  A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
+ 1d72  Xiaomi
+ 1d78  DERA Storage
+@@ -24157,6 +24328,9 @@
+ 	2000  NoLoad Hardware Development Kit
+ 	3000  eBPF-based PCIe Accelerator
+ 1ded  Alibaba (China) Co., Ltd.
++# A RDMA (iWarp) device provided by Alibaba Cloud used in ECS environment
++	107f  Elastic RDMA Adapter
++	5007  Elastic RDMA Adapter
+ 	8000  M1 Root Port
+ 	8001  ACC-RCiEP
+ 	8002  RCiEP VF
+@@ -24264,9 +24438,20 @@
+ 		1028 210e  Dell Ent NVMe FIPS CM6 MU 1.6TB
+ 		1028 210f  Dell Ent NVMe FIPS CM6 MU 3.2TB
+ 		1028 2110  Dell Ent NVMe FIPS CM6 MU 6.4TB
+-		1e0f 0001  Generic NVMe CM6 RI 3.84TB
++		1e0f 0001  Generic NVMe CM6
+ 	0009  NVMe SSD
+ 		1e0f 0001  Toshiba RC500 NVMe SSD 500GB
++	0011  NVMe SSD Controller CD7
++		1028 2189  DC NVMe SED CD7 RI 960GB
++		1028 218a  DC NVMe CD7 RI 960GB
++		1028 218b  DC NVMe SED CD7 RI 1.92TB
++		1028 218c  DC NVMe CD7 RI 1.92TB
++		1028 218d  DC NVMe SED CD7 RI 3.84TB
++		1028 218e  DC NVMe CD7 RI 3.84TB
++		1028 218f  DC NVMe SED CD7 RI 7.68TB
++		1028 2190  DC NVMe CD7 RI 7.68TB
++		1028 2191  DC NVMe SED CD7 RI 15.36TB
++		1028 2192  DC NVMe CD7 RI 15.36TB
+ 1e17  Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
+ 1e24  Squirrels Research Labs
+ 	0101  Acorn CLE-101
+@@ -24296,7 +24481,7 @@
+ 	0102  Xplorer X1600
+ # https://www.medion.com/
+ 1e39  MEDION AG
+-1e3b  Shenzhen DAPU Microelectronics Co., Ltd
++1e3b  DapuStor Corporation
+ 	0600  NVMe SSD Controller DPU600
+ 		1e3b 0030  Enterprise NVMe SSD U.2 3.84TB (J5100)
+ 		1e3b 0031  Enterprise NVMe SSD U.2 7.68TB (J5100)
+@@ -24359,6 +24544,7 @@
+ 		1e3b 0091  Enterprise NVMe SSD HHHL 0.75TB (H3900)
+ 1e3d  Burlywood, Inc
+ 1e49  Yangtze Memory Technologies Co.,Ltd
++	0041  ZHITAI TiPro7000
+ # YMTC PCIe/NVMe SSD
+ 	1013  PC210
+ 1e4b  MAXIO Technology (Hangzhou) Ltd.
+@@ -24377,6 +24563,9 @@
+ 		0000 0100  PY8800 64GB Accelerator
+ 1e59  Oxford Nanopore Technologies
+ 	0001  MinION Mk1C
++1e5d  ASR Microelectronics
++	7000  AI controller A7000
++	7010  AI controller A7010
+ 1e60  Hailo Technologies Ltd.
+ 	2864  Hailo-8 AI Processor
+ 1e68  Jiangsu Xinsheng Intelligent Technology Co., Ltd
+@@ -24414,14 +24603,22 @@
+ 1eab  Hefei DATANG Storage Technology Co.,LTD.
+ 	300a  NVMe SSD Controller 300A
+ 	300b  NVMe SSD Controller 300B
++1eac  Quectel Wireless Solutions Co., Ltd.
++	1001  EM120R-GL LTE Modem
++	1002  EM160R-GL LTE Modem
+ 1eae  XFX Limited
+ 1eb1  VeriSilicon Inc
+ 	1001  Video Accelerator
++1eb4  Quantum Nebula Microelectronics Technology Co.,Ltd.
++	3401  SSD Contoller
+ 1ebd  EMERGETECH Company Ltd.
+ 	0101  Seirios 2063 Video Codec
+ 1ed2  FuriosaAI, Inc.
+ 	0000  Warboy
+ 1ed3  Yeston
++1ed5  Moore Threads Technology Co.,Ltd
++	0100  MTT S10
++	0101  MTT S30
+ 1ed8  Digiteq Automotive
+ 	0101  FG4 PCIe Frame Grabber
+ 1ed9  Myrtle.ai
+@@ -24439,6 +24636,13 @@
+ 	5220  IG5220-Based NVMe SSD
+ 	5236  IG5236-Based NVMe SSD
+ 	5636  IG5636-Based NVMe SSD
++1f2f  China Mobile (Hangzhou) Information Technology Co.Ltd.
++	1513  DERA MENG NVMe Controller
++		1f2f 6113  KM660 U.2 1.6TB NVMe SSD
++		1f2f 6114  KM560 U.2 1.92TB NVMe SSD
++		1f2f 6115  KM660 U.2 3.2TB NVMe SSD
++		1f2f 6116  KM560 U.2 3.84TB NVMe SSD
++		1f2f 6118  KM560 U.2 7.68TB NVMe SSD
+ 1fab  Unifabrix Ltd.
+ 	0000  Nexus Alpha IVPU
+ # nee Tumsan Oy
+@@ -25182,6 +25386,12 @@
+ 	1400  CooVOX TDM GSM Module
+ 	1600  CooVOX TDM E1/T1 Module
+ 	1800  CooVOX TDM BRI Module
++6766  Glenfly Tech Co., Ltd.
++	3d00  Arise-GT-10C0
++	3d02  Arise 1020
++	3d40  Arise-GT-10C0 High Definition Audio Controller
++	3d41  Arise 1020 High Definition Audio Controller
++6899  ZT Systems
+ # nee Qumranet
+ 6900  Red Hat, Inc.
+ 7063  pcHDTV
+@@ -25194,6 +25404,9 @@
+ 7401  EndRun Technologies
+ 	e100  PTP3100 PCIe PTP Slave Clock
+ 7470  TP-LINK Technologies Co., Ltd.
++7526  HongQin (Beijing) Technology Co., Ltd.
++	0082  HQ SSD 1TB
++	0083  HQ SSD 2TB M.2 NVMe
+ 7604  O.N. Electronic Co Ltd.
+ 7bde  MIDAC Corporation
+ 7fed  PowerTV
+@@ -26006,6 +26219,12 @@
+ 		1028 2102  NVMe RI U.2 1.92TB (P5500)
+ 		1028 2103  NVMe RI U.2 3.84TB (P5500)
+ 		1028 2104  NVMe RI U.2 7.68TB (P5500)
++		1028 219a  NVMe P5316 RI 15.36TB
++		1028 219b  NVMe P5316 RI 30.72TB
++		1028 219c  NVMe SED P5316 RI 15.36
++		1028 219d  NVMe SED P5316 RI 30.72
++		1028 219e  NVMe FIPS P5316 RI 15.36TB
++		1028 219f  NVMe FIPS P5316 RI 30.72
+ 		8086 8008  NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510)
+ 		8086 8d08  NVMe Datacenter SSD [3DNAND] VE 2.5" U.2 (P5316)
+ 		8086 8d1d  NVMe Datacenter SSD [3DNAND] VE E1.L 9.5/18mm (P5316)
+@@ -26114,8 +26333,15 @@
+ 		8086 0001  Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 	0d9f  Ethernet Controller (2) I225-IT
+ 	0dd2  Ethernet Network Adapter I710
++		1137 0000  I710T4LG 4x1 GbE RJ45 PCIe NIC
++		1137 02e3  I710T4LG 4x1 GbE RJ45 PCIe NIC
++		8086 0000  Ethernet Network Adapter I710-T4L
+ 		8086 000d  Ethernet Network Adapter I710-T4L
+ 		8086 0010  Ethernet Network Adapter I710-T4L for OCP 3.0
++		8086 401a  Ethernet Network Adapter I710-T4L
++		8086 401b  Ethernet Network Adapter I710-T4L for OCP 3.0
++	0dda  Ethernet Connection X722 for 10GbE SFP+
++		1bd4 0076  Ethernet Connection X722 for 10GbE SFP+
+ 	0e00  Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
+ 		1028 04f7  Xeon E5 v2 on PowerEdge R320 server
+ 		15d9 066b  X9SRL-F
+@@ -27466,6 +27692,7 @@
+ 		8086 000c  Ethernet 100G 2P E810-C OCP
+ 		8086 000d  Ethernet Network Adapter E810-L-Q2 for OCP 3.0
+ 		8086 000e  Ethernet Network Adapter E810-2C-Q2
++		8086 0010  Ethernet 100G 2P E810-C-stg Adapter
+ 	1593  Ethernet Controller E810-C for SFP
+ 		1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
+ 		8086 0002  Ethernet Network Adapter E810-L-2
+@@ -27478,7 +27705,10 @@
+ 		8086 000c  Ethernet Network Adapter E810-XXV-4 for OCP 3.0
+ 		8086 000d  Ethernet 25G 4P E810-XXV OCP
+ 		8086 000e  Ethernet Network Adapter E810-XXV-4T
++		8086 000f  Ethernet 25G 4P E810-XXV-stg Adapter
++		8086 0010  Ethernet 25G 4P E810-XXV-st Adapter
+ 	1599  Ethernet Controller E810-XXV for backplane
++		8086 0001  Ethernet 25G 2P E810-XXV-k Mezz
+ 	159a  Ethernet Controller E810-XXV for QSFP
+ 	159b  Ethernet Controller E810-XXV for SFP
+ 		1137 02be  E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC
+@@ -31187,6 +31417,7 @@
+ 	3432  5520/5500/X58 Chipset QuickData Technology Device
+ 	3433  5520/5500/X58 Chipset QuickData Technology Device
+ 	3438  7500/5520/5500/X58 I/O Hub Throttle Registers
++	347e  Ice Lake Xeon Non-Transparent Bridge
+ 	3482  Ice Lake-LP LPC Controller
+ 	34a3  Ice Lake-LP SMBus Controller
+ 	34a4  Ice Lake-LP SPI Controller
+@@ -31997,8 +32228,10 @@
+ 		8086 02a4  Wireless-AC 9462
+ 	444e  Turbo Memory Controller
+ 	460d  12th Gen Core Processor PCI Express x16 Controller #1
++	461d  Alder Lake Innovation Platform Framework Processor Participant
+ 	461e  Alder Lake-P Thunderbolt 4 USB Controller
+ 	461f  Alder Lake-P Thunderbolt 4 PCI Express Root Port #3
++	4626  Alder Lake-P Integrated Graphics Controller
+ 	4629  12th Gen Core Processor Host Bridge/DRAM Registers
+ 	462f  Alder Lake-P Thunderbolt 4 PCI Express Root Port #2
+ 	463d  12th Gen Core Processor PCI Express x4 Controller #2
+@@ -32007,6 +32240,7 @@
+ 	4641  12th Gen Core Processor Host Bridge/DRAM Registers
+ 	464d  12th Gen Core Processor PCI Express x4 Controller #0
+ 	464f  12th Gen Core Processor Gaussian & Neural Accelerator
++	4660  12th Gen Core Processor Host Bridge/DRAM Registers
+ 	466d  Alder Lake-P Thunderbolt 4 NHI #1
+ 	466e  Alder Lake-P Thunderbolt 4 PCI Express Root Port #0
+ 	467d  Platform Monitoring Technology
+@@ -32015,6 +32249,7 @@
+ 	46a0  AlderLake-P GT2
+ 	46a1  UHD Graphics
+ 	46a3  Alder Lake-P GT1 [UHD Graphics]
++	46a6  Alder Lake-P Integrated Graphics Controller
+ 	46c0  AlderLake-M GT1
+ 	4905  DG1 [Iris Xe MAX Graphics]
+ 	4906  DG1 [Iris Xe Pod]
+@@ -32026,8 +32261,9 @@
+ 	4c8b  RocketLake-S GT1 [UHD Graphics 730]
+ 	4c90  RocketLake-S GT1 [UHD Graphics P750]
+ 	4c9a  RocketLake-S [UHD Graphics]
+-	4da3  JaserLake SMBus
+-	4da4  JaserLake SPI (flash) Controller
++	4da3  Jasper Lake SMBus
++	4da4  Jasper Lake SPI Controller
++	4dc8  Jasper Lake HD Audio
+ 	4de0  Management Engine Interface
+ 	4de8  Serial IO I2C Host Controller
+ 	4de9  Serial IO I2C Host Controller
+@@ -32088,8 +32324,11 @@
+ 	504b  EP80579 Reserved
+ 	504c  EP80579 Integrated Processor with QuickAssist TDM
+ 	5181  Alder Lake PCH-P LPC/eSPI Controller
++	5182  Alder Lake PCH eSPI Controller
+ 	51a3  Alder Lake PCH-P SMBus Host Controller
+ 	51a4  Alder Lake-P PCH SPI Controller
++	51a8  Alder Lake PCH UART #0
++	51a9  Alder Lake PCH UART #1
+ 	51bf  Alder Lake PCH-P PCI Express Root Port #9
+ 	51c5  Alder Lake-P Serial IO I2C Controller #0
+ 	51c6  Alder Lake-P Serial IO I2C Controller #1
+@@ -32471,6 +32710,20 @@
+ 		10b4 202f  Lightspeed 740
+ 		8086 0000  Terminator 2x/i
+ 		8086 0100  Intel740 Graphics Accelerator
++# Unlike other PCH components. The eSPI controller is specific to each chipset model
++	7a84  Z690 Chipset LPC/eSPI Controller
++	7aa3  Alder Lake-S PCH SMBus Controller
++	7aa4  Alder Lake-S PCH SPI Controller
++	7aa7  Alder Lake-S PCH Shared SRAM
++	7ab4  Alder Lake-S PCH PCI Express Root Port #13
++	7abd  Alder Lake-S PCH PCI Express Root Port #6
++	7acc  Alder Lake-S PCH I2C Controller #0
++	7ad0  Alder Lake-S HD Audio Controller
++	7ae0  Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller
++	7ae2  Alder Lake-S PCH SATA Controller [AHCI Mode]
++	7ae8  Alder Lake-S PCH HECI Controller #1
++	7af0  Alder Lake-S PCH CNVi WiFi
++		8086 0094  Wi-Fi 6 AX201 160MHz
+ 	8002  Trusted Execution Technology Registers
+ 	8003  Trusted Execution Technology Registers
+ 	8100  US15W/US15X SCH [Poulsbo] Host Bridge
+@@ -32840,6 +33093,7 @@
+ 		1028 09be  Latitude 7410
+ 	9b63  10th Gen Core Processor Host Bridge/DRAM Registers
+ 	9b64  10th Gen Core Processor Host Bridge/DRAM Registers
++	9ba8  CometLake-S GT1 [UHD Graphics 610]
+ 	9bc4  CometLake-H GT2 [UHD Graphics]
+ 	9bc5  CometLake-S GT2 [UHD Graphics 630]
+ 	9bc8  CometLake-S GT2 [UHD Graphics 630]
+@@ -33040,6 +33294,7 @@
+ 	9d3d  Sunrise Point-LP Active Management Technology - SOL
+ 		103c 8079  EliteBook 840 G3
+ 		17aa 2247  ThinkPad T570
++	9d3e  iTouch Controller
+ 	9d43  Sunrise Point-LP LPC Controller
+ 		17aa 382a  B51-80 Laptop
+ 	9d46  LPC/eSPI Controller
+@@ -33094,6 +33349,7 @@
+ 	9da4  Cannon Point-LP SPI Controller
+ 	9da8  Cannon Point-LP Serial IO UART Controller #2
+ 	9daa  Cannon Point-LP Serial IO SPI Controller
++	9dab  Cannon Point-LP Serial IO SPI Controller
+ 	9db0  Cannon Point-LP PCI Express Root Port #9
+ 	9db1  Cannon Point-LP PCI Express Root Port #10
+ 	9db2  Cannon Point-LP PCI Express Root Port #1
+@@ -33104,6 +33360,7 @@
+ 	9dbc  Cannon Point-LP PCI Express Root Port #5
+ 	9dbe  Cannon Point-LP PCI Express Root Port #7
+ 	9dbf  Cannon Point PCI Express Root Port #8
++	9dc4  Cannon Point-LP SD Host Controller
+ 	9dc5  Cannon Point-LP Serial IO I2C Host Controller
+ 	9dc8  Cannon Point-LP High Definition Audio Controller
+ 		1028 089e  Inspiron 5482
+@@ -33467,7 +33724,7 @@
+ 	a397  Comet Lake PCI Express Root Port #08
+ 	a398  Comet Lake PCI Express Root Port 9
+ 	a39a  Comet Lake PCI Express Root Port 11
+-	a3a1  Memory controller
++	a3a1  Cannon Lake PCH Power Management Controller
+ 	a3a3  Comet Lake PCH-V SMBus Host Controller
+ 	a3af  Comet Lake PCH-V USB Controller
+ 	a3b1  Comet Lake PCH-V Thermal Subsystem
+@@ -33958,6 +34215,8 @@
+ 		1bd4 0070  RS0800M5E24i
+ 		1bd4 0071  RS0800M5H16i
+ 		1bd4 0072  RS0800M5E16i
++		1cc4 0101  Ramaxel FBGF-RAD PM8204
++		1cc4 0201  Ramaxel FBGF-RAD PM8222
+ 		1d49 0220  ThinkSystem 4350-8i SAS/SATA 12Gb HBA
+ 		1d49 0221  ThinkSystem 4350-16i SAS/SATA 12Gb HBA
+ 		1d49 0520  ThinkSystem RAID 5350-8i PCIe 12Gb Adapter
+@@ -34244,6 +34503,8 @@ cddd  Tyzx, Inc.
+ 	0101  DeepSea 1 High Speed Stereo Vision Frame Grabber
+ 	0200  DeepSea 2 High Speed Stereo Vision Frame Grabber
+ ceba  KEBA AG
++cf86  Spectrum-4TOR
++	0276  Spectrum-4TOR in Flash Recovery Mode
+ d161  Digium, Inc.
+ 	0120  Wildcard TE120P single-span T1/E1/J1 card
+ 	0205  Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V
+@@ -34728,8 +34989,7 @@ C 11  Signal processing controller
+ 	80  Signal processing controller
+ C 12  Processing accelerators
+ 	00  Processing accelerators
+-# For the class of PCI attached devices which perform a function of Deep Learning Neural Network inference acceleration
+-	01  AI Inference Accelerator
++	01  SNIA Smart Data Accelerator Interface (SDXI) controller
+ C 13  Non-Essential Instrumentation
+ C 40  Coprocessor
+ C ff  Unassigned class
+diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html
+index 9b98e18c66..a1d6f63bcd 100644
+--- a/hwdb.d/pnp_id_registry.html
++++ b/hwdb.d/pnp_id_registry.html
+@@ -2499,6 +2499,9 @@
+  <tr class="odd"><td>Kopin Corporation</td><td>KOP</td><td>10/01/2021</td> </tr>
+  <tr class="even"><td>Anker Innovations Limited</td><td>AKR</td><td>12/10/2021</td> </tr>
+  <tr class="odd"><td>SAMPO CORPORATION</td><td>SPO</td><td>12/10/2021</td> </tr>
++ <tr class="even"><td>Shiftall Inc.</td><td>SFL</td><td>12/31/2021</td> </tr>
++ <tr class="odd"><td>AudioControl</td><td>AUD</td><td>12/31/2021</td> </tr>
++ <tr class="even"><td>Schneider Consumer Group</td><td>SCA</td><td>02/08/2022</td> </tr>
+       </tbody>
+     </table>
+   </body>
+diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
+index 1b9f9f82ba..d02e59f5e2 100644
+--- a/hwdb.d/usb.ids
++++ b/hwdb.d/usb.ids
+@@ -9,8 +9,8 @@
+ #	The latest version can be obtained from
+ #		http://www.linux-usb.org/usb.ids
+ #
+-# Version: 2021.10.24
+-# Date:    2021-10-24 20:34:08
++# Version: 2022.03.18
++# Date:    2022-03-18 20:34:09
+ #
+ 
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -2712,6 +2712,8 @@
+ 	0845  ConferenceCam CC3000e Camera
+ 	0846  ConferenceCam CC3000e Speakerphone
+ 	084b  ConferenceCam Connect Video
++	084c  ConferenceCam Connect Audio
++	084e  ConferenceCam Connect
+ 	0850  QuickCam Web
+ 	0857  Logi Group Speakerphone
+ 	085c  C922 Pro Stream Webcam
+@@ -2764,7 +2766,7 @@
+ 	08d7  QuickCam Communicate STX
+ 	08d8  QuickCam for Notebook Deluxe
+ 	08d9  QuickCam IM/Connect
+-	08da  QuickCam Messanger
++	08da  QuickCam Messenger
+ 	08dd  QuickCam for Notebooks
+ 	08e0  QuickCam Express
+ 	08e1  Labtec Webcam
+@@ -2903,7 +2905,7 @@
+ 	c06a  USB Optical Mouse
+ 	c06b  G700 Wireless Gaming Mouse
+ 	c06c  Optical Mouse
+-	c077  M105 Optical Mouse
++	c077  Mouse
+ 	c07c  M-R0017 [G700s Rechargeable Gaming Mouse]
+ 	c07d  G502 Mouse
+ 	c07e  G402 Gaming Mouse
+@@ -2911,7 +2913,7 @@
+ 	c083  G403 Prodigy Gaming Mouse
+ 	c084  G203 Gaming Mouse
+ 	c08b  G502 SE HERO Gaming Mouse
+-	c092  G203 LIGHTSYNC Gaming Mouse
++	c092  G102/G203 LIGHTSYNC Gaming Mouse
+ 	c101  UltraX Media Remote
+ 	c110  Harmony 785/880/885 Remote
+ 	c111  Harmony 525 Remote
+@@ -3060,6 +3062,7 @@
+ 	c532  Unifying Receiver
+ 	c534  Unifying Receiver
+ 	c537  Cordless Mouse Receiver
++	c539  Cordless Mouse Receiver
+ 	c53a  PowerPlay Wireless Charging System
+ 	c53d  G631 Keyboard
+ 	c603  3Dconnexion Spacemouse Plus XT
+@@ -19572,10 +19575,11 @@
+ 	5512  CH341 in EPP/MEM/I2C mode, EPP/I2C adapter
+ 	5523  CH341 in serial mode, usb to serial port converter
+ 	5584  CH341 in parallel mode, usb to printer port converter
++	7522  CH340 serial converter
+ 	7523  CH340 serial converter
+ 	752d  CH345 MIDI adapter
+ 	7584  CH340S
+-	e008  HID-based serial adapater
++	e008  HID-based serial adapter
+ 1a89  Dynalith Systems Co., Ltd.
+ 1a8b  SGS Taiwan Ltd.
+ 1a8d  BandRich, Inc.
+@@ -20338,7 +20342,7 @@
+ 	6052  APB Team Robotic Development Board
+ 	6053  Darkgame Controller
+ 	6054  Satlab/AAUSAT3 BlueBox
+-	6055  RADiuS ER900TRS-02 transciever with SMA Connector
++	6055  RADiuS ER900TRS-02 transceiver with SMA Connector
+ 	6056  The Glitch
+ 	6057  OpenPipe MIDI Shield
+ 	6058  Novena OTG port
+@@ -20475,10 +20479,10 @@
+ 	60ec  Duet 2 WiFi or Duet 2 Ethernet 3D printer control electronics
+ 	60ed  Duet 2 Maestro 3D printer control electronics
+ 	60ee  Duet 3 motion control electronics
+-	60f0  UDAD-T1 data aquisition device (boot)
+-	60f1  UDAD-T1 data aquisition device
+-	60f2  UDAD-T2 data aquisition device (boot)
+-	60f3  UDAD-T2 data aquisition device
++	60f0  UDAD-T1 data acquisition device (boot)
++	60f1  UDAD-T1 data acquisition device
++	60f2  UDAD-T2 data acquisition device (boot)
++	60f3  UDAD-T2 data acquisition device
+ 	60f4  Uniti ARC motor controller
+ 	60f5  EightByEight Blinky Badge (DFU)
+ 	60f6  EightByEight Blinky Badge
+@@ -20494,6 +20498,7 @@
+ 	6118  Thomson MO5 keyboard
+ 	6122  Ultimate Hacking Keyboard
+ 	614c  dwtk In-Circuit Emulator
++	614d  Generic Display
+ 	8085  Box0 (box0-v5)
+ 	cc15  rad1o badge for CCC summer camp 2015
+ 1d57  Xenta
+@@ -20511,7 +20516,7 @@
+ 	ad03  [T3] 2.4GHz and IR Air Mouse Remote Control
+ 	af01  AUVIO Universal Remote Receiver for PlayStation 3
+ 	af03  Wireless Receiver
+-	fa20  2.4GHz Wireless Reciever (Mini Keyboard & Mouse)
++	fa20  2.4GHz Wireless Receiver (Mini Keyboard & Mouse)
+ 1d5b  Smartronix, Inc.
+ 1d5c  Fresco Logic
+ 	2000  FL2000/FL2000DX VGA/DVI/HDMI Adapter
+@@ -20819,7 +20824,12 @@
+ 	0001  Wi-Fi Body Scale (WBS01)
+ 1fba  DERMALOG Identification Systems GmbH
+ 1fbd  Delphin Technology AG
+-	0001  Expert Key - Data aquisition system
++	0001  Expert Key - Data acquisition system
++	0004  MetiOS Device (RNDIS)
++	0005  Loggito
++	0006  LoggitoLab 8 AI-RTD
++	0007  LoggitoLab 8 TC
++	0008  LoggitoLab 4 AI-RTD 4 TC
+ 1fc9  NXP Semiconductors
+ 	0003  LPC1343
+ 	000c  LPC4330FET180 [ARM Cortex M4 + M0] (device firmware upgrade mode)
+@@ -22644,6 +22654,14 @@
+ 	f190  MSO-19
+ 	f280  MSO-28
+ 	f281  MSO-28
++3197  Katusha
++	1001  M151
++	1002  M250
++	1003  P130
++	1004  M130
++	1101  P247
++	1102  M247
++	1103  M348
+ 31c9  BeiJing LanXum Computer Technology Co., Ltd.
+ 	1001  Printer
+ 	1301  Black and White Laser Printer
+@@ -23238,7 +23256,12 @@
+ 	0780  CS780 Microphone Input
+ 	07d3  BLOB boot loader firmware
+ 	07dc  Bluetooth 4.0* Smart Ready (low energy)
++	0a66  RealSense 3D Camera (Front F200)
++	0aa5  RealSense SR300
++	0ad2  RealSense D410
++	0ad3  RealSense D415
+ 	0b07  RealSense D435
++	0b64  RealSense L515
+ 	0dad  Cherry MiniatureCard Keyboard
+ 	1010  AnyPoint(TM) Home Network 10 Mbps Phoneline Adapter
+ 	110a  Bluetooth Controller from (Ericsson P4A)
+@@ -23264,6 +23287,7 @@
+ 	9303  8x930Hx Hub
+ 	9500  CE 9500 DVB-T
+ 	9890  82930 Test Board
++	a36d  Host Controller
+ 	beef  SCM Miniature Card Reader/Writer
+ 	c013  Wireless HID Station
+ 	dead  Galileo
+@@ -23278,7 +23302,6 @@
+ 	0032  AX210 Bluetooth
+ 	0716  Modem Flashloader
+ 	07da  Centrino Bluetooth Wireless Transceiver
+-		8087 07da  Centrino Advanced-N 6235
+ 	07db  Atom C2000 Root Hub
+ 	07dc  Bluetooth wireless interface
+ 	07eb  Oaktrail tablet
diff --git a/SOURCES/0296-hwdb-update-autosuspend-entries.patch b/SOURCES/0296-hwdb-update-autosuspend-entries.patch
new file mode 100644
index 0000000..ea3feae
--- /dev/null
+++ b/SOURCES/0296-hwdb-update-autosuspend-entries.patch
@@ -0,0 +1,78 @@
+From 67c40c730543daaa6ca87216afb9b777def06167 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 29 Mar 2022 12:22:21 +0200
+Subject: [PATCH] hwdb: update autosuspend entries
+
+(cherry picked from commit f1589efb7fe4ed71c0f73dded61d5925c06cd71e)
+
+Related: #2087778
+---
+ hwdb.d/60-autosuspend-fingerprint-reader.hwdb | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+index 91a0793747..b44e3e328b 100644
+--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
++++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+@@ -148,6 +148,7 @@ usb:v04F3p0C58*
+ # Supported by libfprint driver elanmoc
+ usb:v04F3p0C7D*
+ usb:v04F3p0C7E*
++usb:v04F3p0C82*
+  ID_AUTOSUSPEND=1
+  ID_PERSIST=0
+ 
+@@ -185,7 +186,6 @@ usb:v06CBp00DF*
+ usb:v06CBp00F9*
+ usb:v06CBp00FC*
+ usb:v06CBp00C2*
+-usb:v06CBp00C9*
+ usb:v06CBp0100*
+ usb:v06CBp00F0*
+ usb:v06CBp0103*
+@@ -272,15 +272,19 @@ usb:v06CBp008A*
+ usb:v06CBp009A*
+ usb:v06CBp009B*
+ usb:v06CBp00A2*
++usb:v06CBp00A8*
+ usb:v06CBp00B7*
+ usb:v06CBp00BB*
+ usb:v06CBp00BE*
+ usb:v06CBp00C4*
+ usb:v06CBp00CB*
++usb:v06CBp00C9*
+ usb:v06CBp00D8*
+ usb:v06CBp00DA*
++usb:v06CBp00DC*
+ usb:v06CBp00E7*
+ usb:v06CBp00E9*
++usb:v06CBp00FD*
+ usb:v0A5Cp5801*
+ usb:v0A5Cp5805*
+ usb:v0A5Cp5834*
+@@ -292,6 +296,7 @@ usb:v0A5Cp5844*
+ usb:v0A5Cp5845*
+ usb:v0BDAp5812*
+ usb:v10A5p0007*
++usb:v10A5p9200*
+ usb:v1188p9545*
+ usb:v138Ap0007*
+ usb:v138Ap003A*
+@@ -309,6 +314,7 @@ usb:v1491p0088*
+ usb:v16D1p1027*
+ usb:v1C7Ap0300*
+ usb:v1C7Ap0575*
++usb:v1C7Ap0576*
+ usb:v27C6p5042*
+ usb:v27C6p5110*
+ usb:v27C6p5117*
+@@ -328,7 +334,9 @@ usb:v27C6p55A2*
+ usb:v27C6p55A4*
+ usb:v27C6p55B4*
+ usb:v27C6p5740*
++usb:v27C6p5E0A*
+ usb:v2808p9338*
++usb:v298Dp2020*
+ usb:v298Dp2033*
+ usb:v3538p0930*
+  ID_AUTOSUSPEND=1
diff --git a/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch b/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch
new file mode 100644
index 0000000..182a097
--- /dev/null
+++ b/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch
@@ -0,0 +1,117 @@
+From 24ac19e1816ab2ec93360d346edd16e3f678bf47 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Wed, 6 Apr 2022 11:56:05 +0200
+Subject: [PATCH] hwdb: drop boilerplate about match patterns being unstable
+
+We've had this text since the beginning, but in fact the patterns must be
+stable in order for people to create local hwdb entries. And we support that
+and can't change the match patterns without being very careful. So let's just
+drop the text.
+
+(cherry picked from commit adbe000e3df5f91572bf4a77a2acd84ff5b87320)
+
+Related: #2087778
+---
+ hwdb.d/60-evdev.hwdb         | 5 -----
+ hwdb.d/60-input-id.hwdb      | 5 -----
+ hwdb.d/60-keyboard.hwdb      | 5 -----
+ hwdb.d/60-sensor.hwdb        | 5 -----
+ hwdb.d/70-mouse.hwdb         | 5 -----
+ hwdb.d/70-pointingstick.hwdb | 4 ----
+ 6 files changed, 29 deletions(-)
+
+diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
+index 9fcb4a3ddf..c97cd13557 100644
+--- a/hwdb.d/60-evdev.hwdb
++++ b/hwdb.d/60-evdev.hwdb
+@@ -3,11 +3,6 @@
+ # The lookup keys are composed in:
+ #   60-evdev.rules
+ #
+-# Note: The format of the "evdev:" prefix match key is a contract between the
+-# rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily expected to be a stable
+-# ABI.
+-#
+ # Match string formats:
+ # evdev:<modalias>
+ # evdev:name:<device name>:dmi:<dmi string>
+diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb
+index 2d5681dea6..802ed9a1e7 100644
+--- a/hwdb.d/60-input-id.hwdb
++++ b/hwdb.d/60-input-id.hwdb
+@@ -3,11 +3,6 @@
+ # The lookup keys are composed in:
+ #   60-input-id.rules
+ #
+-# Note: The format of the "input-id:" prefix match key is a contract between
+-# the rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily expected to be a stable
+-# ABI.
+-#
+ # Match string formats:
+ # id-input:modalias:<modalias>
+ #
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index c196a1fd64..7c830fb9b1 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -13,11 +13,6 @@
+ # The lookup keys are composed in:
+ #   60-evdev.rules
+ #
+-# Note: The format of the "evdev:" prefix match key is a contract between the
+-# rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily expected to be a stable
+-# ABI.
+-#
+ # Supported hardware matches are:
+ #  - Generic input devices match:
+ #      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index ea278913bc..b54539bf53 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -3,11 +3,6 @@
+ # The lookup keys are composed in:
+ #   60-sensor.rules
+ #
+-# Note: The format of the "sensor:" prefix match key is a contract between the
+-# rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily expected to be a stable
+-# ABI.
+-#
+ # Match string formats:
+ # sensor:modalias:<parent modalias pattern>:dmi:<dmi pattern>
+ #
+diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
+index 723d145e34..4084019bde 100644
+--- a/hwdb.d/70-mouse.hwdb
++++ b/hwdb.d/70-mouse.hwdb
+@@ -6,11 +6,6 @@
+ # The lookup keys are composed in:
+ #   70-mouse.rules
+ #
+-# Note: The format of the "mouse:" prefix match key is a contract between the
+-# rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily expected to be a stable
+-# ABI.
+-#
+ # Match key format:
+ # mouse:<subsystem>:v<vid>p<pid>:name:<name>:
+ #
+diff --git a/hwdb.d/70-pointingstick.hwdb b/hwdb.d/70-pointingstick.hwdb
+index 6039119b6a..00f28c6034 100644
+--- a/hwdb.d/70-pointingstick.hwdb
++++ b/hwdb.d/70-pointingstick.hwdb
+@@ -7,10 +7,6 @@
+ # The lookup keys are composed in:
+ #   60-evdev.rules
+ #
+-# Note: The format of the "evdev:" prefix match key is a contract between the
+-# rules file and the hardware data, it might change in later revisions to
+-# support more or better matches, it is not necessarily a stable ABI.
+-#
+ # Supported hardware matches are:
+ #  - Generic input devices match:
+ #      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
diff --git a/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch b/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch
new file mode 100644
index 0000000..ee2a858
--- /dev/null
+++ b/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch
@@ -0,0 +1,34 @@
+From 6575ea8356de2fc9b2aeadca2a8fbe60ef8eb0cf Mon Sep 17 00:00:00 2001
+From: davijosw <82056592+davijosw@users.noreply.github.com>
+Date: Mon, 18 Apr 2022 08:51:45 -0300
+Subject: [PATCH] hwdb: Update 60-keyboard.hwdb (#23074)
+
+Fix Fn+F1 (toggle touchpad) that wasn't working.
+
+Closes #23058
+
+(cherry picked from commit 39cd62c30c2e6bb5ec13ebc1ecf0d37ed015b1b8)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 7c830fb9b1..adf5e9ac35 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -1931,6 +1931,13 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:*
+  KEYBOARD_KEY_db=prog1                                  # Home button
+  KEYBOARD_KEY_dd=back                                   # Second button labeled Back
+ 
++###########################################################
++# Positivo-Vaio
++###########################################################
++# Vaio FE14
++evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE41F11*:pvr*:*
++ KEYBOARD_KEY_76=f21		                     # Fn+F1 toggle touchpad
++
+ ###########################################################
+ # Other
+ ###########################################################
diff --git a/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch b/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch
new file mode 100644
index 0000000..ad1870f
--- /dev/null
+++ b/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch
@@ -0,0 +1,35 @@
+From e964195c2b0a68a83f265f19e76a2de285bf5768 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 18 Apr 2022 20:36:39 +0200
+Subject: [PATCH] hwdb: 60-keyboard: Add Acer Aspire One AO532h keymappings
+
+Add keymappings for the Acer Aspire One AO532h netbook.
+
+Unmap the brightnesskeys because they send duplicate key events with
+the ACPI video bus key events and add a mapping for the bluetooth
+on/off hotkey.
+
+(cherry picked from commit 5e3b8aeef30f8b46669280ecffc178fa43c8bf00)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index adf5e9ac35..2555b8d35a 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -154,6 +154,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:*
+  KEYBOARD_KEY_e0=!pageup
+ 
++# Acer Aspire One AO532h
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO532h:*
++ KEYBOARD_KEY_84=bluetooth
++ KEYBOARD_KEY_ce=unknown  # Brightness Up, also emitted by acpi-video, ignore
++ KEYBOARD_KEY_ef=unknown  # Brightness Down, also emitted by acpi-video, ignore
++
+ # Predator PH 315-52
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:*
+  KEYBOARD_KEY_ef=kbdillumup                             # Fn+F10
diff --git a/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch b/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch
new file mode 100644
index 0000000..c844d01
--- /dev/null
+++ b/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch
@@ -0,0 +1,24 @@
+From a5b4cee7ab052df914d482aa2d0ea52c5eed8b04 Mon Sep 17 00:00:00 2001
+From: Matthew Blythe <mblythester+git@gmail.com>
+Date: Thu, 21 Apr 2022 00:50:13 -0600
+Subject: [PATCH] hwdb 60-keyboard Add HP/Compaq KBR0133
+
+(cherry picked from commit 6ae16e01b59e4e06ecb14db55e9f34396b398014)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 2555b8d35a..e1c124d8b9 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -282,6 +282,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*Evo*N*:*
+  KEYBOARD_KEY_9f=homepage
+ 
+ evdev:input:b0003v049Fp0051*
++evdev:input:b0003v049Fp008D*
+  KEYBOARD_KEY_0c0011=presentation
+  KEYBOARD_KEY_0c0012=addressbook
+  KEYBOARD_KEY_0c0013=info
diff --git a/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch b/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch
new file mode 100644
index 0000000..652c2df
--- /dev/null
+++ b/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch
@@ -0,0 +1,34 @@
+From 3be73821644f6626df5c8261b301caa84f4599a6 Mon Sep 17 00:00:00 2001
+From: davijosw <82056592+davijosw@users.noreply.github.com>
+Date: Thu, 21 Apr 2022 22:41:37 -0300
+Subject: [PATCH] hwdb: add resolutions for the Vaio FE14 touchpad (#23136)
+
+(cherry picked from commit 2338b8f9c56e0b14f25e8633f6e8e636e68638c8)
+
+Related: #2087778
+---
+ hwdb.d/60-evdev.hwdb | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
+index c97cd13557..a7fbf2ad4d 100644
+--- a/hwdb.d/60-evdev.hwdb
++++ b/hwdb.d/60-evdev.hwdb
+@@ -624,6 +624,17 @@ evdev:input:b0003v258Ap001E*
+  EVDEV_ABS_35=::15
+  EVDEV_ABS_36=::15
+ 
++#########################################
++# Positivo-Vaio
++#########################################
++
++# Vaio FE14
++evdev:name:SYNA3602:00 0911:5288 Touchpad:dmi:*svnPositivoBahia-VAIO:pnVJFE41F11*
++ EVDEV_ABS_00=::28
++ EVDEV_ABS_01=::27
++ EVDEV_ABS_35=::28
++ EVDEV_ABS_36=::27
++
+ #########################################
+ # Razer
+ #########################################
diff --git a/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch b/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch
new file mode 100644
index 0000000..44dc98a
--- /dev/null
+++ b/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch
@@ -0,0 +1,29 @@
+From 79e73005cfb020a90aaf322c1bbc7a67b1ccfd4e Mon Sep 17 00:00:00 2001
+From: Benjamin Berg <bberg@redhat.com>
+Date: Fri, 22 Apr 2022 15:59:34 +0200
+Subject: [PATCH] hwdb: Remap micmute to f20 for ASUS WMI hotkeys
+
+For micmute userspace handles both micmute and f20, as Xorg cannot
+handle the high keycode that the micmute key has. As such, adding the
+remapping means that the key will work on Xorg clients and not just when
+using wayland.
+
+(cherry picked from commit 386885c4e6e3908c26582caddb07dead12713aa1)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index e1c124d8b9..f78bc6d9cb 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -233,6 +233,7 @@ evdev:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
+ evdev:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
+ evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
+  KEYBOARD_KEY_6b=f21                                    # Touchpad Toggle
++ KEYBOARD_KEY_7c=f20                                    # Remap micmute to f20
+ 
+ # USB keyboard in Asus FX503VD
+ evdev:input:b0003v0B05p1869*
diff --git a/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch b/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch
new file mode 100644
index 0000000..afdde98
--- /dev/null
+++ b/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch
@@ -0,0 +1,27 @@
+From 8f1b3e4da6e030ac04319a44dcdcc5e0d09d7ecd Mon Sep 17 00:00:00 2001
+From: Lance <Gero3977@gmail.com>
+Date: Fri, 22 Apr 2022 04:22:34 -0700
+Subject: [PATCH] hwdb: Fix rotation for HP Pro Tablet 408 G1
+
+(cherry picked from commit 6dc18ca5ddd996ffbf83b42cb45f23496fe38c9d)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index b54539bf53..d6a584150c 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -453,6 +453,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
+ sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:*
+  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+ 
++# HP Pro Tablet 408 G1
++sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPProTablet408:*:rn8048:*
++ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
++
+ #########################################
+ # I.T.Works
+ #########################################
diff --git a/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch b/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch
new file mode 100644
index 0000000..0e7f517
--- /dev/null
+++ b/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch
@@ -0,0 +1,39 @@
+From ec796ff877b7e02b7bb261558ff7f9a411548f83 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 27 Apr 2022 17:32:21 +0900
+Subject: [PATCH] hwdb: add keyboard mapping for HP ProBook 11G2
+
+Closes #23108.
+
+(cherry picked from commit d10329a08eb06ea4348a7411092404a1d935b5a8)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index f78bc6d9cb..9b06bab54d 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -724,6 +724,11 @@ evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*ProBook*455*G5*:*
+  KEYBOARD_KEY_85=unknown                                # lid close; also reported via special evdev
+  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
+ 
++# HP ProBook 11G2
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
++ KEYBOARD_KEY_d8=!f23                                   # Fn+F2: touchpad off
++ KEYBOARD_KEY_d9=!f22                                   # Fn+F2: touchpad on
++
+ # HP mt44 Mobile Thin Client
+ evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
+  KEYBOARD_KEY_64=calendar                               # Calendar icon (Fn + F12)
+@@ -1692,7 +1697,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
+ 
+ # Galaxy Book (2021) NP750XDA-KD4SE
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn750XDA:pvr*
+- KEYBOARD_KEY_81=!esc 		
++ KEYBOARD_KEY_81=!esc
+  KEYBOARD_KEY_ce=!prog1 	# Fn+F1 launch settings
+  KEYBOARD_KEY_ae=!volumedown 	# Fn+F7 volume down
+  KEYBOARD_KEY_b0=!volumeup	# Fn+F8 volume up
diff --git a/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch b/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch
new file mode 100644
index 0000000..6465235
--- /dev/null
+++ b/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch
@@ -0,0 +1,29 @@
+From f644073dc9ab0213afa9b44a9378166c400b398e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 28 Apr 2022 17:41:48 +0200
+Subject: [PATCH] hwdb: make sure "ninja update-hwdb" works on f35
+
+let's restore compatibility with pyparsing from fedora 35, i.e.:
+
+python3-pyparsing-2.4.7-9.fc35.noarch
+
+(cherry picked from commit 133a0003691daafaefa378f770ae01d01931787d)
+
+Related: #2087778
+---
+ hwdb.d/ids_parser.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hwdb.d/ids_parser.py b/hwdb.d/ids_parser.py
+index 811c12559b..ed2c615508 100755
+--- a/hwdb.d/ids_parser.py
++++ b/hwdb.d/ids_parser.py
+@@ -20,7 +20,7 @@ COMMENTLINE = pythonStyleComment + EOL
+ EMPTYLINE = LineEnd()
+ text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL
+ 
+-ParserElement.set_default_whitespace_chars(' \n')
++ParserElement.setDefaultWhitespaceChars(' \n')
+ 
+ def klass_grammar():
+     klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text')
diff --git a/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch b/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch
new file mode 100644
index 0000000..f3e5160
--- /dev/null
+++ b/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch
@@ -0,0 +1,8002 @@
+From 40f014e06a4f06ad1dde387cf07dcaabdabab278 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 28 Apr 2022 17:37:34 +0200
+Subject: [PATCH] hwbd: run "update-hwdb" for v251-rc2
+
+(cherry picked from commit e21f7a133f079e33e1649cea6a45a2ef0c1399bd)
+
+Related: #2087778
+---
+ hwdb.d/20-OUI.hwdb               |  947 ++++++++++++++++-
+ hwdb.d/20-acpi-vendor.hwdb       |    4 +-
+ hwdb.d/20-acpi-vendor.hwdb.patch |    4 +-
+ hwdb.d/20-pci-vendor-model.hwdb  |  240 ++++-
+ hwdb.d/20-usb-vendor-model.hwdb  |   30 +
+ hwdb.d/acpi_id_registry.html     |    2 +-
+ hwdb.d/ma-large.txt              | 1685 +++++++++++++++++++++++++-----
+ hwdb.d/ma-medium.txt             |  670 ++++++++----
+ hwdb.d/ma-small.txt              |  653 ++++++++----
+ hwdb.d/pci.ids                   |  123 ++-
+ hwdb.d/pnp_id_registry.html      |    2 +-
+ hwdb.d/usb.ids                   |   14 +-
+ 12 files changed, 3661 insertions(+), 713 deletions(-)
+
+diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
+index 4b8f83cc99..aaa3326325 100644
+--- a/hwdb.d/20-OUI.hwdb
++++ b/hwdb.d/20-OUI.hwdb
+@@ -19875,7 +19875,7 @@ OUI:0019FA*
+  ID_OUI_FROM_DATABASE=Cable Vision Electronics CO., LTD.
+ 
+ OUI:0019FB*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:0019FC*
+  ID_OUI_FROM_DATABASE=PT. Ufoakses Sukses Luarbiasa
+@@ -31478,6 +31478,9 @@ OUI:003DE8*
+ OUI:003EE1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:003F10*
++ ID_OUI_FROM_DATABASE=Shenzhen GainStrong Technology Co., Ltd.
++
+ OUI:004000*
+  ID_OUI_FROM_DATABASE=PCI COMPONENTES DA AMZONIA LTD
+ 
+@@ -32246,6 +32249,9 @@ OUI:0040FE*
+ OUI:0040FF*
+  ID_OUI_FROM_DATABASE=TELEBIT CORPORATION
+ 
++OUI:00410E*
++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++
+ OUI:0041B4*
+  ID_OUI_FROM_DATABASE=Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
+ 
+@@ -33029,6 +33035,9 @@ OUI:005218*
+ OUI:0052C2*
+  ID_OUI_FROM_DATABASE=peiker acustic GmbH
+ 
++OUI:0052C8*
++ ID_OUI_FROM_DATABASE=Made Studio Design Ltd.
++
+ OUI:00549F*
+  ID_OUI_FROM_DATABASE=Avaya Inc
+ 
+@@ -36585,7 +36594,7 @@ OUI:00A2FF*
+  ID_OUI_FROM_DATABASE=abatec group AG
+ 
+ OUI:00A388*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:00A38E*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+@@ -39750,7 +39759,7 @@ OUI:0425F0*
+  ID_OUI_FROM_DATABASE=Nokia
+ 
+ OUI:042605*
+- ID_OUI_FROM_DATABASE=GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH
++ ID_OUI_FROM_DATABASE=Bosch Building Automation GmbH
+ 
+ OUI:042665*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+@@ -39761,6 +39770,9 @@ OUI:042728*
+ OUI:042758*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:04292E*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:042AE2*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -39878,6 +39890,9 @@ OUI:044F17*
+ OUI:044F4C*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:044F7A*
++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
++
+ OUI:044F8B*
+  ID_OUI_FROM_DATABASE=Adapteva, Inc.
+ 
+@@ -40107,7 +40122,7 @@ OUI:047F0E*
+  ID_OUI_FROM_DATABASE=Barrot Technology Limited
+ 
+ OUI:04819B*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:0481AE*
+  ID_OUI_FROM_DATABASE=Clack Corporation
+@@ -40223,6 +40238,9 @@ OUI:04A316*
+ OUI:04A3F3*
+  ID_OUI_FROM_DATABASE=Emicon
+ 
++OUI:04A741*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:04A82A*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
+@@ -40263,7 +40281,7 @@ OUI:04B6BE*
+  ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+ 
+ OUI:04B86A*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:04B97D*
+  ID_OUI_FROM_DATABASE=AiVIS Co., Itd.
+@@ -40400,6 +40418,9 @@ OUI:04C991*
+ OUI:04C9D9*
+  ID_OUI_FROM_DATABASE=Dish Technologies Corp
+ 
++OUI:04CAED*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:04CB1D*
+  ID_OUI_FROM_DATABASE=Traka plc
+ 
+@@ -40523,6 +40544,9 @@ OUI:04D7A5*
+ OUI:04D921*
+  ID_OUI_FROM_DATABASE=Occuspace
+ 
++OUI:04D9C8*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
++
+ OUI:04D9F5*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
+@@ -40598,6 +40622,9 @@ OUI:04E795*
+ OUI:04E892*
+  ID_OUI_FROM_DATABASE=SHENNAN CIRCUITS CO.,LTD
+ 
++OUI:04E8B9*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:04E9E5*
+  ID_OUI_FROM_DATABASE=PJRC.COM, LLC
+ 
+@@ -41747,6 +41774,9 @@ OUI:089BF1*
+ OUI:089C86*
+  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+ 
++OUI:089DF4*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:089E01*
+  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
+ 
+@@ -41825,6 +41855,9 @@ OUI:08B4B1*
+ OUI:08B4CF*
+  ID_OUI_FROM_DATABASE=Abicom International
+ 
++OUI:08B61F*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:08B738*
+  ID_OUI_FROM_DATABASE=Lite-On Technogy Corp.
+ 
+@@ -42062,6 +42095,9 @@ OUI:08F1EA*
+ OUI:08F2F4*
+  ID_OUI_FROM_DATABASE=Net One Partners Co.,Ltd.
+ 
++OUI:08F3FB*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:08F458*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -42596,6 +42632,51 @@ OUI:0C7D7C*
+ OUI:0C7FB2*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:0C7FED0*
++ ID_OUI_FROM_DATABASE=Guangdong Tianshu New Energy Technology Co., Ltd
++
++OUI:0C7FED1*
++ ID_OUI_FROM_DATABASE=Toast, Inc.
++
++OUI:0C7FED2*
++ ID_OUI_FROM_DATABASE=Tango Networks Inc
++
++OUI:0C7FED3*
++ ID_OUI_FROM_DATABASE=Soft dB
++
++OUI:0C7FED4*
++ ID_OUI_FROM_DATABASE=Purple Mountain ,Inc
++
++OUI:0C7FED5*
++ ID_OUI_FROM_DATABASE=ShenZhen TianGang Micro Technology CO.LTD
++
++OUI:0C7FED6*
++ ID_OUI_FROM_DATABASE=Netweb Technologies India Pvt Ltd
++
++OUI:0C7FED7*
++ ID_OUI_FROM_DATABASE=Grandway Technology (Shenzhen) Limited
++
++OUI:0C7FED8*
++ ID_OUI_FROM_DATABASE=U-tec Group Inc.
++
++OUI:0C7FED9*
++ ID_OUI_FROM_DATABASE=Shenzhen ORVIBO Technology Co., Ltd.
++
++OUI:0C7FEDA*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:0C7FEDB*
++ ID_OUI_FROM_DATABASE=TelX Systems
++
++OUI:0C7FEDC*
++ ID_OUI_FROM_DATABASE=Shenzhen MoreSense Technology Co., Ltd.
++
++OUI:0C7FEDD*
++ ID_OUI_FROM_DATABASE=ALT Co., Ltd.
++
++OUI:0C7FEDE*
++ ID_OUI_FROM_DATABASE=environmental systems corporation
++
+ OUI:0C8063*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -42743,6 +42824,9 @@ OUI:0C9043*
+ OUI:0C9160*
+  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+ 
++OUI:0C9192*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:0C924E*
+  ID_OUI_FROM_DATABASE=Rice Lake Weighing Systems
+ 
+@@ -42884,6 +42968,9 @@ OUI:0CBC9F*
+ OUI:0CBD51*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
++OUI:0CBEF1*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:0CBF15*
+  ID_OUI_FROM_DATABASE=Genetec Inc.
+ 
+@@ -43155,7 +43242,7 @@ OUI:0CF893*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+ OUI:0CF9C0*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:0CFC83*
+  ID_OUI_FROM_DATABASE=Airoha Technology Corp.,
+@@ -43754,6 +43841,9 @@ OUI:1071F9*
+ OUI:107223*
+  ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
+ 
++OUI:1073EB*
++ ID_OUI_FROM_DATABASE=Infiniti Electro-Optics
++
+ OUI:10746F*
+  ID_OUI_FROM_DATABASE=MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
+ 
+@@ -45614,6 +45704,9 @@ OUI:184C08*
+ OUI:184CAE*
+  ID_OUI_FROM_DATABASE=CONTINENTAL
+ 
++OUI:184E03*
++ ID_OUI_FROM_DATABASE=HMD Global Oy
++
+ OUI:184E16*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -45839,6 +45932,9 @@ OUI:1879A2*
+ OUI:187A3B*
+  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+ 
++OUI:187A3E*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:187A93*
+  ID_OUI_FROM_DATABASE=AMICCOM Electronics Corporation
+ 
+@@ -46091,6 +46187,9 @@ OUI:18A9A6*
+ OUI:18AA0F*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:18AA1E*
++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
++
+ OUI:18AA45*
+  ID_OUI_FROM_DATABASE=Fon Technology
+ 
+@@ -46208,6 +46307,9 @@ OUI:18C293*
+ OUI:18C2BF*
+  ID_OUI_FROM_DATABASE=BUFFALO.INC
+ 
++OUI:18C300*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:18C451*
+  ID_OUI_FROM_DATABASE=Tucson Embedded Systems
+ 
+@@ -46379,6 +46481,9 @@ OUI:18E829*
+ OUI:18E8DD*
+  ID_OUI_FROM_DATABASE=MODULETEK
+ 
++OUI:18E91D*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:18ECE7*
+  ID_OUI_FROM_DATABASE=BUFFALO.INC
+ 
+@@ -46526,6 +46631,9 @@ OUI:1C0B52*
+ OUI:1C0D7D*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:1C0ED3*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:1C0FAF*
+  ID_OUI_FROM_DATABASE=Lucid Vision Labs
+ 
+@@ -46793,6 +46901,9 @@ OUI:1C4593*
+ OUI:1C45C2*
+  ID_OUI_FROM_DATABASE=Huizhou City Sunsin lntelligent Technology Co.,Ltd
+ 
++OUI:1C46D1*
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
++
+ OUI:1C472F*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -47409,7 +47520,7 @@ OUI:1C9F4E*
+  ID_OUI_FROM_DATABASE=COOSEA GROUP (HK) COMPANY LIMITED
+ 
+ OUI:1CA0B8*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:1CA0D30*
+  ID_OUI_FROM_DATABASE=OOO Tekhnotronika
+@@ -47867,6 +47978,9 @@ OUI:1CEEC9*
+ OUI:1CEEE8*
+  ID_OUI_FROM_DATABASE=Ilshin Elecom
+ 
++OUI:1CEF03*
++ ID_OUI_FROM_DATABASE=Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
++
+ OUI:1CEFCE*
+  ID_OUI_FROM_DATABASE=bebro electronic GmbH
+ 
+@@ -47888,6 +48002,9 @@ OUI:1CF4CA*
+ OUI:1CF5E7*
+  ID_OUI_FROM_DATABASE=Turtle Industry Co., Ltd.
+ 
++OUI:1CF8D0*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:1CFA68*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -47957,6 +48074,9 @@ OUI:2002AF*
+ OUI:20040F*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:2004F3*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:200505*
+  ID_OUI_FROM_DATABASE=RADMAX COMMUNICATION PRIVATE LIMITED
+ 
+@@ -48225,7 +48345,7 @@ OUI:2047DA*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+ OUI:2047ED*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:204AAA*
+  ID_OUI_FROM_DATABASE=Hanscan Spain S.A.
+@@ -48563,6 +48683,9 @@ OUI:209BCD*
+ OUI:209BE6*
+  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+ 
++OUI:209CB4*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:209E79*
+  ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+ 
+@@ -49136,6 +49259,9 @@ OUI:2426D6*
+ OUI:2428FD*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
++OUI:242934*
++ ID_OUI_FROM_DATABASE=Google, Inc.
++
+ OUI:2429FE*
+  ID_OUI_FROM_DATABASE=KYOCERA Corporation
+ 
+@@ -49160,6 +49286,9 @@ OUI:243154*
+ OUI:243184*
+  ID_OUI_FROM_DATABASE=SHARP Corporation
+ 
++OUI:2432AE*
++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
++
+ OUI:24336C*
+  ID_OUI_FROM_DATABASE=Private
+ 
+@@ -49608,7 +49737,7 @@ OUI:24A799*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+ OUI:24A7DC*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:24A87D*
+  ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.
+@@ -49910,6 +50039,9 @@ OUI:24FD52*
+ OUI:24FD5B*
+  ID_OUI_FROM_DATABASE=SmartThings, Inc.
+ 
++OUI:28011C*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:280244*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -50315,6 +50447,9 @@ OUI:2852F9*
+ OUI:28534E*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:2853E0*
++ ID_OUI_FROM_DATABASE=Sintela Ltd
++
+ OUI:285471*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -50423,6 +50558,9 @@ OUI:2876CD*
+ OUI:287777*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:2877B1*
++ ID_OUI_FROM_DATABASE=Tri plus grupa d.o.o.
++
+ OUI:2877F1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -50663,6 +50801,9 @@ OUI:28BAB5*
+ OUI:28BB59*
+  ID_OUI_FROM_DATABASE=RNET Technologies, Inc.
+ 
++OUI:28BC05*
++ ID_OUI_FROM_DATABASE=BLU Products Inc
++
+ OUI:28BC18*
+  ID_OUI_FROM_DATABASE=SourcingOverseas Co. Ltd
+ 
+@@ -50691,7 +50832,7 @@ OUI:28C0DA*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+ OUI:28C13C*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:28C21F*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+@@ -51800,6 +51941,9 @@ OUI:2C91AB*
+ OUI:2C922C*
+  ID_OUI_FROM_DATABASE=Kishu Giken Kogyou Company Ltd,.
+ 
++OUI:2C93FB*
++ ID_OUI_FROM_DATABASE=Sercomm France Sarl
++
+ OUI:2C9464*
+  ID_OUI_FROM_DATABASE=Cincoze Co., Ltd.
+ 
+@@ -51872,6 +52016,9 @@ OUI:2CA539*
+ OUI:2CA59C*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
++OUI:2CA774*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:2CA780*
+  ID_OUI_FROM_DATABASE=True Technologies Inc.
+ 
+@@ -52199,6 +52346,9 @@ OUI:3003C8*
+ OUI:30045C*
+  ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+ 
++OUI:300505*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:30053F*
+  ID_OUI_FROM_DATABASE=JTI Co.,Ltd.
+ 
+@@ -52736,6 +52886,9 @@ OUI:306118*
+ OUI:30636B*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:306371*
++ ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin Technology Co.Ltd
++
+ OUI:3065EC*
+  ID_OUI_FROM_DATABASE=Wistron (ChongQing)
+ 
+@@ -53576,6 +53729,9 @@ OUI:3438AF*
+ OUI:3438B7*
+  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+ 
++OUI:343A20*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:343D98*
+  ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd.
+ 
+@@ -53855,6 +54011,9 @@ OUI:3484E4*
+ OUI:348511*
+  ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 
++OUI:348518*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:348584*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
+@@ -54410,6 +54569,9 @@ OUI:34FCEF*
+ OUI:34FD6A*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:34FE1C*
++ ID_OUI_FROM_DATABASE=CHOUNG HWA TECH CO.,LTD
++
+ OUI:34FE77*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -54461,6 +54623,9 @@ OUI:3809A4*
+ OUI:380A0A*
+  ID_OUI_FROM_DATABASE=Sky-City Communication and Electronics Limited Company
+ 
++OUI:380A4F*
++ ID_OUI_FROM_DATABASE=PRACHI ENTERPRISES
++
+ OUI:380A94*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -54617,6 +54782,9 @@ OUI:3822D6*
+ OUI:3822E2*
+  ID_OUI_FROM_DATABASE=HP Inc.
+ 
++OUI:3822F4*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:38256B*
+  ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
+ 
+@@ -54827,6 +54995,9 @@ OUI:385B44*
+ OUI:385C76*
+  ID_OUI_FROM_DATABASE=PLANTRONICS, INC.
+ 
++OUI:385CFB*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:385F66*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -54980,6 +55151,9 @@ OUI:388479*
+ OUI:388602*
+  ID_OUI_FROM_DATABASE=Flexoptix GmbH
+ 
++OUI:3886F7*
++ ID_OUI_FROM_DATABASE=Google, Inc.
++
+ OUI:3887D5*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -55079,6 +55253,9 @@ OUI:38A067*
+ OUI:38A28C*
+  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+ 
++OUI:38A44B*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:38A4ED*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -55092,7 +55269,7 @@ OUI:38A659*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
+ OUI:38A6CE*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:38A851*
+  ID_OUI_FROM_DATABASE=Moog, Ing
+@@ -55427,6 +55604,9 @@ OUI:38E595*
+ OUI:38E60A*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:38E7C0*
++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
++
+ OUI:38E7D8*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
+@@ -55467,7 +55647,7 @@ OUI:38F098*
+  ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems
+ 
+ OUI:38F0C8*
+- ID_OUI_FROM_DATABASE=Mevo Inc.
++ ID_OUI_FROM_DATABASE=Logitech
+ 
+ OUI:38F135*
+  ID_OUI_FROM_DATABASE=SensorTec-Canada
+@@ -55679,6 +55859,9 @@ OUI:3C08F6*
+ OUI:3C096D*
+  ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+ 
++OUI:3C0B4F*
++ ID_OUI_FROM_DATABASE=Yandex Services AG
++
+ OUI:3C0C48*
+  ID_OUI_FROM_DATABASE=Servergy, Inc.
+ 
+@@ -56001,7 +56184,7 @@ OUI:3C438E*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+ OUI:3C457A*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:3C4645*
+  ID_OUI_FROM_DATABASE=Shanghai Infinity Wireless Technologies Co.,Ltd.
+@@ -56033,6 +56216,9 @@ OUI:3C4DBE*
+ OUI:3C4E47*
+  ID_OUI_FROM_DATABASE=Etronic A/S
+ 
++OUI:3C4E56*
++ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++
+ OUI:3C510E*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -56274,7 +56460,7 @@ OUI:3C8970*
+  ID_OUI_FROM_DATABASE=Neosfar
+ 
+ OUI:3C8994*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:3C89A6*
+  ID_OUI_FROM_DATABASE=KAPELSE
+@@ -56367,7 +56553,7 @@ OUI:3C9D56*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:3C9EC7*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:3C9F81*
+  ID_OUI_FROM_DATABASE=Shenzhen CATIC Bit Communications Technology Co.,Ltd
+@@ -56591,6 +56777,9 @@ OUI:3CDFBD*
+ OUI:3CE038*
+  ID_OUI_FROM_DATABASE=Omnifi Inc.
+ 
++OUI:3CE064*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:3CE072*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -56618,6 +56807,9 @@ OUI:3CE624*
+ OUI:3CE824*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:3CE90E*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:3CE9F7*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -56732,6 +56924,9 @@ OUI:3CFB96*
+ OUI:3CFDFE*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:3CFEAC*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:3CFFD8*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -56774,6 +56969,9 @@ OUI:400E67*
+ OUI:400E85*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
++OUI:400EF3*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:4011750*
+  ID_OUI_FROM_DATABASE=Lexi Devices, Inc.
+ 
+@@ -56876,6 +57074,9 @@ OUI:401D59*
+ OUI:402230*
+  ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+ 
++OUI:4022D8*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:4022ED*
+  ID_OUI_FROM_DATABASE=Digital Projection Ltd
+ 
+@@ -57152,6 +57353,9 @@ OUI:405D82*
+ OUI:405EE1*
+  ID_OUI_FROM_DATABASE=Shenzhen H&T Intelligent Control Co.,Ltd.
+ 
++OUI:405EF6*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:405F7D*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
+@@ -57542,6 +57746,9 @@ OUI:40BF17*
+ OUI:40C245*
+  ID_OUI_FROM_DATABASE=Shenzhen Hexicom Technology Co., Ltd.
+ 
++OUI:40C3BC*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:40C3C6*
+  ID_OUI_FROM_DATABASE=SnapRoute
+ 
+@@ -57638,6 +57845,9 @@ OUI:40DEAD*
+ OUI:40DF02*
+  ID_OUI_FROM_DATABASE=LINE BIZ Plus
+ 
++OUI:40E171*
++ ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd.
++
+ OUI:40E1E4*
+  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+ 
+@@ -57815,6 +58025,9 @@ OUI:40F52E*
+ OUI:40F6BC*
+  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+ 
++OUI:40F8DF*
++ ID_OUI_FROM_DATABASE=CANON INC.
++
+ OUI:40F946*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -58883,6 +59096,9 @@ OUI:48022A*
+ OUI:480286*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:4802AF*
++ ID_OUI_FROM_DATABASE=Telit Communication s.p.a
++
+ OUI:480362*
+  ID_OUI_FROM_DATABASE=DESAY ELECTRONICS(HUIZHOU)CO.,LTD
+ 
+@@ -59024,6 +59240,9 @@ OUI:482759*
+ OUI:4827C5*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:4827E2*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:4827EA*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -59321,6 +59540,9 @@ OUI:486FD2*
+ OUI:48701E*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:48706F*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:487119*
+  ID_OUI_FROM_DATABASE=SGB GROUP LTD.
+ 
+@@ -59534,6 +59756,9 @@ OUI:48AA5D*
+ OUI:48AD08*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:48AD9A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:48B02D*
+  ID_OUI_FROM_DATABASE=NVIDIA Corporation
+ 
+@@ -59981,6 +60206,9 @@ OUI:4C2FD7*
+ OUI:4C3089*
+  ID_OUI_FROM_DATABASE=Thales Transportation Systems GmbH
+ 
++OUI:4C312D*
++ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
++
+ OUI:4C322D*
+  ID_OUI_FROM_DATABASE=TELEDATA NETWORKS
+ 
+@@ -60176,6 +60404,9 @@ OUI:4C617E*
+ OUI:4C6255*
+  ID_OUI_FROM_DATABASE=SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
+ 
++OUI:4C627B*
++ ID_OUI_FROM_DATABASE=SmartCow AI Technologies Taiwan Ltd.
++
+ OUI:4C6371*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -60261,7 +60492,7 @@ OUI:4C7167*
+  ID_OUI_FROM_DATABASE=PoLabs d.o.o.
+ 
+ OUI:4C7274*
+- ID_OUI_FROM_DATABASE=shenzhenshi  xinzhongxin Technology Co.Ltd
++ ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin Technology Co.Ltd
+ 
+ OUI:4C72B9*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+@@ -61470,7 +61701,7 @@ OUI:506F9A*
+  ID_OUI_FROM_DATABASE=Wi-Fi Alliance
+ 
+ OUI:507043*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:507097*
+  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+@@ -62054,6 +62285,9 @@ OUI:50F0D3*
+ OUI:50F14A*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:50F261*
++ ID_OUI_FROM_DATABASE=Photon Sail Technologies
++
+ OUI:50F43C*
+  ID_OUI_FROM_DATABASE=Leeo Inc
+ 
+@@ -62324,6 +62558,9 @@ OUI:542F8A*
+ OUI:543131*
+  ID_OUI_FROM_DATABASE=Raster Vision Ltd
+ 
++OUI:5431D4*
++ ID_OUI_FROM_DATABASE=TGW Mechanics GmbH
++
+ OUI:5433CB*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -62357,6 +62594,9 @@ OUI:543B30*
+ OUI:543D37*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
++OUI:543D92*
++ ID_OUI_FROM_DATABASE=WIRELESS-TEK TECHNOLOGY LIMITED
++
+ OUI:543E64*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
+@@ -62375,6 +62615,9 @@ OUI:544408*
+ OUI:5444A3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:544538*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:544617*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -63134,6 +63377,9 @@ OUI:5819F8*
+ OUI:581CBD*
+  ID_OUI_FROM_DATABASE=Affinegy
+ 
++OUI:581CF8*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:581D91*
+  ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd.
+ 
+@@ -63218,6 +63464,9 @@ OUI:58278C*
+ OUI:582AF7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:582B0A*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:582BDB*
+  ID_OUI_FROM_DATABASE=Pax AB
+ 
+@@ -63695,6 +63944,9 @@ OUI:58AEF1*
+ OUI:58B035*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:58B03E*
++ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
++
+ OUI:58B0D4*
+  ID_OUI_FROM_DATABASE=ZuniData Systems Inc.
+ 
+@@ -63704,6 +63956,9 @@ OUI:58B0FE*
+ OUI:58B10F*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:58B38F*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:58B3FC*
+  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+ 
+@@ -63761,6 +64016,9 @@ OUI:58C356*
+ OUI:58C38B*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:58C57E*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:58C583*
+  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+ 
+@@ -64322,6 +64580,9 @@ OUI:5C5EAB*
+ OUI:5C5F67*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:5C60BA*
++ ID_OUI_FROM_DATABASE=HP Inc.
++
+ OUI:5C6199*
+  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 
+@@ -65789,6 +66050,9 @@ OUI:60CE86*
+ OUI:60CE92*
+  ID_OUI_FROM_DATABASE=The Refined Industry Company Limited
+ 
++OUI:60CF69*
++ ID_OUI_FROM_DATABASE=meerecompany
++
+ OUI:60D02C*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -66092,6 +66356,9 @@ OUI:640DE6*
+ OUI:640E36*
+  ID_OUI_FROM_DATABASE=TAZTAG
+ 
++OUI:640E6A*
++ ID_OUI_FROM_DATABASE=SECO-LARM USA Inc
++
+ OUI:640E94*
+  ID_OUI_FROM_DATABASE=Pluribus Networks, Inc.
+ 
+@@ -67355,6 +67622,9 @@ OUI:68536C*
+ OUI:685388*
+  ID_OUI_FROM_DATABASE=P&S Technology
+ 
++OUI:68539D*
++ ID_OUI_FROM_DATABASE=EM Microelectronic
++
+ OUI:68545A*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -67409,6 +67679,9 @@ OUI:686359*
+ OUI:68644B*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:6865B7*
++ ID_OUI_FROM_DATABASE=Zhishang Chuanglian Technology Co., Ltd
++
+ OUI:686725*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -67508,6 +67781,9 @@ OUI:687924*
+ OUI:6879ED*
+  ID_OUI_FROM_DATABASE=SHARP Corporation
+ 
++OUI:687A64*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:687CC8*
+  ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L.
+ 
+@@ -67523,6 +67799,9 @@ OUI:687DB4*
+ OUI:687F74*
+  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+ 
++OUI:687FF0*
++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
++
+ OUI:6881E0*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -67778,6 +68057,9 @@ OUI:68B8D9*
+ OUI:68B983*
+  ID_OUI_FROM_DATABASE=b-plus GmbH
+ 
++OUI:68B9C2*
++ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
++
+ OUI:68B9D3*
+  ID_OUI_FROM_DATABASE=Shenzhen Trolink Technology CO, LTD
+ 
+@@ -67847,6 +68129,9 @@ OUI:68D79A*
+ OUI:68D925*
+  ID_OUI_FROM_DATABASE=ProSys Development Services
+ 
++OUI:68D927*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:68D93C*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -67877,6 +68162,9 @@ OUI:68DDD9*
+ OUI:68DFDD*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:68E154*
++ ID_OUI_FROM_DATABASE=SiMa.ai
++
+ OUI:68E166*
+  ID_OUI_FROM_DATABASE=Private
+ 
+@@ -67908,7 +68196,7 @@ OUI:68EC62*
+  ID_OUI_FROM_DATABASE=YODO Technology Corp. Ltd.
+ 
+ OUI:68EC8A*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=IKEA of Sweden AB
+ 
+ OUI:68ECC5*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+@@ -67919,6 +68207,9 @@ OUI:68ED43*
+ OUI:68EDA4*
+  ID_OUI_FROM_DATABASE=Shenzhen Seavo Technology Co.,Ltd
+ 
++OUI:68EE88*
++ ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
++
+ OUI:68EE96*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -68207,6 +68498,9 @@ OUI:6C2F2C*
+ OUI:6C2F8A*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:6C302A*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:6C310E*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -68420,6 +68714,9 @@ OUI:6C5E7A*
+ OUI:6C5F1C*
+  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+ 
++OUI:6C60D0*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:6C60EB*
+  ID_OUI_FROM_DATABASE=ZHI YUAN ELECTRONICS CO., LIMITED
+ 
+@@ -68480,6 +68777,9 @@ OUI:6C71D9*
+ OUI:6C7220*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:6C724A*
++ ID_OUI_FROM_DATABASE=Onkyo Technology K.K.
++
+ OUI:6C72E7*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -68640,7 +68940,7 @@ OUI:6C9E7C*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
+ OUI:6CA0B4*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:6CA100*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+@@ -68789,6 +69089,9 @@ OUI:6CC1D2*
+ OUI:6CC217*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:6CC242*
++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
++
+ OUI:6CC26B*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -69150,7 +69453,7 @@ OUI:701F53*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+ OUI:702084*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:702393*
+  ID_OUI_FROM_DATABASE=fos4X GmbH
+@@ -69342,7 +69645,7 @@ OUI:704FB8*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+ OUI:7050AF*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:7050E70*
+  ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
+@@ -75372,7 +75675,7 @@ OUI:70B3D572E*
+  ID_OUI_FROM_DATABASE=Maharsystem
+ 
+ OUI:70B3D572F*
+- ID_OUI_FROM_DATABASE=AVA Technologies Inc.
++ ID_OUI_FROM_DATABASE=Ava Technologies
+ 
+ OUI:70B3D5730*
+  ID_OUI_FROM_DATABASE=Videogenix
+@@ -82460,6 +82763,9 @@ OUI:7412B3*
+ OUI:7412BB*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
++OUI:7413EA*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:741489*
+  ID_OUI_FROM_DATABASE=SRT Wireless
+ 
+@@ -82643,6 +82949,9 @@ OUI:7433A6*
+ OUI:743400*
+  ID_OUI_FROM_DATABASE=MTG Co., Ltd.
+ 
++OUI:74342B*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:7434AE*
+  ID_OUI_FROM_DATABASE=this is engineering Inc.
+ 
+@@ -82655,6 +82964,9 @@ OUI:74372F*
+ OUI:74373B*
+  ID_OUI_FROM_DATABASE=UNINET Co.,Ltd.
+ 
++OUI:74375F*
++ ID_OUI_FROM_DATABASE=SERCOMM PHILIPPINES INC
++
+ OUI:743889*
+  ID_OUI_FROM_DATABASE=ANNAX Anzeigesysteme GmbH
+ 
+@@ -82670,6 +82982,9 @@ OUI:743A65*
+ OUI:743AEF*
+  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
+ 
++OUI:743AF4*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:743C18*
+  ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+ 
+@@ -82709,6 +83024,9 @@ OUI:744687*
+ OUI:7446A0*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:7446B3*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:744AA4*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -83411,6 +83729,9 @@ OUI:74E6B8*
+ OUI:74E6E2*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:74E798*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:74E7C6*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+@@ -83826,7 +84147,7 @@ OUI:783D5B*
+  ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A.
+ 
+ OUI:783E53*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:783F15*
+  ID_OUI_FROM_DATABASE=EasySYNC Ltd.
+@@ -84419,6 +84740,9 @@ OUI:78BEBD*
+ OUI:78C1A7*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:78C213*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:78C2C00*
+  ID_OUI_FROM_DATABASE=Shenzhen ELI Technology co.,ltd
+ 
+@@ -84920,6 +85244,9 @@ OUI:7C0A50*
+ OUI:7C0BC6*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:7C0C92*
++ ID_OUI_FROM_DATABASE=Suzhou Mobydata Smart System Co.,Ltd.
++
+ OUI:7C0CF6*
+  ID_OUI_FROM_DATABASE=Guangdong Huiwei High-tech Co., Ltd.
+ 
+@@ -85188,7 +85515,7 @@ OUI:7C4C58*
+  ID_OUI_FROM_DATABASE=Scale Computing, Inc.
+ 
+ OUI:7C4CA5*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:7C4E09*
+  ID_OUI_FROM_DATABASE=Shenzhen Skyworth Wireless Technology Co.,Ltd
+@@ -85250,6 +85577,9 @@ OUI:7C6166*
+ OUI:7C6193*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+ 
++OUI:7C6305*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:7C6456*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -85262,6 +85592,9 @@ OUI:7C66EF*
+ OUI:7C67A2*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:7C67AB*
++ ID_OUI_FROM_DATABASE=Roku, Inc
++
+ OUI:7C696B*
+  ID_OUI_FROM_DATABASE=Atmosic Technologies
+ 
+@@ -85937,6 +86270,9 @@ OUI:7CDD90*
+ OUI:7CDDE9*
+  ID_OUI_FROM_DATABASE=ATOM tech Inc.
+ 
++OUI:7CDE78*
++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
++
+ OUI:7CDFA1*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -86096,21 +86432,45 @@ OUI:8002F40*
+ OUI:8002F41*
+  ID_OUI_FROM_DATABASE=Sichuan lookout environment protection technology co.,Ltd
+ 
++OUI:8002F42*
++ ID_OUI_FROM_DATABASE=Beijing Cybercore
++
+ OUI:8002F43*
+  ID_OUI_FROM_DATABASE=Shenzhen Suanzi Technology Co., Ltd
+ 
++OUI:8002F44*
++ ID_OUI_FROM_DATABASE=Infors AG
++
+ OUI:8002F45*
+  ID_OUI_FROM_DATABASE=Sichuan Fanyi Technology Co. Ltd.
+ 
++OUI:8002F46*
++ ID_OUI_FROM_DATABASE=Mech-Mind Robotics Technologies Ltd.
++
++OUI:8002F47*
++ ID_OUI_FROM_DATABASE=Lazer Safe Pty Ltd
++
++OUI:8002F48*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
+ OUI:8002F49*
+  ID_OUI_FROM_DATABASE=XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+ 
+ OUI:8002F4A*
+  ID_OUI_FROM_DATABASE=PassiveLogic
+ 
++OUI:8002F4B*
++ ID_OUI_FROM_DATABASE=Baicells Technologies Co., Ltd
++
+ OUI:8002F4C*
+  ID_OUI_FROM_DATABASE=Wuhan Glory Road Intelligent Technology Co., Ltd.
+ 
++OUI:8002F4D*
++ ID_OUI_FROM_DATABASE=Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
++
++OUI:8002F4E*
++ ID_OUI_FROM_DATABASE=Alfred Systems Inc
++
+ OUI:800384*
+  ID_OUI_FROM_DATABASE=Ruckus Wireless
+ 
+@@ -86210,6 +86570,9 @@ OUI:801934*
+ OUI:801967*
+  ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology  Co.,Ltd
+ 
++OUI:801970*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:8019FE*
+  ID_OUI_FROM_DATABASE=JianLing Technology CO., LTD
+ 
+@@ -86405,6 +86768,9 @@ OUI:8050F6*
+ OUI:80546A*
+  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 
++OUI:80549C*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:8054D9*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -86523,7 +86889,7 @@ OUI:80717A*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:807215*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:807264*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+@@ -86538,7 +86904,7 @@ OUI:807484*
+  ID_OUI_FROM_DATABASE=ALL Winner (Hong Kong) Limited
+ 
+ OUI:80751F*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:807693*
+  ID_OUI_FROM_DATABASE=Newag SA
+@@ -86604,7 +86970,7 @@ OUI:807B85B*
+  ID_OUI_FROM_DATABASE=Oliotalo Oy
+ 
+ OUI:807B85C*
+- ID_OUI_FROM_DATABASE=Ningbo Plus and Popscreens electronic Technology Co.,LTD
++ ID_OUI_FROM_DATABASE=SCALA Digital Technology(Ningbo) CO, LTD
+ 
+ OUI:807B85D*
+  ID_OUI_FROM_DATABASE=Kaynes Technology India Pvt Ltd
+@@ -86930,6 +87296,9 @@ OUI:80DA13*
+ OUI:80DABC*
+  ID_OUI_FROM_DATABASE=Megafone Limited
+ 
++OUI:80DAC2*
++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
++
+ OUI:80DB31*
+  ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
+ 
+@@ -87098,6 +87467,9 @@ OUI:840B2D*
+ OUI:840B7C*
+  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+ 
++OUI:840BBB*
++ ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
++
+ OUI:840D8E*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -88181,6 +88553,9 @@ OUI:880907*
+ OUI:8809AF*
+  ID_OUI_FROM_DATABASE=Masimo Corporation
+ 
++OUI:880AA3*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:880F10*
+  ID_OUI_FROM_DATABASE=Huami Information Technology Co.,Ltd.
+ 
+@@ -88202,6 +88577,9 @@ OUI:88123D*
+ OUI:88124E*
+  ID_OUI_FROM_DATABASE=Qualcomm Inc.
+ 
++OUI:8812AC*
++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
++
+ OUI:88142B*
+  ID_OUI_FROM_DATABASE=Protonic Holland
+ 
+@@ -88238,6 +88616,9 @@ OUI:882012*
+ OUI:8821E3*
+  ID_OUI_FROM_DATABASE=Nebusens, S.L.
+ 
++OUI:8822B2*
++ ID_OUI_FROM_DATABASE=Chipsea Technologies (Shenzhen) Corp.
++
+ OUI:88231F*
+  ID_OUI_FROM_DATABASE=Fibocom Wireless Inc.
+ 
+@@ -88907,6 +89288,9 @@ OUI:88B66B*
+ OUI:88B6EE*
+  ID_OUI_FROM_DATABASE=Dish Technologies Corp
+ 
++OUI:88B863*
++ ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD
++
+ OUI:88B8D0*
+  ID_OUI_FROM_DATABASE=Dongguan Koppo Electronic Co.,Ltd
+ 
+@@ -89465,6 +89849,9 @@ OUI:8C1F64077*
+ OUI:8C1F6407E*
+  ID_OUI_FROM_DATABASE=FLOYD inc.
+ 
++OUI:8C1F64080*
++ ID_OUI_FROM_DATABASE=Twinleaf LLC
++
+ OUI:8C1F64085*
+  ID_OUI_FROM_DATABASE=SORB ENGINEERING LLC
+ 
+@@ -89492,6 +89879,9 @@ OUI:8C1F640A8*
+ OUI:8C1F640AB*
+  ID_OUI_FROM_DATABASE=Norbit ODM AS
+ 
++OUI:8C1F640AC*
++ ID_OUI_FROM_DATABASE=Patch Technologies, Inc.
++
+ OUI:8C1F640AF*
+  ID_OUI_FROM_DATABASE=FORSEE POWER
+ 
+@@ -89501,6 +89891,9 @@ OUI:8C1F640B0*
+ OUI:8C1F640B8*
+  ID_OUI_FROM_DATABASE=Signatrol Ltd
+ 
++OUI:8C1F640BE*
++ ID_OUI_FROM_DATABASE=BNB
++
+ OUI:8C1F640C0*
+  ID_OUI_FROM_DATABASE=Active Research Limited
+ 
+@@ -89579,6 +89972,9 @@ OUI:8C1F64193*
+ OUI:8C1F64194*
+  ID_OUI_FROM_DATABASE=TIFLEX
+ 
++OUI:8C1F64197*
++ ID_OUI_FROM_DATABASE=TEKVOX, Inc
++
+ OUI:8C1F6419B*
+  ID_OUI_FROM_DATABASE=FeedFlo
+ 
+@@ -89687,6 +90083,9 @@ OUI:8C1F642C2*
+ OUI:8C1F642C3*
+  ID_OUI_FROM_DATABASE=TeraDiode / Panasonic
+ 
++OUI:8C1F642C5*
++ ID_OUI_FROM_DATABASE=SYSN
++
+ OUI:8C1F642C8*
+  ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
+ 
+@@ -89702,6 +90101,9 @@ OUI:8C1F642F5*
+ OUI:8C1F642FD*
+  ID_OUI_FROM_DATABASE=Enestone Corporation
+ 
++OUI:8C1F64301*
++ ID_OUI_FROM_DATABASE=Agar Corporation Inc.
++
+ OUI:8C1F64304*
+  ID_OUI_FROM_DATABASE=Jemac Sweden AB
+ 
+@@ -89762,6 +90164,9 @@ OUI:8C1F64398*
+ OUI:8C1F643A4*
+  ID_OUI_FROM_DATABASE=QLM Technology Ltd
+ 
++OUI:8C1F643AC*
++ ID_OUI_FROM_DATABASE=Benison Tech
++
+ OUI:8C1F643AD*
+  ID_OUI_FROM_DATABASE=TowerIQ
+ 
+@@ -89774,15 +90179,24 @@ OUI:8C1F643B5*
+ OUI:8C1F643C4*
+  ID_OUI_FROM_DATABASE=NavSys Technology Inc.
+ 
++OUI:8C1F643C5*
++ ID_OUI_FROM_DATABASE=Stratis IOT
++
+ OUI:8C1F643C6*
+  ID_OUI_FROM_DATABASE=Wavestream Corp
+ 
+ OUI:8C1F643D1*
+  ID_OUI_FROM_DATABASE=EMIT GmbH
+ 
++OUI:8C1F643D4*
++ ID_OUI_FROM_DATABASE=e.p.g. Elettronica s.r.l.
++
+ OUI:8C1F643E0*
+  ID_OUI_FROM_DATABASE=YPP Corporation
+ 
++OUI:8C1F643E3*
++ ID_OUI_FROM_DATABASE=FMTec GmbH - Future Management Technologies
++
+ OUI:8C1F643E8*
+  ID_OUI_FROM_DATABASE=Ruichuangte
+ 
+@@ -89810,6 +90224,9 @@ OUI:8C1F64417*
+ OUI:8C1F6441D*
+  ID_OUI_FROM_DATABASE=Aspen Spectra Sdn Bhd
+ 
++OUI:8C1F64426*
++ ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH.
++
+ OUI:8C1F64429*
+  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+ 
+@@ -89825,6 +90242,9 @@ OUI:8C1F64445*
+ OUI:8C1F64454*
+  ID_OUI_FROM_DATABASE=KJ Klimateknik A/S
+ 
++OUI:8C1F6445D*
++ ID_OUI_FROM_DATABASE=Fuzhou Tucsen Photonics Co.,Ltd
++
+ OUI:8C1F6445F*
+  ID_OUI_FROM_DATABASE=Toshniwal Security Solutions Pvt Ltd
+ 
+@@ -89981,6 +90401,9 @@ OUI:8C1F64581*
+ OUI:8C1F6459F*
+  ID_OUI_FROM_DATABASE=Delta Computers LLC.
+ 
++OUI:8C1F645AC*
++ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
++
+ OUI:8C1F645AE*
+  ID_OUI_FROM_DATABASE=Suzhou Motorcomm Electronic Technology Co., Ltd
+ 
+@@ -89993,12 +90416,18 @@ OUI:8C1F645BC*
+ OUI:8C1F645D3*
+  ID_OUI_FROM_DATABASE=Eloy Water
+ 
++OUI:8C1F645E5*
++ ID_OUI_FROM_DATABASE=Telemetrics Inc.
++
+ OUI:8C1F645F5*
+  ID_OUI_FROM_DATABASE=HongSeok Ltd.
+ 
+ OUI:8C1F64600*
+  ID_OUI_FROM_DATABASE=Anhui Chaokun Testing Equipment Co., Ltd
+ 
++OUI:8C1F64601*
++ ID_OUI_FROM_DATABASE=Camius
++
+ OUI:8C1F64603*
+  ID_OUI_FROM_DATABASE=Fuku Energy Technology Co., Ltd.
+ 
+@@ -90020,6 +90449,9 @@ OUI:8C1F6461F*
+ OUI:8C1F64622*
+  ID_OUI_FROM_DATABASE=Logical Product
+ 
++OUI:8C1F64625*
++ ID_OUI_FROM_DATABASE=Stresstech OY
++
+ OUI:8C1F64634*
+  ID_OUI_FROM_DATABASE=AML
+ 
+@@ -90065,6 +90497,12 @@ OUI:8C1F64675*
+ OUI:8C1F6467A*
+  ID_OUI_FROM_DATABASE=MG s.r.l.
+ 
++OUI:8C1F6467F*
++ ID_OUI_FROM_DATABASE=Hamamatsu Photonics K.K.
++
++OUI:8C1F64683*
++ ID_OUI_FROM_DATABASE=SLAT
++
+ OUI:8C1F64697*
+  ID_OUI_FROM_DATABASE=Sontay Ltd.
+ 
+@@ -90086,6 +90524,9 @@ OUI:8C1F646B3*
+ OUI:8C1F646B5*
+  ID_OUI_FROM_DATABASE=O-Net Communications(Shenzhen)Limited
+ 
++OUI:8C1F646B9*
++ ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH
++
+ OUI:8C1F646C6*
+  ID_OUI_FROM_DATABASE=FIT
+ 
+@@ -90140,6 +90581,9 @@ OUI:8C1F6472A*
+ OUI:8C1F6472C*
+  ID_OUI_FROM_DATABASE=Antai technology Co.,Ltd
+ 
++OUI:8C1F64737*
++ ID_OUI_FROM_DATABASE=Vytahy-Vymyslicky s.r.o.
++
+ OUI:8C1F6473C*
+  ID_OUI_FROM_DATABASE=REO AG
+ 
+@@ -90149,6 +90593,9 @@ OUI:8C1F6473D*
+ OUI:8C1F6473F*
+  ID_OUI_FROM_DATABASE=UBISCALE
+ 
++OUI:8C1F64746*
++ ID_OUI_FROM_DATABASE=Sensus Healthcare
++
+ OUI:8C1F64747*
+  ID_OUI_FROM_DATABASE=VisionTIR Multispectral Technology
+ 
+@@ -90200,6 +90647,9 @@ OUI:8C1F647A7*
+ OUI:8C1F647AA*
+  ID_OUI_FROM_DATABASE=XSENSOR Technology Corp.
+ 
++OUI:8C1F647AF*
++ ID_OUI_FROM_DATABASE=E VISION INDIA PVT LTD
++
+ OUI:8C1F647B7*
+  ID_OUI_FROM_DATABASE=Weidmann Tecnologia Electrica de Mexico
+ 
+@@ -90212,6 +90662,9 @@ OUI:8C1F647B9*
+ OUI:8C1F647C8*
+  ID_OUI_FROM_DATABASE=Jacquet Dechaume
+ 
++OUI:8C1F647CF*
++ ID_OUI_FROM_DATABASE=Transdigital Pty Ltd
++
+ OUI:8C1F647D2*
+  ID_OUI_FROM_DATABASE=Enlaps
+ 
+@@ -90239,6 +90692,9 @@ OUI:8C1F64801*
+ OUI:8C1F64807*
+  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
+ 
++OUI:8C1F64817*
++ ID_OUI_FROM_DATABASE=nke marine electronics
++
+ OUI:8C1F6481A*
+  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
+ 
+@@ -90314,6 +90770,9 @@ OUI:8C1F648C2*
+ OUI:8C1F648C4*
+  ID_OUI_FROM_DATABASE=Hermes Network Inc
+ 
++OUI:8C1F648C5*
++ ID_OUI_FROM_DATABASE=NextT Microwave Inc
++
+ OUI:8C1F648CF*
+  ID_OUI_FROM_DATABASE=Diffraction Limited
+ 
+@@ -90335,6 +90794,9 @@ OUI:8C1F648E9*
+ OUI:8C1F648EE*
+  ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
+ 
++OUI:8C1F648F8*
++ ID_OUI_FROM_DATABASE=HIGHVOLT Prüftechnik
++
+ OUI:8C1F64903*
+  ID_OUI_FROM_DATABASE=Portrait Displays, Inc.
+ 
+@@ -90371,6 +90833,12 @@ OUI:8C1F64943*
+ OUI:8C1F64947*
+  ID_OUI_FROM_DATABASE=LLC TC Vympel
+ 
++OUI:8C1F64949*
++ ID_OUI_FROM_DATABASE=tickIoT Inc.
++
++OUI:8C1F6494C*
++ ID_OUI_FROM_DATABASE=BCMTECH
++
+ OUI:8C1F6494E*
+  ID_OUI_FROM_DATABASE=Monnit Corporation
+ 
+@@ -90392,6 +90860,9 @@ OUI:8C1F64971*
+ OUI:8C1F64973*
+  ID_OUI_FROM_DATABASE=Dorsett Technologies Inc
+ 
++OUI:8C1F6497C*
++ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
++
+ OUI:8C1F64984*
+  ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd
+ 
+@@ -90458,6 +90929,9 @@ OUI:8C1F64A29*
+ OUI:8C1F64A2B*
+  ID_OUI_FROM_DATABASE=WENet Vietnam Joint Stock company
+ 
++OUI:8C1F64A2D*
++ ID_OUI_FROM_DATABASE=ACSL Ltd.
++
+ OUI:8C1F64A32*
+  ID_OUI_FROM_DATABASE=Nautel LTD
+ 
+@@ -90581,6 +91055,9 @@ OUI:8C1F64B56*
+ OUI:8C1F64B64*
+  ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
+ 
++OUI:8C1F64B73*
++ ID_OUI_FROM_DATABASE=Comm-ence, Inc.
++
+ OUI:8C1F64B77*
+  ID_OUI_FROM_DATABASE=Carestream Dental LLC
+ 
+@@ -90611,6 +91088,9 @@ OUI:8C1F64B9A*
+ OUI:8C1F64BA3*
+  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+ 
++OUI:8C1F64BBF*
++ ID_OUI_FROM_DATABASE=Retency
++
+ OUI:8C1F64BC0*
+  ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH
+ 
+@@ -90668,6 +91148,9 @@ OUI:8C1F64C2F*
+ OUI:8C1F64C38*
+  ID_OUI_FROM_DATABASE=ECO-ADAPT
+ 
++OUI:8C1F64C3A*
++ ID_OUI_FROM_DATABASE=YUSUR Technology Co., Ltd.
++
+ OUI:8C1F64C40*
+  ID_OUI_FROM_DATABASE=Sciospec Scientific Instruments GmbH
+ 
+@@ -90683,6 +91166,9 @@ OUI:8C1F64C50*
+ OUI:8C1F64C54*
+  ID_OUI_FROM_DATABASE=First Mode
+ 
++OUI:8C1F64C57*
++ ID_OUI_FROM_DATABASE=Strategic Robotic Systems
++
+ OUI:8C1F64C68*
+  ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC
+ 
+@@ -90713,9 +91199,15 @@ OUI:8C1F64CAD*
+ OUI:8C1F64CBE*
+  ID_OUI_FROM_DATABASE=Circa Enterprises Inc
+ 
++OUI:8C1F64CC6*
++ ID_OUI_FROM_DATABASE=Genius vision digital private limted
++
+ OUI:8C1F64CCB*
+  ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD
+ 
++OUI:8C1F64CD3*
++ ID_OUI_FROM_DATABASE=Pionierkraft GmbH
++
+ OUI:8C1F64CD6*
+  ID_OUI_FROM_DATABASE=USM Pty Ltd
+ 
+@@ -90725,6 +91217,9 @@ OUI:8C1F64CD8*
+ OUI:8C1F64CD9*
+  ID_OUI_FROM_DATABASE=Fingoti Limited
+ 
++OUI:8C1F64CDB*
++ ID_OUI_FROM_DATABASE=EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
++
+ OUI:8C1F64CDF*
+  ID_OUI_FROM_DATABASE=Canway Technology GmbH
+ 
+@@ -90791,6 +91286,9 @@ OUI:8C1F64D7C*
+ OUI:8C1F64D7E*
+  ID_OUI_FROM_DATABASE=Thales Belgium
+ 
++OUI:8C1F64D88*
++ ID_OUI_FROM_DATABASE=University of Geneva - Department of Particle Physics
++
+ OUI:8C1F64D92*
+  ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd.
+ 
+@@ -90830,6 +91328,9 @@ OUI:8C1F64DE1*
+ OUI:8C1F64DF8*
+  ID_OUI_FROM_DATABASE=Wittra Networks AB
+ 
++OUI:8C1F64DFE*
++ ID_OUI_FROM_DATABASE=Nuvation Energy
++
+ OUI:8C1F64E02*
+  ID_OUI_FROM_DATABASE=ITS Teknik A/S
+ 
+@@ -90884,6 +91385,9 @@ OUI:8C1F64E7B*
+ OUI:8C1F64E7C*
+  ID_OUI_FROM_DATABASE=Ashinne Technology Co., Ltd
+ 
++OUI:8C1F64E90*
++ ID_OUI_FROM_DATABASE=MHE Electronics
++
+ OUI:8C1F64E98*
+  ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD
+ 
+@@ -90920,6 +91424,9 @@ OUI:8C1F64ED4*
+ OUI:8C1F64ED9*
+  ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP
+ 
++OUI:8C1F64EE0*
++ ID_OUI_FROM_DATABASE=Private
++
+ OUI:8C1F64EE8*
+  ID_OUI_FROM_DATABASE=Global Organ Group B.V.
+ 
+@@ -90980,6 +91487,9 @@ OUI:8C1F64F5A*
+ OUI:8C1F64F5C*
+  ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
++OUI:8C1F64F65*
++ ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA
++
+ OUI:8C1F64F72*
+  ID_OUI_FROM_DATABASE=Contrader
+ 
+@@ -91007,6 +91517,12 @@ OUI:8C1F64F9E*
+ OUI:8C1F64FA2*
+  ID_OUI_FROM_DATABASE=AZD Praha s.r.o., ZOZ Olomouc
+ 
++OUI:8C1F64FA8*
++ ID_OUI_FROM_DATABASE=Unitron Systems b.v.
++
++OUI:8C1F64FAA*
++ ID_OUI_FROM_DATABASE=Massar Networks
++
+ OUI:8C1F64FB0*
+  ID_OUI_FROM_DATABASE=MARIAN GmbH
+ 
+@@ -91058,6 +91574,9 @@ OUI:8C210A*
+ OUI:8C2505*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:8C255E*
++ ID_OUI_FROM_DATABASE=VoltServer
++
+ OUI:8C271D*
+  ID_OUI_FROM_DATABASE=QuantHouse
+ 
+@@ -91232,6 +91751,51 @@ OUI:8C4DEA*
+ OUI:8C5105*
+  ID_OUI_FROM_DATABASE=Shenzhen ireadygo Information Technology CO.,LTD.
+ 
++OUI:8C51090*
++ ID_OUI_FROM_DATABASE=TianJin JointOptic Technology Co., LTD.
++
++OUI:8C51091*
++ ID_OUI_FROM_DATABASE=Amzetta Technologies, LLC
++
++OUI:8C51092*
++ ID_OUI_FROM_DATABASE=PROCET Technology Co., Ltd(HK)
++
++OUI:8C51093*
++ ID_OUI_FROM_DATABASE=SHENZHEN LDROBOT CO., LTD.
++
++OUI:8C51094*
++ ID_OUI_FROM_DATABASE=Shenzhen WOWOTO Technology Co., Ltd.
++
++OUI:8C51095*
++ ID_OUI_FROM_DATABASE=Heliox Automotive B.V.
++
++OUI:8C51096*
++ ID_OUI_FROM_DATABASE=Avxav Electronic Trading LLC
++
++OUI:8C51097*
++ ID_OUI_FROM_DATABASE=ENPLUG Co., Ltd.
++
++OUI:8C51098*
++ ID_OUI_FROM_DATABASE=nerospec
++
++OUI:8C51099*
++ ID_OUI_FROM_DATABASE=Frontmatec
++
++OUI:8C5109A*
++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++
++OUI:8C5109B*
++ ID_OUI_FROM_DATABASE=Beijing Superhexa Century Technology Co., Ltd.
++
++OUI:8C5109C*
++ ID_OUI_FROM_DATABASE=SpotterRF LLC
++
++OUI:8C5109D*
++ ID_OUI_FROM_DATABASE=Surpedia Technologies Co., Ltd.
++
++OUI:8C5109E*
++ ID_OUI_FROM_DATABASE=IROOTELLUCKY Corp.
++
+ OUI:8C53C3*
+  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+ 
+@@ -91998,7 +92562,7 @@ OUI:90013B*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
+ OUI:900218*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:90027A*
+  ID_OUI_FROM_DATABASE=Shenzhen Sworix Techonlogy Co., Ltd
+@@ -92130,7 +92694,7 @@ OUI:9020C2*
+  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+ 
+ OUI:902106*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:902155*
+  ID_OUI_FROM_DATABASE=HTC Corporation
+@@ -92402,6 +92966,9 @@ OUI:9061AE*
+ OUI:90633B*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:906560*
++ ID_OUI_FROM_DATABASE=EM Microelectronic
++
+ OUI:906717*
+  ID_OUI_FROM_DATABASE=Alphion India Private Limited
+ 
+@@ -92423,6 +92990,9 @@ OUI:906976*
+ OUI:906A94*
+  ID_OUI_FROM_DATABASE=hangzhou huacheng network technology co., ltd
+ 
++OUI:906AEB*
++ ID_OUI_FROM_DATABASE=Microsoft Corporation
++
+ OUI:906CAC*
+  ID_OUI_FROM_DATABASE=Fortinet, Inc.
+ 
+@@ -93023,6 +93593,9 @@ OUI:90F7B2*
+ OUI:90F891*
+  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
+ 
++OUI:90F970*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:90F9B7*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -93059,6 +93632,9 @@ OUI:9400B0*
+ OUI:940149*
+  ID_OUI_FROM_DATABASE=AutoHotBox
+ 
++OUI:9401AC*
++ ID_OUI_FROM_DATABASE=Wuhan Qianyang Iotian Technology Co., Ltd
++
+ OUI:9401C2*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -93218,6 +93794,9 @@ OUI:942790*
+ OUI:94282E*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
++OUI:94286F*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:94290C*
+  ID_OUI_FROM_DATABASE=Shenyang wisdom Foundation Technology Development Co., Ltd.
+ 
+@@ -93329,6 +93908,9 @@ OUI:944A09*
+ OUI:944A0C*
+  ID_OUI_FROM_DATABASE=Sercomm Corporation.
+ 
++OUI:944E5B*
++ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
++
+ OUI:944F4C*
+  ID_OUI_FROM_DATABASE=Sound United LLC
+ 
+@@ -93347,6 +93929,9 @@ OUI:94513D*
+ OUI:9451BF*
+  ID_OUI_FROM_DATABASE=Hyundai ESG
+ 
++OUI:945244*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:945330*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
+@@ -94319,6 +94904,9 @@ OUI:98234E*
+ OUI:98262A*
+  ID_OUI_FROM_DATABASE=Applied Research Associates, Inc
+ 
++OUI:9826AD*
++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
++
+ OUI:9827820*
+  ID_OUI_FROM_DATABASE=SHENZHEN HEROFUN BIO-TECH CO., LTD
+ 
+@@ -94916,6 +95504,9 @@ OUI:989D5D*
+ OUI:989E63*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:98A2C0*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:98A404*
+  ID_OUI_FROM_DATABASE=Ericsson AB
+ 
+@@ -95114,6 +95705,9 @@ OUI:98D6BB*
+ OUI:98D6F7*
+  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+ 
++OUI:98D742*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:98D863*
+  ID_OUI_FROM_DATABASE=Shanghai High-Flying Electronics Technology Co., Ltd
+ 
+@@ -95501,6 +96095,9 @@ OUI:9C2BA6*
+ OUI:9C2DCF*
+  ID_OUI_FROM_DATABASE=Shishi Tongyun Technology(Chengdu)Co.,Ltd.
+ 
++OUI:9C2E7A*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:9C2EA1*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -95526,7 +96123,7 @@ OUI:9C31B6*
+  ID_OUI_FROM_DATABASE=Kulite Semiconductor Products Inc
+ 
+ OUI:9C31C3*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:9C32A9*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+@@ -95975,6 +96572,9 @@ OUI:9C9561*
+ OUI:9C9567*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:9C956E*
++ ID_OUI_FROM_DATABASE=Microchip Technology Inc.
++
+ OUI:9C95F8*
+  ID_OUI_FROM_DATABASE=SmartDoor Systems, LLC
+ 
+@@ -96707,6 +97307,9 @@ OUI:A03679*
+ OUI:A0369F*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:A036BC*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:A036F0*
+  ID_OUI_FROM_DATABASE=Comprehensive Power
+ 
+@@ -97058,6 +97661,9 @@ OUI:A086EC*
+ OUI:A08869*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:A0889D*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:A088B4*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -97308,7 +97914,7 @@ OUI:A0BD1D*
+  ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+ 
+ OUI:A0BDCD*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:A0BF50*
+  ID_OUI_FROM_DATABASE=S.C. ADD-PRODUCTION S.R.L.
+@@ -97394,6 +98000,9 @@ OUI:A0CBFD*
+ OUI:A0CC2B*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+ 
++OUI:A0CDF3*
++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
++
+ OUI:A0CEC8*
+  ID_OUI_FROM_DATABASE=CE LINK LIMITED
+ 
+@@ -97562,6 +98171,9 @@ OUI:A0F9B7*
+ OUI:A0F9E0*
+  ID_OUI_FROM_DATABASE=VIVATEL COMPANY LIMITED
+ 
++OUI:A0FB83*
++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
++
+ OUI:A0FBC5*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -98198,6 +98810,9 @@ OUI:A470D6*
+ OUI:A47174*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:A475B9*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A47733*
+  ID_OUI_FROM_DATABASE=Google, Inc.
+ 
+@@ -98406,10 +99021,10 @@ OUI:A4ADB8*
+  ID_OUI_FROM_DATABASE=Vitec Group, Camera Dynamics Ltd
+ 
+ OUI:A4AE11*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:A4AE12*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:A4AE9A*
+  ID_OUI_FROM_DATABASE=Maestro Wireless Solutions ltd.
+@@ -99038,6 +99653,9 @@ OUI:A84122*
+ OUI:A842A7*
+  ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd.
+ 
++OUI:A842E3*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:A84397*
+  ID_OUI_FROM_DATABASE=Innogrit Corporation
+ 
+@@ -99602,9 +100220,15 @@ OUI:A8DA0C*
+ OUI:A8DB03*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
++OUI:A8DE68*
++ ID_OUI_FROM_DATABASE=Beijing Wide Technology Co.,Ltd
++
+ OUI:A8E018*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:A8E207*
++ ID_OUI_FROM_DATABASE=GOIP Global Services Pvt. Ltd.
++
+ OUI:A8E2C1*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -99773,6 +100397,9 @@ OUI:AC14D2*
+ OUI:AC1585*
+  ID_OUI_FROM_DATABASE=silergy corp
+ 
++OUI:AC15A2*
++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
++
+ OUI:AC15F4*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -99788,6 +100415,9 @@ OUI:AC17C8*
+ OUI:AC1826*
+  ID_OUI_FROM_DATABASE=Seiko Epson Corporation
+ 
++OUI:AC198E*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:AC199F*
+  ID_OUI_FROM_DATABASE=SUNGROW POWER SUPPLY CO.,LTD.
+ 
+@@ -100019,6 +100649,9 @@ OUI:AC4D16*
+ OUI:AC4E2E*
+  ID_OUI_FROM_DATABASE=Shenzhen JingHanDa Electronics Co.Ltd
+ 
++OUI:AC4E65*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:AC4E91*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -100073,6 +100706,9 @@ OUI:AC5A14*
+ OUI:AC5AEE*
+  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+ 
++OUI:AC5AF0*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:AC5AFC*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -100094,6 +100730,9 @@ OUI:AC5F3E*
+ OUI:AC5FEA*
+  ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
+ 
++OUI:AC606F*
++ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
++
+ OUI:AC6089*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -100361,6 +101000,9 @@ OUI:AC9232*
+ OUI:AC932F*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:AC936A*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:AC93C4*
+  ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 
+@@ -100610,6 +101252,9 @@ OUI:ACDCE5*
+ OUI:ACDE48*
+  ID_OUI_FROM_DATABASE=Private
+ 
++OUI:ACDF9F*
++ ID_OUI_FROM_DATABASE=Arcadyan Corporation
++
+ OUI:ACE010*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
+@@ -100950,7 +101595,7 @@ OUI:B03DC2*
+  ID_OUI_FROM_DATABASE=Wasp artificial intelligence(Shenzhen) Co.,ltd
+ 
+ OUI:B03E51*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:B03EB0*
+  ID_OUI_FROM_DATABASE=MICRODIA Ltd.
+@@ -100983,7 +101628,7 @@ OUI:B04519*
+  ID_OUI_FROM_DATABASE=TCT mobile ltd
+ 
+ OUI:B04530*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:B04545*
+  ID_OUI_FROM_DATABASE=YACOUB Automation GmbH
+@@ -101591,6 +102236,9 @@ OUI:B0DA00*
+ OUI:B0DAF9*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:B0DCEF*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:B0DD74*
+  ID_OUI_FROM_DATABASE=Heimgard Technologies AS
+ 
+@@ -102050,6 +102698,9 @@ OUI:B44326*
+ OUI:B44506*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:B4466B*
++ ID_OUI_FROM_DATABASE=REALTIMEID AS
++
+ OUI:B4475E*
+  ID_OUI_FROM_DATABASE=Avaya Inc
+ 
+@@ -102290,6 +102941,9 @@ OUI:B48901*
+ OUI:B48910*
+  ID_OUI_FROM_DATABASE=Coster T.E. S.P.A.
+ 
++OUI:B48A0A*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:B48A5F*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
+@@ -102518,6 +103172,9 @@ OUI:B4BA02*
+ OUI:B4BA12*
+  ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co.,Ltd.
+ 
++OUI:B4BA9D*
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
++
+ OUI:B4BC7C*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+@@ -103025,6 +103682,9 @@ OUI:B85810*
+ OUI:B8599F*
+  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+ 
++OUI:B859C8*
++ ID_OUI_FROM_DATABASE=70mai Co.,Ltd.
++
+ OUI:B859CE*
+  ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
+ 
+@@ -103220,6 +103880,9 @@ OUI:B88EDF*
+ OUI:B88F14*
+  ID_OUI_FROM_DATABASE=Analytica GmbH
+ 
++OUI:B88F27*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:B88FB4*
+  ID_OUI_FROM_DATABASE=JABIL CIRCUIT ITALIA S.R.L
+ 
+@@ -103673,6 +104336,9 @@ OUI:B8F8BE*
+ OUI:B8F934*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:B8FBAF*
++ ID_OUI_FROM_DATABASE=Xiamen IPRT Technology CO.,LTD
++
+ OUI:B8FC9A*
+  ID_OUI_FROM_DATABASE=Le Shi Zhi Xin Electronic Technology (Tianjin) Limited
+ 
+@@ -103697,6 +104363,9 @@ OUI:BC0200*
+ OUI:BC024A*
+  ID_OUI_FROM_DATABASE=HMD Global Oy
+ 
++OUI:BC0358*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:BC03A7*
+  ID_OUI_FROM_DATABASE=MFP MICHELIN
+ 
+@@ -103994,6 +104663,9 @@ OUI:BC4A56*
+ OUI:BC4B79*
+  ID_OUI_FROM_DATABASE=SensingTek
+ 
++OUI:BC4CA0*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:BC4CC4*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -104042,6 +104714,9 @@ OUI:BC5BD5*
+ OUI:BC5C4C*
+  ID_OUI_FROM_DATABASE=ELECOM CO.,LTD.
+ 
++OUI:BC5DA3*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:BC5EA1*
+  ID_OUI_FROM_DATABASE=PsiKick, Inc.
+ 
+@@ -104139,7 +104814,7 @@ OUI:BC6784*
+  ID_OUI_FROM_DATABASE=Environics Oy
+ 
+ OUI:BC69CB*
+- ID_OUI_FROM_DATABASE=Panasonic Life Solutions Networks Co., Ltd.
++ ID_OUI_FROM_DATABASE=Panasonic Electric Works Networks Co., Ltd.
+ 
+ OUI:BC6A16*
+  ID_OUI_FROM_DATABASE=tdvine
+@@ -104219,6 +104894,9 @@ OUI:BC79AD*
+ OUI:BC7ABF*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:BC7B72*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:BC7DD1*
+  ID_OUI_FROM_DATABASE=Radio Data Comms
+ 
+@@ -104654,6 +105332,9 @@ OUI:BCF685*
+ OUI:BCF811*
+  ID_OUI_FROM_DATABASE=Xiamen DNAKE Technology Co.,Ltd
+ 
++OUI:BCF88B*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:BCF9F2*
+  ID_OUI_FROM_DATABASE=TEKO
+ 
+@@ -104877,7 +105558,7 @@ OUI:C03DD9*
+  ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
+ 
+ OUI:C03E0F*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:C03E50*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+@@ -104945,6 +105626,9 @@ OUI:C04B13*
+ OUI:C04DF7*
+  ID_OUI_FROM_DATABASE=SERELEC
+ 
++OUI:C04E30*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:C0517E*
+  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 
+@@ -105038,6 +105722,9 @@ OUI:C06599*
+ OUI:C067AF*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:C06911*
++ ID_OUI_FROM_DATABASE=Arista Networks
++
+ OUI:C06B55*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
+@@ -105318,7 +106005,7 @@ OUI:C0A364*
+  ID_OUI_FROM_DATABASE=3D Systems Massachusetts
+ 
+ OUI:C0A36E*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:C0A39E*
+  ID_OUI_FROM_DATABASE=EarthCam, Inc.
+@@ -105800,6 +106487,9 @@ OUI:C411E0*
+ OUI:C41234*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:C412EC*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:C412F5*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
+@@ -105962,9 +106652,15 @@ OUI:C43ABE*
+ OUI:C43C3C*
+  ID_OUI_FROM_DATABASE=CYBELEC SA
+ 
++OUI:C43CB0*
++ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
++
+ OUI:C43CEA*
+  ID_OUI_FROM_DATABASE=BUFFALO.INC
+ 
++OUI:C43D1A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:C43DC7*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
+@@ -106682,6 +107378,9 @@ OUI:C4E984*
+ OUI:C4EA1D*
+  ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV
+ 
++OUI:C4EB39*
++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
++
+ OUI:C4EBE3*
+  ID_OUI_FROM_DATABASE=RRCN SAS
+ 
+@@ -106940,6 +107639,9 @@ OUI:C8292A*
+ OUI:C82A14*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:C82AF1*
++ ID_OUI_FROM_DATABASE=TCT mobile ltd
++
+ OUI:C82B96*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
+@@ -107018,6 +107720,9 @@ OUI:C83870*
+ OUI:C839AC*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
++OUI:C83A1B*
++ ID_OUI_FROM_DATABASE=Toshiba TEC Corporation Inc
++
+ OUI:C83A35*
+  ID_OUI_FROM_DATABASE=Tenda Technology Co., Ltd.
+ 
+@@ -107081,6 +107786,9 @@ OUI:C8478C*
+ OUI:C848F5*
+  ID_OUI_FROM_DATABASE=MEDISON Xray Co., Ltd
+ 
++OUI:C84BD6*
++ ID_OUI_FROM_DATABASE=Dell Inc.
++
+ OUI:C84C75*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -107150,6 +107858,9 @@ OUI:C85CCC*
+ OUI:C85D38*
+  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+ 
++OUI:C85EA9*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:C86000*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
+@@ -107549,6 +108260,9 @@ OUI:C8BE19*
+ OUI:C8BE35*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
++OUI:C8BF4C*
++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
++
+ OUI:C8BFFE*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -107849,6 +108563,9 @@ OUI:C8FF77*
+ OUI:CC0080*
+  ID_OUI_FROM_DATABASE=BETTINI SRL
+ 
++OUI:CC037B*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:CC03D9*
+  ID_OUI_FROM_DATABASE=Cisco Meraki
+ 
+@@ -108041,6 +108758,9 @@ OUI:CC25EF*
+ OUI:CC262D*
+  ID_OUI_FROM_DATABASE=Verifi, LLC
+ 
++OUI:CC29BD*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:CC29F5*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -109347,7 +110067,7 @@ OUI:D058C0*
+  ID_OUI_FROM_DATABASE=Qingdao Haier Multimedia Limited.
+ 
+ OUI:D058FC*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:D05919*
+  ID_OUI_FROM_DATABASE=zte corporation
+@@ -110381,6 +111101,9 @@ OUI:D44C9C*
+ OUI:D44CA7*
+  ID_OUI_FROM_DATABASE=Informtekhnika & Communication, LLC
+ 
++OUI:D44D77*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:D44DA4*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+ 
+@@ -110409,7 +111132,7 @@ OUI:D45297*
+  ID_OUI_FROM_DATABASE=nSTREAMS Technologies, Inc.
+ 
+ OUI:D452EE*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:D45383*
+  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+@@ -110777,6 +111500,9 @@ OUI:D49AA0*
+ OUI:D49B5C*
+  ID_OUI_FROM_DATABASE=Chongqing Miedu Technology Co., Ltd.
+ 
++OUI:D49B74*
++ ID_OUI_FROM_DATABASE=Kinetic Technologies
++
+ OUI:D49C28*
+  ID_OUI_FROM_DATABASE=JayBird LLC
+ 
+@@ -110997,7 +111723,7 @@ OUI:D4D919*
+  ID_OUI_FROM_DATABASE=GoPro
+ 
+ OUI:D4DACD*
+- ID_OUI_FROM_DATABASE=BSkyB Ltd
++ ID_OUI_FROM_DATABASE=SKY UK LIMITED
+ 
+ OUI:D4DC09*
+  ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+@@ -111494,6 +112220,9 @@ OUI:D867D9*
+ OUI:D86852*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:D868A0*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:D868C3*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -111554,6 +112283,9 @@ OUI:D87CDD*
+ OUI:D87D7F*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:D87E6F*
++ ID_OUI_FROM_DATABASE=CASCINATION AG
++
+ OUI:D87E76*
+  ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+ 
+@@ -112004,6 +112736,9 @@ OUI:D8E72B*
+ OUI:D8E743*
+  ID_OUI_FROM_DATABASE=Wush, Inc
+ 
++OUI:D8E844*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:D8E952*
+  ID_OUI_FROM_DATABASE=KEOPSYS
+ 
+@@ -112082,6 +112817,9 @@ OUI:D8FE8F*
+ OUI:D8FEE3*
+  ID_OUI_FROM_DATABASE=D-Link International
+ 
++OUI:D8FFC3*
++ ID_OUI_FROM_DATABASE=Shenzhen 3SNIC information technology company Limited
++
+ OUI:DC0077*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
+@@ -112100,6 +112838,9 @@ OUI:DC0398*
+ OUI:DC052F*
+  ID_OUI_FROM_DATABASE=National Products Inc.
+ 
++OUI:DC0539*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:DC0575*
+  ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
+ 
+@@ -112121,6 +112862,9 @@ OUI:DC0914*
+ OUI:DC094C*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:DC0B09*
++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
++
+ OUI:DC0B1A*
+  ID_OUI_FROM_DATABASE=ADB Broadband Italia
+ 
+@@ -112415,6 +113159,9 @@ OUI:DC44B6*
+ OUI:DC4517*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:DC4628*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:DC48B2*
+  ID_OUI_FROM_DATABASE=Baraja Pty. Ltd.
+ 
+@@ -112652,6 +113399,9 @@ OUI:DC8C37*
+ OUI:DC8D8A*
+  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+ 
++OUI:DC8DB7*
++ ID_OUI_FROM_DATABASE=ATW TECHNOLOGY, INC.
++
+ OUI:DC8E95*
+  ID_OUI_FROM_DATABASE=Silicon Laboratories
+ 
+@@ -113054,6 +113804,9 @@ OUI:DCF090*
+ OUI:DCF110*
+  ID_OUI_FROM_DATABASE=Nokia Corporation
+ 
++OUI:DCF31C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:DCF401*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -113123,6 +113876,9 @@ OUI:E0071B*
+ OUI:E007C2*
+  ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+ 
++OUI:E00871*
++ ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
++
+ OUI:E009BF*
+  ID_OUI_FROM_DATABASE=SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD
+ 
+@@ -113162,6 +113918,9 @@ OUI:E013B5*
+ OUI:E0143E*
+  ID_OUI_FROM_DATABASE=Modoosis Inc.
+ 
++OUI:E016B1*
++ ID_OUI_FROM_DATABASE=Advanced Design Technology co.,ltd.
++
+ OUI:E01877*
+  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
+ 
+@@ -113273,6 +114032,9 @@ OUI:E02CB2*
+ OUI:E02CF3*
+  ID_OUI_FROM_DATABASE=MRS Electronic GmbH
+ 
++OUI:E02E0B*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:E02E3F*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -113390,6 +114152,9 @@ OUI:E05124*
+ OUI:E05163*
+  ID_OUI_FROM_DATABASE=Arcadyan Corporation
+ 
++OUI:E051D8*
++ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
++
+ OUI:E0553D*
+  ID_OUI_FROM_DATABASE=Cisco Meraki
+ 
+@@ -113597,6 +114362,9 @@ OUI:E084F3*
+ OUI:E0859A*
+  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+ 
++OUI:E08614*
++ ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc.
++
+ OUI:E087B1*
+  ID_OUI_FROM_DATABASE=Nata-Info Ltd.
+ 
+@@ -113630,6 +114398,9 @@ OUI:E091F5*
+ OUI:E0925C*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:E0928F*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:E092A7*
+  ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd
+ 
+@@ -114065,6 +114836,9 @@ OUI:E0F678*
+ OUI:E0F6B5*
+  ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+ 
++OUI:E0F728*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:E0F847*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -114482,6 +115256,9 @@ OUI:E46251*
+ OUI:E46449*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:E46564*
++ ID_OUI_FROM_DATABASE=SHENZHEN KTC TECHNOLOGY CO.,LTD
++
+ OUI:E4671E*
+  ID_OUI_FROM_DATABASE=SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd.
+ 
+@@ -114494,6 +115271,9 @@ OUI:E468A3*
+ OUI:E4695A*
+  ID_OUI_FROM_DATABASE=Dictum Health, Inc.
+ 
++OUI:E46A35*
++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++
+ OUI:E46C21*
+  ID_OUI_FROM_DATABASE=messMa GmbH
+ 
+@@ -114776,6 +115556,9 @@ OUI:E4B318*
+ OUI:E4B503*
+  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 
++OUI:E4B555*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:E4B633*
+  ID_OUI_FROM_DATABASE=Wuxi Stars Microsystem Technology Co., Ltd
+ 
+@@ -115694,6 +116477,9 @@ OUI:E8ABF3*
+ OUI:E8ABFA*
+  ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd.
+ 
++OUI:E8AC23*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:E8ACAD*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -115838,6 +116624,9 @@ OUI:E8CC18*
+ OUI:E8CC32*
+  ID_OUI_FROM_DATABASE=Micronet  LTD
+ 
++OUI:E8CC8C*
++ ID_OUI_FROM_DATABASE=Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
++
+ OUI:E8CD2D*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -115994,6 +116783,9 @@ OUI:E8EDF3*
+ OUI:E8EECC*
+  ID_OUI_FROM_DATABASE=Fantasia Trading LLC
+ 
++OUI:E8EF05*
++ ID_OUI_FROM_DATABASE=MIND TECH INTERNATIONAL LIMITED
++
+ OUI:E8EF89*
+  ID_OUI_FROM_DATABASE=OPMEX Tech.
+ 
+@@ -116420,6 +117212,9 @@ OUI:EC71DB*
+ OUI:EC74BA*
+  ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH
+ 
++OUI:EC74D7*
++ ID_OUI_FROM_DATABASE=Grandstream Networks Inc
++
+ OUI:EC753E*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -116633,6 +117428,9 @@ OUI:ECA29B*
+ OUI:ECA5DE*
+  ID_OUI_FROM_DATABASE=ONYX WIFI Inc
+ 
++OUI:ECA62F*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:ECA81F*
+  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+ 
+@@ -116807,6 +117605,9 @@ OUI:ECE512*
+ OUI:ECE555*
+  ID_OUI_FROM_DATABASE=Hirschmann Automation
+ 
++OUI:ECE6A2*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:ECE744*
+  ID_OUI_FROM_DATABASE=Omntec mfg. inc
+ 
+@@ -117467,6 +118268,9 @@ OUI:F085C1*
+ OUI:F08620*
+  ID_OUI_FROM_DATABASE=Arcadyan Corporation
+ 
++OUI:F08756*
++ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
++
+ OUI:F0877F*
+  ID_OUI_FROM_DATABASE=Magnetar Technology Shenzhen Co., LTD.
+ 
+@@ -117719,6 +118523,9 @@ OUI:F0BE25*
+ OUI:F0BF97*
+  ID_OUI_FROM_DATABASE=Sony Corporation
+ 
++OUI:F0C1CE*
++ ID_OUI_FROM_DATABASE=GoodWe Technologies CO., Ltd
++
+ OUI:F0C1F1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -118154,6 +118961,9 @@ OUI:F42012*
+ OUI:F421AE*
+  ID_OUI_FROM_DATABASE=Shanghai Xiaodu Technology Limited
+ 
++OUI:F4227A*
++ ID_OUI_FROM_DATABASE=Guangdong Seneasy Intelligent Technology Co., Ltd.
++
+ OUI:F4239C*
+  ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ 
+@@ -118217,6 +119027,9 @@ OUI:F438C1*
+ OUI:F43909*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
++OUI:F43BD8*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:F43D80*
+  ID_OUI_FROM_DATABASE=FAG Industrial Services GmbH
+ 
+@@ -118430,8 +119243,11 @@ OUI:F46ABC*
+ OUI:F46AD7*
+  ID_OUI_FROM_DATABASE=Microsoft Corporation
+ 
++OUI:F46ADD*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:F46B8C*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:F46BEF*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+@@ -118445,6 +119261,9 @@ OUI:F46D04*
+ OUI:F46D2F*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:F46D3F*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:F46DE2*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -118647,7 +119466,7 @@ OUI:F492BF*
+  ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ 
+ OUI:F4939F*
+- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+ OUI:F49461*
+  ID_OUI_FROM_DATABASE=NexGen Storage
+@@ -119333,6 +120152,9 @@ OUI:F828C9*
+ OUI:F829C0*
+  ID_OUI_FROM_DATABASE=Availink, Inc.
+ 
++OUI:F82B7F*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:F82BC8*
+  ID_OUI_FROM_DATABASE=Jiangsu Switter Co., Ltd
+ 
+@@ -120608,6 +121430,42 @@ OUI:FC6018*
+ OUI:FC609B*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
++OUI:FC61790*
++ ID_OUI_FROM_DATABASE=Zhuhai Anjubao Electronics Technology Co., Ltd.
++
++OUI:FC61791*
++ ID_OUI_FROM_DATABASE=Signalinks Communication Technology Co.,Ltd
++
++OUI:FC61792*
++ ID_OUI_FROM_DATABASE=Shenzhen Shenshui Electronic Commerce Co.,Ltd
++
++OUI:FC61793*
++ ID_OUI_FROM_DATABASE=EchoStar Mobile
++
++OUI:FC61794*
++ ID_OUI_FROM_DATABASE=CHOEUNENG
++
++OUI:FC61795*
++ ID_OUI_FROM_DATABASE=Qisda Corporation
++
++OUI:FC61796*
++ ID_OUI_FROM_DATABASE=Hangzhou LiDe Communication Co.,Ltd
++
++OUI:FC61797*
++ ID_OUI_FROM_DATABASE=Kvaliteta Systems and Solutions Private Limited
++
++OUI:FC61798*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
++OUI:FC61799*
++ ID_OUI_FROM_DATABASE=MACH SYSTEMS s.r.o.
++
++OUI:FC6179A*
++ ID_OUI_FROM_DATABASE=Shenzhen Dptek Technology Co., Ltd.
++
++OUI:FC6179D*
++ ID_OUI_FROM_DATABASE=Int'Act Pty Ltd
++
+ OUI:FC6198*
+  ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd
+ 
+@@ -120983,6 +121841,9 @@ OUI:FCC2DE*
+ OUI:FCC734*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:FCC737*
++ ID_OUI_FROM_DATABASE=Shaanxi Gangsion Electronic Technology Co., Ltd
++
+ OUI:FCC897*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb
+index 7fdb463e10..e23dbbbc95 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb
++++ b/hwdb.d/20-acpi-vendor.hwdb
+@@ -223,7 +223,7 @@ acpi:MXIM*:
+  ID_VENDOR_FROM_DATABASE=Maxim Integrated
+ 
+ acpi:NOLO*:
+- ID_VENDOR_FROM_DATABASE=NOLO VR
++ ID_VENDOR_FROM_DATABASE=NOLO Co., Ltd.
+ 
+ acpi:NVDA*:
+  ID_VENDOR_FROM_DATABASE=Nvidia
+@@ -4285,7 +4285,7 @@ acpi:MAS*:
+  ID_VENDOR_FROM_DATABASE=Mass Inc.
+ 
+ acpi:MAT*:
+- ID_VENDOR_FROM_DATABASE=Matsushita Electric Ind. Company Ltd
++ ID_VENDOR_FROM_DATABASE=Panasonic Connect Co.,Ltd.
+ 
+ acpi:MAX*:
+  ID_VENDOR_FROM_DATABASE=Rogen Tech Distribution Inc
+diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
+index d1781e419f..f88a96ed30 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb.patch
++++ b/hwdb.d/20-acpi-vendor.hwdb.patch
+@@ -1,5 +1,5 @@
+---- 20-acpi-vendor.hwdb.base	2022-03-29 12:18:39.832815359 +0200
+-+++ 20-acpi-vendor.hwdb	2022-03-29 12:18:39.838815428 +0200
++--- 20-acpi-vendor.hwdb.base	2022-04-28 17:39:22.374730080 +0200
+++++ 20-acpi-vendor.hwdb	2022-04-28 17:39:22.381730080 +0200
+ @@ -3,6 +3,8 @@
+  # Data imported from:
+  #     https://uefi.org/uefi-pnp-export
+diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
+index dba7d96d3e..b55bd82327 100644
+--- a/hwdb.d/20-pci-vendor-model.hwdb
++++ b/hwdb.d/20-pci-vendor-model.hwdb
+@@ -212,6 +212,27 @@ pci:v00000731d00007200sv00000731sd00007214*
+ pci:v00000731d00007200sv00000731sd00007215*
+  ID_MODEL_FROM_DATABASE=JM7200 Series GPU (JM7200)
+ 
++pci:v00000731d00009100*
++ ID_MODEL_FROM_DATABASE=JM9100
++
++pci:v00000731d00009100sv00000731sd00009101*
++ ID_MODEL_FROM_DATABASE=JM9100
++
++pci:v00000731d00009100sv00000731sd00009102*
++ ID_MODEL_FROM_DATABASE=JM9100 (-I)
++
++pci:v00000731d0000910A*
++ ID_MODEL_FROM_DATABASE=JH910
++
++pci:v00000731d0000910Asv00000731sd0000910A*
++ ID_MODEL_FROM_DATABASE=JH910
++
++pci:v00000731d0000910Asv00000731sd0000910B*
++ ID_MODEL_FROM_DATABASE=JH910 (-I)
++
++pci:v00000731d0000910Asv00000731sd0000910C*
++ ID_MODEL_FROM_DATABASE=JH910 (-M)
++
+ pci:v00000731d00009200*
+  ID_MODEL_FROM_DATABASE=JM9200
+ 
+@@ -1901,6 +1922,9 @@ pci:v00001000d00000087sv00001000sd00003060*
+ pci:v00001000d00000087sv00001014sd00000472*
+  ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (N2125 External Host Bus Adapter)
+ 
++pci:v00001000d00000087sv00001014sd0000047A*
++ ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (N2115 Internal Host Bus Adapter)
++
+ pci:v00001000d00000087sv00001590sd00000041*
+  ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (H220i)
+ 
+@@ -2070,34 +2094,34 @@ pci:v00001000d000000A5sv00001000sd000046D0*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-8i8e Tri-Mode Storage Adapter)
+ 
+ pci:v00001000d000000A5sv00001028sd00002114*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 Adapter)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i Adapter)
+ 
+ pci:v00001000d000000A5sv00001028sd00002115*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 Front)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i Front)
+ 
+ pci:v00001000d000000A5sv00001028sd00002117*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 MX)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i MX)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213A*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965e Adapter)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213B*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 Adapter)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i Adapter)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213C*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 Front)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i Front)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213D*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765N Front)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213E*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 MX)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i MX)
+ 
+ pci:v00001000d000000A5sv00001028sd0000213F*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365 Adapter)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Adapter)
+ 
+ pci:v00001000d000000A5sv00001028sd00002140*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365 Front)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Front)
+ 
+ pci:v00001000d000000A5sv00001028sd00002141*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX)
+@@ -3030,7 +3054,10 @@ pci:v00001002d00001638*
+  ID_MODEL_FROM_DATABASE=Cezanne
+ 
+ pci:v00001002d0000163F*
+- ID_MODEL_FROM_DATABASE=VanGogh
++ ID_MODEL_FROM_DATABASE=VanGogh [AMD Custom GPU 0405]
++
++pci:v00001002d00001640*
++ ID_MODEL_FROM_DATABASE=Rembrandt Radeon High Definition Audio Controller
+ 
+ pci:v00001002d0000164C*
+  ID_MODEL_FROM_DATABASE=Lucienne
+@@ -36758,6 +36785,12 @@ pci:v000010DEd000020B6*
+ pci:v000010DEd000020B7*
+  ID_MODEL_FROM_DATABASE=GA100GL [A30 PCIe]
+ 
++pci:v000010DEd000020B8*
++ ID_MODEL_FROM_DATABASE=GA100 [A100X]
++
++pci:v000010DEd000020B9*
++ ID_MODEL_FROM_DATABASE=GA100 [A30X]
++
+ pci:v000010DEd000020BB*
+  ID_MODEL_FROM_DATABASE=GA100 [DRIVE A100 PROD]
+ 
+@@ -36821,6 +36854,9 @@ pci:v000010DEd000021D1*
+ pci:v000010DEd00002200*
+  ID_MODEL_FROM_DATABASE=GA102
+ 
++pci:v000010DEd00002203*
++ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Ti]
++
+ pci:v000010DEd00002204*
+  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090]
+ 
+@@ -36965,6 +37001,9 @@ pci:v000010DEd000024AF*
+ pci:v000010DEd000024B0*
+  ID_MODEL_FROM_DATABASE=GA104GL [RTX A4000]
+ 
++pci:v000010DEd000024B1*
++ ID_MODEL_FROM_DATABASE=GA104GL [RTX A4000H]
++
+ pci:v000010DEd000024B6*
+  ID_MODEL_FROM_DATABASE=GA104GLM [RTX A5000 Mobile]
+ 
+@@ -37043,6 +37082,9 @@ pci:v000010DEd000025A0*
+ pci:v000010DEd000025A2*
+  ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 Mobile]
+ 
++pci:v000010DEd000025A3*
++ ID_MODEL_FROM_DATABASE=GA107
++
+ pci:v000010DEd000025A4*
+  ID_MODEL_FROM_DATABASE=GA107
+ 
+@@ -37058,6 +37100,9 @@ pci:v000010DEd000025A7*
+ pci:v000010DEd000025A9*
+  ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 2050]
+ 
++pci:v000010DEd000025AA*
++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570 A]
++
+ pci:v000010DEd000025AF*
+  ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample]
+ 
+@@ -37211,6 +37256,9 @@ pci:v000010DFd0000E300sv00001014sd00000614*
+ pci:v000010DFd0000E300sv00001014sd00000615*
+  ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (PCIe3 2-Port 32Gb Fibre Channel Adapter for POWER (FC EN1A/EN1B; CCIN 578F))
+ 
++pci:v000010DFd0000E300sv00001014sd000006A0*
++ ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (PCIe3 2-Port 16Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC))
++
+ pci:v000010DFd0000E300sv000010DFsd0000E300*
+  ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (LPe32002-M2 2-Port 32Gb Fibre Channel Adapter)
+ 
+@@ -37370,6 +37418,12 @@ pci:v000010DFd0000F400sv000010DFsd0000F418*
+ pci:v000010DFd0000F400sv000010DFsd0000F419*
+  ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe35002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter)
+ 
++pci:v000010DFd0000F400sv000010DFsd0000F421*
++ ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe36002-M2-L 2-Port 64Gb PCIe Fibre Channel Adapter)
++
++pci:v000010DFd0000F400sv000010DFsd0000F422*
++ ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe36002-M64-D 2-Port 64Gb Fibre Channel Adapter)
++
+ pci:v000010DFd0000F400sv00001590sd000002D5*
+  ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (StoreFabric SN1610E 1-Port 32Gb Fibre Channel Adapter)
+ 
+@@ -37379,6 +37433,12 @@ pci:v000010DFd0000F400sv00001590sd000002D6*
+ pci:v000010DFd0000F500*
+  ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter
+ 
++pci:v000010DFd0000F500sv00001014sd000006C1*
++ ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter (PCIe4 4-Port 32Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC))
++
++pci:v000010DFd0000F500sv00001014sd000006C2*
++ ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter (PCIe4 2-Port 64Gb Fibre Channel Adapter for POWER (FC EN1N/EN1P; CCIN 2CFD))
++
+ pci:v000010DFd0000F700*
+  ID_MODEL_FROM_DATABASE=LP7000 Fibre Channel Host Adapter
+ 
+@@ -47000,6 +47060,9 @@ pci:v000011F8d00008535*
+ pci:v000011F8d00008536*
+  ID_MODEL_FROM_DATABASE=PM8536 PFX 96xG3 PCIe Fanout Switch
+ 
++pci:v000011F8d00008536sv00001BD4sd00000081*
++ ID_MODEL_FROM_DATABASE=PM8536 PFX 96xG3 PCIe Fanout Switch
++
+ pci:v000011F8d00008546*
+  ID_MODEL_FROM_DATABASE=PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch
+ 
+@@ -50861,6 +50924,12 @@ pci:v00001344d00005191*
+ pci:v00001344d00005192*
+  ID_MODEL_FROM_DATABASE=9200 MAX NVMe SSD
+ 
++pci:v00001344d000051A2*
++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD
++
++pci:v00001344d000051A3*
++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD
++
+ pci:v00001345*
+  ID_VENDOR_FROM_DATABASE=Arescom Inc
+ 
+@@ -58235,6 +58304,9 @@ pci:v000014E4d000016D6sv0000152Dsd00008B20*
+ pci:v000014E4d000016D6sv0000152Dsd00008B22*
+  ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller)
+ 
++pci:v000014E4d000016D6sv0000193Dsd00001024*
++ ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (NIC-ETH531F-LP-2P)
++
+ pci:v000014E4d000016D7*
+  ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
+ 
+@@ -59285,6 +59357,9 @@ pci:v000014E4d0000A8D8*
+ pci:v000014E4d0000AA52*
+  ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC
+ 
++pci:v000014E4d0000B080*
++ ID_MODEL_FROM_DATABASE=BCM56080 Firelight2 Switch ASIC
++
+ pci:v000014E4d0000B302*
+  ID_MODEL_FROM_DATABASE=BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller
+ 
+@@ -65163,10 +65238,10 @@ pci:v000017CBd00001000*
+  ID_MODEL_FROM_DATABASE=QCS405 PCIe Root Complex
+ 
+ pci:v000017CBd00001101*
+- ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
++ ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter
+ 
+ pci:v000017CBd00001103*
+- ID_MODEL_FROM_DATABASE=Atheros QCNFA765
++ ID_MODEL_FROM_DATABASE=QCNFA765 Wireless Network Adapter
+ 
+ pci:v000017CBd00001104*
+  ID_MODEL_FROM_DATABASE=QCN6024/9024/9074 Wireless Network Adapter
+@@ -69683,6 +69758,54 @@ pci:v00001BB1d00000100sv00001BB1sd00000157*
+ pci:v00001BB1d00000100sv00001BB1sd00000158*
+  ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG 7mm)
+ 
++pci:v00001BB1d00000100sv00001BB1sd00000159*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M)
++
++pci:v00001BB1d00000100sv00001BB1sd00000160*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000161*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M 7mm)
++
++pci:v00001BB1d00000100sv00001BB1sd00000162*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M TCG 7mm)
++
++pci:v00001BB1d00000100sv00001BB1sd00000163*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H)
++
++pci:v00001BB1d00000100sv00001BB1sd00000164*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000165*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.S 1T)
++
++pci:v00001BB1d00000100sv00001BB1sd00000166*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.S 1T TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000167*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.L 1T)
++
++pci:v00001BB1d00000100sv00001BB1sd00000168*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.L 1T TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000169*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.S 1T)
++
++pci:v00001BB1d00000100sv00001BB1sd00000170*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.S 1T TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000171*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.L 1T)
++
++pci:v00001BB1d00000100sv00001BB1sd00000172*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.L 1T TCG)
++
++pci:v00001BB1d00000100sv00001BB1sd00000173*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E1.S)
++
++pci:v00001BB1d00000100sv00001BB1sd00000174*
++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E1.S TCG)
++
+ pci:v00001BB1d00000100sv00001BB1sd000001A1*
+  ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XP7102)
+ 
+@@ -70814,6 +70937,12 @@ pci:v00001D6Ad000000B1*
+ pci:v00001D6Ad000007B1*
+  ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 
++pci:v00001D6Ad000007B1sv00001BAAsd000007B1*
++ ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (QM2-2P10G1TA [QXG 10GbE Network Adapter])
++
++pci:v00001D6Ad000007B1sv00001BAAsd000007B2*
++ ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (QM2-2P10G1TA [QM2 Expansion Adapter])
++
+ pci:v00001D6Ad000008B1*
+  ID_MODEL_FROM_DATABASE=AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 
+@@ -70826,6 +70955,12 @@ pci:v00001D6Ad000012B1*
+ pci:v00001D6Ad000087B1*
+  ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 
++pci:v00001D6Ad000094C0*
++ ID_MODEL_FROM_DATABASE=AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
++
++pci:v00001D6Ad000094C0sv00001043sd000087F5*
++ ID_MODEL_FROM_DATABASE=AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (ProArt X570-CREATOR WIFI)
++
+ pci:v00001D6Ad0000D107*
+  ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 
+@@ -72345,8 +72480,29 @@ pci:v00001ED5d00000100*
+  ID_MODEL_FROM_DATABASE=MTT S10
+ 
+ pci:v00001ED5d00000101*
++ ID_MODEL_FROM_DATABASE=MTT S10
++
++pci:v00001ED5d00000102*
+  ID_MODEL_FROM_DATABASE=MTT S30
+ 
++pci:v00001ED5d00000105*
++ ID_MODEL_FROM_DATABASE=MTT S50
++
++pci:v00001ED5d00000106*
++ ID_MODEL_FROM_DATABASE=MTT S60
++
++pci:v00001ED5d00000111*
++ ID_MODEL_FROM_DATABASE=MTT S100
++
++pci:v00001ED5d00000121*
++ ID_MODEL_FROM_DATABASE=MTT S1000M
++
++pci:v00001ED5d00000122*
++ ID_MODEL_FROM_DATABASE=MTT S1000
++
++pci:v00001ED5d00000123*
++ ID_MODEL_FROM_DATABASE=MTT S2000
++
+ pci:v00001ED8*
+  ID_VENDOR_FROM_DATABASE=Digiteq Automotive
+ 
+@@ -72368,6 +72524,15 @@ pci:v00001EECd00000102*
+ pci:v00001EECd00001EEC*
+  ID_MODEL_FROM_DATABASE=VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+ 
++pci:v00001EED*
++ ID_VENDOR_FROM_DATABASE=Xiangdixian Computing Technology (Chongqing) Ltd.
++
++pci:v00001EEDd00000100*
++ ID_MODEL_FROM_DATABASE=XDX P100 VGA controller
++
++pci:v00001EEDd00000101*
++ ID_MODEL_FROM_DATABASE=XDX P101 High Definition Audio Controller
++
+ pci:v00001EFB*
+  ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd
+ 
+@@ -73943,6 +74108,12 @@ pci:v00004DDCd00002F00*
+ pci:v00004DDCd00003000*
+  ID_MODEL_FROM_DATABASE=SB-3644 Motion Feedback Device
+ 
++pci:v00004E58*
++ ID_VENDOR_FROM_DATABASE=Nutanix, Inc.
++
++pci:v00004E58d00000001*
++ ID_MODEL_FROM_DATABASE=Virtual NVMe Controller
++
+ pci:v00005045*
+  ID_VENDOR_FROM_DATABASE=University of Toronto
+ 
+@@ -77060,11 +77231,14 @@ pci:v00008086d00000DD2sv00008086sd0000401A*
+ pci:v00008086d00000DD2sv00008086sd0000401B*
+  ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0)
+ 
++pci:v00008086d00000DD5*
++ ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function
++
+ pci:v00008086d00000DDA*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+
+ 
+ pci:v00008086d00000DDAsv00001BD4sd00000076*
+- ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+
++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ (Ethernet Connection F102IX722 for 10GbE SFP)
+ 
+ pci:v00008086d00000E00*
+  ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
+@@ -81083,15 +81257,27 @@ pci:v00008086d00001592sv00008086sd0000000D*
+ pci:v00008086d00001592sv00008086sd0000000E*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-2C-Q2)
+ 
++pci:v00008086d00001592sv00008086sd0000000F*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q2T)
++
+ pci:v00008086d00001592sv00008086sd00000010*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-stg Adapter)
+ 
++pci:v00008086d00001592sv00008086sd00000011*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP3.0)
++
+ pci:v00008086d00001593*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
+ 
+ pci:v00008086d00001593sv00001137sd000002C3*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC)
+ 
++pci:v00008086d00001593sv00001137sd000002E9*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC)
++
++pci:v00008086d00001593sv00001137sd000002EA*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4T 4x25/10 GbE SFP28 PCIe NIC)
++
+ pci:v00008086d00001593sv00008086sd00000002*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-L-2)
+ 
+@@ -81128,6 +81314,12 @@ pci:v00008086d00001593sv00008086sd0000000F*
+ pci:v00008086d00001593sv00008086sd00000010*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-st Adapter)
+ 
++pci:v00008086d00001593sv00008086sd00004010*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4)
++
++pci:v00008086d00001593sv00008086sd00004013*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4 for OCP 3.0)
++
+ pci:v00008086d00001599*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane
+ 
+@@ -81176,6 +81368,9 @@ pci:v00008086d0000159Bsv00008086sd00004002*
+ pci:v00008086d0000159Bsv00008086sd00004003*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2)
+ 
++pci:v00008086d0000159Bsv00008086sd00004015*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 3.0)
++
+ pci:v00008086d000015A0*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
+ 
+@@ -92258,6 +92453,9 @@ pci:v00008086d000034BA*
+ pci:v00008086d000034BC*
+  ID_MODEL_FROM_DATABASE=Ice Lake-LP PCI Express Root Port #5
+ 
++pci:v00008086d000034C4*
++ ID_MODEL_FROM_DATABASE=Ice Lake-LP SD Host Controller
++
+ pci:v00008086d000034C5*
+  ID_MODEL_FROM_DATABASE=Ice Lake-LP Serial IO I2c Controller #4
+ 
+@@ -96383,6 +96581,9 @@ pci:v00008086d00008A51*
+ pci:v00008086d00008A52*
+  ID_MODEL_FROM_DATABASE=Iris Plus Graphics G7
+ 
++pci:v00008086d00008A53*
++ ID_MODEL_FROM_DATABASE=Iris Plus Graphics G7
++
+ pci:v00008086d00008A56*
+  ID_MODEL_FROM_DATABASE=Iris Plus Graphics G1 (Ice Lake)
+ 
+@@ -99485,6 +99686,9 @@ pci:v00008820*
+ pci:v00008820d00002724*
+  ID_MODEL_FROM_DATABASE=Mako Front Side Motor Controller [cPCI]
+ 
++pci:v00008848*
++ ID_VENDOR_FROM_DATABASE=Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd
++
+ pci:v00008866*
+  ID_VENDOR_FROM_DATABASE=T-Square Design Inc.
+ 
+@@ -100589,6 +100793,18 @@ pci:v00009005d0000028Fsv00001BD4sd00000071*
+ pci:v00009005d0000028Fsv00001BD4sd00000072*
+  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16i)
+ 
++pci:v00009005d0000028Fsv00001BD4sd00000077*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16iM)
++
++pci:v00009005d0000028Fsv00001BD4sd00000078*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E24iM)
++
++pci:v00009005d0000028Fsv00001BD4sd00000079*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5H24iM)
++
++pci:v00009005d0000028Fsv00001BD4sd00000080*
++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0804M5R16iM)
++
+ pci:v00009005d0000028Fsv00001CC4sd00000101*
+  ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8204)
+ 
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index 4bcb238815..c0e6f59917 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -10178,6 +10178,24 @@ usb:v0482p06B4*
+ usb:v0483*
+  ID_VENDOR_FROM_DATABASE=STMicroelectronics
+ 
++usb:v0483p0102*
++ ID_MODEL_FROM_DATABASE=Remote NDIS Network device with Android debug (ADB)
++
++usb:v0483p0103*
++ ID_MODEL_FROM_DATABASE=Remote NDIS Network device
++
++usb:v0483p0104*
++ ID_MODEL_FROM_DATABASE=MTP device with Android debug (ADB)
++
++usb:v0483p0105*
++ ID_MODEL_FROM_DATABASE=MTP device
++
++usb:v0483p0106*
++ ID_MODEL_FROM_DATABASE=PTP device with Android debug (ADB)
++
++usb:v0483p0107*
++ ID_MODEL_FROM_DATABASE=PTP device
++
+ usb:v0483p0137*
+  ID_MODEL_FROM_DATABASE=BeWAN ADSL USB ST (blue or green)
+ 
+@@ -44831,6 +44849,18 @@ usb:v0E25*
+ usb:v0E26*
+  ID_VENDOR_FROM_DATABASE=J-Phone East Co., Ltd
+ 
++usb:v0E2E*
++ ID_VENDOR_FROM_DATABASE=Brady Worldwide, Inc.
++
++usb:v0E2Ep000B*
++ ID_MODEL_FROM_DATABASE=BMP 51
++
++usb:v0E2Ep000C*
++ ID_MODEL_FROM_DATABASE=BMP 61
++
++usb:v0E2Ep000D*
++ ID_MODEL_FROM_DATABASE=BMP 41
++
+ usb:v0E30*
+  ID_VENDOR_FROM_DATABASE=HeartMath LLC
+ 
+diff --git a/hwdb.d/acpi_id_registry.html b/hwdb.d/acpi_id_registry.html
+index b2a6844521..cd4ac8c553 100644
+--- a/hwdb.d/acpi_id_registry.html
++++ b/hwdb.d/acpi_id_registry.html
+@@ -112,7 +112,7 @@
+  <tr class="even"><td>Wacom Technology</td><td>WACF</td><td>09/21/2021</td> </tr>
+  <tr class="odd"><td>Shanghai Aiwei Electronic Technology Co., Ltd.</td><td>AWDZ</td><td>12/31/2021</td> </tr>
+  <tr class="even"><td>Silicom Ltd. Connectivity Solutions</td><td>SILC</td><td>03/28/2022</td> </tr>
+- <tr class="odd"><td>NOLO VR</td><td>NOLO</td><td>03/28/2022</td> </tr>
++ <tr class="odd"><td>NOLO Co., Ltd.</td><td>NOLO</td><td>03/28/2022</td> </tr>
+       </tbody>
+     </table>
+   </body>
+diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
+index eb99ea7fb0..67fd6c1836 100644
+--- a/hwdb.d/ma-large.txt
++++ b/hwdb.d/ma-large.txt
+@@ -437,12 +437,6 @@ AC5D5C     (base 16)		FN-LINK TECHNOLOGY LIMITED
+ 				SHENZHEN  GUANGDONG  518100
+ 				CN
+ 
+-A4-AE-11   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-A4AE11     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ 54-DE-D0   (hex)		Sevio Srl
+ 54DED0     (base 16)		Sevio Srl
+ 				Via Dei Caniana 6/A
+@@ -1523,12 +1517,6 @@ CCE194     (base 16)		Juniper Networks
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-90-02-18   (hex)		BSkyB Ltd
+-900218     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 14-4E-2A   (hex)		Ciena Corporation
+ 144E2A     (base 16)		Ciena Corporation
+ 				7035 Ridge Road
+@@ -2963,12 +2951,6 @@ A8D498     (base 16)		Avira Operations GmbH & Co. KG
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-D0-58-FC   (hex)		BSkyB Ltd
+-D058FC     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 14-57-9F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 14579F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -8222,12 +8204,6 @@ D0B0CD     (base 16)		Moen
+ 				North Olmstead  OH  44070-8022
+ 				US
+ 
+-70-50-AF   (hex)		BSkyB Ltd
+-7050AF     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ F4-EF-9E   (hex)		SGSG SCIENCE & TECHNOLOGY CO. LTD
+ F4EF9E     (base 16)		SGSG SCIENCE & TECHNOLOGY CO. LTD
+ 				3RD Fl, Bldg A3, No.1 software Park Rd
+@@ -10064,12 +10040,6 @@ B499BA     (base 16)		Hewlett Packard
+ 				Beijing    100101
+ 				CN
+ 
+-0C-F9-C0   (hex)		BSkyB Ltd
+-0CF9C0     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 4C-FF-12   (hex)		Fuze Entertainment Co., ltd
+ 4CFF12     (base 16)		Fuze Entertainment Co., ltd
+ 				3rd Floor Harbour Centre
+@@ -10616,12 +10586,6 @@ D07AB5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Chongqing  Chongqing  401332
+ 				CN
+ 
+-7C-4C-A5   (hex)		BSkyB Ltd
+-7C4CA5     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 00-14-A4   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+ 0014A4     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+ 				Building D21,No.1, East Zone 1st Road
+@@ -10682,12 +10646,6 @@ C87B5B     (base 16)		zte corporation
+ 				Seoul    13456
+ 				KR
+ 
+-C0-3E-0F   (hex)		BSkyB Ltd
+-C03E0F     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 90-4E-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 904E2B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -32636,12 +32594,6 @@ B0E4D5     (base 16)		Google, Inc.
+ 				Mountain View  CA  94043
+ 				US
+ 
+-D4-DA-CD   (hex)		BSkyB Ltd
+-D4DACD     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 68-69-CA   (hex)		Hitachi, Ltd.
+ 6869CA     (base 16)		Hitachi, Ltd.
+ 				27-18, Minami Oi 6-chome, Shinagawa-ku
+@@ -34187,18 +34139,6 @@ BC0F9A     (base 16)		D-Link International
+ 				Singapore   Singapore  609917
+ 				SG
+ 
+-B0-45-30   (hex)		BSkyB Ltd
+-B04530     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+-6C-A0-B4   (hex)		BSkyB Ltd
+-6CA0B4     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 94-7B-BE   (hex)		Ubicquia LLC
+ 947BBE     (base 16)		Ubicquia LLC
+ 				BoA Building–Suite 1750, 401 E. Las Olas Boulevard
+@@ -36797,12 +36737,6 @@ F8C3CC     (base 16)		Apple, Inc.
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
+-3C-9E-C7   (hex)		BSkyB Ltd
+-3C9EC7     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 18-5B-00   (hex)		Nokia
+ 185B00     (base 16)		Nokia
+ 				600 March Road
+@@ -38165,12 +38099,306 @@ C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ 				Piscataway  NJ  08554
+ 				US
+ 
++A0-CD-F3   (hex)		Murata Manufacturing Co., Ltd.
++A0CDF3     (base 16)		Murata Manufacturing Co., Ltd.
++				1-10-1, Higashikotari
++				Nagaokakyo-shi  Kyoto  617-8555
++				JP
++
++B4-8A-0A   (hex)		Espressif Inc.
++B48A0A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++C8-3A-1B   (hex)		Toshiba TEC Corporation Inc
++C83A1B     (base 16)		Toshiba TEC Corporation Inc
++				Oval Court Ohsaki Mark East
++				Shinagawa-ku  Tokyo  141-8664
++				JP
++
++EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++AC-5A-F0   (hex)		LG Electronics
++AC5AF0     (base 16)		LG Electronics
++				222 LG-ro, JINWI-MYEON
++				Pyeongtaek-si  Gyeonggi-do  451-713
++				KR
++
+ 5C-53-C3   (hex)		Ubee Interactive Co., Limited
+ 5C53C3     (base 16)		Ubee Interactive Co., Limited
+ 				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+ 				North Point    00000
+ 				HK
+ 
++24-32-AE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++2432AE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++				No.555 Qianmo Road
++				Hangzhou  Zhejiang  310052
++				CN
++
++38-22-F4   (hex)		Huawei Device Co., Ltd.
++3822F4     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++0C-BE-F1   (hex)		Huawei Device Co., Ltd.
++0CBEF1     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++AC-93-6A   (hex)		Huawei Device Co., Ltd.
++AC936A     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++38-A4-4B   (hex)		Huawei Device Co., Ltd.
++38A44B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++7C-4C-A5   (hex)		SKY UK LIMITED
++7C4CA5     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++C0-3E-0F   (hex)		SKY UK LIMITED
++C03E0F     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++0C-F9-C0   (hex)		SKY UK LIMITED
++0CF9C0     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++70-50-AF   (hex)		SKY UK LIMITED
++7050AF     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++24-29-34   (hex)		Google, Inc.
++242934     (base 16)		Google, Inc.
++				1600 Amphitheatre Parkway
++				Mountain View  CA  94043
++				US
++
++38-0A-4F   (hex)		PRACHI ENTERPRISES
++380A4F     (base 16)		PRACHI ENTERPRISES
++				B-141, 2nd FLOOR SECTOR-6 NOIDA
++				NOIDA  UTTARPRADESH  201301
++				IN
++
++80-19-70   (hex)		Samsung Electronics Co.,Ltd
++801970     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++E0-F7-28   (hex)		Amazon Technologies Inc.
++E0F728     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
++B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
++				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
++				xiamen  fujian  361000
++				CN
++
++34-85-18   (hex)		Espressif Inc.
++348518     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++D4-DA-CD   (hex)		SKY UK LIMITED
++D4DACD     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++B0-45-30   (hex)		SKY UK LIMITED
++B04530     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++6C-A0-B4   (hex)		SKY UK LIMITED
++6CA0B4     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++3C-9E-C7   (hex)		SKY UK LIMITED
++3C9EC7     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++EC-E6-A2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++ECE6A2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++04-E8-B9   (hex)		Intel Corporate
++04E8B9     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++E0-2E-0B   (hex)		Intel Corporate
++E02E0B     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++D0-58-FC   (hex)		SKY UK LIMITED
++D058FC     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++90-02-18   (hex)		SKY UK LIMITED
++900218     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++38-5C-FB   (hex)		Silicon Laboratories
++385CFB     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++C4-3D-1A   (hex)		Intel Corporate
++C43D1A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++BC-F8-8B   (hex)		zte corporation
++BCF88B     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++68-53-9D   (hex)		EM Microelectronic
++68539D     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
++				SHEN ZHEN  GUANG DONG  518100
++				CN
++
++C8-BF-4C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
++				CN
++
++E8-CC-8C   (hex)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
++E8CC8C     (base 16)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
++				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
++				Chengdu  Sichuan  610000
++				CN
++
++58-1C-F8   (hex)		Intel Corporate
++581CF8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++AC-19-8E   (hex)		Intel Corporate
++AC198E     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++C8-5E-A9   (hex)		Intel Corporate
++C85EA9     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++3C-E0-64   (hex)		Texas Instruments
++3CE064     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++E0-92-8F   (hex)		Texas Instruments
++E0928F     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++CC-03-7B   (hex)		Texas Instruments
++CC037B     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++E0-51-D8   (hex)		China Dragon Technology Limited
++E051D8     (base 16)		China Dragon Technology Limited
++				B4 Bldg.Haoshan 1st Industry Park,
++				Shenzhen  Guangdong  518104
++				CN
++
++CC-29-BD   (hex)		zte corporation
++CC29BD     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++7C-DE-78   (hex)		New H3C Technologies Co., Ltd
++7CDE78     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++5C-60-BA   (hex)		HP Inc.
++5C60BA     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
++				US
++
++20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
++209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
+ 9C-FF-C2   (hex)		AVI Systems GmbH
+ 9CFFC2     (base 16)		AVI Systems GmbH
+ 				Dr. Franz Wilhelmstraße 2A
+@@ -38459,12 +38687,6 @@ ACFE05     (base 16)		ITEL MOBILE LIMITED
+ 				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+ 				CN
+ 
+-B0-3E-51   (hex)		BSkyB Ltd
+-B03E51     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 5C-E8-83   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 5CE883     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -38513,12 +38735,6 @@ F887F1     (base 16)		Apple, Inc.
+ 				Brandýs nad Labem    250 01
+ 				CZ
+ 
+-80-72-15   (hex)		BSkyB Ltd
+-807215     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 74-D6-37   (hex)		Amazon Technologies Inc.
+ 74D637     (base 16)		Amazon Technologies Inc.
+ 				P.O Box 8102
+@@ -42458,12 +42674,6 @@ F0EFD2     (base 16)		TF PAYMENT SERVICE CO., LTD
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-F4-93-9F   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-F4939F     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ 00-07-26   (hex)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 000726     (base 16)		SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ 				A211-A213 & B201-B210, 2F, Baiying Building, 1019#, Nanhai RD, Shekou Party, Nanshan District, 
+@@ -68972,12 +69182,6 @@ D89E61     (base 16)		Huawei Device Co., Ltd.
+ 				Rotkreuz    CH-6343
+ 				CH
+ 
+-80-75-1F   (hex)		BSkyB Ltd
+-80751F     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ E8-5A-8B   (hex)		Xiaomi Communications Co Ltd
+ E85A8B     (base 16)		Xiaomi Communications Co Ltd
+ 				The Rainbow City of China Resources
+@@ -70364,12 +70568,6 @@ B47947     (base 16)		Nutanix
+ 				Hsinchu    30077
+ 				TW
+ 
+-38-F0-C8   (hex)		Mevo Inc.
+-38F0C8     (base 16)		Mevo Inc.
+-				19 Morris Avenue
+-				Brooklyn  NY  11205
+-				US
+-
+ 5C-FE-9E   (hex)		Wiwynn Corporation Tainan Branch
+ 5CFE9E     (base 16)		Wiwynn Corporation Tainan Branch
+ 				4F, NO. 8, Beiyuan 3rd Rd., Anding Dist.,
+@@ -70796,12 +70994,6 @@ A0CFF5     (base 16)		zte corporation
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-C0-A3-6E   (hex)		BSkyB Ltd
+-C0A36E     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 60-32-B1   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 6032B1     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+@@ -71078,12 +71270,6 @@ CC483A     (base 16)		Dell Inc.
+ 				Round Rock  TX  78682
+ 				US
+ 
+-A4-AE-12   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-A4AE12     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ DC-A3-A2   (hex)		Feng mi(Beijing)technology co., LTD
+ DCA3A2     (base 16)		Feng mi(Beijing)technology co., LTD
+ 				RenHe Town barracks south street 10 yuan 33 level 301
+@@ -73742,12 +73928,6 @@ E0C58F     (base 16)		China Mobile IOT Company Limited
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-00-A3-88   (hex)		BSkyB Ltd
+-00A388     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 50-3D-EB   (hex)		Zhejiang Tmall Technology Co., Ltd.
+ 503DEB     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+ 				Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+@@ -75884,12 +76064,6 @@ E0806B     (base 16)		Xiaomi Communications Co Ltd
+ 				Oslo    NO-0216
+ 				NO
+ 
+-38-FD-F5   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+-38FDF5     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+-				Phase 3, Bayan Lepas FIZ
+-				Bayan Lepas  Penang  11900
+-				MY
+-
+ 38-12-7B   (hex)		Crenet Labs Co., Ltd.
+ 38127B     (base 16)		Crenet Labs Co., Ltd.
+ 				Rm. 1, 10F., No. 181, Sec. 1, Datong Rd.
+@@ -75902,12 +76076,306 @@ B0E45C     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
++BC-4C-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++74-34-2B   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++74342B     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
++68-7F-F0   (hex)		TP-Link Corporation Limited
++687FF0     (base 16)		TP-Link Corporation Limited
++				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
++				 Tsim Sha Tsui  Kowloon  999077
++				HK
++
+ DC-36-0C   (hex)		Hitron Technologies. Inc
+ DC360C     (base 16)		Hitron Technologies. Inc
+ 				No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C
+ 				Hsin-chu  Taiwan  300
+ 				TW
+ 
++38-FD-F5   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++38FDF5     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++4C-62-7B   (hex)		SmartCow AI Technologies Taiwan Ltd.
++4C627B     (base 16)		SmartCow AI Technologies Taiwan Ltd.
++				16F., No. 102, Songlong Rd., Xinyi Dist.,
++				Taipei City    110059
++				TW
++
++BC-7B-72   (hex)		Huawei Device Co., Ltd.
++BC7B72     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++F8-2B-7F   (hex)		Huawei Device Co., Ltd.
++F82B7F     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++D8-68-A0   (hex)		Samsung Electronics Co.,Ltd
++D868A0     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++04-29-2E   (hex)		Samsung Electronics Co.,Ltd
++04292E     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++40-C3-BC   (hex)		Huawei Device Co., Ltd.
++40C3BC     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++28-53-E0   (hex)		Sintela Ltd
++2853E0     (base 16)		Sintela Ltd
++				The Distillery, The Old Brewery, 9-11 Lodway,
++				Pill  Bristol  BS20 0DH
++				GB
++
++60-CF-69   (hex)		meerecompany
++60CF69     (base 16)		meerecompany
++				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
++				Hwaseong-si    18630
++				KR
++
++34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
++34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
++				#31 Jangja-ro, Namdong-gu
++				Incheon-si    21532
++				KR
++
++F4-93-9F   (hex)		Hon Hai Precision Industry Co., Ltd.
++F4939F     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++38-F0-C8   (hex)		Logitech
++38F0C8     (base 16)		Logitech
++				7700 Gateway Blvd
++				Newark  CA  94560
++				US
++
++BC-5D-A3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++BC5DA3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++80-75-1F   (hex)		SKY UK LIMITED
++80751F     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++C0-A3-6E   (hex)		SKY UK LIMITED
++C0A36E     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++00-A3-88   (hex)		SKY UK LIMITED
++00A388     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++80-72-15   (hex)		SKY UK LIMITED
++807215     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++B0-3E-51   (hex)		SKY UK LIMITED
++B03E51     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++1C-EF-03   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
++1CEF03     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
++				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
++				Guangzhou  Guangdong  510663
++				CN
++
++58-B0-3E   (hex)		Nintendo Co.,Ltd
++58B03E     (base 16)		Nintendo Co.,Ltd
++				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
++				KYOTO  KYOTO  601-8501
++				JP
++
++54-45-38   (hex)		Texas Instruments
++544538     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++74-13-EA   (hex)		Intel Corporate
++7413EA     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++18-7A-3E   (hex)		Silicon Laboratories
++187A3E     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
++30-05-05   (hex)		Intel Corporate
++300505     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++B0-DC-EF   (hex)		Intel Corporate
++B0DCEF     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++2C-A7-74   (hex)		Texas Instruments
++2CA774     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++DC-F3-1C   (hex)		Texas Instruments
++DCF31C     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++28-BC-05   (hex)		BLU Products Inc
++28BC05     (base 16)		BLU Products Inc
++				10814 NW 33rd Street
++				Miami  FL  33172
++				US
++
++18-4E-03   (hex)		HMD Global Oy
++184E03     (base 16)		HMD Global Oy
++				Bertel Jungin aukio 9
++				Espoo    02600
++				FI
++
++40-22-D8   (hex)		Espressif Inc.
++4022D8     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++E0-08-71   (hex)		Dongguan Liesheng Electronic Co., Ltd.
++E00871     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
++				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
++				dongguan   guangdong  523000
++				CN
++
++90-65-60   (hex)		EM Microelectronic
++906560     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++A0-FB-83   (hex)		Honor Device Co., Ltd.
++A0FB83     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++DC-0B-09   (hex)		Cisco Systems, Inc
++DC0B09     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++08-F3-FB   (hex)		Cisco Systems, Inc
++08F3FB     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++88-0A-A3   (hex)		Juniper Networks
++880AA3     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
++04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++78-C2-13   (hex)		Sagemcom Broadband SAS
++78C213     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++A0-36-BC   (hex)		ASUSTek COMPUTER INC.
++A036BC     (base 16)		ASUSTek COMPUTER INC.
++				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
++				Taipei  Taiwan  112
++				TW
++
++10-73-EB   (hex)		Infiniti Electro-Optics
++1073EB     (base 16)		Infiniti Electro-Optics
++				15 - 9th Ave S
++				Cranbrook  British Columbia  V1C 2L9
++				CA
++
++9C-95-6E   (hex)		Microchip Technology Inc.
++9C956E     (base 16)		Microchip Technology Inc.
++				2355 W. Chandler Blvd.
++				Chandler  AZ  85224
++				US
++
++84-0B-BB   (hex)		MitraStar Technology Corp.
++840BBB     (base 16)		MitraStar Technology Corp.
++				No. 6, Innovation Road II,
++				Hsinchu    300
++				TW
++
+ 84-80-94   (hex)		Meter, Inc.
+ 848094     (base 16)		Meter, Inc.
+ 				148 Townsend St
+@@ -80036,12 +80504,6 @@ E084F3     (base 16)		High Grade Controls Corporation
+ 				Sudbury  Ontario  P3Y1K6
+ 				CA
+ 
+-38-A6-CE   (hex)		BSkyB Ltd
+-38A6CE     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 70-70-8B   (hex)		Cisco Systems, Inc
+ 70708B     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -81566,12 +82028,6 @@ C8AA55     (base 16)		Hunan Comtom Electronic Incorporated Co.,Ltd
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-24-A7-DC   (hex)		BSkyB Ltd
+-24A7DC     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 64-DB-A0   (hex)		Select Comfort
+ 64DBA0     (base 16)		Select Comfort
+ 				9800 59th Ave N
+@@ -86192,18 +86648,6 @@ D0154A     (base 16)		zte corporation
+ 				YOKOHAMA  226    12345
+ 				JP
+ 
+-78-3E-53   (hex)		BSkyB Ltd
+-783E53     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+-00-19-FB   (hex)		BSkyB Ltd
+-0019FB     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 14-B9-68   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 14B968     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -109697,12 +110141,6 @@ ACFAA5     (base 16)		digitron
+ 				Chongqing   China  401120
+ 				CN
+ 
+-BC-69-CB   (hex)		Panasonic Life Solutions Networks Co., Ltd.
+-BC69CB     (base 16)		Panasonic Life Solutions Networks Co., Ltd.
+-				2-12-7, Higashi-Shinbashi
+-				Minato-Ku  Tokyo  105-0021
+-				JP
+-
+ 08-93-56   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 089356     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -111353,9 +111791,6 @@ CC3ADF     (base 16)		Neptune Technology Group Inc.
+ 				Tallassee  AL  36078
+ 				US
+ 
+-68-EC-8A   (hex)		Private
+-68EC8A     (base 16)		Private
+-
+ 3C-62-F0   (hex)		Sercomm Corporation.
+ 3C62F0     (base 16)		Sercomm Corporation.
+ 				3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
+@@ -113816,6 +114251,24 @@ AC83F0     (base 16)		Cobalt Digital Inc.
+ 				Champaign  IL  61821
+ 				US
+ 
++AC-15-A2   (hex)		TP-Link Corporation Limited
++AC15A2     (base 16)		TP-Link Corporation Limited
++				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
++				 Tsim Sha Tsui  Kowloon  999077
++				HK
++
++B8-59-C8   (hex)		70mai Co.,Ltd.
++B859C8     (base 16)		70mai Co.,Ltd.
++				Room 2220, building 2, No. 588, Zixing road
++				Shanghai  MinHang District  201100
++				CN
++
++A8-E2-07   (hex)		GOIP Global Services Pvt. Ltd.
++A8E207     (base 16)		GOIP Global Services Pvt. Ltd.
++				H68, Sector 63, Noida 201301
++				Noida   Uttar Pradesh  201301
++				IN
++
+ 40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+@@ -113828,18 +114281,342 @@ B8B409     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
++AC-DF-9F   (hex)		Arcadyan Corporation
++ACDF9F     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
++
++D4-E2-2F   (hex)		Roku, Inc
++D4E22F     (base 16)		Roku, Inc
++				1155 Coleman Ave
++				San Jose  CA  95110
++				US
++
+ 00-13-95   (hex)		congatec GmbH
+ 001395     (base 16)		congatec GmbH
+ 				Auwiesenstrasse 5
+ 				Deggendorf    94469
+ 				DE
+ 
+-D4-E2-2F   (hex)		Roku, Inc
+-D4E22F     (base 16)		Roku, Inc
+-				1155 Coleman Ave
+-				San Jose  CA  95110
++28-77-B1   (hex)		Tri plus grupa d.o.o.
++2877B1     (base 16)		Tri plus grupa d.o.o.
++				Banjavciceva 11
++				Zagreb  Zagreb  10000
++				HR
++
++C4-3C-B0   (hex)		SHENZHEN BILIAN ELECTRONIC CO.,LTD
++C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.,LTD
++				NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district
++				shenzhen  guangdong  518000
++				CN
++
++3C-0B-4F   (hex)		Yandex Services AG
++3C0B4F     (base 16)		Yandex Services AG
++				Werftestrasse 4, 
++				Luzern    6005
++				CH
++
++4C-31-2D   (hex)		Sichuan AI-Link Technology Co., Ltd.
++4C312D     (base 16)		Sichuan AI-Link Technology Co., Ltd.
++				Anzhou, Industrial Park
++				Mianyang  Sichuan  622650
++				CN
++
++D8-7E-6F   (hex)		CASCINATION AG
++D87E6F     (base 16)		CASCINATION AG
++				Steigerhubelstrasse 3
++				Bern  Bern  3008
++				CH
++
++04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
++044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++40-5E-F6   (hex)		Samsung Electronics Co.,Ltd
++405EF6     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++94-52-44   (hex)		Samsung Electronics Co.,Ltd
++945244     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++9C-2E-7A   (hex)		Samsung Electronics Co.,Ltd
++9C2E7A     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++7C-63-05   (hex)		Amazon Technologies Inc.
++7C6305     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++C0-4E-30   (hex)		Espressif Inc.
++C04E30     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++74-E7-98   (hex)		Juniper Networks
++74E798     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
++E016B1     (base 16)		Advanced Design Technology co.,ltd.
++				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
++				Fucyu-city  Tokyo  1830056
++				JP
++
++54-31-D4   (hex)		TGW Mechanics GmbH
++5431D4     (base 16)		TGW Mechanics GmbH
++				Collmannstraße 2
++				Wels    4600
++				AT
++
++94-01-AC   (hex)		Wuhan Qianyang Iotian Technology Co., Ltd
++9401AC     (base 16)		Wuhan Qianyang Iotian Technology Co., Ltd
++				Unit 1301, Building B4, Wuhan future science and Technology City, Gaoxin Avenue, Wuhan East Lake New-Technology Development Zone
++				Wuhan  Hubei  430206
++				CN
++
++C0-69-11   (hex)		Arista Networks
++C06911     (base 16)		Arista Networks
++				5453 Great America Parkway
++				Santa Clara  CA  95054
+ 				US
+ 
++E4-B5-55   (hex)		Huawei Device Co., Ltd.
++E4B555     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++24-A7-DC   (hex)		SKY UK LIMITED
++24A7DC     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++38-A6-CE   (hex)		SKY UK LIMITED
++38A6CE     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
++AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
++				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
++				Shanghai     201206
++				CN
++
++00-19-FB   (hex)		SKY UK LIMITED
++0019FB     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++78-3E-53   (hex)		SKY UK LIMITED
++783E53     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++68-EC-8A   (hex)		IKEA of Sweden AB
++68EC8A     (base 16)		IKEA of Sweden AB
++				
++				    
++				
++
++48-02-AF   (hex)		Telit Communication s.p.a
++4802AF     (base 16)		Telit Communication s.p.a
++				Via stazione di prosecco 5B
++				SGONICO  Trieste  34010
++				IT
++
++FC-C7-37   (hex)		Shaanxi Gangsion Electronic Technology Co., Ltd
++FCC737     (base 16)		Shaanxi Gangsion Electronic Technology Co., Ltd
++				Room 12302, building 1, Greenland territorial sea, No. 6, Jinye Road, high tech Zone, Xi'an, Shaanxi
++				xi'an  Shaanxi  710076
++				CN
++
++94-28-6F   (hex)		zte corporation
++94286F     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++40-0E-F3   (hex)		zte corporation
++400EF3     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++1C-46-D1   (hex)		SKY UK LIMITED
++1C46D1     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++00-3F-10   (hex)		Shenzhen GainStrong Technology Co., Ltd.
++003F10     (base 16)		Shenzhen GainStrong Technology Co., Ltd.
++				4/F, Building B, Hengmingzhu Industrial Park, Qian Jin Road 2, Baoan District
++				Shenzhen  Guangdong  518126
++				CN
++
++88-22-B2   (hex)		Chipsea Technologies (Shenzhen) Corp.
++8822B2     (base 16)		Chipsea Technologies (Shenzhen) Corp.
++				3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen
++				Shenzhen  Guangdong  518000
++				CN
++
++68-7A-64   (hex)		Intel Corporate
++687A64     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++BC-03-58   (hex)		Intel Corporate
++BC0358     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++88-B8-63   (hex)		HISENSE VISUAL TECHNOLOGY CO.,LTD
++88B863     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
++				Qianwangang Road 218
++				Qingdao  Shandong  266510
++				CN
++
++BC-69-CB   (hex)		Panasonic Electric Works Networks Co., Ltd.
++BC69CB     (base 16)		Panasonic Electric Works Networks Co., Ltd.
++				2-12-7, Higashi-Shinbashi
++				Minato-Ku  Tokyo  105-0021
++				JP
++
++58-C5-7E   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++58C57E     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++74-3A-F4   (hex)		Intel Corporate
++743AF4     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++2C-93-FB   (hex)		Sercomm France Sarl
++2C93FB     (base 16)		Sercomm France Sarl
++				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
++				Moulineaux    92370
++				FR
++
++B4-46-6B   (hex)		REALTIMEID AS
++B4466B     (base 16)		REALTIMEID AS
++				Busk Bruns veg 1 , 7760 Snåsa (Norway)
++				Snåsa    7760
++				NO
++
++90-6A-EB   (hex)		Microsoft Corporation
++906AEB     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
++C4-EB-39   (hex)		Sagemcom Broadband SAS
++C4EB39     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++00-52-C8   (hex)		Made Studio Design Ltd.
++0052C8     (base 16)		Made Studio Design Ltd.
++				10F., No. 169, Sec. 4, Zhongxiao E. Rd., Da-an Dist.
++				Taipei City    10690
++				TW
++
++08-9D-F4   (hex)		Intel Corporate
++089DF4     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++DC-46-28   (hex)		Intel Corporate
++DC4628     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++0C-91-92   (hex)		Intel Corporate
++0C9192     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++48-AD-9A   (hex)		Intel Corporate
++48AD9A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++68-65-B7   (hex)		Zhishang Chuanglian Technology Co., Ltd
++6865B7     (base 16)		Zhishang Chuanglian Technology Co., Ltd
++				2 / F, building F, hongfengtai Science Park, Jinyuan Road, Henggang street, Longgang District, 
++				Shenzhen    518000
++				CN
++
++F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
++F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
++				No.90 Zijin Rd.,New District,Suzhou,215011,China
++				Suzhou   JiangSu  215011
++				CN
++
++58-2B-0A   (hex)		Texas Instruments
++582B0A     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++38-E7-C0   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++38E7C0     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				No.2,Jin-da Road,Huinan Industrial Park
++				Hui Zhou  Guangdong  516025
++				CN
++
++D8-E8-44   (hex)		zte corporation
++D8E844     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++E4-6A-35   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
++20-04-F3   (hex)		Honor Device Co., Ltd.
++2004F3     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
++68-B9-C2   (hex)		Earda Technologies co Ltd
++68B9C2     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
++				CN
++
+ F8-D0-27   (hex)		Seiko Epson Corporation
+ F8D027     (base 16)		Seiko Epson Corporation
+ 				2070 Kotobuki Koaka
+@@ -114089,12 +114866,6 @@ D015A6     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				Cambridge    CB24 9ZR
+ 				GB
+ 
+-04-81-9B   (hex)		BSkyB Ltd
+-04819B     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ E0-00-84   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ E00084     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -115940,12 +116711,6 @@ A85AF3     (base 16)		Shanghai Siflower Communication Technology Co., Ltd
+ 				Chongqing  Chongqing  401332
+ 				CN
+ 
+-3C-89-94   (hex)		BSkyB Ltd
+-3C8994     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ E0-0E-E1   (hex)		We Corporation Inc.
+ E00EE1     (base 16)		We Corporation Inc.
+ 				201, 33, Deokcheon-ro, Manan-gu
+@@ -117170,12 +117935,6 @@ CC2DB7     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-A0-BD-CD   (hex)		BSkyB Ltd
+-A0BDCD     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ BC-91-B5   (hex)		Infinix mobility limited
+ BC91B5     (base 16)		Infinix mobility limited
+ 				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+@@ -119492,12 +120251,6 @@ F0D5BF     (base 16)		Intel Corporate
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-20-47-ED   (hex)		BSkyB Ltd
+-2047ED     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 74-8A-69   (hex)		Korea Image Technology Co., Ltd
+ 748A69     (base 16)		Korea Image Technology Co., Ltd
+ 				125, beolmal road, dongan gu,
+@@ -129593,12 +130346,6 @@ E03E7D     (base 16)		data-complex GmbH
+ 				Seoul  Geumcheon-gu  153-802
+ 				KR
+ 
+-04-26-05   (hex)		GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH
+-042605     (base 16)		GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH
+-				Kapellenweg 42
+-				Verl    33415
+-				DE
+-
+ 24-F0-FF   (hex)		GHT Co., Ltd.
+ 24F0FF     (base 16)		GHT Co., Ltd.
+ 				#16 Nanyunyi Lu, Guangzhou Science City
+@@ -146654,12 +147401,6 @@ A0D83D     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				San Jose  CA  94568
+ 				US
+ 
+-50-70-43   (hex)		BSkyB Ltd
+-507043     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ D0-14-11   (hex)		IEEE Registration Authority
+ D01411     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -148280,12 +149021,6 @@ E00CE5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-F4-6B-8C   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-F46B8C     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ FC-34-97   (hex)		ASUSTek COMPUTER INC.
+ FC3497     (base 16)		ASUSTek COMPUTER INC.
+ 				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+@@ -149627,12 +150362,6 @@ F4CE48     (base 16)		Extreme Networks, Inc.
+ 				Kowloon Bay  Hong Kong  0000
+ 				HK
+ 
+-04-B8-6A   (hex)		BSkyB Ltd
+-04B86A     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 1C-88-0C   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 1C880C     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 				4F,Block A, Skyworth?Building,
+@@ -150401,12 +151130,6 @@ D0A0D6     (base 16)		ChengDu TD Tech
+ 				Mianyang  Sichuan  621000
+ 				CN
+ 
+-3C-45-7A   (hex)		BSkyB Ltd
+-3C457A     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 90-27-59   (hex)		Nanjing Jiahao Technology Co., Ltd.
+ 902759     (base 16)		Nanjing Jiahao Technology Co., Ltd.
+ 				Moling Industrial Park, Development Zone, Jiangning, Nanjing
+@@ -150803,12 +151526,6 @@ ECA907     (base 16)		Apple, Inc.
+ 				Vejle    7120
+ 				DK
+ 
+-4C-72-74   (hex)		shenzhenshi  xinzhongxin Technology Co.Ltd
+-4C7274     (base 16)		shenzhenshi  xinzhongxin Technology Co.Ltd
+-				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+-				ShenZHEN  GuangDong  518104
+-				CN
+-
+ F4-B8-98   (hex)		Texas Instruments
+ F4B898     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -151949,12 +152666,288 @@ E09C8D     (base 16)		Seakeeper, Inc.
+ 				Taipei City     114
+ 				TW
+ 
++34-3A-20   (hex)		Aruba, a Hewlett Packard Enterprise Company
++343A20     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
+ 30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
+ 303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
+ 				JL.PALEM 1 BLOK DS-6
+ 				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
+ 				ID
+ 
++18-E9-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++18E91D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++48-70-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++48706F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++F4-6A-DD   (hex)		Liteon Technology Corporation
++F46ADD     (base 16)		Liteon Technology Corporation
++				4F, 90, Chien 1 Road
++				New Taipei City  Taiwan  23585
++				TW
++
++C8-2A-F1   (hex)		TCT mobile ltd
++C82AF1     (base 16)		TCT mobile ltd
++				No.86 hechang 7th road, zhongkai, Hi-Tech District
++				Hui Zhou  Guang Dong  516006
++				CN
++
++3C-E9-0E   (hex)		Espressif Inc.
++3CE90E     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++A8-42-E3   (hex)		Espressif Inc.
++A842E3     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
++7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
++				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
++				Suzhou  Jingsu  215000
++				CN
++
++04-26-05   (hex)		Bosch Building Automation GmbH
++042605     (base 16)		Bosch Building Automation GmbH
++				Kapellenweg 42
++				Verl    33415
++				DE
++
++3C-FE-AC   (hex)		Cisco Systems, Inc
++3CFEAC     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++04-A7-41   (hex)		Cisco Systems, Inc
++04A741     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++A0-88-9D   (hex)		Huawei Device Co., Ltd.
++A0889D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++98-D7-42   (hex)		Samsung Electronics Co.,Ltd
++98D742     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++D4-9B-74   (hex)		Kinetic Technologies
++D49B74     (base 16)		Kinetic Technologies
++				6399 San Ignacio Ave #250
++				San Jose  CA  95119
++				US
++
++40-F8-DF   (hex)		CANON INC.
++40F8DF     (base 16)		CANON INC.
++				30-2 Shimomaruko 3-chome,
++				Ohta-ku  Tokyo  146-8501
++				JP
++
++20-47-ED   (hex)		SKY UK LIMITED
++2047ED     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++A0-BD-CD   (hex)		SKY UK LIMITED
++A0BDCD     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++3C-89-94   (hex)		SKY UK LIMITED
++3C8994     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++04-81-9B   (hex)		SKY UK LIMITED
++04819B     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++50-70-43   (hex)		SKY UK LIMITED
++507043     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++04-B8-6A   (hex)		SKY UK LIMITED
++04B86A     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++3C-45-7A   (hex)		SKY UK LIMITED
++3C457A     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++F4-6B-8C   (hex)		Hon Hai Precision Industry Co., Ltd.
++F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++74-37-5F   (hex)		SERCOMM PHILIPPINES INC
++74375F     (base 16)		SERCOMM PHILIPPINES INC
++				Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City
++				Calamba    Lot 1
++				PH
++
++7C-67-AB   (hex)		Roku, Inc
++7C67AB     (base 16)		Roku, Inc
++				1155 Coleman Ave
++				San Jose  CA  95110
++				US
++
++0C-7F-ED   (hex)		IEEE Registration Authority
++0C7FED     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++F4-3B-D8   (hex)		Intel Corporate
++F43BD8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++C8-4B-D6   (hex)		Dell Inc.
++C84BD6     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
++E0-86-14   (hex)		Novatel Wireless Solutions, Inc.
++E08614     (base 16)		Novatel Wireless Solutions, Inc.
++				9710 Scranton Rd., Suite 200
++				San Diego  CA  92121
++				US
++
++A8-DE-68   (hex)		Beijing Wide Technology Co.,Ltd
++A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
++				Floor7,Block B,Yicheng wealth center,No. 22,Ronghua Middle Road,Beijing Economic and Technological Development Zone
++				Beijing  Beijing  100000
++				CN
++
++6C-30-2A   (hex)		Texas Instruments
++6C302A     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++74-46-B3   (hex)		Texas Instruments
++7446B3     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++94-4E-5B   (hex)		Ubee Interactive Co., Limited
++944E5B     (base 16)		Ubee Interactive Co., Limited
++				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
++				North Point    00000
++				HK
++
++B4-BA-9D   (hex)		SKY UK LIMITED
++B4BA9D     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++50-F2-61   (hex)		Photon Sail Technologies
++50F261     (base 16)		Photon Sail Technologies
++				8 Robinson Road, ASO Building
++				Singapore    048544
++				SG
++
++80-DA-C2   (hex)		Technicolor CH USA Inc.
++80DAC2     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++00-41-0E   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++00410E     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++FC-61-79   (hex)		IEEE Registration Authority
++FC6179     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
++				SHENZHEN  GUANGDONG  518057
++				CN
++
++08-B6-1F   (hex)		Espressif Inc.
++08B61F     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++98-A2-C0   (hex)		Cisco Systems, Inc
++98A2C0     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++EC-74-D7   (hex)		Grandstream Networks Inc
++EC74D7     (base 16)		Grandstream Networks Inc
++				126 brookline avenue
++				boston  MA  02215
++				US
++
++4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
++				ShenZHEN  GuangDong  518104
++				CN
++
++30-63-71   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++306371     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
++				ShenZHEN  GuangDong  518104
++				CN
++
++88-12-AC   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
++8812AC     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
++				No.8, Litong Road, Liuyan Economic & Tec
++				Changsha  HUNAN  410329
++				CN
++
++28-01-1C   (hex)		zte corporation
++28011C     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
+ 7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+@@ -155294,12 +156287,6 @@ F0766F     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-1C-A0-B8   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-1CA0B8     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ D8-84-66   (hex)		Extreme Networks, Inc.
+ D88466     (base 16)		Extreme Networks, Inc.
+ 				145 Rio Robles
+@@ -155696,12 +156683,6 @@ ECFABC     (base 16)		Espressif Inc.
+ 				San Jose  CA  95121
+ 				US
+ 
+-28-C1-3C   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-28C13C     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ B0-EC-E1   (hex)		Private
+ B0ECE1     (base 16)		Private
+ 
+@@ -157199,12 +158180,6 @@ EC01EE     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				Morristown  NJ  07960
+ 				US
+ 
+-70-20-84   (hex)		Hon Hai Precision Ind. Co., Ltd.
+-702084     (base 16)		Hon Hai Precision Ind. Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ 9C-66-50   (hex)		Glodio Technolies Co.,Ltd Tianjin Branch
+ 9C6650     (base 16)		Glodio Technolies Co.,Ltd Tianjin Branch
+ 				Room 904, No.1-2 LanYuan Road, HuaYuan Industrial Area
+@@ -162488,12 +163463,6 @@ C40528     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Yasu-gun  Shiga  520-2393
+ 				JP
+ 
+-90-21-06   (hex)		BSkyB Ltd
+-902106     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ D0-27-88   (hex)		Hon Hai Precision Ind. Co.,Ltd.
+ D02788     (base 16)		Hon Hai Precision Ind. Co.,Ltd.
+ 				Building D21,No.1, East Zone 1st Road
+@@ -183329,12 +184298,6 @@ A0946A     (base 16)		Shenzhen XGTEC Technology Co,.Ltd.
+ 				San Jose  CA  94568
+ 				US
+ 
+-9C-31-C3   (hex)		BSkyB Ltd
+-9C31C3     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 6C-24-A6   (hex)		vivo Mobile Communication Co., Ltd.
+ 6C24A6     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				#283,BBK Road
+@@ -184205,12 +185168,6 @@ C01692     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				Dongguan    523808
+ 				CN
+ 
+-D4-52-EE   (hex)		BSkyB Ltd
+-D452EE     (base 16)		BSkyB Ltd
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ E0-23-FF   (hex)		Fortinet, Inc.
+ E023FF     (base 16)		Fortinet, Inc.
+ 				899 Kifer Road
+@@ -189836,6 +190793,48 @@ F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Malmö    21136
+ 				SE
+ 
++E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++68-D9-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++68D927     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++90-F9-70   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++90F970     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++04-CA-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++04CAED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++68-EE-88   (hex)		Shenzhen TINNO Mobile Technology Corp.
++68EE88     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++54-3D-92   (hex)		WIRELESS-TEK TECHNOLOGY LIMITED
++543D92     (base 16)		WIRELESS-TEK TECHNOLOGY LIMITED
++				Room 402 4F, BiaoFan Technology Building, Bao'An Avenue, FuYong Town, Bao'An district, ShenZhen,China
++				SHENZHEN    518000
++				CN
++
++98-26-AD   (hex)		Quectel Wireless Solutions Co.,Ltd.
++9826AD     (base 16)		Quectel Wireless Solutions Co.,Ltd.
++				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
++				Shanghai    200233
++				CN
++
+ 60-1E-98   (hex)		Axevast Technology
+ 601E98     (base 16)		Axevast Technology
+ 				5F., No. 20, Guanqian Road, Zhongzheng District
+@@ -189853,3 +190852,183 @@ A8F7D9     (base 16)		Mist Systems, Inc.
+ 				8F., No. 94, Baozhong Rd.
+ 				New Taipei City  Taiwan  231
+ 				TW
++
++38-86-F7   (hex)		Google, Inc.
++3886F7     (base 16)		Google, Inc.
++				1600 Amphitheatre Parkway
++				Mountain View  CA  94043
++				US
++
++F4-22-7A   (hex)		Guangdong Seneasy Intelligent Technology Co., Ltd.
++F4227A     (base 16)		Guangdong Seneasy Intelligent Technology Co., Ltd.
++				No. 63, Huitai Industrial Park,
++				Huizhou City,  Guangdong Province  516000
++				CN
++
++8C-51-09   (hex)		IEEE Registration Authority
++8C5109     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++A4-75-B9   (hex)		Samsung Electronics Co.,Ltd
++A475B9     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++80-54-9C   (hex)		Samsung Electronics Co.,Ltd
++80549C     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++6C-60-D0   (hex)		Huawei Device Co., Ltd.
++6C60D0     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
++1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++64-0E-6A   (hex)		SECO-LARM USA Inc
++640E6A     (base 16)		SECO-LARM USA Inc
++				16842 Millikan
++				Irvine  CA  92606
++				US
++
++68-E1-54   (hex)		SiMa.ai
++68E154     (base 16)		SiMa.ai
++				226 Airport Parkway, Suite 550
++				San Jose  CA  95110
++				US
++
++DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
++DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
++				1F, No.236 Ba’ai Street, Shulin District
++				New Taipei City    23845
++				TW
++
++70-20-84   (hex)		Hon Hai Precision Industry Co., Ltd.
++702084     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++28-C1-3C   (hex)		Hon Hai Precision Industry Co., Ltd.
++28C13C     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
++1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++18-AA-1E   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++18AA1E     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
++9C-31-C3   (hex)		SKY UK LIMITED
++9C31C3     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++D4-52-EE   (hex)		SKY UK LIMITED
++D452EE     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++90-21-06   (hex)		SKY UK LIMITED
++902106     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++D8-FF-C3   (hex)		Shenzhen 3SNIC information technology company Limited
++D8FFC3     (base 16)		Shenzhen 3SNIC information technology company Limited
++				Room 3101, Building 3, Nanshan Zhiyuan Chongwen Park, No.3370, Liuxian Avenue, Fuguang Community, Taoyuan Street, Nanshan District,
++				Shenzhen  Guangdong  518000
++				CN
++
++F0-87-56   (hex)		Zyxel Communications Corporation
++F08756     (base 16)		Zyxel Communications Corporation
++				No. 6 Innovation Road II, Science Park
++				Hsichu  Taiwan  300
++				TW
++
++E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
++E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
++				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
++				Hong Kong    999077
++				HK
++
++48-27-E2   (hex)		Espressif Inc.
++4827E2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++58-B3-8F   (hex)		New H3C Technologies Co., Ltd
++58B38F     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++40-E1-71   (hex)		Jiangsu Huitong Group Co.,Ltd.
++40E171     (base 16)		Jiangsu Huitong Group Co.,Ltd.
++				No. 24, Block 2, Taohuawu New District
++				Zhenjiang  Jiangsu  212003
++				CN
++
++F4-6D-3F   (hex)		Intel Corporate
++F46D3F     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++6C-72-4A   (hex)		Onkyo Technology K.K.
++6C724A     (base 16)		Onkyo Technology K.K.
++				Lux Building (5th floor),1-1-41 Kawamata
++				Higashiosaka City  Osaka  577-0063
++				JP
++
++18-C3-00   (hex)		Nokia
++18C300     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++D4-4D-77   (hex)		Nokia
++D44D77     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++DC-05-39   (hex)		Cisco Systems, Inc
++DC0539     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++8C-25-5E   (hex)		VoltServer
++8C255E     (base 16)		VoltServer
++				42 Ladd St STE 227
++				East Greenwich  RI  02818
++				US
++
++B8-8F-27   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++B88F27     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
+diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
+index 0410acdf80..08cdcba936 100644
+--- a/hwdb.d/ma-medium.txt
++++ b/hwdb.d/ma-medium.txt
+@@ -2714,12 +2714,6 @@ B00000-BFFFFF     (base 16)		Oliotalo Oy
+ 				Taipei City    10656
+ 				TW
+ 
+-80-7B-85   (hex)		Ningbo Plus and Popscreens electronic Technology Co.,LTD
+-C00000-CFFFFF     (base 16)		Ningbo Plus and Popscreens electronic Technology Co.,LTD
+-				7 Hong Da Road, Hong Tang Industrial Park Zone A
+-				Ningbo  Zhejiang  315040
+-				CN
+-
+ 64-FB-81   (hex)		Bronkhorst High-Tech BV
+ A00000-AFFFFF     (base 16)		Bronkhorst High-Tech BV
+ 				Nijverheidsstraat 1a
+@@ -4862,6 +4856,12 @@ C00000-CFFFFF     (base 16)		Shenzhen Micro&Nano Perception Computing Technology
+ 				Tokyo  Minato  108-0023
+ 				JP
+ 
++0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
++				HONGKONG    999077
++				CN
++
+ 0C-86-29   (hex)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ 				27 Shucun West Road, Haidian District,
+@@ -4874,12 +4874,6 @@ D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ 				ShenZhen  GuangDong  518055
+ 				CN
+ 
+-0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+-900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+-				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
+-				HONGKONG    999077
+-				CN
+-
+ 0C-86-29   (hex)		Akribis Systems
+ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
+@@ -4898,6 +4892,12 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Rydalmere   NSW  2116
+ 				AU
+ 
++6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
++100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
++				7430 NEW TECHNOLOGY WAY, Suite 150
++				FREDERICK    21703
++				US
++
+ 50-FF-99   (hex)		COYOTE SYSTEM
+ 100000-1FFFFF     (base 16)		COYOTE SYSTEM
+ 				24 quai Gallieni
+@@ -4916,10 +4916,10 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Kunshan  Jiangsu  215324
+ 				CN
+ 
+-6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
+-100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
+-				7430 NEW TECHNOLOGY WAY, Suite 150
+-				FREDERICK    21703
++38-1F-26   (hex)		Avon Protection
++800000-8FFFFF     (base 16)		Avon Protection
++				503 8th Street
++				Cadillac  MI  49601
+ 				US
+ 
+ 30-43-D7   (hex)		DIGICITI Technology Co.,Ltd
+@@ -4934,18 +4934,6 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Suzhou    215021
+ 				CN
+ 
+-38-1F-26   (hex)		Avon Protection
+-800000-8FFFFF     (base 16)		Avon Protection
+-				503 8th Street
+-				Cadillac  MI  49601
+-				US
+-
+-18-A5-9C   (hex)		Thermia AB
+-500000-5FFFFF     (base 16)		Thermia AB
+-				Snickaregatan 1
+-				Arvika    67134
+-				SE
+-
+ 38-1F-26   (hex)		SMS Evoko Group AB
+ 900000-9FFFFF     (base 16)		SMS Evoko Group AB
+ 				Hastholmsvagen 32
+@@ -4958,6 +4946,12 @@ B00000-BFFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFO
+ 				MANAUS  AMAZONAS  69041-025
+ 				BR
+ 
++18-A5-9C   (hex)		Thermia AB
++500000-5FFFFF     (base 16)		Thermia AB
++				Snickaregatan 1
++				Arvika    67134
++				SE
++
+ 18-A5-9C   (hex)		BlueEyes Technology
+ C00000-CFFFFF     (base 16)		BlueEyes Technology
+ 				7F-3, No.200, Sec. 4, Wenxin Rd.,
+@@ -4976,18 +4970,6 @@ E00000-EFFFFF     (base 16)		Globe Tracker ApS
+ 				kobenhavn  State / Province*  1401
+ 				DK
+ 
+-C4-A1-0E   (hex)		Connectlab SRL
+-D00000-DFFFFF     (base 16)		Connectlab SRL
+-				via donatello 30
+-				Milano  Milano  20131 - Milano
+-				IT
+-
+-C4-A1-0E   (hex)		BARTEC PIXAVI AS
+-100000-1FFFFF     (base 16)		BARTEC PIXAVI AS
+-				Vestre Svanholmen 24
+-				SANDNES  Rogaland  4313
+-				NO
+-
+ C4-A1-0E   (hex)		HYOSUNG HEAVY INDUSTRIES
+ 000000-0FFFFF     (base 16)		HYOSUNG HEAVY INDUSTRIES
+ 				119, Mapo-daero (Gongdeok-dong), Mapo-gu
+@@ -5000,6 +4982,18 @@ C4-A1-0E   (hex)		Consolinno Energy GmbH
+ 				Regensburg  Bayern  93053
+ 				DE
+ 
++C4-A1-0E   (hex)		Connectlab SRL
++D00000-DFFFFF     (base 16)		Connectlab SRL
++				via donatello 30
++				Milano  Milano  20131 - Milano
++				IT
++
++C4-A1-0E   (hex)		BARTEC PIXAVI AS
++100000-1FFFFF     (base 16)		BARTEC PIXAVI AS
++				Vestre Svanholmen 24
++				SANDNES  Rogaland  4313
++				NO
++
+ C4-A1-0E   (hex)		Ayla Networks (Shenzhen) Co., Ltd.
+ 800000-8FFFFF     (base 16)		Ayla Networks (Shenzhen) Co., Ltd.
+ 				Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, 
+@@ -5018,12 +5012,54 @@ E00000-EFFFFF     (base 16)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
+ 				Ningbo  ZheJiang Province, P.R.C.  315400
+ 				CN
+ 
++80-7B-85   (hex)		SCALA Digital Technology(Ningbo) CO, LTD
++C00000-CFFFFF     (base 16)		SCALA Digital Technology(Ningbo) CO, LTD
++				7 Hong Da Road, Hong Tang Industrial Park Zone A
++				Ningbo  Zhejiang  315040
++				CN
++
++80-02-F4   (hex)		Baicells Technologies Co., Ltd
++B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
++				10-11F,AL, No.1 Zhongguancun, Haidian
++				Beijing  Beijing  100094
++				CN
++
+ 80-02-F4   (hex)		BK Networks Co,. Ltd.
+ 000000-0FFFFF     (base 16)		BK Networks Co,. Ltd.
+ 				330 Suin-ro, Gwonseon-gu
+ 				Suwon-si  Gyeonggi-do  16371
+ 				KR
+ 
++8C-51-09   (hex)		Heliox Automotive B.V.
++500000-5FFFFF     (base 16)		Heliox Automotive B.V.
++				De Waal 24
++				Best    5684 PH
++				NL
++
++8C-51-09   (hex)		Amzetta Technologies, LLC
++100000-1FFFFF     (base 16)		Amzetta Technologies, LLC
++				5555 Oakbrook Pkwy, Suite 280
++				Norcross  GA  30093
++				US
++
++FC-61-79   (hex)		Qisda Corporation
++500000-5FFFFF     (base 16)		Qisda Corporation
++				No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan
++				Taoyuan    33341
++				TW
++
++0C-7F-ED   (hex)		Guangdong Tianshu New Energy Technology Co., Ltd
++000000-0FFFFF     (base 16)		Guangdong Tianshu New Energy Technology Co., Ltd
++				No.8 Huishang Road, Infore Enviro Industrial Park, Jiangcun Village, Leliu Street, Shunde District, 
++				Foshan    528000
++				CN
++
++0C-7F-ED   (hex)		Annapurna labs
++A00000-AFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
+ 4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+ 400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+ 				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+@@ -7991,12 +8027,6 @@ BC-66-41   (hex)		Shenzhen Yaguang communication CO.,LTD
+ 				Shenzhen  Guangdong  518029
+ 				CN
+ 
+-E4-95-6E   (hex)		Tband srl
+-100000-1FFFFF     (base 16)		Tband srl
+-				via A. Meucci, 4
+-				Preganziol  Treviso  31022
+-				IT
+-
+ BC-66-41   (hex)		EBlink
+ A00000-AFFFFF     (base 16)		EBlink
+ 				3-5 Rue Marcel Pagnol
+@@ -9602,17 +9632,23 @@ D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+ 				Guangzhou    511400
+ 				CN
+ 
++10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
++900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
++				No.146, Sec. 1,Donxing Rd.
++				Zhubei City, Hsinchu County   Taiwan  302058
++				TW
++
+ 10-54-D2   (hex)		Raylogic Control Systems Private Limited
+ 400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
+ 				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
+ 				Mumbai  Maharashtra  400054
+ 				IN
+ 
+-10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
+-900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
+-				No.146, Sec. 1,Donxing Rd.
+-				Zhubei City, Hsinchu County   Taiwan  302058
+-				TW
++10-54-D2   (hex)		Sybersense
++500000-5FFFFF     (base 16)		Sybersense
++				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
++				Hong Kong    999077
++				CN
+ 
+ 10-54-D2   (hex)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+ 700000-7FFFFF     (base 16)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+@@ -9638,12 +9674,6 @@ D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+ 				Edison   NJ  08837
+ 				US
+ 
+-10-54-D2   (hex)		Sybersense
+-500000-5FFFFF     (base 16)		Sybersense
+-				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
+-				Hong Kong    999077
+-				CN
+-
+ 0C-86-29   (hex)		MyGregor Ltd
+ 800000-8FFFFF     (base 16)		MyGregor Ltd
+ 				11A, Carnegie str.
+@@ -9656,18 +9686,18 @@ D00000-DFFFFF     (base 16)		Annapurna labs
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
+-6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
+-A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
+-				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
+-				ShenZhen  Guangdong  518055
+-				CN
+-
+ 6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+ 900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+ 				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
++6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
++A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
++				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
++				ShenZhen  Guangdong  518055
++				CN
++
+ 30-43-D7   (hex)		SYMES SA
+ 000000-0FFFFF     (base 16)		SYMES SA
+ 				4 allée technopolis, chemin des presses
+@@ -9692,12 +9722,6 @@ E00000-EFFFFF     (base 16)		ANDDORO LLC
+ 				New York  NY  10018
+ 				US
+ 
+-38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+-500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+-				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
+-				Jiaxing    314000
+-				CN
+-
+ 38-1F-26   (hex)		Synamedia
+ 200000-2FFFFF     (base 16)		Synamedia
+ 				Luipaardstraat 12
+@@ -9710,6 +9734,12 @@ C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
+ 				Beijing    100871
+ 				CN
+ 
++38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
++				Jiaxing    314000
++				CN
++
+ 18-A5-9C   (hex)		Omwave
+ 000000-0FFFFF     (base 16)		Omwave
+ 				5 rue Barbes
+@@ -9728,11 +9758,11 @@ C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
+ 				nanjing    211100
+ 				CN
+ 
+-1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
+-D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
+-				12th Floor, Block B, Building 7, International Innovation Valley
+-				Shenzhen  Gunagdong  518000
+-				CN
++1C-59-74   (hex)		Topway Global Technology Limited
++800000-8FFFFF     (base 16)		Topway Global Technology Limited
++				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
++				Hong Kong  Hong Kong  999077
++				HK
+ 
+ 1C-59-74   (hex)		King-On Technology Ltd.
+ C00000-CFFFFF     (base 16)		King-On Technology Ltd.
+@@ -9740,11 +9770,11 @@ C00000-CFFFFF     (base 16)		King-On Technology Ltd.
+ 				New Taipei  Taiwan  23146
+ 				TW
+ 
+-1C-59-74   (hex)		Topway Global Technology Limited
+-800000-8FFFFF     (base 16)		Topway Global Technology Limited
+-				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
+-				Hong Kong  Hong Kong  999077
+-				HK
++1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
++D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
++				12th Floor, Block B, Building 7, International Innovation Valley
++				Shenzhen  Gunagdong  518000
++				CN
+ 
+ 18-A5-9C   (hex)		Annapurna labs
+ D00000-DFFFFF     (base 16)		Annapurna labs
+@@ -9824,6 +9854,60 @@ C00000-CFFFFF     (base 16)		shenzhen newbridge communication equipment CO.,LTD
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
++8C-51-09   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
++				Suzhou    215021
++				CN
++
++8C-51-09   (hex)		TianJin JointOptic Technology Co., LTD.
++000000-0FFFFF     (base 16)		TianJin JointOptic Technology Co., LTD.
++				Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, 
++				Tianjin    300000
++				CN
++
++8C-51-09   (hex)		Shenzhen WOWOTO Technology Co., Ltd.
++400000-4FFFFF     (base 16)		Shenzhen WOWOTO Technology Co., Ltd.
++				Room B508,Building B,Gaoxingqi Industrial Park,Liuxian 1st Road,District 67,Bao'an
++				Shenzhen  Guangdong  518100
++				CN
++
++8C-51-09   (hex)		Beijing Superhexa Century Technology Co., Ltd.
++B00000-BFFFFF     (base 16)		Beijing Superhexa Century Technology Co., Ltd.
++				Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing
++				Beijing    100010
++				CN
++
++E4-95-6E   (hex)		Tband srl
++100000-1FFFFF     (base 16)		Tband srl
++				Via Camucina 27/A
++				PORTOGRUARO  Venezia  30026
++				IT
++
++0C-7F-ED   (hex)		ALT Co., Ltd.
++D00000-DFFFFF     (base 16)		ALT Co., Ltd.
++				#1201, 8, Seongnam-dearo 331beon-gil
++				Bundang-gu, Seongnam-si  Gyeonggi-do  13558
++				KR
++
++0C-7F-ED   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
++900000-9FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
++				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
++				shenzhen    518000
++				CN
++
++0C-7F-ED   (hex)		Netweb Technologies India Pvt Ltd
++600000-6FFFFF     (base 16)		Netweb Technologies India Pvt Ltd
++				Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh
++				Faridabad  Haryana  121004
++				IN
++
++FC-61-79   (hex)		Kvaliteta Systems and Solutions Private Limited 
++700000-7FFFFF     (base 16)		Kvaliteta Systems and Solutions Private Limited 
++				2207 Yamuna Building Techno Park Phase 3
++				Trivandrum  Kerala   695583
++				IN
++
+ 20-85-93   (hex)		UNILUMIN GROUP CO.,LTD
+ 300000-3FFFFF     (base 16)		UNILUMIN GROUP CO.,LTD
+ 				No.112 Yongfu Rd.,BaoanDistrict,
+@@ -14687,12 +14771,6 @@ A00000-AFFFFF     (base 16)		Pavana Technologies JSC.
+ 				Vinh Phuc    35000
+ 				VN
+ 
+-10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
+-E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
+-				Haier Information Industrial Complex, No.1 HaierRoad
+-				Qingdao  Shandong  266101
+-				CN
+-
+ 10-54-D2   (hex)		GIPS Technology Co., Ltd.
+ 000000-0FFFFF     (base 16)		GIPS Technology Co., Ltd.
+ 				Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist.
+@@ -14717,6 +14795,12 @@ C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
+ 				Taipei City  Taiwan  114754
+ 				TW
+ 
++10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
++E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
++				Haier Information Industrial Complex, No.1 HaierRoad
++				Qingdao  Shandong  266101
++				CN
++
+ 0C-86-29   (hex)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+ C00000-CFFFFF     (base 16)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+ 				8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District,
+@@ -14741,6 +14825,12 @@ E00000-EFFFFF     (base 16)		FX TECHNOLOGY LIMITED
+ 				Karlsruhe    76131
+ 				DE
+ 
++30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
++100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
+ 30-43-D7   (hex)		Sprocomm Technologies Co., Ltd.Guangming Branch
+ 600000-6FFFFF     (base 16)		Sprocomm Technologies Co., Ltd.Guangming Branch
+ 				Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, 
+@@ -14753,12 +14843,6 @@ C00000-CFFFFF     (base 16)		Shenzhen haichangxing Technology Co., Ltd.
+ 				SHENZHEN  GUANGZHOU  518000
+ 				CN
+ 
+-30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
+-100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+-				Baoan Xin'an Streat
+-				Shenzhen    002052
+-				CN
+-
+ 30-43-D7   (hex)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ 				10 Keyuan Road, Songshan Lake
+@@ -14771,18 +14855,18 @@ E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ 				Bengaluru  Karnataka  560100
+ 				IN
+ 
+-18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
+-700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
+-				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
+-				New Taipei City ,    242063
+-				TW
+-
+ 18-A5-9C   (hex)		Erba Lachema s.r.o.
+ A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
+ 				Karasek1d
+ 				Brno    62100
+ 				CZ
+ 
++18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
++700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
++				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
++				New Taipei City ,    242063
++				TW
++
+ 1C-59-74   (hex)		Shenzhen Hanshine Technology Co.Ltd.
+ 000000-0FFFFF     (base 16)		Shenzhen Hanshine Technology Co.Ltd.
+ 				Buiding 2 ,row 3,number 2 industrail  zone,yulv community,Yutang street 
+@@ -14795,24 +14879,12 @@ A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
+ 				Chongqing    400000
+ 				CN
+ 
+-6C-15-24   (hex)		Telsonic AG
+-100000-1FFFFF     (base 16)		Telsonic AG
+-				Industriestrasse 6b
+-				Bronschhofen  St.Gallen  9552
+-				CH
+-
+ 18-A5-9C   (hex)		Beijing QS Medical Technology Co., Ltd.
+ 300000-3FFFFF     (base 16)		Beijing QS Medical Technology Co., Ltd.
+ 				Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area
+ 				Beijing    100176
+ 				CN
+ 
+-6C-15-24   (hex)		SYMLINK CORPORATION
+-D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
+-				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
+-				Taipei    11492
+-				TW
+-
+ C4-A1-0E   (hex)		Clinton Electronics Corporation
+ B00000-BFFFFF     (base 16)		Clinton Electronics Corporation
+ 				6701 Clinton Road
+@@ -14825,6 +14897,12 @@ C4-A1-0E   (hex)		Wistron InfoComn (Kunshan) Co., Ltd.
+ 				Kunshan  Jiangsu  215300
+ 				CN
+ 
++6C-15-24   (hex)		Telsonic AG
++100000-1FFFFF     (base 16)		Telsonic AG
++				Industriestrasse 6b
++				Bronschhofen  St.Gallen  9552
++				CH
++
+ C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 700000-7FFFFF     (base 16)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 				Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District,
+@@ -14837,24 +14915,18 @@ C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 				Bentley  Western Australia  6102
+ 				AU
+ 
++6C-15-24   (hex)		SYMLINK CORPORATION
++D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
++				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
++				Taipei    11492
++				TW
++
+ 6C-15-24   (hex)		AEC s.r.l.
+ E00000-EFFFFF     (base 16)		AEC s.r.l.
+ 				Via Zambon, 33/A
+ 				Creazzo  Vicenza  36051
+ 				IT
+ 
+-70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
+-000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+-				ShenZhen  GuangDong  518000
+-				CN
+-
+-70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
+-B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
+-				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
+-				beijing  beijing  100029
+-				CN
+-
+ C4-A1-0E   (hex)		Harbour Cross Technology Ltd
+ 400000-4FFFFF     (base 16)		Harbour Cross Technology Ltd
+ 				Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang,
+@@ -14867,10 +14939,16 @@ C4-A1-0E   (hex)		Harbour Cross Technology Ltd
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
+-80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+-900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+-				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
+-				XIAMEN    361106
++70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
++000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
++				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
++				ShenZhen  GuangDong  518000
++				CN
++
++70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
++B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
++				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
++				beijing  beijing  100029
+ 				CN
+ 
+ 80-02-F4   (hex)		PassiveLogic
+@@ -14879,12 +14957,90 @@ A00000-AFFFFF     (base 16)		PassiveLogic
+ 				Holladay  UT  84121
+ 				US
+ 
++80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
++				XIAMEN    361106
++				CN
++
+ 80-02-F4   (hex)		Sichuan Fanyi Technology Co. Ltd.
+ 500000-5FFFFF     (base 16)		Sichuan Fanyi Technology Co. Ltd.
+ 				No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District
+ 				Chengdu  Sichuan  650000
+ 				CN
+ 
++80-02-F4   (hex)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
++D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
++				No. 52, Guoxiang Road, Wujin economic development zone
++				ChangZhou  JiangSu  213100
++				CN
++
++80-02-F4   (hex)		Infors AG
++400000-4FFFFF     (base 16)		Infors AG
++				Wuhrmattstr. 7
++				Bottmingen    4103
++				CH
++
++80-02-F4   (hex)		Mech-Mind Robotics Technologies Ltd.
++600000-6FFFFF     (base 16)		Mech-Mind Robotics Technologies Ltd.
++				 Room 1001,1F,Building 3, No.8,Chuangye Road,Haidian District
++				Beijing    100085
++				CN
++
++8C-51-09   (hex)		ENPLUG Co., Ltd.
++700000-7FFFFF     (base 16)		ENPLUG Co., Ltd.
++				#A-705, 46 Dallaenae-ro, Sujeong-gu, 
++				Seongnam-si  Gyeonggi-do  13449
++				KR
++
++8C-51-09   (hex)		Frontmatec
++900000-9FFFFF     (base 16)		Frontmatec
++				Hassellunden 9
++				Smørum    2765
++				DK
++
++0C-7F-ED   (hex)		ShenZhen TianGang Micro Technology CO.LTD
++500000-5FFFFF     (base 16)		ShenZhen TianGang Micro Technology CO.LTD
++				3rd floor ,Building20,QingHu Industrial,QingHu community,LongHua DistrictShenZhen,China
++				ShenZhen  GangDong  518100
++				CN
++
++0C-7F-ED   (hex)		U-tec Group Inc.
++800000-8FFFFF     (base 16)		U-tec Group Inc.
++				32920 Alvarado-Niles Rd Ste 220
++				Union City  CA  94587
++				US
++
++0C-7F-ED   (hex)		Soft dB
++300000-3FFFFF     (base 16)		Soft dB
++				1040, avenue Belvédère #215
++				Québec  Quebec  G1S 3G3
++				CA
++
++FC-61-79   (hex)		MACH SYSTEMS s.r.o.
++900000-9FFFFF     (base 16)		MACH SYSTEMS s.r.o.
++				Pocernicka 272/96
++				Prague    10800
++				CZ
++
++FC-61-79   (hex)		Annapurna labs
++800000-8FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++FC-61-79   (hex)		Zhuhai Anjubao Electronics Technology Co., Ltd.
++000000-0FFFFF     (base 16)		Zhuhai Anjubao Electronics Technology Co., Ltd.
++				Room 603, Building 4, No. 101, Daxue Road, Tangjiawan Town, High-tech Zone,
++				Zhuhai  Guangdong  519000
++				CN
++
++FC-61-79   (hex)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
++200000-2FFFFF     (base 16)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
++				Room 517, Biaofan Building, No. 6, Tangwei Industrial Avenue, Fuhai Street, Baoan District
++				Shenzhen    518132
++				CN
++
+ 4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+ 600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+ 				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+@@ -19667,18 +19823,18 @@ D00000-DFFFFF     (base 16)		Sun wealth technology corporation limited
+ 				Seoul    05808
+ 				KR
+ 
+-0C-86-29   (hex)		HagerEnergy GmbH
+-700000-7FFFFF     (base 16)		HagerEnergy GmbH
+-				Karlstrasse 5
+-				Osnabrueck    49074
+-				DE
+-
+ 6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+ B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+ 				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
+ 				shenz  guangdong  518055
+ 				CN
+ 
++0C-86-29   (hex)		HagerEnergy GmbH
++700000-7FFFFF     (base 16)		HagerEnergy GmbH
++				Karlstrasse 5
++				Osnabrueck    49074
++				DE
++
+ 30-43-D7   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
+ C00000-CFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
+ 				Room 706, building 3, no.20 east road, jingan district.
+@@ -19697,17 +19853,23 @@ A00000-AFFFFF     (base 16)		Flextronics International Kft
+ 				Zalaegerszeg    8900
+ 				HU
+ 
++38-1F-26   (hex)		Airmaster A/S
++400000-4FFFFF     (base 16)		Airmaster A/S
++				Industrivej 59
++				Aars    9600
++				DK
++
+ 38-1F-26   (hex)		HWACHANG CORPORATION 
+ D00000-DFFFFF     (base 16)		HWACHANG CORPORATION 
+ 				90, NONGGONGANJI-GIL
+ 				SOCHO-SI    24899
+ 				KR
+ 
+-38-1F-26   (hex)		Airmaster A/S
+-400000-4FFFFF     (base 16)		Airmaster A/S
+-				Industrivej 59
+-				Aars    9600
+-				DK
++18-A5-9C   (hex)		Residence Control Ltd
++800000-8FFFFF     (base 16)		Residence Control Ltd
++				Cvetan Vuchkov 7
++				Sofia  Sofia  1614
++				BG
+ 
+ 18-A5-9C   (hex)		Actiontec Electronics Inc.
+ 200000-2FFFFF     (base 16)		Actiontec Electronics Inc.
+@@ -19721,12 +19883,6 @@ D00000-DFFFFF     (base 16)		HWACHANG CORPORATION
+ 				Yeongtong-gu, Suwon-si  Gyeonggi-do  16229
+ 				KR
+ 
+-18-A5-9C   (hex)		Residence Control Ltd
+-800000-8FFFFF     (base 16)		Residence Control Ltd
+-				Cvetan Vuchkov 7
+-				Sofia  Sofia  1614
+-				BG
+-
+ 7C-70-BC   (hex)		Motec GmbH
+ A00000-AFFFFF     (base 16)		Motec GmbH
+ 				287 27 Road
+@@ -19751,6 +19907,12 @@ B00000-BFFFFF     (base 16)		Beijing Flintec Electronic Technology Co.,Ltd.
+ 				shanghai    201614
+ 				CN
+ 
++1C-59-74   (hex)		Square Inc.
++600000-6FFFFF     (base 16)		Square Inc.
++				1455 Market St.
++				San Francisco  CA  94103
++				US
++
+ 6C-15-24   (hex)		Shenzhen Electron Technology Co., LTD.
+ 500000-5FFFFF     (base 16)		Shenzhen Electron Technology Co., LTD.
+ 				Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District
+@@ -19769,18 +19931,6 @@ B00000-BFFFFF     (base 16)		Annapurna labs
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
+-1C-59-74   (hex)		Square Inc.
+-600000-6FFFFF     (base 16)		Square Inc.
+-				1455 Market St.
+-				San Francisco  CA  94103
+-				US
+-
+-6C-15-24   (hex)		DEFA AS
+-000000-0FFFFF     (base 16)		DEFA AS
+-				Blingsmovegen 30
+-				Nesbyen    3540
+-				NO
+-
+ 6C-15-24   (hex)		Linkplay
+ 200000-2FFFFF     (base 16)		Linkplay
+ 				891 W. Washington Ave.
+@@ -19793,6 +19943,12 @@ C00000-CFFFFF     (base 16)		CORAL-TAIYI
+ 				Taipei City    114
+ 				TW
+ 
++6C-15-24   (hex)		DEFA AS
++000000-0FFFFF     (base 16)		DEFA AS
++				Blingsmovegen 30
++				Nesbyen    3540
++				NO
++
+ C4-A1-0E   (hex)		O-NET Industrial Technologies (Shenzhen) Limited
+ 500000-5FFFFF     (base 16)		O-NET Industrial Technologies (Shenzhen) Limited
+ 				501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District
+@@ -19817,16 +19973,70 @@ D00000-DFFFFF     (base 16)		Eta Compute Inc.
+ 				Sunnyvale  CA  94086
+ 				US
+ 
++80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
++				Wuhan  Hubei  430073
++				CN
++
+ 80-02-F4   (hex)		Sichuan lookout environment protection technology co.,Ltd
+ 100000-1FFFFF     (base 16)		Sichuan lookout environment protection technology co.,Ltd
+ 				No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone
+ 				Chengdu  Sichuan  610052
+ 				CN
+ 
+-80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+-C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+-				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
+-				Wuhan  Hubei  430073
++8C-51-09   (hex)		PROCET Technology Co., Ltd(HK)
++200000-2FFFFF     (base 16)		PROCET Technology Co., Ltd(HK)
++				Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong
++				Hong kong    999077
++				HK
++
++80-02-F4   (hex)		Alfred Systems Inc
++E00000-EFFFFF     (base 16)		Alfred Systems Inc
++				13F, No. 2, Sec. 5, Xinyi Rd.
++				Taipei city    110
++				TW
++
++8C-51-09   (hex)		SpotterRF LLC
++C00000-CFFFFF     (base 16)		SpotterRF LLC
++				720 Timpanogos Parkway
++				Orem  UT  84097
++				US
++
++0C-7F-ED   (hex)		Tango Networks Inc
++200000-2FFFFF     (base 16)		Tango Networks Inc
++				2801 Network Blvd, Suite 200
++				Frisco  TX  TX 75034
++				US
++
++0C-7F-ED   (hex)		Purple Mountain ,Inc
++400000-4FFFFF     (base 16)		Purple Mountain ,Inc
++				New District
++				SuZhou  JiangSu  215000
++				CN
++
++FC-61-79   (hex)		CHOEUNENG
++400000-4FFFFF     (base 16)		CHOEUNENG
++				22, Ildong-ro, Sangnok-gu
++				Ansan-si  Gyeonggi-do  15326
++				KR
++
++FC-61-79   (hex)		EchoStar Mobile
++300000-3FFFFF     (base 16)		EchoStar Mobile
++				25/28 NORTH WALL QUAY, DUBLIN 1, D01H104        Ireland
++				Dublin  Ireland  D01H104
++				IE
++
++0C-7F-ED   (hex)		environmental systems corporation
++E00000-EFFFFF     (base 16)		environmental systems corporation
++				122F Commerce Park Drive
++				Barrie    Ontario  L4N 8W8 
++				CA
++
++FC-61-79   (hex)		Hangzhou LiDe Communication Co.,Ltd
++600000-6FFFFF     (base 16)		Hangzhou LiDe Communication Co.,Ltd
++				No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang,
++				Hangzhou    311500
+ 				CN
+ 
+ 20-85-93   (hex)		Great Lite International
+@@ -24632,12 +24842,6 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				Colorado Springs  CO  80907
+ 				US
+ 
+-6C-93-08   (hex)		Uconfree technology(shenzhen)limited
+-600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
+-				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
+-				SHENZHEN    518111
+-				CN
+-
+ 0C-86-29   (hex)		Annapurna labs
+ 300000-3FFFFF     (base 16)		Annapurna labs
+ 				Matam Scientific Industries Center,   Building 8.2
+@@ -24650,11 +24854,11 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				Hangzhou City  Zhejiang Province  31000
+ 				CN
+ 
+-30-43-D7   (hex)		Bodhi
+-A00000-AFFFFF     (base 16)		Bodhi
+-				3150 W. Prospect Road, Suite 330
+-				Fort Lauderdale  FL  33309
+-				US
++6C-93-08   (hex)		Uconfree technology(shenzhen)limited
++600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
++				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
++				SHENZHEN    518111
++				CN
+ 
+ 6C-93-08   (hex)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+ 200000-2FFFFF     (base 16)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+@@ -24662,24 +24866,24 @@ A00000-AFFFFF     (base 16)		Bodhi
+ 				HANGZHOU  ZHEJIANG  310000
+ 				CN
+ 
+-30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
+-800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
+-				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
+-				Shanghai    202150
+-				CN
+-
+ 30-43-D7   (hex)		PK Solutions LLC
+ 900000-9FFFFF     (base 16)		PK Solutions LLC
+ 				10811 E Harry
+ 				Wichita  KS  67207
+ 				US
+ 
+-30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
+-400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
+-				1749 Old Meadow Rd.
+-				McLean  VA  22102
++30-43-D7   (hex)		Bodhi
++A00000-AFFFFF     (base 16)		Bodhi
++				3150 W. Prospect Road, Suite 330
++				Fort Lauderdale  FL  33309
+ 				US
+ 
++30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
++800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
++				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
++				Shanghai    202150
++				CN
++
+ 38-1F-26   (hex)		NOITAC sp. z o.o. sp.k.
+ 600000-6FFFFF     (base 16)		NOITAC sp. z o.o. sp.k.
+ 				Szlak 28/3
+@@ -24692,6 +24896,12 @@ A00000-AFFFFF     (base 16)		Bodhi
+ 				YANG YANG GUN    25017
+ 				KR
+ 
++30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
++400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
++				1749 Old Meadow Rd.
++				McLean  VA  22102
++				US
++
+ 38-1F-26   (hex)		Deutronic Elektronik GmbH
+ B00000-BFFFFF     (base 16)		Deutronic Elektronik GmbH
+ 				Deutronicstraße 5
+@@ -24758,18 +24968,18 @@ A00000-AFFFFF     (base 16)		Jiangsu Perceive World Technology Co.,Ltd.
+ 				Nur-Sultan    010000
+ 				KZ
+ 
+-C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+-900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+-				No.211 Tiangu 8th Road, High-tech Zone
+-				Xi 'an   Shaanxi  710065
+-				CN
+-
+ 6C-15-24   (hex)		STERIS
+ A00000-AFFFFF     (base 16)		STERIS
+ 				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
+ 				Bishops Stortford  herts  CM23 5GZ
+ 				GB
+ 
++C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
++900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
++				No.211 Tiangu 8th Road, High-tech Zone
++				Xi 'an   Shaanxi  710065
++				CN
++
+ C4-A1-0E   (hex)		Alio, Inc
+ E00000-EFFFFF     (base 16)		Alio, Inc
+ 				10901 W. 120th Ave, Suite 380
+@@ -24811,3 +25021,93 @@ A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Z
+ 				1730 North First Street, 5th Floor
+ 				San Jose  CA  95112
+ 				US
++
++80-02-F4   (hex)		Annapurna labs
++800000-8FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++8C-51-09   (hex)		Avxav Electronic Trading LLC
++600000-6FFFFF     (base 16)		Avxav Electronic Trading LLC
++				Office 534 Building # 6WA Dubai Airport Free Zone
++				Dubai  Dubai  33964
++				AE
++
++80-02-F4   (hex)		Lazer Safe Pty Ltd
++700000-7FFFFF     (base 16)		Lazer Safe Pty Ltd
++				27 Action Road
++				Perth  WA  6090
++				AU
++
++80-02-F4   (hex)		Beijing Cybercore
++200000-2FFFFF     (base 16)		Beijing Cybercore
++				A206,F2,Yard#12,Building#1,JingAn DongLi,Chaoyang
++				Beijing  Beijing  100028
++				CN
++
++8C-51-09   (hex)		SHENZHEN LDROBOT CO., LTD.
++300000-3FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
++				Nanshan
++				Shenzhen    518000
++				CN
++
++8C-51-09   (hex)		nerospec
++800000-8FFFFF     (base 16)		nerospec
++				9 Freda Road, Bromhof,Skyview Retail Park
++				Randburg  Gauteng  2169
++				ZA
++
++8C-51-09   (hex)		Surpedia Technologies Co., Ltd.
++D00000-DFFFFF     (base 16)		Surpedia Technologies Co., Ltd.
++				5F-1, No.212, Sec 3, Datong Rd.
++				Xhzhi Dist.  New Taipei City  22103
++				TW
++
++8C-51-09   (hex)		IROOTELLUCKY Corp.
++E00000-EFFFFF     (base 16)		IROOTELLUCKY Corp.
++				609ho, 13, LS-ro
++				Gunpo-si  Gyeonggi-do  15843
++				KR
++
++0C-7F-ED   (hex)		Shenzhen MoreSense Technology Co., Ltd. 
++C00000-CFFFFF     (base 16)		Shenzhen MoreSense Technology Co., Ltd. 
++				#206 Building A1,#663 Bulong Road,Dafapu Community,Bantian Street,
++				Shenzhen  Guangdong  518129
++				CN
++
++0C-7F-ED   (hex)		Grandway Technology (Shenzhen) Limited
++700000-7FFFFF     (base 16)		Grandway Technology (Shenzhen) Limited
++				Block 7, Zhu Keng Industrial Zone
++				Ping Shan District  Shenzhen  518118
++				CN
++
++0C-7F-ED   (hex)		TelX Systems
++B00000-BFFFFF     (base 16)		TelX Systems
++				UMM RAMOOL
++				DEIRA  DUBAI  48235
++				AE
++
++FC-61-79   (hex)		Int'Act Pty Ltd
++D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
++				4 Pine Street
++				North Ipswich  Queensland  4305
++				AU
++
++0C-7F-ED   (hex)		Toast, Inc.
++100000-1FFFFF     (base 16)		Toast, Inc.
++				401 Park Drive, Suite 801
++				Boston  MA  02215
++				US
++
++FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
++100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
++				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
++				Shenzhen  Guangdong  518000
++				CN
++
++FC-61-79   (hex)		Shenzhen Dptek Technology Co., Ltd.
++A00000-AFFFFF     (base 16)		Shenzhen Dptek Technology Co., Ltd.
++				Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District
++				Shenzhen  Guangdong  518000
++				CN
+diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
+index 6a21795559..704a346ad5 100644
+--- a/hwdb.d/ma-small.txt
++++ b/hwdb.d/ma-small.txt
+@@ -5687,6 +5687,12 @@ F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
+ 				Shanghai    200241
+ 				CN
+ 
++8C-1F-64   (hex)		Stercom Power Solutions GmbH
++2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
++				Ziegelstr. 1
++				Weyarn  Bayern  83629
++				DE
++
+ 8C-1F-64   (hex)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ 				1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, 
+@@ -5699,12 +5705,6 @@ A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ 				Sydney  New South Wales  2132
+ 				AU
+ 
+-8C-1F-64   (hex)		Stercom Power Solutions GmbH
+-2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
+-				Ziegelstr. 1
+-				Weyarn  Bayern  83629
+-				DE
+-
+ 8C-1F-64   (hex)		Gateview Technologies
+ B7B000-B7BFFF     (base 16)		Gateview Technologies
+ 				 104 White St #201
+@@ -5741,6 +5741,12 @@ FBA000-FBAFFF     (base 16)		Onto Innovation
+ 				Wilmington  MA  01887
+ 				US
+ 
++8C-1F-64   (hex)		DAVE SRL
++967000-967FFF     (base 16)		DAVE SRL
++				VIA TALPONEDO 29/A
++				PORCIA  PORDENONE  330850
++				IT
++
+ 8C-1F-64   (hex)		Becton Dickinson
+ 775000-775FFF     (base 16)		Becton Dickinson
+ 				7 Loveton Circle
+@@ -5759,12 +5765,6 @@ BFB000-BFBFFF     (base 16)		TechArgos
+ 				Moscow     105066
+ 				RU
+ 
+-8C-1F-64   (hex)		DAVE SRL
+-967000-967FFF     (base 16)		DAVE SRL
+-				VIA TALPONEDO 29/A
+-				PORCIA  PORDENONE  330850
+-				IT
+-
+ 8C-1F-64   (hex)		e.kundenservice Netz GmbH
+ 855000-855FFF     (base 16)		e.kundenservice Netz GmbH
+ 				Steindamm 100
+@@ -5801,23 +5801,17 @@ EB5000-EB5FFF     (base 16)		Meiryo Denshi Corp.
+ 				Gadag  Karnataka  582103
+ 				IN
+ 
+-8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
+-F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
+-				Gerberstrasse 49
+-				Backnang    71522
+-				DE
+-
+ 8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+ 059000-059FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+ 				Winnettener Straße 6
+ 				Dinkelsbuehl  Bavaria  91550
+ 				DE
+ 
+-8C-1F-64   (hex)		JBF
+-F45000-F45FFF     (base 16)		JBF
+-				via goretta 90
+-				mappano  torino  10079
+-				IT
++8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
++F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
++				Gerberstrasse 49
++				Backnang    71522
++				DE
+ 
+ 8C-1F-64   (hex)		REFU Storage System GmbH
+ 53B000-53BFFF     (base 16)		REFU Storage System GmbH
+@@ -5831,6 +5825,12 @@ F45000-F45FFF     (base 16)		JBF
+ 				Bergisch Gladbach  North Rhine-Westphalia  51465
+ 				DE
+ 
++8C-1F-64   (hex)		JBF
++F45000-F45FFF     (base 16)		JBF
++				via goretta 90
++				mappano  torino  10079
++				IT
++
+ 8C-1F-64   (hex)		Micro Electroninc Products
+ 765000-765FFF     (base 16)		Micro Electroninc Products
+ 				TT Vasumweg 150
+@@ -5849,35 +5849,17 @@ F45000-F45FFF     (base 16)		JBF
+ 				Indianapolis  IN  46240
+ 				US
+ 
+-8C-1F-64   (hex)		INVIXIUM ACCESS INC
+-274000-274FFF     (base 16)		INVIXIUM ACCESS INC
+-				111 Gordon Baker Road, Suite #300
+-				Toronto  Ontario  M2H 3R1
+-				CA
+-
+ 8C-1F-64   (hex)		Sicon srl
+ B3B000-B3BFFF     (base 16)		Sicon srl
+ 				Via Sila 1/3
+ 				Isola Vicentina  Vicenza  36033
+ 				IT
+ 
+-8C-1F-64   (hex)		Sanchar Telesystems limited
+-958000-958FFF     (base 16)		Sanchar Telesystems limited
+-				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
+-				New Delhi  Delhi  110020
+-				IN
+-
+-8C-1F-64   (hex)		Tantronic AG
+-1EF000-1EFFFF     (base 16)		Tantronic AG
+-				Gewerbering 12
+-				Wohlen  AG  5610
+-				CH
+-
+-8C-1F-64   (hex)		Tunstall A/S
+-F2C000-F2CFFF     (base 16)		Tunstall A/S
+-				Niels Bohrs vej 42
+-				Stilling  Skanderborg  8660
+-				DK
++8C-1F-64   (hex)		INVIXIUM ACCESS INC
++274000-274FFF     (base 16)		INVIXIUM ACCESS INC
++				111 Gordon Baker Road, Suite #300
++				Toronto  Ontario  M2H 3R1
++				CA
+ 
+ 8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
+ 0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
+@@ -5885,6 +5867,12 @@ F2C000-F2CFFF     (base 16)		Tunstall A/S
+ 				Oyama  Tochigi  323-0063
+ 				JP
+ 
++8C-1F-64   (hex)		Sanchar Telesystems limited
++958000-958FFF     (base 16)		Sanchar Telesystems limited
++				A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI
++				New Delhi  Delhi  110020
++				IN
++
+ 8C-1F-64   (hex)		Rodgers Instruments US LLC
+ A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
+ 				6497 NE Croeni Avenue
+@@ -5903,6 +5891,42 @@ A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
+ 				Ottawa  ON  K2G 0G3
+ 				CA
+ 
++8C-1F-64   (hex)		Tunstall A/S
++F2C000-F2CFFF     (base 16)		Tunstall A/S
++				Niels Bohrs vej 42
++				Stilling  Skanderborg  8660
++				DK
++
++8C-1F-64   (hex)		Tantronic AG
++1EF000-1EFFFF     (base 16)		Tantronic AG
++				Gewerbering 12
++				Wohlen  AG  5610
++				CH
++
++8C-1F-64   (hex)		Strategic Robotic Systems
++C57000-C57FFF     (base 16)		Strategic Robotic Systems
++				14842 NE 95th StreetBuilding 5
++				Redmond  WA  98052
++				US
++
++8C-1F-64   (hex)		MHE Electronics
++E90000-E90FFF     (base 16)		MHE Electronics
++				49Alexander Rd, Westmead
++				Durban  KwaZulu Natal  3610
++				ZA
++
++8C-1F-64   (hex)		tickIoT Inc.
++949000-949FFF     (base 16)		tickIoT Inc.
++				651 N Broad St Ste 206, Ste 206
++				Middletown  DE  19709
++				US
++
++8C-1F-64   (hex)		SYSN
++2C5000-2C5FFF     (base 16)		SYSN
++				the third floor, 26, Namsan-ro 39beon-gil, Uichang-gu
++				Changwon-si, Gyeongsangnam-do, Republic of Korea    51368
++				KR
++
+ 70-B3-D5   (hex)		EVCO SPA
+ A80000-A80FFF     (base 16)		EVCO SPA
+ 				VIA FELTRE N. 81
+@@ -11465,22 +11489,16 @@ ED9000-ED9FFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
+ 				MUMBAI  MAHARASHTRA  400064
+ 				IN
+ 
+-8C-1F-64   (hex)		Wolfspyre Labs
+-9D4000-9D4FFF     (base 16)		Wolfspyre Labs
+-				5007 Highland Ct #WPL-IEEE
+-				Austin  TX  78731
+-				US
+-
+ 8C-1F-64   (hex)		Vekto
+ 4AC000-4ACFFF     (base 16)		Vekto
+ 				Televisieweg 75
+ 				Almere    1322AK
+ 				NL
+ 
+-8C-1F-64   (hex)		SpectraDynamics, Inc.
+-581000-581FFF     (base 16)		SpectraDynamics, Inc.
+-				1849 Cherry St.
+-				Louisville  CO  80027
++8C-1F-64   (hex)		Wolfspyre Labs
++9D4000-9D4FFF     (base 16)		Wolfspyre Labs
++				5007 Highland Ct #WPL-IEEE
++				Austin  TX  78731
+ 				US
+ 
+ 8C-1F-64   (hex)		IO Master Technology
+@@ -11489,11 +11507,11 @@ BD3000-BD3FFF     (base 16)		IO Master Technology
+ 				New Taipei City 235  Taipei  235
+ 				TW
+ 
+-8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
+-05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
+-				Escadstr. 1
+-				Pfullendorf    88630
+-				DE
++8C-1F-64   (hex)		SpectraDynamics, Inc.
++581000-581FFF     (base 16)		SpectraDynamics, Inc.
++				1849 Cherry St.
++				Louisville  CO  80027
++				US
+ 
+ 8C-1F-64   (hex)		TIFLEX
+ 194000-194FFF     (base 16)		TIFLEX
+@@ -11501,11 +11519,11 @@ BD3000-BD3FFF     (base 16)		IO Master Technology
+ 				PONCIN    01450
+ 				FR
+ 
+-8C-1F-64   (hex)		Neuralog LP
+-115000-115FFF     (base 16)		Neuralog LP
+-				4800 Sugar Grove Blvd., Ste. 200
+-				Stafford  TX  77479
+-				US
++8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
++05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
++				Escadstr. 1
++				Pfullendorf    88630
++				DE
+ 
+ 8C-1F-64   (hex)		Sichuan Aiyijan Technology Company Ltd.
+ 40C000-40CFFF     (base 16)		Sichuan Aiyijan Technology Company Ltd.
+@@ -11531,11 +11549,11 @@ C24000-C24FFF     (base 16)		Alifax S.r.l.
+ 				POLVERARA  PD  35020
+ 				IT
+ 
+-8C-1F-64   (hex)		Flextronics International Kft
+-A4C000-A4CFFF     (base 16)		Flextronics International Kft
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
++8C-1F-64   (hex)		Neuralog LP
++115000-115FFF     (base 16)		Neuralog LP
++				4800 Sugar Grove Blvd., Ste. 200
++				Stafford  TX  77479
++				US
+ 
+ 8C-1F-64   (hex)		Pietro Fiorentini Spa
+ 8D9000-8D9FFF     (base 16)		Pietro Fiorentini Spa
+@@ -11543,24 +11561,30 @@ A4C000-A4CFFF     (base 16)		Flextronics International Kft
+ 				San Vito al Tagliamento (PN)    33078
+ 				IT
+ 
++8C-1F-64   (hex)		Flextronics International Kft
++A4C000-A4CFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
++
+ 8C-1F-64   (hex)		Flextronics International Kft
+ D02000-D02FFF     (base 16)		Flextronics International Kft
+ 				38. Zrinyi Str.
+ 				Zalaegerszeg  Zala  8900
+ 				HU
+ 
+-8C-1F-64   (hex)		VMukti Solutions Private Limited
+-E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
+-				3-4, Shivalik Plaza, Panjrapole, Ambawadi
+-				Ahmedabad  Gujarat  380015
+-				IN
+-
+ 8C-1F-64   (hex)		Autark GmbH
+ 943000-943FFF     (base 16)		Autark GmbH
+ 				Platz des Friedens 8
+ 				Baunatal  Hessen  D-34225
+ 				DE
+ 
++8C-1F-64   (hex)		VMukti Solutions Private Limited
++E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
++				3-4, Shivalik Plaza, Panjrapole, Ambawadi
++				Ahmedabad  Gujarat  380015
++				IN
++
+ 8C-1F-64   (hex)		ACTELSER S.L.
+ 3F4000-3F4FFF     (base 16)		ACTELSER S.L.
+ 				CARRER ALBERT EINSTEIN, 44
+@@ -11597,11 +11621,11 @@ FA2000-FA2FFF     (base 16)		AZD Praha s.r.o., ZOZ Olomouc
+ 				Knoxville  TN  37932
+ 				US
+ 
+-70-B3-D5   (hex)		Watteco
+-E75000-E75FFF     (base 16)		Watteco
+-				Rue Gutenberg
+-				Hennebont  Brittany  56700
+-				FR
++8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
++AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
++				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
++				Beijing  Beijing  100081
++				CN
+ 
+ 8C-1F-64   (hex)		Toolplanet Co., Ltd.
+ 54F000-54FFFF     (base 16)		Toolplanet Co., Ltd.
+@@ -11615,11 +11639,11 @@ E75000-E75FFF     (base 16)		Watteco
+ 				Dubai  Dubai  74249
+ 				AE
+ 
+-8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
+-AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
+-				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
+-				Beijing  Beijing  100081
+-				CN
++70-B3-D5   (hex)		Watteco
++E75000-E75FFF     (base 16)		Watteco
++				Rue Gutenberg
++				Hennebont  Brittany  56700
++				FR
+ 
+ 8C-1F-64   (hex)		Weidmann Tecnologia Electrica de Mexico
+ 7B7000-7B7FFF     (base 16)		Weidmann Tecnologia Electrica de Mexico
+@@ -11657,6 +11681,36 @@ B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
+ 				Nelson  Nelson  7010
+ 				NZ
+ 
++8C-1F-64   (hex)		e.p.g. Elettronica s.r.l.
++3D4000-3D4FFF     (base 16)		e.p.g. Elettronica s.r.l.
++				Via della Crocetta 3
++				Oltrona di San Mamette  Como (CO)  22070
++				IT
++
++8C-1F-64   (hex)		Stratis IOT
++3C5000-3C5FFF     (base 16)		Stratis IOT
++				4230 Main Street
++				Philadelphia  PA  19127
++				US
++
++8C-1F-64   (hex)		Twinleaf LLC
++080000-080FFF     (base 16)		Twinleaf LLC
++				300 Deer Creek DriveSuite 300
++				Plainsboro  NJ  08536
++				US
++
++8C-1F-64   (hex)		Genius vision digital private limted
++CC6000-CC6FFF     (base 16)		Genius vision digital private limted
++				S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027
++				new delhi  new delhi  110027
++				IN
++
++8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
++3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
++				Austraße 59e
++				Bludenz  Austria  6700
++				AT
++
+ 70-B3-D5   (hex)		System West dba ICS Electronics
+ E06000-E06FFF     (base 16)		System West dba ICS Electronics
+ 				7034 Commerce Circle Suite A
+@@ -17222,18 +17276,18 @@ E61000-E61FFF     (base 16)		Stange Elektronik GmbH
+ 				Beijing  Beijing  100029
+ 				CN
+ 
+-8C-1F-64   (hex)		EOLANE
+-911000-911FFF     (base 16)		EOLANE
+-				ZI DU VAL D OMBREE
+-				COMBREE  -  49520
+-				FR
+-
+ 8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+ 429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
+ 				P. O.  Box 6863 Rodeløkka
+ 				Oslo  Oslo  0504
+ 				NO
+ 
++8C-1F-64   (hex)		EOLANE
++911000-911FFF     (base 16)		EOLANE
++				ZI DU VAL D OMBREE
++				COMBREE  -  49520
++				FR
++
+ 8C-1F-64   (hex)		Huz Electronics Ltd
+ BC2000-BC2FFF     (base 16)		Huz Electronics Ltd
+ 				10 Avondale road
+@@ -17294,12 +17348,6 @@ E64000-E64FFF     (base 16)		Indefac company
+ 				São Paulo  São Paulo  04268020
+ 				BR
+ 
+-8C-1F-64   (hex)		Real Digital
+-3B2000-3B2FFF     (base 16)		Real Digital
+-				655 SW James Pl
+-				Pullman  WA  99163
+-				US
+-
+ 8C-1F-64   (hex)		Fingoti Limited
+ CD9000-CD9FFF     (base 16)		Fingoti Limited
+ 				Barnam Ham Farm
+@@ -17318,6 +17366,12 @@ FB7000-FB7FFF     (base 16)		Grace Design/Lunatec LLC
+ 				Leawood  KS  66251
+ 				US
+ 
++8C-1F-64   (hex)		Real Digital
++3B2000-3B2FFF     (base 16)		Real Digital
++				655 SW James Pl
++				Pullman  WA  99163
++				US
++
+ 8C-1F-64   (hex)		Zhuhai Yunzhou Intelligence Technology Ltd.
+ 254000-254FFF     (base 16)		Zhuhai Yunzhou Intelligence Technology Ltd.
+ 				Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town
+@@ -17354,12 +17408,48 @@ CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
+ 				suzhou  jiangsu  215000
+ 				CN
+ 
++8C-1F-64   (hex)		nke marine electronics
++817000-817FFF     (base 16)		nke marine electronics
++				6 rue gutenberg
++				Hennebont    56700
++				FR
++
++8C-1F-64   (hex)		GS Industrie-Elektronik GmbH
++6B9000-6B9FFF     (base 16)		GS Industrie-Elektronik GmbH
++				Porschestrasse 11
++				Leverkusen    51381
++				DE
++
+ 8C-1F-64   (hex)		Paragraf
+ 01A000-01AFFF     (base 16)		Paragraf
+ 				7-8 West Newlands
+ 				Somersham  Cambridgeshire  PE28 3EB
+ 				GB
+ 
++8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
++5AC000-5ACFFF     (base 16)		YUYAMA MFG Co.,Ltd
++				1-4-30
++				MEISHINGUCHI,TOYONAKA  OSAKA  561-0841
++				JP
++
++8C-1F-64   (hex)		Transdigital Pty Ltd
++7CF000-7CFFFF     (base 16)		Transdigital Pty Ltd
++				1/160 Stirling Highway
++				Nedlands  Western Australia  6009
++				AU
++
++8C-1F-64   (hex)		Talleres de Escoriaza SA
++F65000-F65FFF     (base 16)		Talleres de Escoriaza SA
++				Barrio Ventas, 35
++				Irun  Gipuzkoa  20305
++				ES
++
++8C-1F-64   (hex)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
++CDB000-CDBFFF     (base 16)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
++				1132 Budapest, Váci út 22-24. 3. em.)
++				Budapest    1132
++				HU
++
+ 70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+ BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				3-3-1
+@@ -17900,12 +17990,6 @@ A7B000-A7BFFF     (base 16)		SmartSafe
+ 				Jinan City  Shandong Province  250101
+ 				CN
+ 
+-70-B3-D5   (hex)		AVA Technologies Inc.
+-72F000-72FFFF     (base 16)		AVA Technologies Inc.
+-				45 East Cordova St, AVA Technologies Inc.
+-				Vancouver  BC  V6A 1K3
+-				CA
+-
+ 70-B3-D5   (hex)		Position Imaging
+ A5D000-A5DFFF     (base 16)		Position Imaging
+ 				22 marin way unit 1
+@@ -23042,36 +23126,24 @@ BD6000-BD6FFF     (base 16)		NOVA Products GmbH
+ 				Munich    80538
+ 				DE
+ 
+-8C-1F-64   (hex)		ECO-ADAPT
+-C38000-C38FFF     (base 16)		ECO-ADAPT
+-				39 Rue de Chateaudun
+-				Paris  Ile-de-France  75009
+-				FR
+-
+-8C-1F-64   (hex)		Flextronics International Kft
+-F5C000-F5CFFF     (base 16)		Flextronics International Kft
++70-B3-D5   (hex)		Flextronics International Kft
++E2F000-E2FFFF     (base 16)		Flextronics International Kft
+ 				Zrínyi Miklós str. 38.
+ 				Zalaegerszeg    8900
+ 				HU
+ 
+-70-B3-D5   (hex)		Flextronics International Kft
+-E2F000-E2FFFF     (base 16)		Flextronics International Kft
++8C-1F-64   (hex)		Flextronics International Kft
++F5C000-F5CFFF     (base 16)		Flextronics International Kft
+ 				Zrínyi Miklós str. 38.
+ 				Zalaegerszeg    8900
+ 				HU
+ 
+-8C-1F-64   (hex)		ADETEC SAS
+-AE8000-AE8FFF     (base 16)		ADETEC SAS
+-				8 rue de l'Angoumois
+-				ARGENTEUIL    95100
++8C-1F-64   (hex)		ECO-ADAPT
++C38000-C38FFF     (base 16)		ECO-ADAPT
++				39 Rue de Chateaudun
++				Paris  Ile-de-France  75009
+ 				FR
+ 
+-8C-1F-64   (hex)		AML
+-634000-634FFF     (base 16)		AML
+-				2190 Regal Parkway
+-				Euless  TX  76040
+-				US
+-
+ 8C-1F-64   (hex)		In-lite Design BV
+ 557000-557FFF     (base 16)		In-lite Design BV
+ 				Stephensonweg 18
+@@ -23096,6 +23168,18 @@ A6D000-A6DFFF     (base 16)		CyberneX Co., Ltd
+ 				YOKOHAMA  Kanagawa  222-0033
+ 				JP
+ 
++8C-1F-64   (hex)		ADETEC SAS
++AE8000-AE8FFF     (base 16)		ADETEC SAS
++				8 rue de l'Angoumois
++				ARGENTEUIL    95100
++				FR
++
++8C-1F-64   (hex)		AML
++634000-634FFF     (base 16)		AML
++				2190 Regal Parkway
++				Euless  TX  76040
++				US
++
+ 70-B3-D5   (hex)		Active Research Limited
+ 6A0000-6A0FFF     (base 16)		Active Research Limited
+ 				21 Harwell Road
+@@ -23156,18 +23240,132 @@ D69000-D69FFF     (base 16)		ADiCo Corporation
+ 				Utsunomiya-shi  Tochigi  320-0075
+ 				JP
+ 
++8C-1F-64   (hex)		METRONA-Union GmbH
++9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
++				Aidenbachstr. 40
++				München    81379
++				DE
++
+ 8C-1F-64   (hex)		Wittra Networks AB
+ DF8000-DF8FFF     (base 16)		Wittra Networks AB
+ 				Västra Järnvägsgatan 39th floor(Convendum)
+ 				Stockholm  Stockholm  111 64
+ 				SE
+ 
+-8C-1F-64   (hex)		METRONA-Union GmbH
+-9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
+-				Aidenbachstr. 40
+-				München    81379
++8C-1F-64   (hex)		Unitron Systems b.v.
++FA8000-FA8FFF     (base 16)		Unitron Systems b.v.
++				SCHANSESTRAAT 7
++				IJzendijke    4515 RN
++				NL
++
++8C-1F-64   (hex)		University of Geneva - Department of Particle Physics
++D88000-D88FFF     (base 16)		University of Geneva - Department of Particle Physics
++				Quai Ernest-Ansermet 24
++				Geneva    1211
++				CH
++
++8C-1F-64   (hex)		Massar Networks
++FAA000-FAAFFF     (base 16)		Massar Networks
++				Postfach 1207PEAX ID 473.1849.6740.89
++				Baar  Zug  CH-6341
++				CH
++
++8C-1F-64   (hex)		Vytahy-Vymyslicky s.r.o.
++737000-737FFF     (base 16)		Vytahy-Vymyslicky s.r.o.
++				Pivovarska 542
++				Uherske Hradiste - Jarosov    60801
++				CZ
++
++8C-1F-64   (hex)		Retency
++BBF000-BBFFFF     (base 16)		Retency
++				19 rue Vivienne
++				Paris    75002
++				FR
++
++8C-1F-64   (hex)		Camius
++601000-601FFF     (base 16)		Camius
++				41593 Winchester Rd., Ste 200
++				Temecula  CA  92590
++				US
++
++8C-1F-64   (hex)		Patch Technologies, Inc.
++0AC000-0ACFFF     (base 16)		Patch Technologies, Inc.
++				100 S Cincinnati Ave, Fifth Floor
++				Tulsa  OK  74103
++				US
++
++8C-1F-64   (hex)		BNB
++0BE000-0BEFFF     (base 16)		BNB
++				Deongmyeongdong-ro 22beon-gil
++				Daejeon  Yuseong-gu  34155
++				KR
++
++8C-1F-64   (hex)		Pionierkraft GmbH
++CD3000-CD3FFF     (base 16)		Pionierkraft GmbH
++				Agnes-Pockels-Bogen 1
++				Munich  Bavaria  80992
+ 				DE
+ 
++8C-1F-64   (hex)		Comm-ence, Inc.
++B73000-B73FFF     (base 16)		Comm-ence, Inc.
++				1813 Limerick Ct
++				Darien  IL  60561
++				US
++
++8C-1F-64   (hex)		YUSUR Technology Co., Ltd.
++C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
++				Room 1401,building 4,yard 1, Beiqing Road No.81, Haidian District
++				Beijing  Beijing  100086
++				CN
++
++70-B3-D5   (hex)		Ava Technologies
++72F000-72FFFF     (base 16)		Ava Technologies
++				2409 E. Pender St.
++				Vancouver  BC  V5K 2B2
++				CA
++
++8C-1F-64   (hex)		Benison Tech
++3AC000-3ACFFF     (base 16)		Benison Tech
++				2100 Geng Road, Suite 210
++				Palo Alto  CA  94043
++				US
++
++8C-1F-64   (hex)		HIGHVOLT Prüftechnik
++8F8000-8F8FFF     (base 16)		HIGHVOLT Prüftechnik
++				Marie-Curie-Straße10
++				Dresden    01139
++				DE
++
++8C-1F-64   (hex)		Stresstech OY
++625000-625FFF     (base 16)		Stresstech OY
++				Tikkutehtaantie 1
++				Vaajakoski    40800
++				FI
++
++8C-1F-64   (hex)		BCMTECH
++94C000-94CFFF     (base 16)		BCMTECH
++				803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu,
++				Anyang-si  Gyeonggi-do  14042
++				KR
++
++8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
++97C000-97CFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
++				Winnettener Straße 6
++				Dinkelsbuehl  Bavaria  91550
++				DE
++
++8C-1F-64   (hex)		SLAT
++683000-683FFF     (base 16)		SLAT
++				11 Rue Jean-Elysée DUPUY
++				Champagne au Mont d'Or  Rhône  69543
++				FR
++
++8C-1F-64   (hex)		E VISION INDIA PVT LTD 
++7AF000-7AFFFF     (base 16)		E VISION INDIA PVT LTD 
++				9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002
++				Faridabad  HARYANA  121002
++				IN
++
+ 70-B3-D5   (hex)		DISMUNTEL SAL
+ 92C000-92CFFF     (base 16)		DISMUNTEL SAL
+ 				Pol ind cotes
+@@ -28613,6 +28811,12 @@ DC0000-DC0FFF     (base 16)		Pigs Can Fly Labs LLC
+ 				Beaverton  OR  97008
+ 				US
+ 
++8C-1F-64   (hex)		United States Technologies Inc.
++525000-525FFF     (base 16)		United States Technologies Inc.
++				1701 Pollitt Drive
++				Fair Lawn  NJ  07410
++				US
++
+ 8C-1F-64   (hex)		EMBSYS SISTEMAS EMBARCADOS
+ FD4000-FD4FFF     (base 16)		EMBSYS SISTEMAS EMBARCADOS
+ 				AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324
+@@ -28625,17 +28829,11 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Webb City  MO  64870
+ 				US
+ 
+-8C-1F-64   (hex)		United States Technologies Inc.
+-525000-525FFF     (base 16)		United States Technologies Inc.
+-				1701 Pollitt Drive
+-				Fair Lawn  NJ  07410
+-				US
+-
+-8C-1F-64   (hex)		Rumble, Inc
+-837000-837FFF     (base 16)		Rumble, Inc
+-				Bluebonnet Ln
+-				Austin  TX  78704
+-				US
++8C-1F-64   (hex)		PuS GmbH und Co. KG
++4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
++				Hainstr. 13
++				Gera  Germany  07545
++				DE
+ 
+ 8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
+ 504000-504FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+@@ -28643,11 +28841,11 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Viersen  NRW  41747
+ 				DE
+ 
+-8C-1F-64   (hex)		PuS GmbH und Co. KG
+-4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
+-				Hainstr. 13
+-				Gera  Germany  07545
+-				DE
++8C-1F-64   (hex)		Rumble, Inc
++837000-837FFF     (base 16)		Rumble, Inc
++				Bluebonnet Ln
++				Austin  TX  78704
++				US
+ 
+ 8C-1F-64   (hex)		Cinetix Srl
+ 89E000-89EFFF     (base 16)		Cinetix Srl
+@@ -28655,18 +28853,18 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Borgo Valsugana  Trento  38051
+ 				IT
+ 
+-8C-1F-64   (hex)		ATM SOLUTIONS
+-9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
+-				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
+-				Navi Mumbai  Maharashatra  400709
+-				IN
+-
+ 8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
+ D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
+ 				EL3, J BLOCK, M.I.D.C. Bhosari
+ 				PUNE  Maharastra  411027
+ 				IN
+ 
++8C-1F-64   (hex)		ATM SOLUTIONS
++9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
++				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
++				Navi Mumbai  Maharashatra  400709
++				IN
++
+ 8C-1F-64   (hex)		Integer.pl S.A.
+ A97000-A97FFF     (base 16)		Integer.pl S.A.
+ 				Wielicka 28
+@@ -28685,11 +28883,17 @@ A97000-A97FFF     (base 16)		Integer.pl S.A.
+ 				Hagen    58119
+ 				DE
+ 
+-8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
+-F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
+-				Felix-Wankel-Str. 13
+-				Zaberfeld  Baden-Württemberg  74374
+-				DE
++8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
++01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
++				6600 rue St. Urbain, Suite 300
++				Montreal  Quebec  H2S 3G8
++				CA
++
++8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
++A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
++				No.10 Shangdi Road, Haidian District
++				Beijing  Beijing  100085
++				CN
+ 
+ 8C-1F-64   (hex)		XSENSOR Technology Corp.
+ 7AA000-7AAFFF     (base 16)		XSENSOR Technology Corp.
+@@ -28697,47 +28901,35 @@ F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
+ 				Calgary  Alberta  T2G 0Z9
+ 				CA
+ 
++8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
++F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
++				Felix-Wankel-Str. 13
++				Zaberfeld  Baden-Württemberg  74374
++				DE
++
+ 8C-1F-64   (hex)		MG s.r.l.
+ 67A000-67AFFF     (base 16)		MG s.r.l.
+ 				via Monte Bianco, 1
+ 				Solbiate Olona  VA  21058
+ 				IT
+ 
+-8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
+-A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
+-				No.10 Shangdi Road, Haidian District
+-				Beijing  Beijing  100085
+-				CN
+-
+ 8C-1F-64   (hex)		AMF Medical SA
+ F52000-F52FFF     (base 16)		AMF Medical SA
+ 				Chemin de la Dent-d'Oche 1 A
+ 				Ecublens VD  Vaud  1024 
+ 				CH
+ 
+-8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
+-01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
+-				6600 rue St. Urbain, Suite 300
+-				Montreal  Quebec  H2S 3G8
+-				CA
+-
+-8C-1F-64   (hex)		HUPI
+-489000-489FFF     (base 16)		HUPI
+-				45 allée théodore monod
+-				Bidart  Sélectionnez un département / état  64210
+-				FR
+-
+ 8C-1F-64   (hex)		Qualitrol LLC
+ 905000-905FFF     (base 16)		Qualitrol LLC
+ 				1385 Fairport Rd
+ 				Fairport  NY  14450
+ 				US
+ 
+-8C-1F-64   (hex)		WINTUS SYSTEM
+-9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
+-				E1102, 7 yeonmujang 5ga gil, seongdong-gu
+-				SEOUL  SEOUL  04782 
+-				KR
++8C-1F-64   (hex)		HUPI
++489000-489FFF     (base 16)		HUPI
++				45 allée théodore monod
++				Bidart  Sélectionnez un département / état  64210
++				FR
+ 
+ 8C-1F-64   (hex)		TTC TELEKOMUNIKACE, s.r.o.
+ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+@@ -28751,11 +28943,11 @@ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+ 				Yreka  CA  96097
+ 				US
+ 
+-8C-1F-64   (hex)		Proterra, Inc
+-552000-552FFF     (base 16)		Proterra, Inc
+-				1 Whitlee Court
+-				Greenville  SC  29607
+-				US
++8C-1F-64   (hex)		WINTUS SYSTEM
++9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
++				E1102, 7 yeonmujang 5ga gil, seongdong-gu
++				SEOUL  SEOUL  04782 
++				KR
+ 
+ 8C-1F-64   (hex)		eumig industrie-TV GmbH.
+ 5B3000-5B3FFF     (base 16)		eumig industrie-TV GmbH.
+@@ -28763,6 +28955,12 @@ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+ 				Anif  Salzburg  5081
+ 				AT
+ 
++8C-1F-64   (hex)		Proterra, Inc
++552000-552FFF     (base 16)		Proterra, Inc
++				1 Whitlee Court
++				Greenville  SC  29607
++				US
++
+ 8C-1F-64   (hex)		TeraDiode / Panasonic
+ 2C3000-2C3FFF     (base 16)		TeraDiode / Panasonic
+ 				30 Upton Dr
+@@ -28781,18 +28979,6 @@ D7C000-D7CFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+ 				Uijeongbu-si  Gyonggi-do  11652
+ 				KR
+ 
+-8C-1F-64   (hex)		VECOS Europe B.V.
+-C80000-C80FFF     (base 16)		VECOS Europe B.V.
+-				ESP 237
+-				Eindhoven  Noord-Brabant  5633 AD
+-				NL
+-
+-8C-1F-64   (hex)		EMIT GmbH
+-3D1000-3D1FFF     (base 16)		EMIT GmbH
+-				Johannes-Mauthe-Straße 14
+-				Albstadt  Baden Württemberg  72458
+-				DE
+-
+ 8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
+ 721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
+ 				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
+@@ -28805,6 +28991,18 @@ C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
+ 				Leinfelden-Echterdingen    70771
+ 				DE
+ 
++8C-1F-64   (hex)		VECOS Europe B.V.
++C80000-C80FFF     (base 16)		VECOS Europe B.V.
++				ESP 237
++				Eindhoven  Noord-Brabant  5633 AD
++				NL
++
++8C-1F-64   (hex)		EMIT GmbH
++3D1000-3D1FFF     (base 16)		EMIT GmbH
++				Johannes-Mauthe-Straße 14
++				Albstadt  Baden Württemberg  72458
++				DE
++
+ 8C-1F-64   (hex)		Power Electronics Espana, S.L.
+ D08000-D08FFF     (base 16)		Power Electronics Espana, S.L.
+ 				Poligono Industrial Carrases. Ronda del camp d Aviacio 4
+@@ -28823,8 +29021,71 @@ B01000-B01FFF     (base 16)		noah
+ 				Leipzig    04109
+ 				DE
+ 
++8C-1F-64   (hex)		eumig industrie-TV GmbH.
++426000-426FFF     (base 16)		eumig industrie-TV GmbH.
++				Gewerbeparkstrasse 9
++				Anif  Salzburg  5081
++				AT
++
++8C-1F-64   (hex)		Hamamatsu Photonics K.K.
++67F000-67FFFF     (base 16)		Hamamatsu Photonics K.K.
++				314-5 Shimokanzo
++				Iwata  Shizuoka  4380193
++				JP
++
++8C-1F-64   (hex)		Telemetrics Inc.
++5E5000-5E5FFF     (base 16)		Telemetrics Inc.
++				75 Commerce Dr
++				Allendale    07401
++				US
++
+ 8C-1F-64   (hex)		Nokeval Oy
+ E0E000-E0EFFF     (base 16)		Nokeval Oy
+ 				Rounionkatu 107
+ 				Nokia    37150
+ 				FI
++
++8C-1F-64   (hex)		NextT Microwave Inc
++8C5000-8C5FFF     (base 16)		NextT Microwave Inc
++				121 Hymus Boulevard
++				Pointe-Claire  Quebec  H9R 1E6
++				CA
++
++8C-1F-64   (hex)		  Fuzhou Tucsen Photonics Co.,Ltd
++45D000-45DFFF     (base 16)		  Fuzhou Tucsen Photonics Co.,Ltd
++				5# Wanwushe Smart Industrial Park , No.2 Yangqi Branch Rd, Gaishan Town, Cangshan Area, Fuzhou, Fujian,PRC
++				fuzhou    350008
++				CN
++
++8C-1F-64   (hex)		TEKVOX, Inc
++197000-197FFF     (base 16)		TEKVOX, Inc
++				1965 Post Rd, Suite 400
++				New Braunfels  TX  78130
++				US
++
++8C-1F-64   (hex)		ACSL Ltd.
++A2D000-A2DFFF     (base 16)		ACSL Ltd.
++				3-6-4 Rinkaicho
++				Edogawa-ku  Tokyo  134-0086
++				JP
++
++8C-1F-64   (hex)		Private
++EE0000-EE0FFF     (base 16)		Private
++
++8C-1F-64   (hex)		Agar Corporation Inc.
++301000-301FFF     (base 16)		Agar Corporation Inc.
++				5150 Tacoma Dr
++				Houston  TX  77041
++				US
++
++8C-1F-64   (hex)		Sensus Healthcare
++746000-746FFF     (base 16)		Sensus Healthcare
++				851 Broken Sound Parkway NW, Suite 215
++				Boca Raton  FL  33487
++				US
++
++8C-1F-64   (hex)		Nuvation Energy
++DFE000-DFEFFF     (base 16)		Nuvation Energy
++				40 Bathurst Drive
++				Waterloo  Ontario  N2V 1V6
++				CA
+diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
+index 19832a58b3..c657b038fb 100644
+--- a/hwdb.d/pci.ids
++++ b/hwdb.d/pci.ids
+@@ -1,8 +1,8 @@
+ #
+ #	List of PCI ID's
+ #
+-#	Version: 2022.03.22
+-#	Date:    2022-03-22 03:15:02
++#	Version: 2022.04.16
++#	Date:    2022-04-16 00:17:00
+ #
+ #	Maintained by Albert Pool, Martin Mares, and other volunteers from
+ #	the PCI ID Project at https://pci-ids.ucw.cz/.
+@@ -103,6 +103,13 @@
+ 		0731 7212  JM7200
+ 		0731 7214  JM7500
+ 		0731 7215  JM7200
++	9100  JM9100
++		0731 9101  JM9100
++		0731 9102  JM9100-I
++	910a  JH910
++		0731 910a  JH910
++		0731 910b  JH910-I
++		0731 910c  JH910-M
+ 	9200  JM9200
+ 	920a  JH920
+ 		0731 920a  JH920
+@@ -668,6 +675,7 @@
+ 		1000 3050  SAS9217-8i
+ 		1000 3060  SAS9217-4i4e
+ 		1014 0472  N2125 External Host Bus Adapter
++		1014 047a  N2115 Internal Host Bus Adapter
+ 		1590 0041  H220i
+ 		1590 0042  H221 / 9207-8e
+ 		1590 0044  H220i
+@@ -725,16 +733,16 @@
+ 		1000 46a0  MegaRAID 9660-24i Tri-Mode Storage Adapter
+ 		1000 46c0  eHBA 9680W-16e Tri-Mode Storage Adapter
+ 		1000 46d0  eHBA 9600-8i8e Tri-Mode Storage Adapter
+-		1028 2114  PERC H965 Adapter
+-		1028 2115  PERC H965 Front
+-		1028 2117  PERC H965 MX
++		1028 2114  PERC H965i Adapter
++		1028 2115  PERC H965i Front
++		1028 2117  PERC H965i MX
+ 		1028 213a  PERC H965e Adapter
+-		1028 213b  PERC H765 Adapter
+-		1028 213c  PERC H765 Front
++		1028 213b  PERC H765i Adapter
++		1028 213c  PERC H765i Front
+ 		1028 213d  PERC H765N Front
+-		1028 213e  PERC H765 MX
+-		1028 213f  PERC H365 Adapter
+-		1028 2140  PERC H365 Front
++		1028 213e  PERC H765i MX
++		1028 213f  PERC H365i Adapter
++		1028 2140  PERC H365i Front
+ 		1028 2141  PERC H360 MX
+ 		1028 2142  HBA 465e Adapter
+ 	00ab  SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
+@@ -1075,7 +1083,9 @@
+ 	1636  Renoir
+ 	1637  Renoir Radeon High Definition Audio Controller
+ 	1638  Cezanne
+-	163f  VanGogh
++# Used in the Steam Deck
++	163f  VanGogh [AMD Custom GPU 0405]
++	1640  Rembrandt Radeon High Definition Audio Controller
+ 	164c  Lucienne
+ 	164d  Rembrandt
+ 	1681  Rembrandt [Radeon 680M]
+@@ -12416,6 +12426,8 @@
+ 	20b5  GA100 [A100 PCIe 80GB]
+ 	20b6  GA100GL [PG506-232]
+ 	20b7  GA100GL [A30 PCIe]
++	20b8  GA100 [A100X]
++	20b9  GA100 [A30X]
+ 	20bb  GA100 [DRIVE A100 PROD]
+ 	20be  GA100 [GRID A100A]
+ 	20bf  GA100 [GRID A100B]
+@@ -12437,6 +12449,7 @@
+ 	21c4  TU116 [GeForce GTX 1660 SUPER]
+ 	21d1  TU116BM [GeForce GTX 1660 Ti Mobile]
+ 	2200  GA102
++	2203  GA102 [GeForce RTX 3090 Ti]
+ 	2204  GA102 [GeForce RTX 3090]
+ 		147d 10de  NVIDIA Geforce RTX 3090 Founders Edition
+ 	2205  GA102 [GeForce RTX 3080 Ti 20GB]
+@@ -12485,6 +12498,7 @@
+ 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
+ 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
+ 	24b0  GA104GL [RTX A4000]
++	24b1  GA104GL [RTX A4000H]
+ 	24b6  GA104GLM [RTX A5000 Mobile]
+ 	24b7  GA104GLM [RTX A4000 Mobile]
+ 	24b8  GA104GLM [RTX A3000 Mobile]
+@@ -12511,11 +12525,13 @@
+ 	2583  GA107 [GeForce RTX 3050]
+ 	25a0  GA107M [GeForce RTX 3050 Ti Mobile]
+ 	25a2  GA107M [GeForce RTX 3050 Mobile]
++	25a3  GA107
+ 	25a4  GA107
+ 	25a5  GA107M [GeForce RTX 3050 Mobile]
+ 	25a6  GA107M [GeForce MX570]
+ 	25a7  GA107M [GeForce MX570]
+ 	25a9  GA107M [GeForce RTX 2050]
++	25aa  GA107M [GeForce MX570 A]
+ 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
+ 	25b5  GA107GLM [RTX A4 Mobile]
+ # A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E
+@@ -12568,6 +12584,7 @@
+ 	e300  LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter
+ 		1014 0614  PCIe3 4-Port 16Gb Fibre Channel Adapter for POWER (FC EN1C/EN1D; CCIN 578E)
+ 		1014 0615  PCIe3 2-Port 32Gb Fibre Channel Adapter for POWER (FC EN1A/EN1B; CCIN 578F)
++		1014 06a0  PCIe3 2-Port 16Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC)
+ 		10df e300  LPe32002-M2 2-Port 32Gb Fibre Channel Adapter
+ 		10df e301  LPe32000-M2 1-Port 32Gb Fibre Channel Adapter
+ 		10df e310  LPe31002-M6 2-Port 16Gb Fibre Channel Adapter
+@@ -12621,9 +12638,13 @@
+ 		10df f411  LPe35000-M2-D 1-Port 32Gb Fibre Channel Adapter
+ 		10df f418  LPe35000-M2-L 1-Port 32Gb PCIe Fibre Channel Adapter
+ 		10df f419  LPe35002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter
++		10df f421  LPe36002-M2-L 2-Port 64Gb PCIe Fibre Channel Adapter
++		10df f422  LPe36002-M64-D 2-Port 64Gb Fibre Channel Adapter
+ 		1590 02d5  StoreFabric SN1610E 1-Port 32Gb Fibre Channel Adapter
+ 		1590 02d6  StoreFabric SN1610E 2-Port 32Gb Fibre Channel Adapter
+ 	f500  LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter
++		1014 06c1  PCIe4 4-Port 32Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC)
++		1014 06c2  PCIe4 2-Port 64Gb Fibre Channel Adapter for POWER (FC EN1N/EN1P; CCIN 2CFD)
+ 	f700  LP7000 Fibre Channel Host Adapter
+ 	f701  LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
+ 	f800  LP8000 Fibre Channel Host Adapter
+@@ -15877,6 +15898,7 @@
+ 	8534  PM8534 PFX 64xG3 PCIe Fanout Switch
+ 	8535  PM8535 PFX 80xG3 PCIe Fanout Switch
+ 	8536  PM8536 PFX 96xG3 PCIe Fanout Switch
++		1bd4 0081  PM8536 PFX 96xG3 PCIe Fanout Switch
+ 	8546  PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch
+ 	8562  PM8562 Switchtec PFX-L 32xG3 Fanout-Lite PCIe Gen3 Switch
+ 11f9  I-Cube Inc
+@@ -17187,6 +17209,8 @@
+ 	5190  9200 ECO NVMe SSD
+ 	5191  9200 PRO NVMe SSD
+ 	5192  9200 MAX NVMe SSD
++	51a2  9300 PRO NVMe SSD
++	51a3  9300 MAX NVMe SSD
+ 1345  Arescom Inc
+ 1347  Odetics
+ 1349  Sumitomo Electric Industries, Ltd.
+@@ -19680,6 +19704,8 @@
+ 		14e4 4126  NetXtreme-E Dual-port 10G SFP+ Ethernet OCP 3.0 Adapter (BCM957412N4120C)
+ 		152d 8b20  BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller
+ 		152d 8b22  BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller
++# NIC-ETH531F-LP-2P BCM57412 2 x 10G SFP+ Ethernet PCIe Card
++		193d 1024  NIC-ETH531F-LP-2P
+ 	16d7  BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
+ 		14e4 1402  BCM957414A4142CC 10Gb/25Gb Ethernet PCIe
+ 		14e4 1404  BCM957414M4142C OCP 2x25G Type1 wRoCE
+@@ -20033,6 +20059,7 @@
+ 	9027  CN99xx [ThunderX2] Integrated AHCI/SATA 3 Host Controller
+ 	a8d8  BCM43224/5 Wireless Network Adapter
+ 	aa52  BCM43602 802.11ac Wireless LAN SoC
++	b080  BCM56080 Firelight2 Switch ASIC
+ 	b302  BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller
+ 	b334  BCM56334 StrataXGS 24x1GE 4x10GE Switch Controller
+ 	b370  BCM56370 Switch ASIC
+@@ -22053,8 +22080,8 @@
+ 	0400  Datacenter Technologies QDF2432 PCI Express Root Port
+ 	0401  Datacenter Technologies QDF2400 PCI Express Root Port
+ 	1000  QCS405 PCIe Root Complex
+-	1101  QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
+-	1103  Atheros QCNFA765
++	1101  QCA6390 Wireless Network Adapter
++	1103  QCNFA765 Wireless Network Adapter
+ 	1104  QCN6024/9024/9074 Wireless Network Adapter
+ 17cc  NetChip Technology, Inc
+ 	2280  USB 2.0
+@@ -23684,6 +23711,38 @@
+ 		1bb1 0157  Nytro 5050M 7mm
+ # Nytro 5050M (Ebonhawk Mainstream Performance) TCG - 7mm
+ 		1bb1 0158  Nytro 5050M TCG 7mm
++# Nytro 5060M (Rocinante Mainstream Performance) - 15mm
++		1bb1 0159  Nytro 5060M
++# Nytro 5050M TCG (Rocinante Mainstream Performance) - 15mm
++		1bb1 0160  Nytro 5060M TCG
++# Nytro 5060M 7mm (Rocinante Mainstream Performance)
++		1bb1 0161  Nytro 5060M 7mm
++# Nytro 5060M TCG (Rocinante Mainstream Performance) - 7mm
++		1bb1 0162  Nytro 5060M TCG 7mm
++# Nytro 5060H (Rocinante High Performance)
++		1bb1 0163  Nytro 5060H
++# Nytro 5060H TCG (Rocinante High Performance)
++		1bb1 0164  Nytro 5060H TCG
++# Nytro 5060H (Rocinante - High Performance) - E3.S 1T
++		1bb1 0165  Nytro 5060H E3.S 1T
++# Nytro 5060H (Rocinante - High Performance) - E3.S 1T TCG
++		1bb1 0166  Nytro 5060H E3.S 1T TCG
++# Nytro 5060H (Rocinante - High Performance) - E3.L 1T
++		1bb1 0167  Nytro 5060H E3.L 1T
++# Nytro 5060H (Rocinante - High Performance) - E3.L 1T TCG
++		1bb1 0168  Nytro 5060H E3.L 1T TCG
++# Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T
++		1bb1 0169  Nytro 5060M E3.S 1T
++# Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T TCG
++		1bb1 0170  Nytro 5060M E3.S 1T TCG
++# Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T
++		1bb1 0171  Nytro 5060M E3.L 1T
++# Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T TCG
++		1bb1 0172  Nytro 5060M E3.L 1T TCG
++# Nytro 5060M (Rocinante Mainstream Performance) - E1.S
++		1bb1 0173  Nytro 5060M E1.S
++# Nytro 5060M (Rocinante Mainstream Performance) - E1.S TCG
++		1bb1 0174  Nytro 5060M E1.S TCG
+ 		1bb1 01a1  Nytro XP7102
+ 	5012  FireCuda 510 SSD
+ 	5016  FireCuda 520 SSD
+@@ -24076,10 +24135,16 @@
+ 	0001  AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 	00b1  AQC100 10G Ethernet MAC controller [AQtion]
+ 	07b1  AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
++# Older revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card
++		1baa 07b1  QM2-2P10G1TA [QXG 10GbE Network Adapter]
++# Newer revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card
++		1baa 07b2  QM2-2P10G1TA [QM2 Expansion Adapter]
+ 	08b1  AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 	11b1  AQC111 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 	12b1  AQC112 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 	87b1  AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
++	94c0  AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
++		1043 87f5  ProArt X570-CREATOR WIFI
+ 	d107  AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 		1043 8741  XG-C100C
+ 	d108  AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+@@ -24618,7 +24683,14 @@
+ 1ed3  Yeston
+ 1ed5  Moore Threads Technology Co.,Ltd
+ 	0100  MTT S10
+-	0101  MTT S30
++	0101  MTT S10
++	0102  MTT S30
++	0105  MTT S50
++	0106  MTT S60
++	0111  MTT S100
++	0121  MTT S1000M
++	0122  MTT S1000
++	0123  MTT S2000
+ 1ed8  Digiteq Automotive
+ 	0101  FG4 PCIe Frame Grabber
+ 1ed9  Myrtle.ai
+@@ -24626,6 +24698,9 @@
+ 1eec  Viscore Technologies Ltd
+ 	0102  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+ 	1eec  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
++1eed  Xiangdixian Computing Technology (Chongqing) Ltd.
++	0100  XDX P100 VGA controller
++	0101  XDX P101 High Definition Audio Controller
+ 1efb  Flexxon Pte Ltd
+ 1f02  Beijing Dayu Technology
+ 1f03  Shenzhen Shichuangyi Electronics Co., Ltd
+@@ -25156,6 +25231,8 @@
+ 	0d10  SB-365x Motion Feedback Device
+ 	2f00  SB-3642 Motion Feedback Device
+ 	3000  SB-3644 Motion Feedback Device
++4e58  Nutanix, Inc.
++	0001  Virtual NVMe Controller
+ 5045  University of Toronto
+ 	4243  BLASTbus PCI Interface Card v1
+ 5046  GemTek Technology Corporation
+@@ -26340,8 +26417,9 @@
+ 		8086 0010  Ethernet Network Adapter I710-T4L for OCP 3.0
+ 		8086 401a  Ethernet Network Adapter I710-T4L
+ 		8086 401b  Ethernet Network Adapter I710-T4L for OCP 3.0
++	0dd5  Ethernet Adaptive Virtual Function
+ 	0dda  Ethernet Connection X722 for 10GbE SFP+
+-		1bd4 0076  Ethernet Connection X722 for 10GbE SFP+
++		1bd4 0076  Ethernet Connection F102IX722 for 10GbE SFP
+ 	0e00  Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
+ 		1028 04f7  Xeon E5 v2 on PowerEdge R320 server
+ 		15d9 066b  X9SRL-F
+@@ -27692,9 +27770,13 @@
+ 		8086 000c  Ethernet 100G 2P E810-C OCP
+ 		8086 000d  Ethernet Network Adapter E810-L-Q2 for OCP 3.0
+ 		8086 000e  Ethernet Network Adapter E810-2C-Q2
++		8086 000f  Ethernet Network Adapter E810-C-Q2T
+ 		8086 0010  Ethernet 100G 2P E810-C-stg Adapter
++		8086 0011  Ethernet Network Adapter E810-C-Q1 for OCP3.0
+ 	1593  Ethernet Controller E810-C for SFP
+ 		1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
++		1137 02e9  E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC
++		1137 02ea  E810XXVDA4T 4x25/10 GbE SFP28 PCIe NIC
+ 		8086 0002  Ethernet Network Adapter E810-L-2
+ 		8086 0005  Ethernet Network Adapter E810-XXV-4
+ 		8086 0006  Ethernet Network Adapter E810-XXV-4
+@@ -27707,6 +27789,8 @@
+ 		8086 000e  Ethernet Network Adapter E810-XXV-4T
+ 		8086 000f  Ethernet 25G 4P E810-XXV-stg Adapter
+ 		8086 0010  Ethernet 25G 4P E810-XXV-st Adapter
++		8086 4010  Ethernet Network Adapter E810-XXV-4
++		8086 4013  Ethernet Network Adapter E810-XXV-4 for OCP 3.0
+ 	1599  Ethernet Controller E810-XXV for backplane
+ 		8086 0001  Ethernet 25G 2P E810-XXV-k Mezz
+ 	159a  Ethernet Controller E810-XXV for QSFP
+@@ -27723,6 +27807,7 @@
+ 		8086 4001  Ethernet Network Adapter E810-XXV-2
+ 		8086 4002  Ethernet Network Adapter E810-XXV-2 for OCP 3.0
+ 		8086 4003  Ethernet Network Adapter E810-XXV-2
++		8086 4015  Ethernet Network Adapter E810-XXV-2 for OCP 3.0
+ 	15a0  Ethernet Connection (2) I218-LM
+ 	15a1  Ethernet Connection (2) I218-V
+ 	15a2  Ethernet Connection (3) I218-LM
+@@ -31429,6 +31514,7 @@
+ 	34b7  Ice Lake-LP PCI Express Root Port #16
+ 	34ba  Ice Lake-LP PCI Express Root Port #3
+ 	34bc  Ice Lake-LP PCI Express Root Port #5
++	34c4  Ice Lake-LP SD Host Controller
+ 	34c5  Ice Lake-LP Serial IO I2c Controller #4
+ 	34c6  Ice Lake-LP Serial IO I2c Controller #5
+ 	34c8  Ice Lake-LP Smart Sound Technology Audio Controller
+@@ -32805,6 +32891,7 @@
+ 	8a23  Ice Lake Thunderbolt 3 PCI Express Root Port #3
+ 	8a51  Iris Plus Graphics G7 (Ice Lake)
+ 	8a52  Iris Plus Graphics G7
++	8a53  Iris Plus Graphics G7
+ 	8a56  Iris Plus Graphics G1 (Ice Lake)
+ 	8a5a  Iris Plus Graphics G4 (Ice Lake)
+ 	8a5c  Iris Plus Graphics G4 (Ice Lake)
+@@ -33843,6 +33930,7 @@
+ 	2008  Video assistant component
+ 8820  Stryker Corporation
+ 	2724  Mako Front Side Motor Controller [cPCI]
++8848  Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd
+ 8866  T-Square Design Inc.
+ 8888  Silicon Magic
+ 8912  TRX
+@@ -34215,6 +34303,10 @@
+ 		1bd4 0070  RS0800M5E24i
+ 		1bd4 0071  RS0800M5H16i
+ 		1bd4 0072  RS0800M5E16i
++		1bd4 0077  RS0800M5E16iM
++		1bd4 0078  RS0800M5E24iM
++		1bd4 0079  RS0800M5H24iM
++		1bd4 0080  RS0804M5R16iM
+ 		1cc4 0101  Ramaxel FBGF-RAD PM8204
+ 		1cc4 0201  Ramaxel FBGF-RAD PM8222
+ 		1d49 0220  ThinkSystem 4350-8i SAS/SATA 12Gb HBA
+@@ -34844,7 +34936,6 @@ C 05  Memory controller
+ 	01  FLASH memory
+ 	02  CXL
+ 		00  CXL Memory Device - vendor specific
+-# Devices compliant to CXL spec
+ 		10  CXL Memory Device (CXL 2.x)
+ 	80  Memory controller
+ C 06  Bridge
+diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html
+index a1d6f63bcd..ac15190e4c 100644
+--- a/hwdb.d/pnp_id_registry.html
++++ b/hwdb.d/pnp_id_registry.html
+@@ -1262,7 +1262,7 @@
+  <tr class="even"><td>Matrox</td><td>MTX</td><td>11/29/1996</td> </tr>
+  <tr class="odd"><td>Mat&#039;s Computers</td><td>MCQ</td><td>07/22/2004</td> </tr>
+  <tr class="even"><td>Matsushita Communication Industrial Co., Ltd.</td><td>WPA</td><td>03/15/2001</td> </tr>
+- <tr class="odd"><td>Matsushita Electric Ind. Company Ltd</td><td>MAT</td><td>11/29/1996</td> </tr>
++ <tr class="odd"><td>Panasonic Connect Co.,Ltd.</td><td>MAT</td><td>04/01/2022</td> </tr>
+  <tr class="even"><td>MaxCom Technical Inc</td><td>MTI</td><td>11/29/1996</td> </tr>
+  <tr class="odd"><td>MaxData Computer AG</td><td>VOB</td><td>02/21/2000</td> </tr>
+  <tr class="even"><td>MaxData Computer GmbH &amp; Co.KG</td><td>MXD</td><td>04/19/2000</td> </tr>
+diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
+index d02e59f5e2..8e19afff93 100644
+--- a/hwdb.d/usb.ids
++++ b/hwdb.d/usb.ids
+@@ -9,8 +9,8 @@
+ #	The latest version can be obtained from
+ #		http://www.linux-usb.org/usb.ids
+ #
+-# Version: 2022.03.18
+-# Date:    2022-03-18 20:34:09
++# Version: 2022.04.13
++# Date:    2022-04-13 20:34:10
+ #
+ 
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -3412,6 +3412,12 @@
+ 	069b  ECOSYS M2635dn
+ 	06b4  ECOSYS M5526cdw
+ 0483  STMicroelectronics
++	0102  Remote NDIS Network device with Android debug (ADB)
++	0103  Remote NDIS Network device
++	0104  MTP device with Android debug (ADB)
++	0105  MTP device
++	0106  PTP device with Android debug (ADB)
++	0107  PTP device
+ 	0137  BeWAN ADSL USB ST (blue or green)
+ 	0138  Unicorn II (ST70138B + MTC-20174TQ chipset)
+ 	0adb  Android Debug Bridge (ADB) device
+@@ -14964,6 +14970,10 @@
+ 0e23  Liou Yuane Enterprise Co., Ltd
+ 0e25  VinChip Systems, Inc.
+ 0e26  J-Phone East Co., Ltd
++0e2e  Brady Worldwide, Inc.
++	000b  BMP 51
++	000c  BMP 61
++	000d  BMP 41
+ 0e30  HeartMath LLC
+ 0e34  Micro Computer Control Corp.
+ 0e35  3Pea Technologies, Inc.
diff --git a/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch b/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch
new file mode 100644
index 0000000..485ae28
--- /dev/null
+++ b/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch
@@ -0,0 +1,40 @@
+From 101c779033314c5df131d5de48778524c7c82559 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 28 Apr 2022 17:43:27 +0200
+Subject: [PATCH] hwdb: run "ninja update-hwdb-autosuspend" for v251-rc2
+
+(cherry picked from commit 27c03586ea80bc75f3f747670b4c89ce340d5345)
+
+Related: #2087778
+---
+ hwdb.d/60-autosuspend-fingerprint-reader.hwdb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+index b44e3e328b..9704680cd1 100644
+--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
++++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+@@ -137,6 +137,7 @@ usb:v04F3p0C32*
+ usb:v04F3p0C33*
+ usb:v04F3p0C3D*
+ usb:v04F3p0C42*
++usb:v04F3p0C4B*
+ usb:v04F3p0C4D*
+ usb:v04F3p0C4F*
+ usb:v04F3p0C63*
+@@ -192,6 +193,7 @@ usb:v06CBp0103*
+ usb:v06CBp0123*
+ usb:v06CBp0126*
+ usb:v06CBp0129*
++usb:v06CBp0168*
+  ID_AUTOSUSPEND=1
+  ID_PERSIST=0
+ 
+@@ -261,7 +263,6 @@ usb:v138Ap0091*
+ # Known unsupported devices
+ usb:v04F3p036B*
+ usb:v04F3p0C00*
+-usb:v04F3p0C4B*
+ usb:v04F3p0C4C*
+ usb:v04F3p0C57*
+ usb:v04F3p0C5E*
diff --git a/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch b/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch
new file mode 100644
index 0000000..4ac8aea
--- /dev/null
+++ b/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch
@@ -0,0 +1,25 @@
+From 1704b021b3d662b6f2e64208370c5a944144531d Mon Sep 17 00:00:00 2001
+From: techtino <w1682146@my.westminster.ac.uk>
+Date: Sat, 30 Apr 2022 14:06:55 +0100
+Subject: [PATCH] Fix orientation detection for Asus Transformer T100TAF,
+ copied T100TA rule
+
+(cherry picked from commit ad44259225eabeb9755440506c261c6080a2f405)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index d6a584150c..0dfaaaf467 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -123,6 +123,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT300CHI:*
+ 
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:*
++sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
+  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
diff --git a/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch b/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch
new file mode 100644
index 0000000..cb452fe
--- /dev/null
+++ b/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch
@@ -0,0 +1,25 @@
+From d16426ae82574ad5312f0b3aaee076be199fe302 Mon Sep 17 00:00:00 2001
+From: Alice S <quarkyalice@disroot.org>
+Date: Sun, 1 May 2022 14:49:18 -0700
+Subject: [PATCH] Fix orientation detection for HP Pavilion X2 10-k010nr
+
+(cherry picked from commit 8099abee00e3c6f53c292e8f8d33fc487e71a198)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 0dfaaaf467..b5d9eda510 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -452,6 +452,8 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
+ 
+ # HP Pavillion X2 10-n000nd
+ sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:*
++# HP Pavilion X2 10-k010nr
++sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2DetachablePC10:*
+  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+ 
+ # HP Pro Tablet 408 G1
diff --git a/SOURCES/0310-fix-typo.patch b/SOURCES/0310-fix-typo.patch
new file mode 100644
index 0000000..c7430ae
--- /dev/null
+++ b/SOURCES/0310-fix-typo.patch
@@ -0,0 +1,25 @@
+From 612140f2207d0d6bf996acdf51b444c790f9f528 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Tue, 3 May 2022 01:16:32 +0900
+Subject: [PATCH] fix typo
+
+(cherry picked from commit 77f081f3632862eaaa43bbc744c9c897b373521c)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index b5d9eda510..70759145a8 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -450,7 +450,7 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
+ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
+  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ 
+-# HP Pavillion X2 10-n000nd
++# HP Pavilion X2 10-n000nd
+ sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:*
+ # HP Pavilion X2 10-k010nr
+ sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2DetachablePC10:*
diff --git a/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch b/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch
new file mode 100644
index 0000000..ef7c93d
--- /dev/null
+++ b/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch
@@ -0,0 +1,67 @@
+From 1926de432e7ac0e7eddc18e127f57809e64ec162 Mon Sep 17 00:00:00 2001
+From: rodin-ia <38556724+rodin-ia@users.noreply.github.com>
+Date: Tue, 3 May 2022 22:40:55 +0200
+Subject: [PATCH] Adding a description of the keyboard shortcut Fn+F12 for the
+ HP EliteBook 845 G7 device. (#23253)
+
+udevadm info /dev/input/event4
+P: /devices/platform/i8042/serio0/input/input4/event4
+N: input/event4
+L: 0
+S: input/by-path/platform-i8042-serio-0-event-kbd
+E: DEVPATH=/devices/platform/i8042/serio0/input/input4/event4
+E: DEVNAME=/dev/input/event4
+E: MAJOR=13
+E: MINOR=68
+E: SUBSYSTEM=input
+E: USEC_INITIALIZED=4165584
+E: KEYBOARD_KEY_81=f20
+E: KEYBOARD_KEY_89=battery
+E: KEYBOARD_KEY_8a=screenlock
+E: KEYBOARD_KEY_8b=camera
+E: KEYBOARD_KEY_8c=media
+E: KEYBOARD_KEY_8e=dvd
+E: KEYBOARD_KEY_92=brightnessdown
+E: KEYBOARD_KEY_97=brightnessup
+E: KEYBOARD_KEY_b1=help
+E: KEYBOARD_KEY_b3=unknown
+E: KEYBOARD_KEY_d7=wlan
+E: KEYBOARD_KEY_ee=switchvideomode
+E: KEYBOARD_KEY_68=unknown
+E: ID_INPUT=1
+E: ID_INPUT_KEY=1
+E: ID_INPUT_KEYBOARD=1
+E: ID_BUS=i8042
+E: ID_SERIAL=noserial
+E: ID_PATH=platform-i8042-serio-0
+E: ID_PATH_TAG=platform-i8042-serio-0
+E: XKBMODEL=pc105
+E: XKBLAYOUT=us
+E: BACKSPACE=guess
+E: LIBINPUT_DEVICE_GROUP=11/1/1:isa0060/serio0
+E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd
+E: TAGS=:power-switch:
+E: CURRENT_TAGS=:power-switch:
+
+(cherry picked from commit d31b8a66d187523dab5d19a9269c9543382e021d)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 9b06bab54d..b852f33608 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -699,6 +699,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteBookFolioG1:*
+  KEYBOARD_KEY_64=calendar
+  KEYBOARD_KEY_81=f20
+ 
++# HP EliteBook 845 G7
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook845G7*:pvr*
++ KEYBOARD_KEY_68=unknown                                # Fn+F12 HP Programmable Key
++
+ # HP ProBook 650
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*ProBook*650*:*
+  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
diff --git a/SOURCES/0312-hwdb-run-update-hwdb.patch b/SOURCES/0312-hwdb-run-update-hwdb.patch
new file mode 100644
index 0000000..4f428d2
--- /dev/null
+++ b/SOURCES/0312-hwdb-run-update-hwdb.patch
@@ -0,0 +1,1984 @@
+From 500ed61936ff0ef1269d08e45b97b99db63439bb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Thu, 5 May 2022 16:22:42 +0200
+Subject: [PATCH] hwdb: run "update-hwdb"
+
+(cherry picked from commit da2f26b2cbc607ae46fd181909f5513bad182dbf)
+
+Related: #2087778
+---
+ hwdb.d/20-OUI.hwdb               | 209 +++++++++++++++++++-
+ hwdb.d/20-acpi-vendor.hwdb.patch |   4 +-
+ hwdb.d/20-pci-vendor-model.hwdb  | 187 +++++++++++++++---
+ hwdb.d/20-usb-vendor-model.hwdb  |   8 +-
+ hwdb.d/ma-large.txt              | 322 +++++++++++++++++++++++++++++--
+ hwdb.d/ma-medium.txt             |  58 +++++-
+ hwdb.d/ma-small.txt              | 108 +++++++++--
+ hwdb.d/pci.ids                   |  61 +++++-
+ hwdb.d/usb.ids                   |   8 +-
+ 9 files changed, 877 insertions(+), 88 deletions(-)
+
+diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
+index aaa3326325..ab3afc31b2 100644
+--- a/hwdb.d/20-OUI.hwdb
++++ b/hwdb.d/20-OUI.hwdb
+@@ -39836,6 +39836,9 @@ OUI:044169*
+ OUI:04421A*
+  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+ 
++OUI:0443FD*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:0444A1*
+  ID_OUI_FROM_DATABASE=TELECON GALICIA,S.A.
+ 
+@@ -41318,6 +41321,9 @@ OUI:082522*
+ OUI:082525*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:082573*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:082697*
+  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+ 
+@@ -48152,6 +48158,9 @@ OUI:200CC8*
+ OUI:200DB0*
+  ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+ 
++OUI:200E2B*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:200E95*
+  ID_OUI_FROM_DATABASE=IEC – TC9 WG43
+ 
+@@ -48959,6 +48968,9 @@ OUI:20E52A*
+ OUI:20E564*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:20E6DF*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:20E791*
+  ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
+ 
+@@ -50165,6 +50177,9 @@ OUI:2827BF*
+ OUI:28285D*
+  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+ 
++OUI:282947*
++ ID_OUI_FROM_DATABASE=Chipsea Technologies (Shenzhen) Corp.
++
+ OUI:282986*
+  ID_OUI_FROM_DATABASE=APC by Schneider Electric
+ 
+@@ -50615,6 +50630,9 @@ OUI:288A1C*
+ OUI:288CB8*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:288EEC*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:2891D0*
+  ID_OUI_FROM_DATABASE=Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
+ 
+@@ -51929,6 +51947,9 @@ OUI:2C8A72*
+ OUI:2C8BF2*
+  ID_OUI_FROM_DATABASE=Hitachi Metals America Ltd
+ 
++OUI:2C8D37*
++ ID_OUI_FROM_DATABASE=Virtium
++
+ OUI:2C8DB1*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -52652,6 +52673,21 @@ OUI:303ABA*
+ OUI:303D08*
+  ID_OUI_FROM_DATABASE=GLINTT TES S.A.
+ 
++OUI:303D511*
++ ID_OUI_FROM_DATABASE=SHENZHEN WLINK TECHNOLOGY CO., LTD.
++
++OUI:303D512*
++ ID_OUI_FROM_DATABASE=Harman Connected Services Corporation India Pvt. Ltd.
++
++OUI:303D515*
++ ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd.
++
++OUI:303D518*
++ ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam
++
++OUI:303D51A*
++ ID_OUI_FROM_DATABASE=TeraNXT Global India Pvt Ltd.
++
+ OUI:303EA7*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -55133,6 +55169,9 @@ OUI:387A3C*
+ OUI:387B47*
+  ID_OUI_FROM_DATABASE=AKELA, Inc.
+ 
++OUI:387C76*
++ ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
++
+ OUI:3880DF*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
+@@ -56078,6 +56117,9 @@ OUI:3C38F4*
+ OUI:3C39C3*
+  ID_OUI_FROM_DATABASE=JW Electronics Co., Ltd.
+ 
++OUI:3C39C8*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:3C39E70*
+  ID_OUI_FROM_DATABASE=Hannstar Display Corp
+ 
+@@ -57227,6 +57269,9 @@ OUI:4044FD*
+ OUI:4045DA*
+  ID_OUI_FROM_DATABASE=Spreadtrum Communications (Shanghai) Co., Ltd.
+ 
++OUI:40475E*
++ ID_OUI_FROM_DATABASE=eero inc.
++
+ OUI:40476A*
+  ID_OUI_FROM_DATABASE=Astro Gaming
+ 
+@@ -57617,6 +57662,9 @@ OUI:40A36BD*
+ OUI:40A3CC*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:40A53B*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:40A5EF*
+  ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+ 
+@@ -58040,6 +58088,9 @@ OUI:40FA7F*
+ OUI:40FC89*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:40FDF3*
++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
++
+ OUI:40FE0D*
+  ID_OUI_FROM_DATABASE=MAXIO
+ 
+@@ -60734,6 +60785,9 @@ OUI:4CA003*
+ OUI:4CA161*
+  ID_OUI_FROM_DATABASE=Rain Bird Corporation
+ 
++OUI:4CA3A7*
++ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
++
+ OUI:4CA515*
+  ID_OUI_FROM_DATABASE=Baikal Electronics JSC
+ 
+@@ -63665,6 +63719,9 @@ OUI:586356*
+ OUI:58639A*
+  ID_OUI_FROM_DATABASE=TPL SYSTEMES
+ 
++OUI:5864C4*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5865E6*
+  ID_OUI_FROM_DATABASE=infomark
+ 
+@@ -63890,6 +63947,9 @@ OUI:589835*
+ OUI:58986F*
+  ID_OUI_FROM_DATABASE=Revolution Display
+ 
++OUI:589A3E*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:589B0B*
+  ID_OUI_FROM_DATABASE=Shineway Technologies, Inc.
+ 
+@@ -64472,6 +64532,9 @@ OUI:5C3B35*
+ OUI:5C3C27*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:5C3E1B*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5C4058*
+  ID_OUI_FROM_DATABASE=Jefferson Audio Video Systems, Inc.
+ 
+@@ -64532,6 +64595,9 @@ OUI:5C521E*
+ OUI:5C5230*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:5C5284*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:5C53C3*
+  ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
+ 
+@@ -67811,6 +67877,9 @@ OUI:6882F2*
+ OUI:68831A*
+  ID_OUI_FROM_DATABASE=Pandora Mobility Corporation
+ 
++OUI:6883CB*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:688470*
+  ID_OUI_FROM_DATABASE=eSSys Co.,Ltd
+ 
+@@ -70178,6 +70247,9 @@ OUI:70B14E*
+ OUI:70B265*
+  ID_OUI_FROM_DATABASE=Hiltron s.r.l.
+ 
++OUI:70B306*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:70B317*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -79704,7 +79776,7 @@ OUI:70B3D5C74*
+  ID_OUI_FROM_DATABASE=Qtechnology A/S
+ 
+ OUI:70B3D5C75*
+- ID_OUI_FROM_DATABASE=BIT Group USA, Inc.
++ ID_OUI_FROM_DATABASE=PLANET INNOVATION (PI)
+ 
+ OUI:70B3D5C76*
+  ID_OUI_FROM_DATABASE=ELA INNOVATION
+@@ -79983,7 +80055,7 @@ OUI:70B3D5CD1*
+  ID_OUI_FROM_DATABASE=Cannex Technology Inc.
+ 
+ OUI:70B3D5CD2*
+- ID_OUI_FROM_DATABASE=HBH Microwave GmbH
++ ID_OUI_FROM_DATABASE=TRUMPF Huttinger GmbH + Co. KG,
+ 
+ OUI:70B3D5CD3*
+  ID_OUI_FROM_DATABASE=Controlrad
+@@ -83273,6 +83345,9 @@ OUI:747E1A*
+ OUI:747E2D*
+  ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD.
+ 
++OUI:74803F*
++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
++
+ OUI:748114*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -85364,6 +85439,9 @@ OUI:7C27BC*
+ OUI:7C2A31*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:7C2ACA*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:7C2ADB*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -88610,6 +88688,9 @@ OUI:881DFC*
+ OUI:881FA1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:88200D*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:882012*
+  ID_OUI_FROM_DATABASE=LMI Technologies
+ 
+@@ -89981,6 +90062,9 @@ OUI:8C1F6419B*
+ OUI:8C1F6419C*
+  ID_OUI_FROM_DATABASE=Aton srl
+ 
++OUI:8C1F641A5*
++ ID_OUI_FROM_DATABASE=DIALTRONICS SYSTEMS PVT LTD
++
+ OUI:8C1F641AF*
+  ID_OUI_FROM_DATABASE=EnviroNode IoT Solutions
+ 
+@@ -90014,6 +90098,9 @@ OUI:8C1F641E3*
+ OUI:8C1F641EF*
+  ID_OUI_FROM_DATABASE=Tantronic AG
+ 
++OUI:8C1F641F0*
++ ID_OUI_FROM_DATABASE=AVCOMM Technologies Inc
++
+ OUI:8C1F64204*
+  ID_OUI_FROM_DATABASE=castcore
+ 
+@@ -90050,6 +90137,9 @@ OUI:8C1F6425E*
+ OUI:8C1F64264*
+  ID_OUI_FROM_DATABASE=BR. Voss Ingenjörsfirma AB
+ 
++OUI:8C1F64268*
++ ID_OUI_FROM_DATABASE=Astro Machine Corporation
++
+ OUI:8C1F64270*
+  ID_OUI_FROM_DATABASE=Xi‘an Hangguang Satellite and Control Technology Co.,Ltd
+ 
+@@ -90272,6 +90362,9 @@ OUI:8C1F64498*
+ OUI:8C1F644AC*
+  ID_OUI_FROM_DATABASE=Vekto
+ 
++OUI:8C1F644AE*
++ ID_OUI_FROM_DATABASE=KCS Co., Ltd.
++
+ OUI:8C1F644B0*
+  ID_OUI_FROM_DATABASE=U -MEI-DAH INT'L ENTERPRISE CO.,LTD.
+ 
+@@ -90584,6 +90677,9 @@ OUI:8C1F6472C*
+ OUI:8C1F64737*
+  ID_OUI_FROM_DATABASE=Vytahy-Vymyslicky s.r.o.
+ 
++OUI:8C1F6473B*
++ ID_OUI_FROM_DATABASE=Fink Zeitsysteme GmbH
++
+ OUI:8C1F6473C*
+  ID_OUI_FROM_DATABASE=REO AG
+ 
+@@ -90905,6 +91001,9 @@ OUI:8C1F649F0*
+ OUI:8C1F649F2*
+  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+ 
++OUI:8C1F649F4*
++ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
++
+ OUI:8C1F649FA*
+  ID_OUI_FROM_DATABASE=METRONA-Union GmbH
+ 
+@@ -90914,6 +91013,9 @@ OUI:8C1F649FD*
+ OUI:8C1F649FE*
+  ID_OUI_FROM_DATABASE=Metroval Controle de Fluidos Ltda
+ 
++OUI:8C1F649FF*
++ ID_OUI_FROM_DATABASE=Satelles Inc
++
+ OUI:8C1F64A01*
+  ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+ 
+@@ -91130,6 +91232,9 @@ OUI:8C1F64C03*
+ OUI:8C1F64C0C*
+  ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA
+ 
++OUI:8C1F64C0E*
++ ID_OUI_FROM_DATABASE=Goodtech AS dep Fredrikstad
++
+ OUI:8C1F64C1F*
+  ID_OUI_FROM_DATABASE=Esys Srl
+ 
+@@ -91200,7 +91305,7 @@ OUI:8C1F64CBE*
+  ID_OUI_FROM_DATABASE=Circa Enterprises Inc
+ 
+ OUI:8C1F64CC6*
+- ID_OUI_FROM_DATABASE=Genius vision digital private limted
++ ID_OUI_FROM_DATABASE=Genius Vision Digital Private Limited
+ 
+ OUI:8C1F64CCB*
+  ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD
+@@ -91238,6 +91343,9 @@ OUI:8C1F64CF1*
+ OUI:8C1F64CF3*
+  ID_OUI_FROM_DATABASE=ABB S.p.A.
+ 
++OUI:8C1F64CF4*
++ ID_OUI_FROM_DATABASE=NT
++
+ OUI:8C1F64D02*
+  ID_OUI_FROM_DATABASE=Flextronics International Kft
+ 
+@@ -91304,6 +91412,9 @@ OUI:8C1F64DAE*
+ OUI:8C1F64DB5*
+  ID_OUI_FROM_DATABASE=victtron
+ 
++OUI:8C1F64DB7*
++ ID_OUI_FROM_DATABASE=Lambda Systems Inc.
++
+ OUI:8C1F64DB9*
+  ID_OUI_FROM_DATABASE=Ermes Elettronica s.r.l.
+ 
+@@ -91322,6 +91433,9 @@ OUI:8C1F64DCA*
+ OUI:8C1F64DD5*
+  ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
+ 
++OUI:8C1F64DD7*
++ ID_OUI_FROM_DATABASE=KST technology
++
+ OUI:8C1F64DE1*
+  ID_OUI_FROM_DATABASE=Franke Aquarotter GmbH
+ 
+@@ -91529,6 +91643,9 @@ OUI:8C1F64FB0*
+ OUI:8C1F64FB1*
+  ID_OUI_FROM_DATABASE=ABB
+ 
++OUI:8C1F64FB5*
++ ID_OUI_FROM_DATABASE=Bavaria Digital Technik GmbH
++
+ OUI:8C1F64FB7*
+  ID_OUI_FROM_DATABASE=Grace Design/Lunatec LLC
+ 
+@@ -92600,6 +92717,9 @@ OUI:900A39*
+ OUI:900A3A*
+  ID_OUI_FROM_DATABASE=PSG Plastic Service GmbH
+ 
++OUI:900A62*
++ ID_OUI_FROM_DATABASE=Inventus Power Eletronica do Brasil LTDA
++
+ OUI:900A84*
+  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+ 
+@@ -94013,6 +94133,9 @@ OUI:946A77*
+ OUI:946AB0*
+  ID_OUI_FROM_DATABASE=Arcadyan Corporation
+ 
++OUI:946DAE*
++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
++
+ OUI:9470D2*
+  ID_OUI_FROM_DATABASE=WINFIRM TECHNOLOGY
+ 
+@@ -95984,6 +96107,9 @@ OUI:9C04EB*
+ OUI:9C0567*
+  ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+ 
++OUI:9C0591*
++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
++
+ OUI:9C061B*
+  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+ 
+@@ -96557,6 +96683,9 @@ OUI:9C8EDC*
+ OUI:9C9019*
+  ID_OUI_FROM_DATABASE=Beyless
+ 
++OUI:9C924F*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:9C934E*
+  ID_OUI_FROM_DATABASE=Xerox Corporation
+ 
+@@ -97679,6 +97808,9 @@ OUI:A08C15*
+ OUI:A08C9B*
+  ID_OUI_FROM_DATABASE=Xtreme Technologies Corp
+ 
++OUI:A08CF2*
++ ID_OUI_FROM_DATABASE=YINUOLINK CO.,LTD
++
+ OUI:A08CF8*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -98900,6 +99032,9 @@ OUI:A48873*
+ OUI:A4895B*
+  ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD
+ 
++OUI:A4897E*
++ ID_OUI_FROM_DATABASE=Guangzhou Yuhong Technology Co.,Ltd.
++
+ OUI:A48CC0*
+  ID_OUI_FROM_DATABASE=JLG Industries, Inc.
+ 
+@@ -100079,6 +100214,9 @@ OUI:A8A668*
+ OUI:A8A795*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:A8ABB5*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:A8AD3D*
+  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+ 
+@@ -100331,6 +100469,9 @@ OUI:AA0003*
+ OUI:AA0004*
+  ID_OUI_FROM_DATABASE=DIGITAL EQUIPMENT CORPORATION
+ 
++OUI:AC007A*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:AC00D0*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
+@@ -101117,6 +101258,9 @@ OUI:ACBB61*
+ OUI:ACBC32*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:ACBCB5*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:ACBCD9*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -101453,6 +101597,9 @@ OUI:B01C91*
+ OUI:B01F29*
+  ID_OUI_FROM_DATABASE=Helvetia INC.
+ 
++OUI:B01F47*
++ ID_OUI_FROM_DATABASE=Heights Telecom T ltd
++
+ OUI:B01F810*
+  ID_OUI_FROM_DATABASE=Dalian GigaTec Electronics Co.,Ltd
+ 
+@@ -101735,6 +101882,9 @@ OUI:B065F1*
+ OUI:B0672F*
+  ID_OUI_FROM_DATABASE=Bowers & Wilkins
+ 
++OUI:B067B5*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:B068B6*
+  ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd
+ 
+@@ -103643,6 +103793,9 @@ OUI:B847C6*
+ OUI:B848AA*
+  ID_OUI_FROM_DATABASE=EM Microelectronic
+ 
++OUI:B8496D*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:B84D43*
+  ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+ 
+@@ -104411,6 +104564,9 @@ OUI:BC1485*
+ OUI:BC14EF*
+  ID_OUI_FROM_DATABASE=ITON Technology Limited
+ 
++OUI:BC1541*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:BC15A6*
+  ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd.
+ 
+@@ -105893,6 +106049,9 @@ OUI:C09435*
+ OUI:C094AD*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:C0956D*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:C095DA*
+  ID_OUI_FROM_DATABASE=NXP India Private Limited
+ 
+@@ -106814,6 +106973,9 @@ OUI:C464B7*
+ OUI:C464E3*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:C464F2*
++ ID_OUI_FROM_DATABASE=Infinix mobility limited
++
+ OUI:C46516*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -107603,6 +107765,9 @@ OUI:C81CFE*
+ OUI:C81E8E*
+  ID_OUI_FROM_DATABASE=ADV Security (S) Pte Ltd
+ 
++OUI:C81EC2*
++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
++
+ OUI:C81EE7*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -114809,12 +114974,18 @@ OUI:E0EDC7*
+ OUI:E0EE1B*
+  ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Company of America
+ 
++OUI:E0EF02*
++ ID_OUI_FROM_DATABASE=Chengdu Quanjing Intelligent Technology Co.,Ltd
++
+ OUI:E0EF25*
+  ID_OUI_FROM_DATABASE=Lintes Technology Co., Ltd.
+ 
+ OUI:E0F211*
+  ID_OUI_FROM_DATABASE=Digitalwatt
+ 
++OUI:E0F318*
++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
++
+ OUI:E0F379*
+  ID_OUI_FROM_DATABASE=Vaddio
+ 
+@@ -115502,6 +115673,9 @@ OUI:E4A471*
+ OUI:E4A5EF*
+  ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD.
+ 
++OUI:E4A634*
++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
++
+ OUI:E4A749*
+  ID_OUI_FROM_DATABASE=Palo Alto Networks
+ 
+@@ -116003,6 +116177,9 @@ OUI:E8361D*
+ OUI:E8377A*
+  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+ 
++OUI:E838A0*
++ ID_OUI_FROM_DATABASE=Vizio, Inc
++
+ OUI:E83935*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -116625,7 +116802,7 @@ OUI:E8CC32*
+  ID_OUI_FROM_DATABASE=Micronet  LTD
+ 
+ OUI:E8CC8C*
+- ID_OUI_FROM_DATABASE=Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
++ ID_OUI_FROM_DATABASE=Chengdu Jiarui Hualian Communication Technology Co
+ 
+ OUI:E8CD2D*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+@@ -117419,6 +117596,9 @@ OUI:EC9F0DD*
+ OUI:EC9F0DE*
+  ID_OUI_FROM_DATABASE=MAX Technologies
+ 
++OUI:ECA138*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:ECA1D1*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -117515,6 +117695,9 @@ OUI:ECC01B*
+ OUI:ECC06A*
+  ID_OUI_FROM_DATABASE=PowerChord Group Limited
+ 
++OUI:ECC07A*
++ ID_OUI_FROM_DATABASE=Laird Connectivity
++
+ OUI:ECC1AB*
+  ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+ 
+@@ -117776,6 +117959,9 @@ OUI:F01E34*
+ OUI:F01FAF*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
++OUI:F01FC7*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:F0219D*
+  ID_OUI_FROM_DATABASE=Cal-Comp Electronics & Communications Company Ltd.
+ 
+@@ -118610,6 +118796,9 @@ OUI:F0D657*
+ OUI:F0D767*
+  ID_OUI_FROM_DATABASE=Axema Passagekontroll AB
+ 
++OUI:F0D793*
++ ID_OUI_FROM_DATABASE=Apple, Inc.
++
+ OUI:F0D7AA*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+ 
+@@ -119465,6 +119654,9 @@ OUI:F4911E*
+ OUI:F492BF*
+  ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+ 
++OUI:F4931C*
++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
++
+ OUI:F4939F*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd.
+ 
+@@ -121463,9 +121655,18 @@ OUI:FC61799*
+ OUI:FC6179A*
+  ID_OUI_FROM_DATABASE=Shenzhen Dptek Technology Co., Ltd.
+ 
++OUI:FC6179B*
++ ID_OUI_FROM_DATABASE=Fulian Precision Electronics(Tianjin) Co., Ltd
++
++OUI:FC6179C*
++ ID_OUI_FROM_DATABASE=Shenzhen Xmitech Electronic Co.,Ltd
++
+ OUI:FC6179D*
+  ID_OUI_FROM_DATABASE=Int'Act Pty Ltd
+ 
++OUI:FC6179E*
++ ID_OUI_FROM_DATABASE=ACCO Brands USA LLC
++
+ OUI:FC6198*
+  ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
+index f88a96ed30..a696119753 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb.patch
++++ b/hwdb.d/20-acpi-vendor.hwdb.patch
+@@ -1,5 +1,5 @@
+---- 20-acpi-vendor.hwdb.base	2022-04-28 17:39:22.374730080 +0200
+-+++ 20-acpi-vendor.hwdb	2022-04-28 17:39:22.381730080 +0200
++--- 20-acpi-vendor.hwdb.base	2022-05-05 16:21:43.499198786 +0200
+++++ 20-acpi-vendor.hwdb	2022-05-05 16:21:43.513198949 +0200
+ @@ -3,6 +3,8 @@
+  # Data imported from:
+  #     https://uefi.org/uefi-pnp-export
+diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
+index b55bd82327..cae426479b 100644
+--- a/hwdb.d/20-pci-vendor-model.hwdb
++++ b/hwdb.d/20-pci-vendor-model.hwdb
+@@ -2127,7 +2127,13 @@ pci:v00001000d000000A5sv00001028sd00002141*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX)
+ 
+ pci:v00001000d000000A5sv00001028sd00002142*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA 465e Adapter)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465e Adapter)
++
++pci:v00001000d000000A5sv00001028sd00002209*
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Adapter)
++
++pci:v00001000d000000A5sv00001028sd0000220A*
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Front)
+ 
+ pci:v00001000d000000AB*
+  ID_MODEL_FROM_DATABASE=SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
+@@ -11072,6 +11078,9 @@ pci:v00001002d000073BFsv00001002sd00000E3A*
+ pci:v00001002d000073BFsv0000148Csd00002408*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Red Devil AMD Radeon RX 6900 XT)
+ 
++pci:v00001002d000073BFsv00001DA2sd0000440F*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (TOXIC RX 6900 XT)
++
+ pci:v00001002d000073BFsv00001EAEsd00006701*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black)
+ 
+@@ -11114,6 +11123,12 @@ pci:v00001002d0000740C*
+ pci:v00001002d0000740F*
+  ID_MODEL_FROM_DATABASE=Aldebaran
+ 
++pci:v00001002d00007421*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6500M]
++
++pci:v00001002d00007422*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6400]
++
+ pci:v00001002d0000743F*
+  ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT]
+ 
+@@ -37052,6 +37067,9 @@ pci:v000010DEd00002505*
+ pci:v000010DEd00002507*
+  ID_MODEL_FROM_DATABASE=GA106 [Geforce RTX 3050]
+ 
++pci:v000010DEd00002508*
++ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3050 OEM]
++
+ pci:v000010DEd00002520*
+  ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 
+@@ -37121,6 +37139,9 @@ pci:v000010DEd000025B9*
+ pci:v000010DEd000025BA*
+  ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 8GB Laptop GPU]
+ 
++pci:v000010DEd000025BB*
++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A500 Laptop GPU]
++
+ pci:v000010DEd000025E0*
+  ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Ti Mobile]
+ 
+@@ -56754,7 +56775,7 @@ pci:v000014C3*
+  ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
+ 
+ pci:v000014C3d00000608*
+- ID_MODEL_FROM_DATABASE=RZ608 Wi-Fi 6E 80MHz
++ ID_MODEL_FROM_DATABASE=MT7921K (RZ608) Wi-Fi 6E 80MHz
+ 
+ pci:v000014C3d00000616*
+  ID_MODEL_FROM_DATABASE=MT7922 802.11ax PCI Express Wireless Network Adapter
+@@ -61523,6 +61544,12 @@ pci:v000015B3d00000258*
+ pci:v000015B3d00000259*
+  ID_MODEL_FROM_DATABASE=Abir Chiplet
+ 
++pci:v000015B3d0000025B*
++ ID_MODEL_FROM_DATABASE=Quantum-3 in Flash Recovery Mode
++
++pci:v000015B3d0000025C*
++ ID_MODEL_FROM_DATABASE=Quantum-3 RMA
++
+ pci:v000015B3d00000262*
+  ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN
+ 
+@@ -62108,6 +62135,9 @@ pci:v000015B3d0000D2F0*
+ pci:v000015B3d0000D2F2*
+  ID_MODEL_FROM_DATABASE=Quantum-2 NDR (400Gbps) switch
+ 
++pci:v000015B3d0000D2F4*
++ ID_MODEL_FROM_DATABASE=Quantum-3
++
+ pci:v000015B4*
+  ID_VENDOR_FROM_DATABASE=CCI/TRIAD
+ 
+@@ -65375,6 +65405,18 @@ pci:v000017D3d00001884*
+ pci:v000017D3d0000188A*
+  ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
+ 
++pci:v000017D3d0000188Asv000017D3sd00001217*
++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller)
++
++pci:v000017D3d0000188Asv000017D3sd00001227*
++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller)
++
++pci:v000017D3d0000188Asv000017D3sd00001686*
++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller)
++
++pci:v000017D3d0000188Asv000017D3sd00001886*
++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller)
++
+ pci:v000017D5*
+  ID_VENDOR_FROM_DATABASE=Exar Corp.
+ 
+@@ -70268,6 +70310,9 @@ pci:v00001C5Cd00002839sv00001C5Csd00000100*
+ pci:v00001C5Cd00002849*
+  ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive
+ 
++pci:v00001C5Cd00002849sv00001C5Csd00000101*
++ ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive
++
+ pci:v00001C5F*
+  ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd.
+ 
+@@ -72525,13 +72570,61 @@ pci:v00001EECd00001EEC*
+  ID_MODEL_FROM_DATABASE=VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+ 
+ pci:v00001EED*
+- ID_VENDOR_FROM_DATABASE=Xiangdixian Computing Technology (Chongqing) Ltd.
++ ID_VENDOR_FROM_DATABASE=XDX Computing Technology Ltd.
++
++pci:v00001EEDd00001100*
++ ID_MODEL_FROM_DATABASE=XDX110 Graphic/VGA Controller
++
++pci:v00001EEDd00001101*
++ ID_MODEL_FROM_DATABASE=XDX110 Audio Controller
++
++pci:v00001EEDd00001200*
++ ID_MODEL_FROM_DATABASE=XDX120 Graphic/VGA Controller
++
++pci:v00001EEDd00001201*
++ ID_MODEL_FROM_DATABASE=XDX120 Audio Controller
++
++pci:v00001EEDd00001300*
++ ID_MODEL_FROM_DATABASE=XDX130 Graphic/VGA Controller
++
++pci:v00001EEDd00001301*
++ ID_MODEL_FROM_DATABASE=XDX130 Audio Controller
++
++pci:v00001EEDd00001400*
++ ID_MODEL_FROM_DATABASE=XDX140 Graphic/VGA Controller
++
++pci:v00001EEDd00001401*
++ ID_MODEL_FROM_DATABASE=XDX140 Audio Controller
+ 
+-pci:v00001EEDd00000100*
+- ID_MODEL_FROM_DATABASE=XDX P100 VGA controller
++pci:v00001EEDd00001500*
++ ID_MODEL_FROM_DATABASE=XDX150 Graphic/VGA Controller
+ 
+-pci:v00001EEDd00000101*
+- ID_MODEL_FROM_DATABASE=XDX P101 High Definition Audio Controller
++pci:v00001EEDd00001501*
++ ID_MODEL_FROM_DATABASE=XDX150 Audio Controller
++
++pci:v00001EEDd00001600*
++ ID_MODEL_FROM_DATABASE=XDX160 Graphic/VGA Controller
++
++pci:v00001EEDd00001601*
++ ID_MODEL_FROM_DATABASE=XDX160 Audio Controller
++
++pci:v00001EEDd00001700*
++ ID_MODEL_FROM_DATABASE=XDX170 Graphic/VGA Controller
++
++pci:v00001EEDd00001701*
++ ID_MODEL_FROM_DATABASE=XDX170 Audio Controller
++
++pci:v00001EEDd00001800*
++ ID_MODEL_FROM_DATABASE=XDX180 Graphic/VGA Controller
++
++pci:v00001EEDd00001801*
++ ID_MODEL_FROM_DATABASE=XDX180 Audio Controller
++
++pci:v00001EEDd00001900*
++ ID_MODEL_FROM_DATABASE=XDX190 Graphic/VGA Controller
++
++pci:v00001EEDd00001901*
++ ID_MODEL_FROM_DATABASE=XDX190 Audio Controller
+ 
+ pci:v00001EFB*
+  ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd
+@@ -74156,6 +74249,12 @@ pci:v00005168d00000300*
+ pci:v00005168d00000301*
+  ID_MODEL_FROM_DATABASE=FlyDVB-T
+ 
++pci:v000051D8*
++ ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2
++
++pci:v000051D9*
++ ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3
++
+ pci:v00005301*
+  ID_VENDOR_FROM_DATABASE=Alliance Semiconductor Corp.
+ 
+@@ -74804,6 +74903,12 @@ pci:v00006766d00003D00*
+ pci:v00006766d00003D02*
+  ID_MODEL_FROM_DATABASE=Arise 1020
+ 
++pci:v00006766d00003D03*
++ ID_MODEL_FROM_DATABASE=Arise-GT-1040
++
++pci:v00006766d00003D04*
++ ID_MODEL_FROM_DATABASE=Arise1010
++
+ pci:v00006766d00003D40*
+  ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller
+ 
+@@ -80048,6 +80153,9 @@ pci:v00008086d0000124F*
+ pci:v00008086d00001250*
+  ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II]
+ 
++pci:v00008086d0000125B*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller I226-LM
++
+ pci:v00008086d00001360*
+  ID_MODEL_FROM_DATABASE=82806AA PCI64 Hub PCI Bridge
+ 
+@@ -80682,61 +80790,61 @@ pci:v00008086d00001560*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller X540
+ 
+ pci:v00008086d00001563*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550
+ 
+ pci:v00008086d00001563sv00001028sd00001FA8*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550/I350 rNDC)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550/I350 rNDC)
+ 
+ pci:v00008086d00001563sv00001028sd00001FA9*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550 rNDC)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550 rNDC)
+ 
+ pci:v00008086d00001563sv00001137sd000002B2*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM)
+ 
+ pci:v00008086d00001563sv00001137sd000002B3*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM)
+ 
+ pci:v00008086d00001563sv00001170sd00000001*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Intel Ethernet Controller X550-T2 OCP card)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Intel Ethernet Controller X550-T2 OCP card)
+ 
+ pci:v00008086d00001563sv000014C0sd00001201*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2P RJ45 OCP Mezz)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2P RJ45 OCP Mezz)
+ 
+ pci:v00008086d00001563sv00001590sd000000D1*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562T Adapter)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562T Adapter)
+ 
+ pci:v00008086d00001563sv00001590sd000000D2*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562FLR-T Adapter)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562FLR-T Adapter)
+ 
+ pci:v00008086d00001563sv000016B8sd00007217*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Twin10G Thunderbolt 3 Edition)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Twin10G Thunderbolt 3 Edition)
+ 
+ pci:v00008086d00001563sv000018D4sd00000C08*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2)
+ 
+ pci:v00008086d00001563sv0000193Dsd00001008*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-B)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-B)
+ 
+ pci:v00008086d00001563sv0000193Dsd00001009*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-L)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-L)
+ 
+ pci:v00008086d00001563sv0000193Dsd00001011*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (UN-NIC-ETH563T-sL-2P)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (UN-NIC-ETH563T-sL-2P)
+ 
+ pci:v00008086d00001563sv00008086sd00000001*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
+ 
+ pci:v00008086d00001563sv00008086sd0000001A*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
+ 
+ pci:v00008086d00001563sv00008086sd0000001B*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Server Adapter X550-T2 for OCP)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Server Adapter X550-T2 for OCP)
+ 
+ pci:v00008086d00001563sv00008086sd0000001D*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 2P X550-t Adapter)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 2P X550-t Adapter)
+ 
+ pci:v00008086d00001563sv00008086sd00000022*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2)
+ 
+ pci:v00008086d00001564*
+  ID_MODEL_FROM_DATABASE=X550 Virtual Function
+@@ -81266,6 +81374,9 @@ pci:v00008086d00001592sv00008086sd00000010*
+ pci:v00008086d00001592sv00008086sd00000011*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP3.0)
+ 
++pci:v00008086d00001592sv00008086sd00000012*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-st Adapter)
++
+ pci:v00008086d00001593*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
+ 
+@@ -81836,6 +81947,21 @@ pci:v00008086d0000163E*
+ pci:v00008086d00001889*
+  ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function
+ 
++pci:v00008086d0000188A*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for backplane
++
++pci:v00008086d0000188B*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for QSFP
++
++pci:v00008086d0000188C*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for SFP
++
++pci:v00008086d0000188D*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C/X557-AT 10GBASE-T
++
++pci:v00008086d0000188E*
++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C 1GbE
++
+ pci:v00008086d00001890*
+  ID_MODEL_FROM_DATABASE=Ethernet Connection E822-C for backplane
+ 
+@@ -95171,6 +95297,12 @@ pci:v00008086d000051C8*
+ pci:v00008086d000051D3*
+  ID_MODEL_FROM_DATABASE=Alder Lake-P SATA AHCI Controller
+ 
++pci:v00008086d000051D8*
++ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2
++
++pci:v00008086d000051D9*
++ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3
++
+ pci:v00008086d000051E0*
+  ID_MODEL_FROM_DATABASE=Alder Lake PCH HECI Controller
+ 
+@@ -95222,9 +95354,6 @@ pci:v00008086d0000530D*
+ pci:v00008086d00005502*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-LMvP
+ 
+-pci:v00008086d00005504*
+- ID_MODEL_FROM_DATABASE=Ethernet Controller I226-K
+-
+ pci:v00008086d00005845*
+  ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller
+ 
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index c0e6f59917..d7e218011a 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -66939,7 +66939,7 @@ usb:v2A19p5442*
+  ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
+ 
+ usb:v2A1D*
+- ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies, Ltd
++ ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies plc
+ 
+ usb:v2A1Dp0000*
+  ID_MODEL_FROM_DATABASE=MinION
+@@ -66959,6 +66959,12 @@ usb:v2A1Dp0020*
+ usb:v2A1Dp0021*
+  ID_MODEL_FROM_DATABASE=GridION
+ 
++usb:v2A1Dp0120*
++ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay
++
++usb:v2A1Dp0121*
++ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay
++
+ usb:v2A37*
+  ID_VENDOR_FROM_DATABASE=RTD Embedded Technologies, Inc.
+ 
+diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
+index 67fd6c1836..aeecb73bbf 100644
+--- a/hwdb.d/ma-large.txt
++++ b/hwdb.d/ma-large.txt
+@@ -38327,12 +38327,6 @@ C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Beijing  Beijing  100085
+ 				CN
+ 
+-E8-CC-8C   (hex)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
+-E8CC8C     (base 16)		Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd.
+-				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
+-				Chengdu  Sichuan  610000
+-				CN
+-
+ 58-1C-F8   (hex)		Intel Corporate
+ 581CF8     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -38387,11 +38381,17 @@ CC29BD     (base 16)		zte corporation
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
+-5C-60-BA   (hex)		HP Inc.
+-5C60BA     (base 16)		HP Inc.
+-				10300 Energy Dr
+-				Spring  TX  77389
+-				US
++E0-EF-02   (hex)		Chengdu Quanjing Intelligent Technology Co.,Ltd
++E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
++				Building A2, Chi Yuen Technology Park, 1001 College Avenue, Nanshan District, Shenzhen,P.R.C.
++				Shenzhen  Guangdong  518000
++				CN
++
++4C-A3-A7   (hex)		TECNO MOBILE LIMITED
++4CA3A7     (base 16)		TECNO MOBILE LIMITED
++				ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
++				Hong Kong  Hong Kong  999077
++				HK
+ 
+ 20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ 209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+@@ -38399,6 +38399,90 @@ CC29BD     (base 16)		zte corporation
+ 				Santa Clara  CA  95054
+ 				US
+ 
++E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
++E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
++				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
++				Chengdu  Sichuan  610000
++				CN
++
++A8-AB-B5   (hex)		Apple, Inc.
++A8ABB5     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++58-64-C4   (hex)		Apple, Inc.
++5864C4     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++40-A5-3B   (hex)		Nokia
++40A53B     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++B0-67-B5   (hex)		Apple, Inc.
++B067B5     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++5C-52-84   (hex)		Apple, Inc.
++5C5284     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++C0-95-6D   (hex)		Apple, Inc.
++C0956D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++3C-39-C8   (hex)		Apple, Inc.
++3C39C8     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++EC-A1-38   (hex)		Amazon Technologies Inc.
++ECA138     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++5C-60-BA   (hex)		HP Inc.
++5C60BA     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
++				US
++
++A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
++A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
++				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
++				Guangzhou  Guangdong  510640
++				CN
++
++90-0A-62   (hex)		Inventus Power Eletronica do Brasil LTDA
++900A62     (base 16)		Inventus Power Eletronica do Brasil LTDA
++				Av Buriti, 4285 Distrito Industrial
++				Manaus  Amazonas  69075000
++				BR
++
+ 9C-FF-C2   (hex)		AVI Systems GmbH
+ 9CFFC2     (base 16)		AVI Systems GmbH
+ 				Dr. Franz Wilhelmstraße 2A
+@@ -76376,6 +76460,42 @@ A036BC     (base 16)		ASUSTek COMPUTER INC.
+ 				Hsinchu    300
+ 				TW
+ 
++70-B3-06   (hex)		Apple, Inc.
++70B306     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++B8-49-6D   (hex)		Apple, Inc.
++B8496D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++9C-92-4F   (hex)		Apple, Inc.
++9C924F     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++20-0E-2B   (hex)		Apple, Inc.
++200E2B     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++F0-D7-93   (hex)		Apple, Inc.
++F0D793     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++30-3D-51   (hex)		IEEE Registration Authority
++303D51     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
+ 84-80-94   (hex)		Meter, Inc.
+ 848094     (base 16)		Meter, Inc.
+ 				148 Townsend St
+@@ -114587,12 +114707,6 @@ F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
+ 				Dallas  TX  75243
+ 				US
+ 
+-38-E7-C0   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+-38E7C0     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+-				No.2,Jin-da Road,Huinan Industrial Park
+-				Hui Zhou  Guangdong  516025
+-				CN
+-
+ D8-E8-44   (hex)		zte corporation
+ D8E844     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+@@ -114611,12 +114725,54 @@ E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Shenzhen   Guangdong  518040
+ 				CN
+ 
++58-9A-3E   (hex)		Amazon Technologies Inc.
++589A3E     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++E8-38-A0   (hex)		Vizio, Inc
++E838A0     (base 16)		Vizio, Inc
++				39 Tesla
++				Irvine  CA  92618
++				US
++
++C8-1E-C2   (hex)		ITEL MOBILE LIMITED
++C81EC2     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
++38-E7-C0   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++38E7C0     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				No.2,Jin-da Road,Huinan Industrial Park
++				Hui Zhou  Guangdong  516025
++				CN
++
+ 68-B9-C2   (hex)		Earda Technologies co Ltd
+ 68B9C2     (base 16)		Earda Technologies co Ltd
+ 				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+ 				Guangzhou  Guangdong  511455
+ 				CN
+ 
++68-83-CB   (hex)		Apple, Inc.
++6883CB     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++EC-C0-7A   (hex)		Laird Connectivity
++ECC07A     (base 16)		Laird Connectivity
++				3F.-1, No.145, Xianzheng 9th Rd.,
++				Zhubei    30251
++				TW
++
++9C-05-91   (hex)		Mellanox Technologies, Inc.
++9C0591     (base 16)		Mellanox Technologies, Inc.
++				350 Oakmead Parkway, Suite 100 
++				Sunnyvale  CA  94085
++				US
++
+ F8-D0-27   (hex)		Seiko Epson Corporation
+ F8D027     (base 16)		Seiko Epson Corporation
+ 				2070 Kotobuki Koaka
+@@ -152948,6 +153104,48 @@ EC74D7     (base 16)		Grandstream Networks Inc
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
++A0-8C-F2   (hex)		YINUOLINK CO.,LTD
++A08CF2     (base 16)		YINUOLINK CO.,LTD
++				3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an
++				Shenzhen  Guangdong  518103
++				CN
++
++40-47-5E   (hex)		eero inc.
++40475E     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++20-E6-DF   (hex)		eero inc.
++20E6DF     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++F4-93-1C   (hex)		Universal Electronics, Inc.
++F4931C     (base 16)		Universal Electronics, Inc.
++				201 E. Sandpointe Ave
++				Santa Ana  CA  92707
++				US
++
++5C-3E-1B   (hex)		Apple, Inc.
++5C3E1B     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++7C-2A-CA   (hex)		Apple, Inc.
++7C2ACA     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++28-8E-EC   (hex)		Apple, Inc.
++288EEC     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ 7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+@@ -191027,8 +191225,98 @@ DC0539     (base 16)		Cisco Systems, Inc
+ 				East Greenwich  RI  02818
+ 				US
+ 
++B0-1F-47   (hex)		Heights Telecom T ltd
++B01F47     (base 16)		Heights Telecom T ltd
++				Moshe Lerer 15
++				Nes Ziona     7404996
++				IL
++
++28-29-47   (hex)		Chipsea Technologies (Shenzhen) Corp.
++282947     (base 16)		Chipsea Technologies (Shenzhen) Corp.
++				3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen
++				Shenzhen  Guangdong  518000
++				CN
++
++AC-BC-B5   (hex)		Apple, Inc.
++ACBCB5     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++08-25-73   (hex)		Apple, Inc.
++082573     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++AC-00-7A   (hex)		Apple, Inc.
++AC007A     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++F0-1F-C7   (hex)		Apple, Inc.
++F01FC7     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ B8-8F-27   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ B88F27     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+ 				Chongqing   China  401120
+ 				CN
++
++88-20-0D   (hex)		Apple, Inc.
++88200D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++BC-15-41   (hex)		Nokia
++BC1541     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++C4-64-F2   (hex)		Infinix mobility limited
++C464F2     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
++94-6D-AE   (hex)		Mellanox Technologies, Inc.
++946DAE     (base 16)		Mellanox Technologies, Inc.
++				350 Oakmead Parkway, Suite 100 
++				Sunnyvale  CA  94085
++				US
++
++40-FD-F3   (hex)		AMPAK Technology,Inc.
++40FDF3     (base 16)		AMPAK Technology,Inc.
++				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
++				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
++				TW
++
++E4-A6-34   (hex)		Universal Electronics, Inc.
++E4A634     (base 16)		Universal Electronics, Inc.
++				201 E. Sandpointe Ave
++				Santa Ana  CA  92707
++				US
++
++2C-8D-37   (hex)		Virtium
++2C8D37     (base 16)		Virtium
++				30052 Tomas
++				Racho Santa MArgarita  CA  92688
++				US
++
++38-7C-76   (hex)		Universal Global Scientific Industrial Co., Ltd.
++387C76     (base 16)		Universal Global Scientific Industrial Co., Ltd.
++				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
++				Nan-Tou  Taiwan  54261
++				TW
+diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
+index 08cdcba936..18806ccc14 100644
+--- a/hwdb.d/ma-medium.txt
++++ b/hwdb.d/ma-medium.txt
+@@ -5060,6 +5060,18 @@ A00000-AFFFFF     (base 16)		Annapurna labs
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
++FC-61-79   (hex)		Shenzhen Xmitech Electronic Co.,Ltd
++C00000-CFFFFF     (base 16)		Shenzhen Xmitech Electronic Co.,Ltd
++				Room 8B1888, Block AB, New Energy Building, No.2239, Nanhai Avenue, Nanguang Community, Nanshan Street, Nanshan District, Shenzhen
++				Shenzhen    518054
++				CN
++
++30-3D-51   (hex)		SHENZHEN WLINK TECHNOLOGY CO., LTD.
++100000-1FFFFF     (base 16)		SHENZHEN WLINK TECHNOLOGY CO., LTD.
++				201, F5 Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan Dist.
++				Shenzhen  Guangdong  518052
++				CN
++
+ 4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+ 400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+ 				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+@@ -15023,11 +15035,11 @@ FC-61-79   (hex)		MACH SYSTEMS s.r.o.
+ 				Prague    10800
+ 				CZ
+ 
+-FC-61-79   (hex)		Annapurna labs
+-800000-8FFFFF     (base 16)		Annapurna labs
+-				Matam Scientific Industries Center,   Building 8.2
+-				Mail box 15123  Haifa  3508409
+-				IL
++30-3D-51   (hex)		Media Hub Digital Smart Home Pty Ltd.
++500000-5FFFFF     (base 16)		Media Hub Digital Smart Home Pty Ltd.
++				40 Koornang Road
++				Scoresby  VIC  3179
++				AU
+ 
+ FC-61-79   (hex)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+ 000000-0FFFFF     (base 16)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+@@ -15041,6 +15053,18 @@ FC-61-79   (hex)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
+ 				Shenzhen    518132
+ 				CN
+ 
++FC-61-79   (hex)		Annapurna labs
++800000-8FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++30-3D-51   (hex)		TeraNXT Global India Pvt Ltd.
++A00000-AFFFFF     (base 16)		TeraNXT Global India Pvt Ltd.
++				7A/61 W.E.A KAROL BAGH
++				DELHI  DELHI  110005
++				IN
++
+ 4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+ 600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+ 				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+@@ -20039,6 +20063,18 @@ FC-61-79   (hex)		Hangzhou LiDe Communication Co.,Ltd
+ 				Hangzhou    311500
+ 				CN
+ 
++30-3D-51   (hex)		Harman Connected Services Corporation India Pvt. Ltd.
++200000-2FFFFF     (base 16)		Harman Connected Services Corporation India Pvt. Ltd.
++				Plot No 3 & 3A, EOIZ Industrial Area, Sy.No.85 and 86, KIADB, Whitefield,
++				Bengaluru  Karnataka  560066
++				IN
++
++FC-61-79   (hex)		ACCO Brands USA LLC
++E00000-EFFFFF     (base 16)		ACCO Brands USA LLC
++				Four Corporate Drive
++				Lake Zurich  IL  60047-2997
++				US
++
+ 20-85-93   (hex)		Great Lite International
+ 700000-7FFFFF     (base 16)		Great Lite International
+ 				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
+@@ -25100,12 +25136,24 @@ D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
+ 				Boston  MA  02215
+ 				US
+ 
++30-3D-51   (hex)		The Heil Co dba AWTI 3rd Eye Cam
++800000-8FFFFF     (base 16)		The Heil Co dba AWTI 3rd Eye Cam
++				201 West Main Street, Suite 300
++				Chattanooga    37408
++				US
++
+ FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
+ 100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
+ 				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
++FC-61-79   (hex)		Fulian Precision Electronics(Tianjin) Co., Ltd
++B00000-BFFFFF     (base 16)		Fulian Precision Electronics(Tianjin) Co., Ltd
++				No 36. North Street, West Zone, Economic & Technological Development Area, Tianjin, China
++				Tianjin  Tianjin  300457
++				CN
++
+ FC-61-79   (hex)		Shenzhen Dptek Technology Co., Ltd.
+ A00000-AFFFFF     (base 16)		Shenzhen Dptek Technology Co., Ltd.
+ 				Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District
+diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
+index 704a346ad5..496fd55c73 100644
+--- a/hwdb.d/ma-small.txt
++++ b/hwdb.d/ma-small.txt
+@@ -5927,6 +5927,30 @@ E90000-E90FFF     (base 16)		MHE Electronics
+ 				Changwon-si, Gyeongsangnam-do, Republic of Korea    51368
+ 				KR
+ 
++8C-1F-64   (hex)		Lambda Systems Inc.
++DB7000-DB7FFF     (base 16)		Lambda Systems Inc.
++				2-11-26 Sangenjaya
++				Setagaya-ku  Tokyo  154-0024
++				JP
++
++8C-1F-64   (hex)		Grossenbacher Systeme AG
++9F4000-9F4FFF     (base 16)		Grossenbacher Systeme AG
++				Spinnereistrasse 10
++				St. Gallen    9008
++				CH
++
++8C-1F-64   (hex)		KCS Co., Ltd.
++4AE000-4AEFFF     (base 16)		KCS Co., Ltd.
++				1101, NexZone, 50, Wanam-ro, Seongsan-gu,
++				Changwon-si    51573
++				KR
++
++8C-1F-64   (hex)		Satelles Inc
++9FF000-9FFFFF     (base 16)		Satelles Inc
++				1835 Alexander Bell Dr., Suite 240
++				Reston  VA  20191
++				US
++
+ 70-B3-D5   (hex)		EVCO SPA
+ A80000-A80FFF     (base 16)		EVCO SPA
+ 				VIA FELTRE N. 81
+@@ -11699,18 +11723,24 @@ B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
+ 				Plainsboro  NJ  08536
+ 				US
+ 
+-8C-1F-64   (hex)		Genius vision digital private limted
+-CC6000-CC6FFF     (base 16)		Genius vision digital private limted
+-				S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027
+-				new delhi  new delhi  110027
+-				IN
+-
+ 8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
+ 3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
+ 				Austraße 59e
+ 				Bludenz  Austria  6700
+ 				AT
+ 
++8C-1F-64   (hex)		Genius Vision Digital Private Limited
++CC6000-CC6FFF     (base 16)		Genius Vision Digital Private Limited
++				S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027
++				new delhi  new delhi  110027
++				IN
++
++8C-1F-64   (hex)		AVCOMM Technologies Inc
++1F0000-1F0FFF     (base 16)		AVCOMM Technologies Inc
++				333 West Loop N FreewaySuite 460
++				Houston  TX  77024-7338
++				US
++
+ 70-B3-D5   (hex)		System West dba ICS Electronics
+ E06000-E06FFF     (base 16)		System West dba ICS Electronics
+ 				7034 Commerce Circle Suite A
+@@ -13829,12 +13859,6 @@ CE5000-CE5FFF     (base 16)		GridBridge Inc
+ 				Christchurch  Canterbury  8024
+ 				NZ
+ 
+-70-B3-D5   (hex)		HBH Microwave GmbH
+-CD2000-CD2FFF     (base 16)		HBH Microwave GmbH
+-				Helmholtzstr. 1
+-				Stutensee    76297
+-				DE
+-
+ 70-B3-D5   (hex)		Firefly RFID Solutions
+ 8B3000-8B3FFF     (base 16)		Firefly RFID Solutions
+ 				1521 Boone Trail Rd
+@@ -17450,6 +17474,24 @@ CDB000-CDBFFF     (base 16)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
+ 				Budapest    1132
+ 				HU
+ 
++8C-1F-64   (hex)		Goodtech AS dep Fredrikstad
++C0E000-C0EFFF     (base 16)		Goodtech AS dep Fredrikstad
++				Gamle Beddingvei 28
++				FREDRIKSTAD  Viken  1671
++				NO
++
++70-B3-D5   (hex)		TRUMPF Huttinger GmbH + Co. KG,
++CD2000-CD2FFF     (base 16)		TRUMPF Huttinger GmbH + Co. KG,
++				Helmholtzstr. 1
++				Stutensee    76297
++				DE
++
++8C-1F-64   (hex)		DIALTRONICS SYSTEMS PVT LTD
++1A5000-1A5FFF     (base 16)		DIALTRONICS SYSTEMS PVT LTD
++				Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur
++				Hyderabad  Telangana  500081
++				IN
++
+ 70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+ BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				3-3-1
+@@ -21887,12 +21929,6 @@ DBA000-DBAFFF     (base 16)		KODENSHI CORP.
+ 				MINATO-KU  TOKYO  1060032
+ 				JP
+ 
+-70-B3-D5   (hex)		BIT Group USA, Inc.
+-C75000-C75FFF     (base 16)		BIT Group USA, Inc.
+-				15870 Bernardo center drive 
+-				San Diego   CA  92127
+-				US
+-
+ 70-B3-D5   (hex)		Zeus Control Systems Ltd
+ E73000-E73FFF     (base 16)		Zeus Control Systems Ltd
+ 				1-4 Alexander House Station Road
+@@ -23366,6 +23402,36 @@ C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
+ 				Faridabad  HARYANA  121002
+ 				IN
+ 
++8C-1F-64   (hex)		Fink Zeitsysteme GmbH
++73B000-73BFFF     (base 16)		Fink Zeitsysteme GmbH
++				Möslestraße 21
++				Altach  Vorarlberg  6844
++				AT
++
++70-B3-D5   (hex)		PLANET INNOVATION (PI)
++C75000-C75FFF     (base 16)		PLANET INNOVATION (PI)
++				6 Thomas
++				Irvine  CA  92618
++				US
++
++8C-1F-64   (hex)		KST technology
++DD7000-DD7FFF     (base 16)		KST technology
++				KST B/D 4-5, Wiryeseong-daero 12-gil
++				Songpa-gu  Seoul  05636
++				KR
++
++8C-1F-64   (hex)		Bavaria Digital Technik GmbH
++FB5000-FB5FFF     (base 16)		Bavaria Digital Technik GmbH
++				Rehbichler Weg 26
++				Pfronten  Bayern  87459
++				DE
++
++8C-1F-64   (hex)		NT
++CF4000-CF4FFF     (base 16)		NT
++				Azrieli Circular Tower132 Menachem Begin Rd
++				Tel Aviv    6701101
++				IL
++
+ 70-B3-D5   (hex)		DISMUNTEL SAL
+ 92C000-92CFFF     (base 16)		DISMUNTEL SAL
+ 				Pol ind cotes
+@@ -29089,3 +29155,9 @@ DFE000-DFEFFF     (base 16)		Nuvation Energy
+ 				40 Bathurst Drive
+ 				Waterloo  Ontario  N2V 1V6
+ 				CA
++
++8C-1F-64   (hex)		Astro Machine Corporation
++268000-268FFF     (base 16)		Astro Machine Corporation
++				630 Lively Blvd
++				Elk Grove Village  IL  60007
++				US
+diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
+index c657b038fb..9bba38f431 100644
+--- a/hwdb.d/pci.ids
++++ b/hwdb.d/pci.ids
+@@ -1,8 +1,8 @@
+ #
+ #	List of PCI ID's
+ #
+-#	Version: 2022.04.16
+-#	Date:    2022-04-16 00:17:00
++#	Version: 2022.05.03
++#	Date:    2022-05-03 03:15:01
+ #
+ #	Maintained by Albert Pool, Martin Mares, and other volunteers from
+ #	the PCI ID Project at https://pci-ids.ucw.cz/.
+@@ -744,7 +744,9 @@
+ 		1028 213f  PERC H365i Adapter
+ 		1028 2140  PERC H365i Front
+ 		1028 2141  PERC H360 MX
+-		1028 2142  HBA 465e Adapter
++		1028 2142  HBA465e Adapter
++		1028 2209  HBA465i Adapter
++		1028 220a  HBA465i Front
+ 	00ab  SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
+ # 8 Internal and 8 External port channel 9400 HBA
+ 		1000 3040  HBA 9400-8i8e
+@@ -3776,6 +3778,7 @@
+ 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+ 		1002 0e3a  Radeon RX 6900 XT
+ 		148c 2408  Red Devil AMD Radeon RX 6900 XT
++		1da2 440f  TOXIC RX 6900 XT
+ 		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
+ 	73c3  Navi 22
+ 	73c4  Navi 22 USB
+@@ -3790,6 +3793,8 @@
+ 	7408  Aldebaran
+ 	740c  Aldebaran
+ 	740f  Aldebaran
++	7421  Navi 24 [Radeon PRO W6500M]
++	7422  Navi 24 [Radeon PRO W6400]
+ 	743f  Navi 24 [Radeon RX 6400 / 6500 XT]
+ 		1da2 e457  PULSE AMD Radeon RX 6500 XT
+ 	7833  RS350 Host Bridge
+@@ -12515,6 +12520,7 @@
+ 	2504  GA106 [GeForce RTX 3060 Lite Hash Rate]
+ 	2505  GA106
+ 	2507  GA106 [Geforce RTX 3050]
++	2508  GA106 [GeForce RTX 3050 OEM]
+ 	2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+ 	2523  GA106M [GeForce RTX 3050 Ti Mobile / Max-Q]
+ 	252f  GA106 [GeForce RTX 3060 Engineering Sample]
+@@ -12539,6 +12545,7 @@
+ 	25b8  GA107GLM [RTX A2000 Mobile]
+ 	25b9  GA107GLM [RTX A1000 Laptop GPU]
+ 	25ba  GA107GLM [RTX A2000 8GB Laptop GPU]
++	25bb  GA107GLM [RTX A500 Laptop GPU]
+ 	25e0  GA107BM [GeForce RTX 3050 Ti Mobile]
+ 	25e2  GA107BM [GeForce RTX 3050 Mobile]
+ 	25e5  GA107BM [GeForce RTX 3050 Mobile]
+@@ -19178,7 +19185,7 @@
+ 		103c 1240  Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM)
+ 14c2  DTK Computer
+ 14c3  MEDIATEK Corp.
+-	0608  RZ608 Wi-Fi 6E 80MHz
++	0608  MT7921K (RZ608) Wi-Fi 6E 80MHz
+ 	0616  MT7922 802.11ax PCI Express Wireless Network Adapter
+ 	7612  MT7612E 802.11acbgn PCI Express Wireless Network Adapter
+ 	7615  MT7615E 802.11ac PCI Express Wireless Network Adapter
+@@ -20795,6 +20802,8 @@
+ 	0257  Quantum-2 in Flash Recovery Mode
+ 	0258  Quantum-2 RMA
+ 	0259  Abir Chiplet
++	025b  Quantum-3 in Flash Recovery Mode
++	025c  Quantum-3 RMA
+ 	0262  MT27710 [ConnectX-4 Lx Programmable] EN
+ 	0263  MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN
+ 	0264  Innova-2 Flex Burn image
+@@ -20998,6 +21007,7 @@
+ 	cf84  Spectrum-4C
+ 	d2f0  Quantum HDR (200Gbps) switch
+ 	d2f2  Quantum-2 NDR (400Gbps) switch
++	d2f4  Quantum-3
+ 15b4  CCI/TRIAD
+ 15b5  Cimetrics Inc
+ 15b6  Texas Memory Systems Inc
+@@ -22126,6 +22136,10 @@
+ 		17d3 1883  ARC-1883 8/12/16/24 Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller
+ 	1884  ARC-1884 series PCIe 3.0 to SAS/SATA 12/6Gb RAID Controller
+ 	188a  ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
++		17d3 1217  ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller
++		17d3 1227  ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller
++		17d3 1686  ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller
++		17d3 1886  ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller
+ # nee Neterion Inc., previously S2io Inc.
+ 17d5  Exar Corp.
+ 	5731  Xframe 10-Gigabit Ethernet PCI-X
+@@ -23901,6 +23915,7 @@
+ 		1028 214a  DC NVMe PE8010 RI U.2 7.68TB
+ 		1c5c 0100  PE8000 Series NVMe Solid State Drive
+ 	2849  PE81x0 U.2/3 NVMe Solid State Drive
++		1c5c 0101  PE81x0 U.2/3 NVMe Solid State Drive
+ 1c5f  Beijing Memblaze Technology Co. Ltd.
+ 	000d  PBlaze5 520/526
+ 	000e  PBlaze6 6530
+@@ -24698,9 +24713,25 @@
+ 1eec  Viscore Technologies Ltd
+ 	0102  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+ 	1eec  VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe
+-1eed  Xiangdixian Computing Technology (Chongqing) Ltd.
+-	0100  XDX P100 VGA controller
+-	0101  XDX P101 High Definition Audio Controller
++1eed  XDX Computing Technology Ltd.
++	1100  XDX110 Graphic/VGA Controller
++	1101  XDX110 Audio Controller
++	1200  XDX120 Graphic/VGA Controller
++	1201  XDX120 Audio Controller
++	1300  XDX130 Graphic/VGA Controller
++	1301  XDX130 Audio Controller
++	1400  XDX140 Graphic/VGA Controller
++	1401  XDX140 Audio Controller
++	1500  XDX150 Graphic/VGA Controller
++	1501  XDX150 Audio Controller
++	1600  XDX160 Graphic/VGA Controller
++	1601  XDX160 Audio Controller
++	1700  XDX170 Graphic/VGA Controller
++	1701  XDX170 Audio Controller
++	1800  XDX180 Graphic/VGA Controller
++	1801  XDX180 Audio Controller
++	1900  XDX190 Graphic/VGA Controller
++	1901  XDX190 Audio Controller
+ 1efb  Flexxon Pte Ltd
+ 1f02  Beijing Dayu Technology
+ 1f03  Shenzhen Shichuangyi Electronics Co., Ltd
+@@ -25247,6 +25278,8 @@
+ 5168  Animation Technologies Inc.
+ 	0300  FlyDVB-S
+ 	0301  FlyDVB-T
++51d8  Alder Lake-P Serial IO I2C Controller #2
++51d9  Alder Lake-P Serial IO I2C Controller #3
+ 5301  Alliance Semiconductor Corp.
+ 	0001  ProMotion aT3D
+ 5333  S3 Graphics Ltd.
+@@ -25466,6 +25499,8 @@
+ 6766  Glenfly Tech Co., Ltd.
+ 	3d00  Arise-GT-10C0
+ 	3d02  Arise 1020
++	3d03  Arise-GT-1040
++	3d04  Arise1010
+ 	3d40  Arise-GT-10C0 High Definition Audio Controller
+ 	3d41  Arise 1020 High Definition Audio Controller
+ 6899  ZT Systems
+@@ -27357,6 +27392,7 @@
+ 	124e  Ethernet Connection E823-L/X557-AT 10GBASE-T
+ 	124f  Ethernet Connection E823-L 1GbE
+ 	1250  430HX - 82439HX TXC [Triton II]
++	125b  Ethernet Controller I226-LM
+ 	1360  82806AA PCI64 Hub PCI Bridge
+ 	1361  82806AA PCI64 Hub Controller (HRes)
+ 		8086 1361  82806AA PCI64 Hub Controller (HRes)
+@@ -27569,7 +27605,7 @@
+ 		8086 0001  Ethernet Server Bypass Adapter X520-SR2
+ 		8086 0002  Ethernet Server Bypass Adapter X520-LR2
+ 	1560  Ethernet Controller X540
+-	1563  Ethernet Controller 10G X550T
++	1563  Ethernet Controller X550
+ 		1028 1fa8  Ethernet 10G 4P X550/I350 rNDC
+ 		1028 1fa9  Ethernet 10G 4P X550 rNDC
+ 		1137 02b2  X550-TX 10 Gig LOM
+@@ -27773,6 +27809,7 @@
+ 		8086 000f  Ethernet Network Adapter E810-C-Q2T
+ 		8086 0010  Ethernet 100G 2P E810-C-stg Adapter
+ 		8086 0011  Ethernet Network Adapter E810-C-Q1 for OCP3.0
++		8086 0012  Ethernet 100G 2P E810-C-st Adapter
+ 	1593  Ethernet Controller E810-C for SFP
+ 		1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
+ 		1137 02e9  E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC
+@@ -27964,6 +28001,11 @@
+ 	163d  Broadwell-U Integrated Graphics
+ 	163e  Broadwell-U Integrated Graphics
+ 	1889  Ethernet Adaptive Virtual Function
++	188a  Ethernet Connection E823-C for backplane
++	188b  Ethernet Connection E823-C for QSFP
++	188c  Ethernet Connection E823-C for SFP
++	188d  Ethernet Connection E823-C/X557-AT 10GBASE-T
++	188e  Ethernet Connection E823-C 1GbE
+ 	1890  Ethernet Connection E822-C for backplane
+ 	1891  Ethernet Connection E822-C for QSFP
+ 	1892  Ethernet Connection E822-C for SFP
+@@ -32420,6 +32462,8 @@
+ 	51c6  Alder Lake-P Serial IO I2C Controller #1
+ 	51c8  Alder Lake PCH-P High Definition Audio Controller
+ 	51d3  Alder Lake-P SATA AHCI Controller
++	51d8  Alder Lake-P Serial IO I2C Controller #2
++	51d9  Alder Lake-P Serial IO I2C Controller #3
+ 	51e0  Alder Lake PCH HECI Controller
+ 	51e8  Alder Lake PCH Serial IO I2C Controller #0
+ 	51e9  Alder Lake PCH Serial IO I2C Controller #1
+@@ -32437,7 +32481,6 @@
+ 		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
+ 	530d  80310 (IOP) IO Processor
+ 	5502  Ethernet Controller (2) I225-LMvP
+-	5504  Ethernet Controller I226-K
+ 	5845  QEMU NVM Express Controller
+ 		1af4 1100  QEMU Virtual Machine
+ 	5900  Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
+diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
+index 8e19afff93..9342f7c331 100644
+--- a/hwdb.d/usb.ids
++++ b/hwdb.d/usb.ids
+@@ -9,8 +9,8 @@
+ #	The latest version can be obtained from
+ #		http://www.linux-usb.org/usb.ids
+ #
+-# Version: 2022.04.13
+-# Date:    2022-04-13 20:34:10
++# Version: 2022.05.03
++# Date:    2022-05-03 20:34:10
+ #
+ 
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -22333,13 +22333,15 @@
+ 	5440  TimVideos' HDMI2USB Opsis (FX2) - Unconfigured device
+ 	5441  TimVideos' HDMI2USB Opsis (FX2) - Firmware load/upgrade
+ 	5442  TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
+-2a1d  Oxford Nanopore Technologies, Ltd
++2a1d  Oxford Nanopore Technologies plc
+ 	0000  MinION
+ 	0001  MinION
+ 	0010  VolTRAX
+ 	0011  VolTRAX
+ 	0020  GridION
+ 	0021  GridION
++	0120  GridION Mk1 Bay
++	0121  GridION Mk1 Bay
+ 2a37  RTD Embedded Technologies, Inc.
+ 	5110  UPS35110/UPS25110
+ 2a39  RME
diff --git a/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch b/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch
new file mode 100644
index 0000000..7d4ae75
--- /dev/null
+++ b/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch
@@ -0,0 +1,27 @@
+From be69b550c85a1882afd01daa24407272ff891bf0 Mon Sep 17 00:00:00 2001
+From: lucagoc <77584602+lucagoc@users.noreply.github.com>
+Date: Sat, 7 May 2022 18:30:22 +0200
+Subject: [PATCH] hwdb: add rammus accelerometer support
+
+(cherry picked from commit 97d670a4297d4d3ffd21748b70c1a669a67d4e0f)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 70759145a8..d883db22a1 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -395,6 +395,10 @@ sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*:*
+ sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:*
+  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
++# rammus board (Asus Chromebook Flip C433)
++sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:*
++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
++
+ #########################################
+ # GP-electronic
+ #########################################
diff --git a/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch b/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch
new file mode 100644
index 0000000..141247b
--- /dev/null
+++ b/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch
@@ -0,0 +1,56 @@
+From fab29ebaa62cfae9f56a7a108b35d17e4d2a16cd Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <superm1@gmail.com>
+Date: Mon, 9 May 2022 20:16:22 -0500
+Subject: [PATCH] Add support to set autosuspend delay via hwdb
+
+(cherry picked from commit fa9a43a6905187195c9e86a61a906647726c3e55)
+
+Related: #2087778
+---
+ hwdb.d/60-autosuspend.hwdb   | 4 ++++
+ hwdb.d/parse_hwdb.py         | 1 +
+ rules.d/60-autosuspend.rules | 4 ++++
+ 3 files changed, 9 insertions(+)
+
+diff --git a/hwdb.d/60-autosuspend.hwdb b/hwdb.d/60-autosuspend.hwdb
+index 1b6c1e1c8f..323611d000 100644
+--- a/hwdb.d/60-autosuspend.hwdb
++++ b/hwdb.d/60-autosuspend.hwdb
+@@ -24,8 +24,12 @@
+ #
+ # Allowed properties are:
+ #    ID_AUTOSUSPEND=1
++#    ID_AUTOSUSPEND_DELAY_MS=####
+ #    ID_PERSIST=0
+ #
++# ID_AUTOSUSPEND_DELAY_MS adjusts the delay for autosuspend to something
++# different than the kernel default of 2000ms.
++#
+ # ID_PERSIST=0 allows disabling the kernels USB "persist" feature, which allows
+ # the continued use of devices after a power loss (due to suspend). Disable it
+ # if the device will loose state without a USB power session and the driver
+diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
+index 93179b675c..7bad559699 100755
+--- a/hwdb.d/parse_hwdb.py
++++ b/hwdb.d/parse_hwdb.py
+@@ -135,6 +135,7 @@ def property_grammar():
+              ('MOUSE_WHEEL_CLICK_COUNT', INTEGER),
+              ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER),
+              ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
++             ('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
+              ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
+              ('ID_PERSIST', Or((Literal('0'), Literal('1')))),
+              ('ID_PDA', Or((Literal('0'), Literal('1')))),
+diff --git a/rules.d/60-autosuspend.rules b/rules.d/60-autosuspend.rules
+index 332d052caa..ce31a920ed 100644
+--- a/rules.d/60-autosuspend.rules
++++ b/rules.d/60-autosuspend.rules
+@@ -15,4 +15,8 @@ ENV{ID_AUTOSUSPEND}=="1", TEST=="power/control", \
+ ENV{ID_PERSIST}=="0", TEST=="power/persist", \
+   ATTR{power/persist}="0"
+ 
++# Set up an autosuspend delay if hwdb say so
++ENV{ID_AUTOSUSPEND_DELAY_MS}!="", TEST=="power/control", \
++  ATTR{power/autosuspend_delay_ms}="$env{ID_AUTOSUSPEND_DELAY_MS}"
++
+ LABEL="autosuspend_end"
diff --git a/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch b/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch
new file mode 100644
index 0000000..457bf93
--- /dev/null
+++ b/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch
@@ -0,0 +1,47 @@
+From fd6e7c8949218df6b61a5b9186aba3f9d1d91f75 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <superm1@gmail.com>
+Date: Mon, 9 May 2022 20:16:26 -0500
+Subject: [PATCH] Set autosuspend delay for Fibocom LG850-GL
+
+It has been shown that the autosuspend delay for this device enacted
+by modem manager will race with suspend and cause system suspend
+failures.
+
+This occurred in ChromiumOS on a chromebook, but there is no reason
+it won't happen in regular notebooks with the same WWAN.  To avoid
+the failure delay autosuspend to a frequency longer than the polling
+rate used by modem manager.
+
+Link: https://chromium-review.googlesource.com/c/chromiumos/overlays/board-overlays/+/3635003
+Link: https://github.com/freedesktop/ModemManager/blob/43e76bf1bbca8207e37d3fbddfed4bb8578f0170/src/mm-iface-modem.c#L1633
+(cherry picked from commit f32049eda3b06deaae3d6d7d06a9dfd16528c443)
+
+Related: #2087778
+---
+ hwdb.d/60-autosuspend.hwdb | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-autosuspend.hwdb b/hwdb.d/60-autosuspend.hwdb
+index 323611d000..07f7fa9344 100644
+--- a/hwdb.d/60-autosuspend.hwdb
++++ b/hwdb.d/60-autosuspend.hwdb
+@@ -75,13 +75,18 @@ usb:v0627p0001:*QEMU USB Tablet*
+  ID_AUTOSUSPEND=1
+ 
+ #########################################
+-# Sierra Wireless
++# WWAN
+ #########################################
+ 
+ # Sierra Wireless EM7345 4G LTE modem
+ usb:v1199pA001*
+  ID_AUTOSUSPEND=1
+ 
++# Fibocom LG850-GL
++usb:v2CB7p0007*
++ ID_AUTOSUSPEND=1
++ ID_AUTOSUSPEND_DELAY_MS=7000
++
+ #########################################
+ # Wacom
+ #########################################
diff --git a/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch b/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch
new file mode 100644
index 0000000..5b228ca
--- /dev/null
+++ b/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch
@@ -0,0 +1,32 @@
+From bb13a4603d6e25e792836598b7f0aa21e42cd08e Mon Sep 17 00:00:00 2001
+From: Yutsuten <mateus.etto@gmail.com>
+Date: Tue, 10 May 2022 00:01:20 +0900
+Subject: [PATCH] Add HUION Inspiroy H420X to hwdb
+
+(cherry picked from commit ffa3da1dc20f8f3edb341a7476a82883fe40f3a6)
+
+Related: #2087778
+---
+ hwdb.d/60-evdev.hwdb | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
+index a7fbf2ad4d..2d1751b478 100644
+--- a/hwdb.d/60-evdev.hwdb
++++ b/hwdb.d/60-evdev.hwdb
+@@ -378,6 +378,15 @@ evdev:name:SynPS/2 Synaptics TouchPad:*svnHP:pnHPENVYx360Convertible15m-cn0xxx:*
+  EVDEV_ABS_35=1302:5640:36
+  EVDEV_ABS_36=1119:4741:61
+ 
++#########################################
++# HUION
++#########################################
++
++# HUION Inpiroy H420X
++evdev:input:b0003v256Cp0064*
++ EVDEV_ABS_00=::200
++ EVDEV_ABS_01=::200
++
+ #########################################
+ # Lenovo
+ #########################################
diff --git a/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch b/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch
new file mode 100644
index 0000000..ac1cd64
--- /dev/null
+++ b/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch
@@ -0,0 +1,8955 @@
+From c6c9674865c39e4595751d6211a3d1a25e190650 Mon Sep 17 00:00:00 2001
+From: Luca Boccassi <bluca@debian.org>
+Date: Fri, 13 May 2022 17:17:33 +0100
+Subject: [PATCH] hwdb: run 'update-hwdb' for v251-rc3
+
+(cherry picked from commit caddab0f04a8ba5f6367a7dc2477c7938134ca8e)
+
+Related: #2087778
+---
+ hwdb.d/20-OUI.hwdb               |  221 +-
+ hwdb.d/20-acpi-vendor.hwdb.patch |    4 +-
+ hwdb.d/20-pci-vendor-model.hwdb  |  294 ++-
+ hwdb.d/20-usb-vendor-model.hwdb  |   18 +
+ hwdb.d/ma-large.txt              | 3558 ++++++++++++++++--------------
+ hwdb.d/ma-medium.txt             |  534 ++---
+ hwdb.d/ma-small.txt              |  648 +++---
+ hwdb.d/pci.ids                   |  112 +-
+ hwdb.d/usb.ids                   |   10 +-
+ 9 files changed, 3193 insertions(+), 2206 deletions(-)
+
+diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
+index ab3afc31b2..d9d17f4b2c 100644
+--- a/hwdb.d/20-OUI.hwdb
++++ b/hwdb.d/20-OUI.hwdb
+@@ -7506,7 +7506,7 @@ OUI:0009DE*
+  ID_OUI_FROM_DATABASE=Samjin Information & Communications Co., Ltd.
+ 
+ OUI:0009DF*
+- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+ 
+ OUI:0009E0*
+  ID_OUI_FROM_DATABASE=XEMICS S.A.
+@@ -39530,6 +39530,9 @@ OUI:00FA3B*
+ OUI:00FAB6*
+  ID_OUI_FROM_DATABASE=Kontakt Micro-Location Sp z o.o.
+ 
++OUI:00FBF9*
++ ID_OUI_FROM_DATABASE=Axiado Corporation
++
+ OUI:00FC58*
+  ID_OUI_FROM_DATABASE=WebSilicon Ltd.
+ 
+@@ -39698,6 +39701,9 @@ OUI:0417B6*
+ OUI:04180F*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:041892*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:0418B6*
+  ID_OUI_FROM_DATABASE=Private
+ 
+@@ -39932,6 +39938,9 @@ OUI:0456E5*
+ OUI:04572F*
+  ID_OUI_FROM_DATABASE=Sertel Electronics UK Ltd
+ 
++OUI:045747*
++ ID_OUI_FROM_DATABASE=GoPro
++
+ OUI:04586F*
+  ID_OUI_FROM_DATABASE=Sichuan Whayer information industry Co.,LTD
+ 
+@@ -40325,6 +40334,9 @@ OUI:04BD97*
+ OUI:04BDBF*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:04BF1B*
++ ID_OUI_FROM_DATABASE=Dell Inc.
++
+ OUI:04BF6D*
+  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+ 
+@@ -41288,6 +41300,9 @@ OUI:08184C*
+ OUI:0819A6*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:081A1E*
++ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
++
+ OUI:081C6E*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
+@@ -44864,6 +44879,9 @@ OUI:14612F*
+ OUI:146308*
+  ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
+ 
++OUI:14656A*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:1466B7*
+  ID_OUI_FROM_DATABASE=Advanced Design Technology Pty Ltd
+ 
+@@ -46776,7 +46794,7 @@ OUI:1C234F*
+  ID_OUI_FROM_DATABASE=EDMI  Europe Ltd
+ 
+ OUI:1C24CD*
+- ID_OUI_FROM_DATABASE=Askey Computer Corp.
++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+ 
+ OUI:1C24EB*
+  ID_OUI_FROM_DATABASE=Burlywood
+@@ -46808,6 +46826,9 @@ OUI:1C2E1B*
+ OUI:1C3008*
+  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+ 
++OUI:1C3283*
++ ID_OUI_FROM_DATABASE=COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
++
+ OUI:1C330E*
+  ID_OUI_FROM_DATABASE=PernixData
+ 
+@@ -52679,15 +52700,30 @@ OUI:303D511*
+ OUI:303D512*
+  ID_OUI_FROM_DATABASE=Harman Connected Services Corporation India Pvt. Ltd.
+ 
++OUI:303D513*
++ ID_OUI_FROM_DATABASE=S & A Systems
++
++OUI:303D514*
++ ID_OUI_FROM_DATABASE=Dspread Technology (Beijing) Inc.
++
+ OUI:303D515*
+  ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd.
+ 
+ OUI:303D518*
+  ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam
+ 
++OUI:303D519*
++ ID_OUI_FROM_DATABASE=Annapurna labs
++
+ OUI:303D51A*
+  ID_OUI_FROM_DATABASE=TeraNXT Global India Pvt Ltd.
+ 
++OUI:303D51B*
++ ID_OUI_FROM_DATABASE=Labman Automation
++
++OUI:303D51D*
++ ID_OUI_FROM_DATABASE=XOR UK Corporation Limited
++
+ OUI:303EA7*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -56642,6 +56678,9 @@ OUI:3CA6F6*
+ OUI:3CA72B*
+  ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD
+ 
++OUI:3CA7AE*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:3CA82A*
+  ID_OUI_FROM_DATABASE=Hewlett Packard
+ 
+@@ -58571,6 +58610,9 @@ OUI:44700B*
+ OUI:447098*
+  ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
+ 
++OUI:447147*
++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd
++
+ OUI:4473D6*
+  ID_OUI_FROM_DATABASE=Logitech
+ 
+@@ -59258,6 +59300,9 @@ OUI:481A84*
+ OUI:481BD2*
+  ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
+ 
++OUI:481CB9*
++ ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
++
+ OUI:481D70*
+  ID_OUI_FROM_DATABASE=Cisco SPVTG
+ 
+@@ -59574,7 +59619,7 @@ OUI:486B91*
+  ID_OUI_FROM_DATABASE=Fleetwood Group Inc.
+ 
+ OUI:486DBB*
+- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+ 
+ OUI:486E70*
+  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
+@@ -59693,6 +59738,9 @@ OUI:4889E7*
+ OUI:488AD2*
+  ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+ 
++OUI:488AE8*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:488B0A*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -60279,7 +60327,7 @@ OUI:4C3488*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+ OUI:4C364E*
+- ID_OUI_FROM_DATABASE=Panasonic Corporation  Connected Solutions Company
++ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd.
+ 
+ OUI:4C38D5*
+  ID_OUI_FROM_DATABASE=MITAC COMPUTING TECHNOLOGY CORPORATION
+@@ -60461,6 +60509,9 @@ OUI:4C627B*
+ OUI:4C6371*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:4C63AD*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:4C63EB*
+  ID_OUI_FROM_DATABASE=Application Solutions (Electronics and Vision) Ltd
+ 
+@@ -61496,6 +61547,9 @@ OUI:503E7C*
+ OUI:503EAA*
+  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+ 
++OUI:503F50*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:503F56*
+  ID_OUI_FROM_DATABASE=Syncmold Enterprise Corp
+ 
+@@ -61635,7 +61689,7 @@ OUI:505DAC*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+ OUI:505FB5*
+- ID_OUI_FROM_DATABASE=Askey Computer Corp.
++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+ 
+ OUI:506028*
+  ID_OUI_FROM_DATABASE=Xirrus Inc.
+@@ -61700,6 +61754,9 @@ OUI:506255E*
+ OUI:506313*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:506391*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:50642B*
+  ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD
+ 
+@@ -63539,6 +63596,9 @@ OUI:582F42*
+ OUI:582FF7*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+ 
++OUI:58305B*
++ ID_OUI_FROM_DATABASE=Shanghai Junqian Sensing Technology Co.,LTD
++
+ OUI:583112*
+  ID_OUI_FROM_DATABASE=DRUST
+ 
+@@ -64370,6 +64430,9 @@ OUI:5C0339*
+ OUI:5C045A*
+  ID_OUI_FROM_DATABASE=Company NA Stage & Light
+ 
++OUI:5C0758*
++ ID_OUI_FROM_DATABASE=Ufispace Co., LTD.
++
+ OUI:5C076F*
+  ID_OUI_FROM_DATABASE=Thought Creator
+ 
+@@ -69131,6 +69194,9 @@ OUI:6CB6CA*
+ OUI:6CB749*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:6CB7E2*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:6CB7F4*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
+@@ -69455,6 +69521,9 @@ OUI:70105C*
+ OUI:70106F*
+  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+ 
++OUI:70110E*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:701124*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -69774,7 +69843,7 @@ OUI:705425*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
+ OUI:7054B4*
+- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+ 
+ OUI:7054D2*
+  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+@@ -70157,6 +70226,9 @@ OUI:709BA5*
+ OUI:709BFC*
+  ID_OUI_FROM_DATABASE=Bryton Inc.
+ 
++OUI:709C45*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:709C8F*
+  ID_OUI_FROM_DATABASE=Nero AG
+ 
+@@ -83486,6 +83558,9 @@ OUI:749D8F*
+ OUI:749DDC*
+  ID_OUI_FROM_DATABASE=2Wire Inc
+ 
++OUI:749E75*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:749EA5*
+  ID_OUI_FROM_DATABASE=OHSUNG
+ 
+@@ -84353,6 +84428,9 @@ OUI:785B64*
+ OUI:785C28*
+  ID_OUI_FROM_DATABASE=Prime Motion Inc.
+ 
++OUI:785C5E*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:785C72*
+  ID_OUI_FROM_DATABASE=Hioso Technology Co., Ltd.
+ 
+@@ -86903,6 +86981,9 @@ OUI:80618F*
+ OUI:806459*
+  ID_OUI_FROM_DATABASE=Nimbus Inc.
+ 
++OUI:80646F*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:80647A*
+  ID_OUI_FROM_DATABASE=Ola Sense Inc
+ 
+@@ -89553,7 +89634,7 @@ OUI:88DD79*
+  ID_OUI_FROM_DATABASE=Voltaire
+ 
+ OUI:88DE7C*
+- ID_OUI_FROM_DATABASE=Askey Computer Corp.
++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+ 
+ OUI:88DEA9*
+  ID_OUI_FROM_DATABASE=Roku, Inc.
+@@ -89909,6 +89990,9 @@ OUI:8C1F6401A*
+ OUI:8C1F6401E*
+  ID_OUI_FROM_DATABASE=SCIREQ Scientific Respiratory Equipment  Inc
+ 
++OUI:8C1F64043*
++ ID_OUI_FROM_DATABASE=AperNet, LLC
++
+ OUI:8C1F64045*
+  ID_OUI_FROM_DATABASE=VEILUX INC.
+ 
+@@ -89945,6 +90029,9 @@ OUI:8C1F6408B*
+ OUI:8C1F6408F*
+  ID_OUI_FROM_DATABASE=AixControl GmbH
+ 
++OUI:8C1F64098*
++ ID_OUI_FROM_DATABASE=Agvolution GmbH
++
+ OUI:8C1F64099*
+  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
+ 
+@@ -89993,6 +90080,9 @@ OUI:8C1F640E6*
+ OUI:8C1F640EA*
+  ID_OUI_FROM_DATABASE=SmartSky Networks LLC
+ 
++OUI:8C1F640EF*
++ ID_OUI_FROM_DATABASE=DAVE SRL
++
+ OUI:8C1F640F0*
+  ID_OUI_FROM_DATABASE=Xylon
+ 
+@@ -90455,6 +90545,9 @@ OUI:8C1F6453F*
+ OUI:8C1F64542*
+  ID_OUI_FROM_DATABASE=Landis+Gyr Equipamentos de Medição Ltda
+ 
++OUI:8C1F64544*
++ ID_OUI_FROM_DATABASE=Tinkerbee Innovations Private Limited
++
+ OUI:8C1F64549*
+  ID_OUI_FROM_DATABASE=Brad Technology
+ 
+@@ -90506,6 +90599,9 @@ OUI:8C1F645B3*
+ OUI:8C1F645BC*
+  ID_OUI_FROM_DATABASE=HEITEC AG
+ 
++OUI:8C1F645CB*
++ ID_OUI_FROM_DATABASE=dinosys
++
+ OUI:8C1F645D3*
+  ID_OUI_FROM_DATABASE=Eloy Water
+ 
+@@ -90596,6 +90692,9 @@ OUI:8C1F6467F*
+ OUI:8C1F64683*
+  ID_OUI_FROM_DATABASE=SLAT
+ 
++OUI:8C1F64685*
++ ID_OUI_FROM_DATABASE=Sanchar Communication Systems
++
+ OUI:8C1F64697*
+  ID_OUI_FROM_DATABASE=Sontay Ltd.
+ 
+@@ -90629,6 +90728,9 @@ OUI:8C1F646CD*
+ OUI:8C1F646CF*
+  ID_OUI_FROM_DATABASE=Italora
+ 
++OUI:8C1F646D5*
++ ID_OUI_FROM_DATABASE=HTK Hamburg GmbH
++
+ OUI:8C1F646E3*
+  ID_OUI_FROM_DATABASE=ViewSonic International Corporation
+ 
+@@ -90755,6 +90857,9 @@ OUI:8C1F647B8*
+ OUI:8C1F647B9*
+  ID_OUI_FROM_DATABASE=Deviceroy
+ 
++OUI:8C1F647BC*
++ ID_OUI_FROM_DATABASE=GO development GmbH
++
+ OUI:8C1F647C8*
+  ID_OUI_FROM_DATABASE=Jacquet Dechaume
+ 
+@@ -90770,6 +90875,9 @@ OUI:8C1F647D3*
+ OUI:8C1F647D6*
+  ID_OUI_FROM_DATABASE=Algodue Elettronica Srl
+ 
++OUI:8C1F647D8*
++ ID_OUI_FROM_DATABASE=HIROSAWA ELECTRIC Co.,Ltd.
++
+ OUI:8C1F647DD*
+  ID_OUI_FROM_DATABASE=TAKASAKI KYODO COMPUTING CENTER Co.,LTD.
+ 
+@@ -90833,6 +90941,9 @@ OUI:8C1F64883*
+ OUI:8C1F6488D*
+  ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd
+ 
++OUI:8C1F64890*
++ ID_OUI_FROM_DATABASE=WonATech Co., Ltd.
++
+ OUI:8C1F64892*
+  ID_OUI_FROM_DATABASE=MDI Industrial
+ 
+@@ -90905,6 +91016,9 @@ OUI:8C1F64909*
+ OUI:8C1F6490E*
+  ID_OUI_FROM_DATABASE=Xacti Corporation
+ 
++OUI:8C1F6490F*
++ ID_OUI_FROM_DATABASE=BELIMO Automation AG
++
+ OUI:8C1F64911*
+  ID_OUI_FROM_DATABASE=EOLANE
+ 
+@@ -90926,6 +91040,9 @@ OUI:8C1F64939*
+ OUI:8C1F64943*
+  ID_OUI_FROM_DATABASE=Autark GmbH
+ 
++OUI:8C1F64946*
++ ID_OUI_FROM_DATABASE=UniJet Co., Ltd.
++
+ OUI:8C1F64947*
+  ID_OUI_FROM_DATABASE=LLC TC Vympel
+ 
+@@ -91133,6 +91250,9 @@ OUI:8C1F64B0C*
+ OUI:8C1F64B10*
+  ID_OUI_FROM_DATABASE=MTU Aero Engines AG
+ 
++OUI:8C1F64B13*
++ ID_OUI_FROM_DATABASE=Abode Systems Inc
++
+ OUI:8C1F64B22*
+  ID_OUI_FROM_DATABASE=BLIGHTER SURVEILLANCE SYSTEMS LTD
+ 
+@@ -91250,6 +91370,9 @@ OUI:8C1F64C28*
+ OUI:8C1F64C2F*
+  ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+ 
++OUI:8C1F64C35*
++ ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
++
+ OUI:8C1F64C38*
+  ID_OUI_FROM_DATABASE=ECO-ADAPT
+ 
+@@ -91301,6 +91424,9 @@ OUI:8C1F64CA6*
+ OUI:8C1F64CAD*
+  ID_OUI_FROM_DATABASE=General Motors
+ 
++OUI:8C1F64CAF*
++ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
++
+ OUI:8C1F64CBE*
+  ID_OUI_FROM_DATABASE=Circa Enterprises Inc
+ 
+@@ -92831,6 +92957,9 @@ OUI:9023B4*
+ OUI:9023EC*
+  ID_OUI_FROM_DATABASE=Availink, Inc.
+ 
++OUI:9025F2*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:90272B*
+  ID_OUI_FROM_DATABASE=Algorab S.r.l.
+ 
+@@ -94289,6 +94418,9 @@ OUI:949FB4*
+ OUI:94A04E*
+  ID_OUI_FROM_DATABASE=Bostex Technology Co., LTD
+ 
++OUI:94A07D*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:94A1A2*
+  ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
+ 
+@@ -95288,6 +95420,9 @@ OUI:986022*
+ OUI:9860CA*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:986610*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:9866EA*
+  ID_OUI_FROM_DATABASE=Industrial Control Communications, Inc.
+ 
+@@ -95498,6 +95633,9 @@ OUI:9880BBE*
+ OUI:9880EE*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:98818A*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:988217*
+  ID_OUI_FROM_DATABASE=Disruptive Ltd
+ 
+@@ -97421,6 +97559,9 @@ OUI:A02D13*
+ OUI:A02EF3*
+  ID_OUI_FROM_DATABASE=United Integrated Services Co., Led.
+ 
++OUI:A03131*
++ ID_OUI_FROM_DATABASE=Procenne Digital Security
++
+ OUI:A031DB*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -100214,6 +100355,9 @@ OUI:A8A668*
+ OUI:A8A795*
+  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+ 
++OUI:A8AA7C*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:A8ABB5*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -100358,6 +100502,9 @@ OUI:A8DA0C*
+ OUI:A8DB03*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
++OUI:A8DC5A*
++ ID_OUI_FROM_DATABASE=Digital Watchdog
++
+ OUI:A8DE68*
+  ID_OUI_FROM_DATABASE=Beijing Wide Technology Co.,Ltd
+ 
+@@ -100682,6 +100829,9 @@ OUI:AC2DA9*
+ OUI:AC2FA8*
+  ID_OUI_FROM_DATABASE=Humannix Co.,Ltd.
+ 
++OUI:AC3184*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:AC319D*
+  ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd.
+ 
+@@ -101243,6 +101393,9 @@ OUI:ACB566*
+ OUI:ACB57D*
+  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+ 
++OUI:ACB687*
++ ID_OUI_FROM_DATABASE=Arcadyan Corporation
++
+ OUI:ACB74F*
+  ID_OUI_FROM_DATABASE=METEL s.r.o.
+ 
+@@ -101939,6 +102092,9 @@ OUI:B0761B*
+ OUI:B077AC*
+  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+ 
++OUI:B07839*
++ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
++
+ OUI:B07870*
+  ID_OUI_FROM_DATABASE=Wi-NEXT, Inc.
+ 
+@@ -103340,6 +103496,9 @@ OUI:B4C170*
+ OUI:B4C26A*
+  ID_OUI_FROM_DATABASE=Garmin International
+ 
++OUI:B4C2F7*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:B4C44E*
+  ID_OUI_FROM_DATABASE=VXL eTech Pvt Ltd
+ 
+@@ -103653,7 +103812,7 @@ OUI:B81F5E*
+  ID_OUI_FROM_DATABASE=Apption Labs Limited
+ 
+ OUI:B8208E*
+- ID_OUI_FROM_DATABASE=Panasonic Corporation  Connected Solutions Company
++ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd.
+ 
+ OUI:B820E7*
+  ID_OUI_FROM_DATABASE=Guangzhou Horizontal Information & Network Integration Co. Ltd
+@@ -105899,6 +106058,9 @@ OUI:C06DED*
+ OUI:C07009*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:C071AA*
++ ID_OUI_FROM_DATABASE=ShenZhen OnMicro Electronics Co.,Ltd.
++
+ OUI:C0742B*
+  ID_OUI_FROM_DATABASE=SHENZHEN XUNLONG SOFTWARE CO.,LIMITED
+ 
+@@ -107048,6 +107210,9 @@ OUI:C474F8*
+ OUI:C475AB*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:C475EA*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:C477AB*
+  ID_OUI_FROM_DATABASE=Beijing ASU Tech Co.,Ltd
+ 
+@@ -108164,6 +108329,9 @@ OUI:C88439*
+ OUI:C88447*
+  ID_OUI_FROM_DATABASE=Beautiful Enterprise Co., Ltd
+ 
++OUI:C8848C*
++ ID_OUI_FROM_DATABASE=Ruckus Wireless
++
+ OUI:C884A1*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+@@ -109373,6 +109541,9 @@ OUI:CC9635*
+ OUI:CC96A0*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:CC96E5*
++ ID_OUI_FROM_DATABASE=Dell Inc.
++
+ OUI:CC988B*
+  ID_OUI_FROM_DATABASE=SONY Visual Products Inc.
+ 
+@@ -109481,6 +109652,9 @@ OUI:CCB8A8*
+ OUI:CCB8F1*
+  ID_OUI_FROM_DATABASE=EAGLE KINGDOM TECHNOLOGIES LIMITED
+ 
++OUI:CCBA6F*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:CCBBFE*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -109695,7 +109869,7 @@ OUI:CCD39DE*
+  ID_OUI_FROM_DATABASE=Shanghai tongli information technology co. LTD
+ 
+ OUI:CCD3C1*
+- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+ 
+ OUI:CCD3E2*
+  ID_OUI_FROM_DATABASE=Jiangsu Yinhe  Electronics Co.,Ltd.
+@@ -113678,6 +113852,9 @@ OUI:DCA971*
+ OUI:DCA989*
+  ID_OUI_FROM_DATABASE=MACANDC
+ 
++OUI:DCAA43*
++ ID_OUI_FROM_DATABASE=Shenzhen Terca Information Technology Co., Ltd.
++
+ OUI:DCAD9E*
+  ID_OUI_FROM_DATABASE=GreenPriz
+ 
+@@ -113834,6 +114011,9 @@ OUI:DCDA4F*
+ OUI:DCDA80*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
++OUI:DCDB27*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:DCDB70*
+  ID_OUI_FROM_DATABASE=Tonfunk Systementwicklung und Service GmbH
+ 
+@@ -114332,6 +114512,9 @@ OUI:E056F4*
+ OUI:E0589E*
+  ID_OUI_FROM_DATABASE=Laerdal Medical
+ 
++OUI:E05A1B*
++ ID_OUI_FROM_DATABASE=Espressif Inc.
++
+ OUI:E05A9F0*
+  ID_OUI_FROM_DATABASE=Annapurna labs
+ 
+@@ -116624,6 +116807,9 @@ OUI:E8A1F8*
+ OUI:E8A245*
+  ID_OUI_FROM_DATABASE=Juniper Networks
+ 
++OUI:E8A34E*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:E8A364*
+  ID_OUI_FROM_DATABASE=Signal Path International / Peachtree Audio
+ 
+@@ -117684,7 +117870,7 @@ OUI:ECBD1D*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
+ OUI:ECBE5F*
+- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S.
+ 
+ OUI:ECBEDD*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+@@ -117788,6 +117974,9 @@ OUI:ECE512*
+ OUI:ECE555*
+  ID_OUI_FROM_DATABASE=Hirschmann Automation
+ 
++OUI:ECE61D*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:ECE6A2*
+  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+ 
+@@ -119123,6 +119312,9 @@ OUI:F419E2*
+ OUI:F41BA1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:F41C71*
++ ID_OUI_FROM_DATABASE=SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
++
+ OUI:F41C95*
+  ID_OUI_FROM_DATABASE=BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD
+ 
+@@ -119828,6 +120020,9 @@ OUI:F4B898*
+ OUI:F4B8A7*
+  ID_OUI_FROM_DATABASE=zte corporation
+ 
++OUI:F4BBC7*
++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
++
+ OUI:F4BC97*
+  ID_OUI_FROM_DATABASE=Shenzhen Crave Communication Co., LTD
+ 
+@@ -121301,6 +121496,9 @@ OUI:FC0647*
+ OUI:FC06ED*
+  ID_OUI_FROM_DATABASE=M2Motive Technology Inc.
+ 
++OUI:FC0736*
++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
++
+ OUI:FC07A0*
+  ID_OUI_FROM_DATABASE=LRE Medical GmbH
+ 
+@@ -121349,6 +121547,9 @@ OUI:FC1193*
+ OUI:FC122C*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
++OUI:FC1263*
++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
++
+ OUI:FC1349*
+  ID_OUI_FROM_DATABASE=Global Apps Corp.
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
+index a696119753..35f3430268 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb.patch
++++ b/hwdb.d/20-acpi-vendor.hwdb.patch
+@@ -1,5 +1,5 @@
+---- 20-acpi-vendor.hwdb.base	2022-05-05 16:21:43.499198786 +0200
+-+++ 20-acpi-vendor.hwdb	2022-05-05 16:21:43.513198949 +0200
++--- 20-acpi-vendor.hwdb.base	2022-05-13 17:14:22.098059674 +0100
+++++ 20-acpi-vendor.hwdb	2022-05-13 17:14:22.102059756 +0100
+ @@ -3,6 +3,8 @@
+  # Data imported from:
+  #     https://uefi.org/uefi-pnp-export
+diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
+index cae426479b..926247eefc 100644
+--- a/hwdb.d/20-pci-vendor-model.hwdb
++++ b/hwdb.d/20-pci-vendor-model.hwdb
+@@ -122,6 +122,12 @@ pci:v0000018Ad00000106*
+ pci:v000001DE*
+  ID_VENDOR_FROM_DATABASE=Oxide Computer Company
+ 
++pci:v000001DEd00000000*
++ ID_MODEL_FROM_DATABASE=Propolis NVMe Controller
++
++pci:v000001DEd00000001*
++ ID_MODEL_FROM_DATABASE=Propolis xHCI Controller
++
+ pci:v00000200*
+  ID_VENDOR_FROM_DATABASE=Dell (wrong ID)
+ 
+@@ -2124,7 +2130,7 @@ pci:v00001000d000000A5sv00001028sd00002140*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Front)
+ 
+ pci:v00001000d000000A5sv00001028sd00002141*
+- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX)
++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i MX)
+ 
+ pci:v00001000d000000A5sv00001028sd00002142*
+  ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465e Adapter)
+@@ -20114,6 +20120,12 @@ pci:v00001054d0000350E*
+ pci:v00001055*
+  ID_VENDOR_FROM_DATABASE=Microchip Technology / SMSC
+ 
++pci:v00001055d00007430*
++ ID_MODEL_FROM_DATABASE=LAN7430
++
++pci:v00001055d00007431*
++ ID_MODEL_FROM_DATABASE=LAN7431
++
+ pci:v00001055d00009130*
+  ID_MODEL_FROM_DATABASE=SLC90E66 [Victory66] IDE
+ 
+@@ -36945,10 +36957,13 @@ pci:v000010DEd00002296*
+  ID_MODEL_FROM_DATABASE=Tegra PCIe Endpoint Virtual Network
+ 
+ pci:v000010DEd00002302*
+- ID_MODEL_FROM_DATABASE=GA103
++ ID_MODEL_FROM_DATABASE=GH100
+ 
+ pci:v000010DEd00002321*
+- ID_MODEL_FROM_DATABASE=GA103
++ ID_MODEL_FROM_DATABASE=GH100
++
++pci:v000010DEd00002336*
++ ID_MODEL_FROM_DATABASE=GH100 [H100 96GB]
+ 
+ pci:v000010DEd00002414*
+  ID_MODEL_FROM_DATABASE=GA103 [GeForce RTX 3060 Ti]
+@@ -50946,11 +50961,113 @@ pci:v00001344d00005192*
+  ID_MODEL_FROM_DATABASE=9200 MAX NVMe SSD
+ 
+ pci:v00001344d000051A2*
+- ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD
++ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD
+ 
+ pci:v00001344d000051A3*
++ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD
++
++pci:v00001344d000051B1*
++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD
++
++pci:v00001344d000051B1sv00001344sd00004000*
++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (3.84TB U.2)
++
++pci:v00001344d000051B1sv00001344sd00005000*
++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (7.68TB U.2)
++
++pci:v00001344d000051B1sv00001344sd00006000*
++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (15.36TB U.2)
++
++pci:v00001344d000051B2*
+  ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD
+ 
++pci:v00001344d000051B2sv00001344sd00004000*
++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (3.2TB U.2)
++
++pci:v00001344d000051B2sv00001344sd00005000*
++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (6.4 TB U.2)
++
++pci:v00001344d000051B2sv00001344sd00006000*
++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (12.8TB U.2)
++
++pci:v00001344d000051C0*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD
++
++pci:v00001344d000051C0sv00001344sd00001100*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 480GB)
++
++pci:v00001344d000051C0sv00001344sd00002000*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 960GB)
++
++pci:v00001344d000051C0sv00001344sd00002100*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 960GB)
++
++pci:v00001344d000051C0sv00001344sd00002600*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 960GB)
++
++pci:v00001344d000051C0sv00001344sd00002B00*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 1920GB)
++
++pci:v00001344d000051C0sv00001344sd00002D00*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.2 1920GB)
++
++pci:v00001344d000051C0sv00001344sd00003000*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 1920GB)
++
++pci:v00001344d000051C0sv00001344sd00003E00*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 3840GB)
++
++pci:v00001344d000051C0sv00001344sd00003F00*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 3840GB)
++
++pci:v00001344d000051C0sv00001344sd00004000*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 3840GB)
++
++pci:v00001344d000051C0sv00001344sd00005000*
++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 7680GB)
++
++pci:v00001344d000051C1*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD
++
++pci:v00001344d000051C1sv00001344sd00001100*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 400GB)
++
++pci:v00001344d000051C1sv00001344sd00002000*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 800GB)
++
++pci:v00001344d000051C1sv00001344sd00002100*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 800GB)
++
++pci:v00001344d000051C1sv00001344sd00002600*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 800GB)
++
++pci:v00001344d000051C1sv00001344sd00002B00*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 1600GB)
++
++pci:v00001344d000051C1sv00001344sd00002D00*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 1600GB)
++
++pci:v00001344d000051C1sv00001344sd00003000*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 1600GB)
++
++pci:v00001344d000051C1sv00001344sd00003E00*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 3200GB)
++
++pci:v00001344d000051C1sv00001344sd00003F00*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 3200GB)
++
++pci:v00001344d000051C1sv00001344sd00004000*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 3200GB)
++
++pci:v00001344d000051C1sv00001344sd00005000*
++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 6400GB)
++
++pci:v00001344d000051C3*
++ ID_MODEL_FROM_DATABASE=7450 PRO NVMe SSD
++
++pci:v00001344d000051C4*
++ ID_MODEL_FROM_DATABASE=7450 MAX NVMe SSD
++
+ pci:v00001345*
+  ID_VENDOR_FROM_DATABASE=Arescom Inc
+ 
+@@ -55451,6 +55568,12 @@ pci:v00001425d00006089*
+ pci:v00001425d0000608A*
+  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller
+ 
++pci:v00001425d00006092*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
++
++pci:v00001425d00006092sv000001DEsd0000FFF9*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6)
++
+ pci:v00001425d00006401*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller
+ 
+@@ -55523,6 +55646,12 @@ pci:v00001425d00006489*
+ pci:v00001425d0000648A*
+  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller
+ 
++pci:v00001425d00006492*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
++
++pci:v00001425d00006492sv000001DEsd0000FFF9*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6)
++
+ pci:v00001425d00006501*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller
+ 
+@@ -55595,6 +55724,9 @@ pci:v00001425d00006589*
+ pci:v00001425d0000658A*
+  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller
+ 
++pci:v00001425d00006592*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller
++
+ pci:v00001425d00006601*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller
+ 
+@@ -55667,6 +55799,9 @@ pci:v00001425d00006689*
+ pci:v00001425d0000668A*
+  ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller
+ 
++pci:v00001425d00006692*
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller
++
+ pci:v00001425d00006801*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller [VF]
+ 
+@@ -69047,9 +69182,15 @@ pci:v00001AF4*
+ pci:v00001AF4d00001000*
+  ID_MODEL_FROM_DATABASE=Virtio network device
+ 
++pci:v00001AF4d00001000sv000001DEsd0000FFFB*
++ ID_MODEL_FROM_DATABASE=Virtio network device (Propolis Virtio network device)
++
+ pci:v00001AF4d00001001*
+  ID_MODEL_FROM_DATABASE=Virtio block device
+ 
++pci:v00001AF4d00001001sv000001DEsd0000FFFA*
++ ID_MODEL_FROM_DATABASE=Virtio block device (Propolis Virtio block device)
++
+ pci:v00001AF4d00001002*
+  ID_MODEL_FROM_DATABASE=Virtio memory balloon
+ 
+@@ -72677,6 +72818,123 @@ pci:v00001F2Fd00001513sv00001F2Fsd00006116*
+ pci:v00001F2Fd00001513sv00001F2Fsd00006118*
+  ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 7.68TB NVMe SSD)
+ 
++pci:v00001F3F*
++ ID_VENDOR_FROM_DATABASE=3SNIC Ltd
++
++pci:v00001F3Fd00002100*
++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA
++
++pci:v00001F3Fd00002100sv00001F3Fsd00000120*
++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 32 Ports)
++
++pci:v00001F3Fd00002100sv00001F3Fsd00000125*
++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 40 Ports)
++
++pci:v00001F3Fd00002100sv00001F3Fsd00000180*
++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 16 Ports)
++
++pci:v00001F3Fd00002100sv00001F3Fsd00000185*
++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 8 Ports)
++
++pci:v00001F3Fd00002200*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller
++
++pci:v00001F3Fd00002200sv00001F3Fsd00000185*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 16 Ports with 2G Cache)
++
++pci:v00001F3Fd00002200sv00001F3Fsd000001A1*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 40 Ports with 2G Cache)
++
++pci:v00001F3Fd00002200sv00001F3Fsd000001A4*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 16 Ports with 4G Cache)
++
++pci:v00001F3Fd00002200sv00001F3Fsd000001A8*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 32 Ports with 4G Cache)
++
++pci:v00001F3Fd00002200sv00001F3Fsd000001AD*
++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 40 Ports with 4G Cache)
++
++pci:v00001F3Fd00009001*
++ ID_MODEL_FROM_DATABASE=Ethernet VF
++
++pci:v00001F3Fd00009001sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=Ethernet VF
++
++pci:v00001F3Fd00009002*
++ ID_MODEL_FROM_DATABASE=Ethernet VF Hyper-V
++
++pci:v00001F3Fd00009002sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=Ethernet VF Hyper-V
++
++pci:v00001F3Fd00009003*
++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF
++
++pci:v00001F3Fd00009003sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF
++
++pci:v00001F3Fd00009004*
++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF Hyper-V
++
++pci:v00001F3Fd00009004sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF Hyper-V
++
++pci:v00001F3Fd00009008*
++ ID_MODEL_FROM_DATABASE=3SFC VF
++
++pci:v00001F3Fd00009008sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=3SFC VF
++
++pci:v00001F3Fd00009009*
++ ID_MODEL_FROM_DATABASE=3SFC VF Hyper-V
++
++pci:v00001F3Fd00009009sv00001F3Fsd00001000*
++ ID_MODEL_FROM_DATABASE=3SFC VF Hyper-V
++
++pci:v00001F3Fd00009010*
++ ID_MODEL_FROM_DATABASE=3SFC FC Controller
++
++pci:v00001F3Fd00009010sv00001F3Fsd00000041*
++ ID_MODEL_FROM_DATABASE=3SFC FC Controller (Dual Port 16GE FC to PCIe Gen4 x16 Adapter)
++
++pci:v00001F3Fd00009010sv00001F3Fsd00000061*
++ ID_MODEL_FROM_DATABASE=3SFC FC Controller (Dual Port 32GE FC to PCIe Gen4 x16 Adapter)
++
++pci:v00001F3Fd00009020*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter
++
++pci:v00001F3Fd00009020sv00001F3Fsd00000051*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Dual Port 25GE Ethernet Network Adapter)
++
++pci:v00001F3Fd00009020sv00001F3Fsd00000052*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Quad Port 25GE Ethernet Network Adapter)
++
++pci:v00001F3Fd00009020sv00001F3Fsd000000A1*
++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Dual Port 100GE Ethernet Network Adapter)
++
++pci:v00001F3Fd00009030*
++ ID_MODEL_FROM_DATABASE=IPU
++
++pci:v00001F3Fd00009030sv00001F3Fsd00000051*
++ ID_MODEL_FROM_DATABASE=IPU (Dual Port 25GE IPU)
++
++pci:v00001F3Fd00009031*
++ ID_MODEL_FROM_DATABASE=SDI5.0
++
++pci:v00001F3Fd00009031sv00001F3Fsd00000051*
++ ID_MODEL_FROM_DATABASE=SDI5.0 (Dual Port 25GE SDI5.0lite)
++
++pci:v00001F3Fd00009031sv00001F3Fsd000000A1*
++ ID_MODEL_FROM_DATABASE=SDI5.0 (Dual Port 100GE SDI5.0)
++
++pci:v00001F3Fd00009032*
++ ID_MODEL_FROM_DATABASE=SDI5.1
++
++pci:v00001F3Fd00009032sv00001F3Fsd000000A1*
++ ID_MODEL_FROM_DATABASE=SDI5.1 (Dual Port 100GE SDI5.1)
++
++pci:v00001FAA*
++ ID_VENDOR_FROM_DATABASE=Hexaflake (Shanghai) Information Technology Co., Ltd.
++
+ pci:v00001FAB*
+  ID_VENDOR_FROM_DATABASE=Unifabrix Ltd.
+ 
+@@ -74249,12 +74507,6 @@ pci:v00005168d00000300*
+ pci:v00005168d00000301*
+  ID_MODEL_FROM_DATABASE=FlyDVB-T
+ 
+-pci:v000051D8*
+- ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2
+-
+-pci:v000051D9*
+- ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3
+-
+ pci:v00005301*
+  ID_VENDOR_FROM_DATABASE=Alliance Semiconductor Corp.
+ 
+@@ -74901,7 +75153,7 @@ pci:v00006766d00003D00*
+  ID_MODEL_FROM_DATABASE=Arise-GT-10C0
+ 
+ pci:v00006766d00003D02*
+- ID_MODEL_FROM_DATABASE=Arise 1020
++ ID_MODEL_FROM_DATABASE=Arise1020
+ 
+ pci:v00006766d00003D03*
+  ID_MODEL_FROM_DATABASE=Arise-GT-1040
+@@ -74913,7 +75165,7 @@ pci:v00006766d00003D40*
+  ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller
+ 
+ pci:v00006766d00003D41*
+- ID_MODEL_FROM_DATABASE=Arise 1020 High Definition Audio Controller
++ ID_MODEL_FROM_DATABASE=Arise1020 High Definition Audio Controller
+ 
+ pci:v00006899*
+  ID_VENDOR_FROM_DATABASE=ZT Systems
+@@ -80111,6 +80363,9 @@ pci:v00008086d00001235*
+ pci:v00008086d00001237*
+  ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma]
+ 
++pci:v00008086d00001237sv000001DEsd0000FFFE*
++ ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Propolis Virtual 440FX)
++
+ pci:v00008086d00001237sv00001AF4sd00001100*
+  ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Qemu virtual machine)
+ 
+@@ -96173,6 +96428,9 @@ pci:v00008086d00006FFE*
+ pci:v00008086d00007000*
+  ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II]
+ 
++pci:v00008086d00007000sv000001DEsd0000FFFD*
++ ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Propolis Virtual PIIX3 ISA Controller)
++
+ pci:v00008086d00007000sv00001AF4sd00001100*
+  ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Qemu virtual machine)
+ 
+@@ -96224,6 +96482,9 @@ pci:v00008086d00007112sv00001AF4sd00001100*
+ pci:v00008086d00007113*
+  ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI
+ 
++pci:v00008086d00007113sv000001DEsd0000FFFC*
++ ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Propolis Virtual PIIX4 PM Controller)
++
+ pci:v00008086d00007113sv000015ADsd00001976*
+  ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Virtual Machine Chipset)
+ 
+@@ -96443,6 +96704,15 @@ pci:v00008086d00007AA7*
+ pci:v00008086d00007AB4*
+  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #13
+ 
++pci:v00008086d00007AB8*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #1
++
++pci:v00008086d00007AB9*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #2
++
++pci:v00008086d00007ABC*
++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #5
++
+ pci:v00008086d00007ABD*
+  ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #6
+ 
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index d7e218011a..ee890a8f28 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -64613,6 +64613,24 @@ usb:v2304p061E*
+ usb:v2304p2304*
+  ID_MODEL_FROM_DATABASE=1689
+ 
++usb:v2309*
++ ID_VENDOR_FROM_DATABASE=TimeLink Technology Co., Ltd
++
++usb:v2309p1001*
++ ID_MODEL_FROM_DATABASE=Touch Device(hid)
++
++usb:v2309p1005*
++ ID_MODEL_FROM_DATABASE=Touch Device
++
++usb:v2309p1006*
++ ID_MODEL_FROM_DATABASE=Touch Device(2)
++
++usb:v2309p1007*
++ ID_MODEL_FROM_DATABASE=MulTouch Device(hid)
++
++usb:v2309p1009*
++ ID_MODEL_FROM_DATABASE=Touch Device(hid)
++
+ usb:v230D*
+  ID_VENDOR_FROM_DATABASE=Teracom
+ 
+diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
+index aeecb73bbf..8481ff91b9 100644
+--- a/hwdb.d/ma-large.txt
++++ b/hwdb.d/ma-large.txt
+@@ -1238,12 +1238,6 @@ A86D5F     (base 16)		Raisecom Technology CO., LTD
+ 				San Jose  CA  95134
+ 				US
+ 
+-50-5F-B5   (hex)		Askey Computer Corp.
+-505FB5     (base 16)		Askey Computer Corp.
+-				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
+-				NEW TAIPEI     235
+-				TW
+-
+ C4-F0-EC   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ C4F0EC     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				No.5 DongXin Road
+@@ -1322,12 +1316,6 @@ D88DC8     (base 16)		Atil Technology Co., LTD
+ 				Da’an Dist., Taipei City    106
+ 				TW
+ 
+-88-DE-7C   (hex)		Askey Computer Corp.
+-88DE7C     (base 16)		Askey Computer Corp.
+-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+-				NEW TAIPEI CITY    23585
+-				TW
+-
+ A8-E2-C1   (hex)		Texas Instruments
+ A8E2C1     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -2873,12 +2861,6 @@ D0C5D8     (base 16)		LATECOERE
+ 				Toulouse Cedex 5  31 Haute-Garonne  31079
+ 				FR
+ 
+-70-54-B4   (hex)		Vestel Elektronik San ve Tic. A.Ş.
+-7054B4     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
+-				Organize san
+-				Manisa  Turket  45030
+-				TR
+-
+ 20-A6-0C   (hex)		Xiaomi Communications Co Ltd
+ 20A60C     (base 16)		Xiaomi Communications Co Ltd
+ 				The Rainbow City of China Resources
+@@ -36485,12 +36467,6 @@ B43D08     (base 16)		GX International BV
+ 				TOYONAKA CITY,OSAKA    560-0035
+ 				JP
+ 
+-B8-20-8E   (hex)		Panasonic Corporation  Connected Solutions Company
+-B8208E     (base 16)		Panasonic Corporation  Connected Solutions Company
+-				4-1-62 Minoshima, Hakata-ku
+-				Fukuoka-shi  Fukuoka  812-8531
+-				JP
+-
+ 90-38-0C   (hex)		Espressif Inc.
+ 90380C     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -37412,12 +37388,6 @@ DC8084     (base 16)		Apple, Inc.
+ 				Ernakulam  KL  686662
+ 				IN
+ 
+-E4-DA-DF   (hex)		Taicang T&W Electronics
+-E4DADF     (base 16)		Taicang T&W Electronics
+-				89# Jiang Nan RD
+-				Suzhou  Jiangsu  215412
+-				CN
+-
+ 7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
+ 7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+ 				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+@@ -37442,6 +37412,12 @@ C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
+ 				Chicago  IL  60654
+ 				US
+ 
++E4-DA-DF   (hex)		Taicang T&W Electronics
++E4DADF     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
++				CN
++
+ A8-53-7D   (hex)		Mist Systems, Inc.
+ A8537D     (base 16)		Mist Systems, Inc.
+ 				1601 South De Anza Blvd, Suite 248
+@@ -37472,12 +37448,6 @@ E8D322     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
+-302BDC     (base 16)		Top-Unum Electronics Co., LTD
+-				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
+-				New Taipei City 239,  Taiwan  239
+-				CN
+-
+ 8C-15-53   (hex)		Beijing Memblaze Technology Co Ltd
+ 8C1553     (base 16)		Beijing Memblaze Technology Co Ltd
+ 				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
+@@ -37526,6 +37496,24 @@ E8EBD3     (base 16)		Mellanox Technologies, Inc.
+ 				Sunnyvale  CA  94085
+ 				US
+ 
++30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
++302BDC     (base 16)		Top-Unum Electronics Co., LTD
++				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
++				New Taipei City 239,  Taiwan  239
++				CN
++
++90-F7-B2   (hex)		New H3C Technologies Co., Ltd
++90F7B2     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++04-E3-1A   (hex)		Sagemcom Broadband SAS
++04E31A     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
+ C0-06-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ C0060C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -37544,24 +37532,18 @@ B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-90-F7-B2   (hex)		New H3C Technologies Co., Ltd
+-90F7B2     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
+-
+-04-E3-1A   (hex)		Sagemcom Broadband SAS
+-04E31A     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+ 6C-99-9D   (hex)		Amazon Technologies Inc.
+ 6C999D     (base 16)		Amazon Technologies Inc.
+ 				P.O Box 8102 
+ 				Reno  NV  89507
+ 				US
+ 
++6C-93-08   (hex)		IEEE Registration Authority
++6C9308     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
+ 7C-6A-60   (hex)		China Mobile Group Device Co.,Ltd.
+ 7C6A60     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				32 Xuanwumen West Street,Xicheng District
+@@ -37580,14 +37562,20 @@ B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				York    YO30 4RY
+ 				GB
+ 
+-9C-A2-F4   (hex)		TP-Link Corporation Limited
+-9CA2F4     (base 16)		TP-Link Corporation Limited
++D8-E2-DF   (hex)		Microsoft Corporation
++D8E2DF     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
++1C-61-B4   (hex)		TP-Link Corporation Limited
++1C61B4     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+ 
+-1C-61-B4   (hex)		TP-Link Corporation Limited
+-1C61B4     (base 16)		TP-Link Corporation Limited
++9C-A2-F4   (hex)		TP-Link Corporation Limited
++9CA2F4     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+@@ -37598,29 +37586,23 @@ B4695F     (base 16)		TCT mobile ltd
+ 				Hui Zhou  Guang Dong  516006
+ 				CN
+ 
+-D8-E2-DF   (hex)		Microsoft Corporation
+-D8E2DF     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
+-				US
+-
+-6C-93-08   (hex)		IEEE Registration Authority
+-6C9308     (base 16)		IEEE Registration Authority
+-				445 Hoes Lane
+-				Piscataway  NJ  08554
+-				US
+-
+ 38-8F-30   (hex)		Samsung Electronics Co.,Ltd
+ 388F30     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
++A0-44-66   (hex)		Intellics
++A04466     (base 16)		Intellics
++				697, Pangyo-ro, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13511
++				KR
++
++44-6D-7F   (hex)		Amazon Technologies Inc.
++446D7F     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno    89507
++				US
+ 
+ 84-C6-92   (hex)		Texas Instruments
+ 84C692     (base 16)		Texas Instruments
+@@ -37640,40 +37622,10 @@ D8E2DF     (base 16)		Microsoft Corporation
+ 				London    E14 5EY
+ 				GB
+ 
+-A0-44-66   (hex)		Intellics
+-A04466     (base 16)		Intellics
+-				697, Pangyo-ro, Bundang-gu
+-				Seongnam-si  Gyeonggi-do  13511
+-				KR
+-
+-CC-66-18   (hex)		Adtran Inc
+-CC6618     (base 16)		Adtran Inc
+-				901 Explorer Blvd.
+-				Huntsville  AL  35806-2807
+-				US
+-
+-C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+-C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+-50-42-89   (hex)		zte corporation
+-504289     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+-30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
+ 				CN
+ 
+ C0-6D-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+@@ -37682,18 +37634,6 @@ C06DED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
+-44-6D-7F   (hex)		Amazon Technologies Inc.
+-446D7F     (base 16)		Amazon Technologies Inc.
+-				P.O Box 8102 
+-				Reno    89507
+-				US
+-
+-E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+-E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+-				No.6, 4th Yunpu Road, Yunpu industry District
+-				Guangzhou  Guangdong  510530
+-				CN
+-
+ 90-93-5A   (hex)		ARRIS Group, Inc.
+ 90935A     (base 16)		ARRIS Group, Inc.
+ 				6450 Sequence Drive
+@@ -37712,12 +37652,42 @@ AC8FA9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Sunnyvale  CA  94089
+ 				US
+ 
++C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++50-42-89   (hex)		zte corporation
++504289     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++44-29-1E   (hex)		AltoBeam (China) Inc.
++44291E     (base 16)		AltoBeam (China) Inc.
++				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
++				Beijing  Beijing  100083
++				CN
++
+ 24-EB-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 24EBED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
++30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
+ AC-51-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -37730,22 +37700,16 @@ AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+-				Chongqing   China  401120
+-				CN
+-
+-A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
+-A8C98A     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
++CC-66-18   (hex)		Adtran Inc
++CC6618     (base 16)		Adtran Inc
++				901 Explorer Blvd.
++				Huntsville  AL  35806-2807
++				US
+ 
+-44-29-1E   (hex)		AltoBeam (China) Inc.
+-44291E     (base 16)		AltoBeam (China) Inc.
+-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+-				Beijing  Beijing  100083
++E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
++E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
++				No.6, 4th Yunpu Road, Yunpu industry District
++				Guangzhou  Guangdong  510530
+ 				CN
+ 
+ DC-8E-95   (hex)		Silicon Laboratories
+@@ -37754,12 +37718,6 @@ DC8E95     (base 16)		Silicon Laboratories
+ 				Austin  TX  78701
+ 				US
+ 
+-7C-EF-40   (hex)		Nextorage Corporation
+-7CEF40     (base 16)		Nextorage Corporation
+-				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
+-				Kawasaki City  Kanagawa  210-0007
+-				JP
+-
+ 28-BE-43   (hex)		vivo Mobile Communication Co., Ltd.
+ 28BE43     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				No.1, vivo Road, Chang'an
+@@ -37772,11 +37730,11 @@ DC8E95     (base 16)		Silicon Laboratories
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+-2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+-				Werinherstrasse 91
+-				München  Bavaria  D-81541
+-				DE
++F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
+ 
+ B0-1F-8C   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+@@ -37784,11 +37742,11 @@ B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				Santa Clara  CA  95054
+ 				US
+ 
+-C0-E0-1C   (hex)		IoT Security Group, SL
+-C0E01C     (base 16)		IoT Security Group, SL
+-				Calle Pez Dorado, 27, local 2
+-				Torremolinos  Malaga  29620
+-				ES
++A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
++A8C98A     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
+ 
+ 00-26-04   (hex)		WorldCast Systems
+ 002604     (base 16)		WorldCast Systems
+@@ -37796,23 +37754,11 @@ C0E01C     (base 16)		IoT Security Group, SL
+ 				Mérignac    33700
+ 				FR
+ 
+-00-CB-7A   (hex)		Technicolor CH USA Inc.
+-00CB7A     (base 16)		Technicolor CH USA Inc.
+-				5030 Sugarloaf Parkway Bldg 6 
+-				Lawrenceville  GA  30044
+-				US
+-
+-F8-AB-82   (hex)		Xiaomi Communications Co Ltd
+-F8AB82     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-EC-30-B3   (hex)		Xiaomi Communications Co Ltd
+-EC30B3     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
++7C-EF-40   (hex)		Nextorage Corporation
++7CEF40     (base 16)		Nextorage Corporation
++				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
++				Kawasaki City  Kanagawa  210-0007
++				JP
+ 
+ 1C-AF-4A   (hex)		Samsung Electronics Co.,Ltd
+ 1CAF4A     (base 16)		Samsung Electronics Co.,Ltd
+@@ -37826,17 +37772,17 @@ C8120B     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
+-90-2C-FB   (hex)		CanTops Co,.Ltd.
+-902CFB     (base 16)		CanTops Co,.Ltd.
+-				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
+-				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
+-				KR
++28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
++2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
++				Werinherstrasse 91
++				München  Bavaria  D-81541
++				DE
+ 
+-A8-A2-37   (hex)		Arcadyan Corporation
+-A8A237     (base 16)		Arcadyan Corporation
+-				No.8, Sec.2, Guangfu Rd.
+-				Hsinchu City  Hsinchu  30071
+-				TW
++C0-E0-1C   (hex)		IoT Security Group, SL
++C0E01C     (base 16)		IoT Security Group, SL
++				Calle Pez Dorado, 27, local 2
++				Torremolinos  Malaga  29620
++				ES
+ 
+ 00-00-BD   (hex)		RYOSEI, Ltd.
+ 0000BD     (base 16)		RYOSEI, Ltd.
+@@ -37844,29 +37790,35 @@ A8A237     (base 16)		Arcadyan Corporation
+ 				Amagasaki-shi  Hyogo   660-0834
+ 				JP
+ 
++00-CB-7A   (hex)		Technicolor CH USA Inc.
++00CB7A     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
+ AC-CC-FC   (hex)		Amazon Technologies Inc.
+ ACCCFC     (base 16)		Amazon Technologies Inc.
+ 				P.O Box 8102 
+ 				Reno  NV  89507
+ 				US
+ 
+-08-E6-3B   (hex)		zte corporation
+-08E63B     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
++90-2C-FB   (hex)		CanTops Co,.Ltd.
++902CFB     (base 16)		CanTops Co,.Ltd.
++				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
++				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
++				KR
+ 
+-88-C1-74   (hex)		zte corporation
+-88C174     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++F8-AB-82   (hex)		Xiaomi Communications Co Ltd
++F8AB82     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
+ 				CN
+ 
+-C8-9E-61   (hex)		Lyngsoe Systems LTd
+-C89E61     (base 16)		Lyngsoe Systems LTd
+-				101 Simona Dr., Unit 2
+-				Bolton  Ontario  L7E 4E8
+-				CA
++EC-30-B3   (hex)		Xiaomi Communications Co Ltd
++EC30B3     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
+ 
+ 9C-57-BC   (hex)		eero inc.
+ 9C57BC     (base 16)		eero inc.
+@@ -37874,12 +37826,6 @@ C89E61     (base 16)		Lyngsoe Systems LTd
+ 				San Francisco  CA  94107
+ 				US
+ 
+-2C-82-17   (hex)		Apple, Inc.
+-2C8217     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+ 14-2D-4D   (hex)		Apple, Inc.
+ 142D4D     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -37898,6 +37844,12 @@ B8211C     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
++B0-3F-64   (hex)		Apple, Inc.
++B03F64     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ D4-5A-3F   (hex)		Juniper Networks
+ D45A3F     (base 16)		Juniper Networks
+ 				1133 Innovation Way
+@@ -37910,35 +37862,35 @@ E8DC6C     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
++A8-A2-37   (hex)		Arcadyan Corporation
++A8A237     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
+ 
+-B0-3F-64   (hex)		Apple, Inc.
+-B03F64     (base 16)		Apple, Inc.
++2C-82-17   (hex)		Apple, Inc.
++2C8217     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-68-A7-B4   (hex)		Honor Device Co., Ltd.
+-68A7B4     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
++08-E6-3B   (hex)		zte corporation
++08E63B     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
+-80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++88-C1-74   (hex)		zte corporation
++88C174     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
+-A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
++C8-9E-61   (hex)		Lyngsoe Systems LTd
++C89E61     (base 16)		Lyngsoe Systems LTd
++				101 Simona Dr., Unit 2
++				Bolton  Ontario  L7E 4E8
++				CA
+ 
+ E0-28-B1   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ E028B1     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+@@ -37958,6 +37910,12 @@ C08D51     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
++48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
++48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
+ 6C-15-24   (hex)		IEEE Registration Authority
+ 6C1524     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -37970,12 +37928,6 @@ C08D51     (base 16)		Amazon Technologies Inc.
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-00-12-93   (hex)		ABB Switzerland Ltd.
+-001293     (base 16)		ABB Switzerland Ltd.
+-				Via Luserte Sud 9  Quartino 
+-				Quartino     6572
+-				CH
+-
+ C0-E9-11   (hex)		Private
+ C0E911     (base 16)		Private
+ 
+@@ -37991,28 +37943,28 @@ C0E911     (base 16)		Private
+ 				London    SW1Y 4AR
+ 				GB
+ 
+-24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
+-242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+-				Hangzhou  Zhejiang  310024
++68-A7-B4   (hex)		Honor Device Co., Ltd.
++68A7B4     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
+ 				CN
+ 
+-A0-42-D1   (hex)		Huawei Device Co., Ltd.
+-A042D1     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-2C-DC-78   (hex)		Descartes Systems (USA) LLC
+-2CDC78     (base 16)		Descartes Systems (USA) LLC
+-				2030 Powers Ferry Road SE
+-				Atlanta  GA  303339
+-				US
++A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
+ 
+-58-87-9F   (hex)		Huawei Device Co., Ltd.
+-58879F     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
++242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
+ 				CN
+ 
+ E8-D8-7E   (hex)		Amazon Technologies Inc.
+@@ -38021,47 +37973,59 @@ E8D87E     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
++00-12-93   (hex)		ABB Switzerland Ltd.
++001293     (base 16)		ABB Switzerland Ltd.
++				Via Luserte Sud 9  Quartino 
++				Quartino     6572
++				CH
++
+ 9C-1F-CA   (hex)		Hangzhou AlmightyDigit Technology Co., Ltd
+ 9C1FCA     (base 16)		Hangzhou AlmightyDigit Technology Co., Ltd
+ 				Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District
+ 				Hangzhou  Zhejiang   310000
+ 				CN
+ 
+-84-70-D7   (hex)		eero inc.
+-8470D7     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
++2C-DC-78   (hex)		Descartes Systems (USA) LLC
++2CDC78     (base 16)		Descartes Systems (USA) LLC
++				2030 Powers Ferry Road SE
++				Atlanta  GA  303339
+ 				US
+ 
++A0-42-D1   (hex)		Huawei Device Co., Ltd.
++A042D1     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++58-87-9F   (hex)		Huawei Device Co., Ltd.
++58879F     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
+ E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+-58-1D-D8   (hex)		Sagemcom Broadband SAS
+-581DD8     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+ 80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ 806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+-F4-B3-B1   (hex)		Silicon Laboratories
+-F4B3B1     (base 16)		Silicon Laboratories
+-				400 West Cesar Chavez Street
+-				Austin  TX  78701
++84-70-D7   (hex)		eero inc.
++8470D7     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
+ 				US
+ 
+-04-69-8F   (hex)		Juniper Networks
+-04698F     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
++10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++				No.218 Qianwangang Road
++				Qingdao  Shangdong  266510
++				CN
+ 
+ 14-9B-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 149BF3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+@@ -38075,11 +38039,11 @@ F4B3B1     (base 16)		Silicon Laboratories
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
+-10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+-10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+-				No.218 Qianwangang Road
+-				Qingdao  Shangdong  266510
+-				CN
++F4-B3-B1   (hex)		Silicon Laboratories
++F4B3B1     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
+ 
+ B8-50-D8   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+@@ -38087,6 +38051,36 @@ B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Beijing  Beijing  100085
+ 				CN
+ 
++58-1D-D8   (hex)		Sagemcom Broadband SAS
++581DD8     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
++04-69-8F   (hex)		Juniper Networks
++04698F     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++5C-53-C3   (hex)		Ubee Interactive Co., Limited
++5C53C3     (base 16)		Ubee Interactive Co., Limited
++				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
++				North Point    00000
++				HK
++
++AC-5A-F0   (hex)		LG Electronics
++AC5AF0     (base 16)		LG Electronics
++				222 LG-ro, JINWI-MYEON
++				Pyeongtaek-si  Gyeonggi-do  451-713
++				KR
++
++EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
+ C0-9F-51   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ 				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+@@ -38105,11 +38099,17 @@ A0CDF3     (base 16)		Murata Manufacturing Co., Ltd.
+ 				Nagaokakyo-shi  Kyoto  617-8555
+ 				JP
+ 
+-B4-8A-0A   (hex)		Espressif Inc.
+-B48A0A     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
++24-29-34   (hex)		Google, Inc.
++242934     (base 16)		Google, Inc.
++				1600 Amphitheatre Parkway
++				Mountain View  CA  94043
++				US
++
++38-0A-4F   (hex)		PRACHI ENTERPRISES
++380A4F     (base 16)		PRACHI ENTERPRISES
++				B-141, 2nd FLOOR SECTOR-6 NOIDA
++				NOIDA  UTTARPRADESH  201301
++				IN
+ 
+ C8-3A-1B   (hex)		Toshiba TEC Corporation Inc
+ C83A1B     (base 16)		Toshiba TEC Corporation Inc
+@@ -38117,23 +38117,29 @@ C83A1B     (base 16)		Toshiba TEC Corporation Inc
+ 				Shinagawa-ku  Tokyo  141-8664
+ 				JP
+ 
+-EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++B4-8A-0A   (hex)		Espressif Inc.
++B48A0A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
+ 				CN
+ 
+-AC-5A-F0   (hex)		LG Electronics
+-AC5AF0     (base 16)		LG Electronics
+-				222 LG-ro, JINWI-MYEON
+-				Pyeongtaek-si  Gyeonggi-do  451-713
++80-19-70   (hex)		Samsung Electronics Co.,Ltd
++801970     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-5C-53-C3   (hex)		Ubee Interactive Co., Limited
+-5C53C3     (base 16)		Ubee Interactive Co., Limited
+-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+-				North Point    00000
+-				HK
++E0-F7-28   (hex)		Amazon Technologies Inc.
++E0F728     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
+ 
+ 24-32-AE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 2432AE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+@@ -38165,12 +38171,6 @@ AC936A     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
+-
+ 7C-4C-A5   (hex)		SKY UK LIMITED
+ 7C4CA5     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -38195,41 +38195,17 @@ C03E0F     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-24-29-34   (hex)		Google, Inc.
+-242934     (base 16)		Google, Inc.
+-				1600 Amphitheatre Parkway
+-				Mountain View  CA  94043
+-				US
+-
+-38-0A-4F   (hex)		PRACHI ENTERPRISES
+-380A4F     (base 16)		PRACHI ENTERPRISES
+-				B-141, 2nd FLOOR SECTOR-6 NOIDA
+-				NOIDA  UTTARPRADESH  201301
+-				IN
+-
+-80-19-70   (hex)		Samsung Electronics Co.,Ltd
+-801970     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+-E0-F7-28   (hex)		Amazon Technologies Inc.
+-E0F728     (base 16)		Amazon Technologies Inc.
+-				P.O Box 8102 
+-				Reno  NV  89507
+-				US
+-
+-B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
+-B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
+-				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
+-				xiamen  fujian  361000
+-				CN
++D0-58-FC   (hex)		SKY UK LIMITED
++D058FC     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
+ 
+-34-85-18   (hex)		Espressif Inc.
+-348518     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
++90-02-18   (hex)		SKY UK LIMITED
++900218     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
+ 
+ D4-DA-CD   (hex)		SKY UK LIMITED
+ D4DACD     (base 16)		SKY UK LIMITED
+@@ -38255,6 +38231,66 @@ B04530     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
++A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++7C-DE-78   (hex)		New H3C Technologies Co., Ltd
++7CDE78     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++3C-E0-64   (hex)		Texas Instruments
++3CE064     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++E0-92-8F   (hex)		Texas Instruments
++E0928F     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++CC-03-7B   (hex)		Texas Instruments
++CC037B     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++58-1C-F8   (hex)		Intel Corporate
++581CF8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++AC-19-8E   (hex)		Intel Corporate
++AC198E     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++C8-5E-A9   (hex)		Intel Corporate
++C85EA9     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
++B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
++				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
++				xiamen  fujian  361000
++				CN
++
++34-85-18   (hex)		Espressif Inc.
++348518     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
+ EC-E6-A2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ ECE6A2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				No.5 DongXin Road
+@@ -38273,24 +38309,12 @@ E02E0B     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
+-A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
++CC-29-BD   (hex)		zte corporation
++CC29BD     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
+-D0-58-FC   (hex)		SKY UK LIMITED
+-D058FC     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+-90-02-18   (hex)		SKY UK LIMITED
+-900218     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ 38-5C-FB   (hex)		Silicon Laboratories
+ 385CFB     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+@@ -38303,65 +38327,23 @@ C43D1A     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-BC-F8-8B   (hex)		zte corporation
+-BCF88B     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+ 68-53-9D   (hex)		EM Microelectronic
+ 68539D     (base 16)		EM Microelectronic
+ 				Rue des Sors 3
+ 				Marin-Epagnier  Neuchatel  2074
+ 				CH
+ 
+-E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+-E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+-				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
+-				SHEN ZHEN  GUANG DONG  518100
+-				CN
+-
+ C8-BF-4C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+ 				Beijing  Beijing  100085
+ 				CN
+ 
+-58-1C-F8   (hex)		Intel Corporate
+-581CF8     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-AC-19-8E   (hex)		Intel Corporate
+-AC198E     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-C8-5E-A9   (hex)		Intel Corporate
+-C85EA9     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-3C-E0-64   (hex)		Texas Instruments
+-3CE064     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-E0-92-8F   (hex)		Texas Instruments
+-E0928F     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-CC-03-7B   (hex)		Texas Instruments
+-CC037B     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
++E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
++				SHEN ZHEN  GUANG DONG  518100
++				CN
+ 
+ E0-51-D8   (hex)		China Dragon Technology Limited
+ E051D8     (base 16)		China Dragon Technology Limited
+@@ -38369,17 +38351,17 @@ E051D8     (base 16)		China Dragon Technology Limited
+ 				Shenzhen  Guangdong  518104
+ 				CN
+ 
+-CC-29-BD   (hex)		zte corporation
+-CC29BD     (base 16)		zte corporation
++BC-F8-8B   (hex)		zte corporation
++BCF88B     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-7C-DE-78   (hex)		New H3C Technologies Co., Ltd
+-7CDE78     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
++5C-60-BA   (hex)		HP Inc.
++5C60BA     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
++				US
+ 
+ E0-EF-02   (hex)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+ E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+@@ -38393,18 +38375,6 @@ E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
+-20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
+-
+-E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
+-E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
+-				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
+-				Chengdu  Sichuan  610000
+-				CN
+-
+ A8-AB-B5   (hex)		Apple, Inc.
+ A8ABB5     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -38423,11 +38393,29 @@ A8ABB5     (base 16)		Apple, Inc.
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-B0-67-B5   (hex)		Apple, Inc.
+-B067B5     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
++
++04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
++A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
++				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
++				Guangzhou  Guangdong  510640
++				CN
++
++E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
++E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
++				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
++				Chengdu  Sichuan  610000
++				CN
+ 
+ 5C-52-84   (hex)		Apple, Inc.
+ 5C5284     (base 16)		Apple, Inc.
+@@ -38447,17 +38435,11 @@ C0956D     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
+-
+-74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+-74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+-				Phase 3, Bayan Lepas FIZ
+-				Bayan Lepas  Penang  11900
+-				MY
++20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
++209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
+ 
+ EC-A1-38   (hex)		Amazon Technologies Inc.
+ ECA138     (base 16)		Amazon Technologies Inc.
+@@ -38465,24 +38447,90 @@ ECA138     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-5C-60-BA   (hex)		HP Inc.
+-5C60BA     (base 16)		HP Inc.
+-				10300 Energy Dr
+-				Spring  TX  77389
++B0-67-B5   (hex)		Apple, Inc.
++B067B5     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
+ 				US
+ 
+-A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
+-A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
+-				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
+-				Guangzhou  Guangdong  510640
+-				CN
+-
+ 90-0A-62   (hex)		Inventus Power Eletronica do Brasil LTDA
+ 900A62     (base 16)		Inventus Power Eletronica do Brasil LTDA
+ 				Av Buriti, 4285 Distrito Industrial
+ 				Manaus  Amazonas  69075000
+ 				BR
+ 
++70-54-B4   (hex)		Vestel Elektronik San ve Tic. A.S.
++7054B4     (base 16)		Vestel Elektronik San ve Tic. A.S.
++				Organize san
++				Manisa  Turket  45030
++				TR
++
++04-BF-1B   (hex)		Dell Inc.
++04BF1B     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
++08-1A-1E   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++081A1E     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++50-5F-B5   (hex)		ASKEY COMPUTER CORP
++505FB5     (base 16)		ASKEY COMPUTER CORP
++				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
++				NEW TAIPEI     235
++				TW
++
++88-DE-7C   (hex)		ASKEY COMPUTER CORP
++88DE7C     (base 16)		ASKEY COMPUTER CORP
++				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
++				NEW TAIPEI CITY    23585
++				TW
++
++AC-31-84   (hex)		Huawei Device Co., Ltd.
++AC3184     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++50-3F-50   (hex)		Huawei Device Co., Ltd.
++503F50     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++48-1C-B9   (hex)		SZ DJI TECHNOLOGY CO.,LTD
++481CB9     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
++				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
++				shenzhen  guangdong  518057
++				CN
++
++B8-20-8E   (hex)		Panasonic Connect Co., Ltd.
++B8208E     (base 16)		Panasonic Connect Co., Ltd.
++				4-1-62 Minoshima, Hakata-ku
++				Fukuoka-shi  Fukuoka  812-8531
++				JP
++
++3C-A7-AE   (hex)		zte corporation
++3CA7AE     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++80-64-6F   (hex)		Espressif Inc.
++80646F     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++04-57-47   (hex)		GoPro
++045747     (base 16)		GoPro
++				3000 Clearview Way
++				San Mateo  CA  94402
++				US
++
+ 9C-FF-C2   (hex)		AVI Systems GmbH
+ 9CFFC2     (base 16)		AVI Systems GmbH
+ 				Dr. Franz Wilhelmstraße 2A
+@@ -40073,12 +40121,6 @@ B8A175     (base 16)		Roku, Inc.
+ 				Saratoga  CA  95070
+ 				US
+ 
+-CC-D3-C1   (hex)		Vestel Elektronik San ve Tic. A.Ş.
+-CCD3C1     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
+-				Organize san
+-				Manisa  Turket  45030
+-				TR
+-
+ 0C-D0-F8   (hex)		Cisco Systems, Inc
+ 0CD0F8     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -40235,12 +40277,6 @@ A45046     (base 16)		Xiaomi Communications Co Ltd
+ 				NO.68, Qinghe Middle Street  Haidian District, Beijing  100085
+ 				CN
+ 
+-1C-24-CD   (hex)		Askey Computer Corp.
+-1C24CD     (base 16)		Askey Computer Corp.
+-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+-				NEW TAIPEI CITY    23585
+-				TW
+-
+ 00-7C-2D   (hex)		Samsung Electronics Co.,Ltd
+ 007C2D     (base 16)		Samsung Electronics Co.,Ltd
+ 				129, Samsung-ro, Youngtongl-Gu
+@@ -40616,12 +40652,6 @@ E43493     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dania Beach  FL  33004
+ 				US
+ 
+-4C-36-4E   (hex)		Panasonic Corporation  Connected Solutions Company
+-4C364E     (base 16)		Panasonic Corporation  Connected Solutions Company
+-				4-1-62 Minoshima, Hakata-ku
+-				Fukuoka-shi  Fukuoka  812-8531
+-				JP
+-
+ BC-A5-8B   (hex)		Samsung Electronics Co.,Ltd
+ BCA58B     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -72272,12 +72302,6 @@ AC78D1     (base 16)		Juniper Networks
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-EC-BE-5F   (hex)		Vestel Elektronik San ve Tic. A.Ş.
+-ECBE5F     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
+-				Organize san
+-				Manisa  Turket  45030
+-				TR
+-
+ A4-42-3B   (hex)		Intel Corporate
+ A4423B     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -75428,24 +75452,6 @@ D850A1     (base 16)		Hunan Danuo Technology Co.,LTD
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
+-7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+-00-C3-0A   (hex)		Xiaomi Communications Co Ltd
+-00C30A     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-88-52-EB   (hex)		Xiaomi Communications Co Ltd
+-8852EB     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+ B4-28-75   (hex)		Futecho Solutions Private Limited
+ B42875     (base 16)		Futecho Solutions Private Limited
+ 				504, Commercial Complex, Savitri Cinema Compound, GK2
+@@ -75464,6 +75470,24 @@ B42875     (base 16)		Futecho Solutions Private Limited
+ 				San Francisco  CA  94107
+ 				US
+ 
++00-C3-0A   (hex)		Xiaomi Communications Co Ltd
++00C30A     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++88-52-EB   (hex)		Xiaomi Communications Co Ltd
++8852EB     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
++7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
++				Shenzhen   guangdong  518053
++				CN
++
+ 00-A0-A2   (hex)		B810 S.R.L.
+ 00A0A2     (base 16)		B810 S.R.L.
+ 				Via E. Lazzaretti 2/1
+@@ -75536,12 +75560,6 @@ DC9A7D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-30-CB-36   (hex)		Belden Singapore Pte. Ltd.
+-30CB36     (base 16)		Belden Singapore Pte. Ltd.
+-				151 Lorong Chuan #05-01 New Tech Park Singapore
+-				Singapore    556741
+-				SG
+-
+ B8-3F-D2   (hex)		Mellanox Technologies, Inc.
+ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				350 Oakmead Parkway, Suite 100 
+@@ -75554,6 +75572,12 @@ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				 Chiyoda-ku  Tokyo  100-0004
+ 				JP
+ 
++30-CB-36   (hex)		Belden Singapore Pte. Ltd.
++30CB36     (base 16)		Belden Singapore Pte. Ltd.
++				151 Lorong Chuan #05-01 New Tech Park Singapore
++				Singapore    556741
++				SG
++
+ 8C-17-59   (hex)		Intel Corporate
+ 8C1759     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -75566,29 +75590,11 @@ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				San Jose  CA  95131
+ 				US
+ 
+-6C-A4-01   (hex)		essensys plc
+-6CA401     (base 16)		essensys plc
+-				Aldgate Tower, Leman Street
+-				London    E1 8FA
+-				GB
+-
+-34-92-C2   (hex)		Square Route Co., Ltd.
+-3492C2     (base 16)		Square Route Co., Ltd.
+-				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
+-				Tokyo  Tokyo  108-0075
+-				JP
+-
+-34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
+-34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
+-				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
+-				Hangzhou    310052
+-				CN
+-
+-64-C2-69   (hex)		eero inc.
+-64C269     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
++BC-6E-6D   (hex)		EM Microelectronic
++BC6E6D     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
+ 
+ B0-4A-6A   (hex)		Samsung Electronics Co.,Ltd
+ B04A6A     (base 16)		Samsung Electronics Co.,Ltd
+@@ -75608,30 +75614,48 @@ A8798D     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
++34-92-C2   (hex)		Square Route Co., Ltd.
++3492C2     (base 16)		Square Route Co., Ltd.
++				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
++				Tokyo  Tokyo  108-0075
++				JP
++
+ 28-3D-C2   (hex)		Samsung Electronics Co.,Ltd
+ 283DC2     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-BC-6E-6D   (hex)		EM Microelectronic
+-BC6E6D     (base 16)		EM Microelectronic
+-				Rue des Sors 3
+-				Marin-Epagnier  Neuchatel  2074
+-				CH
+-
+ 00-D4-9E   (hex)		Intel Corporate
+ 00D49E     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+ 				Kulim  Kedah  09000
+ 				MY
+ 
++6C-A4-01   (hex)		essensys plc
++6CA401     (base 16)		essensys plc
++				Aldgate Tower, Leman Street
++				London    E1 8FA
++				GB
++
+ CC-F3-05   (hex)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+ CCF305     (base 16)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+ 				Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District
+ 				Shenzhen  Guangdong  518126
+ 				CN
+ 
++34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
++34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
++				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
++				Hangzhou    310052
++				CN
++
++64-C2-69   (hex)		eero inc.
++64C269     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
+ AC-2A-A1   (hex)		Cisco Systems, Inc
+ AC2AA1     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -75650,16 +75674,34 @@ F8E94F     (base 16)		Cisco Systems, Inc
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-E0-6C-C5   (hex)		Huawei Device Co., Ltd.
+-E06CC5     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++B8-D6-1A   (hex)		Espressif Inc.
++B8D61A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
+ 				CN
+ 
+-30-96-3B   (hex)		Huawei Device Co., Ltd.
+-30963B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++D8-9C-8E   (hex)		Comcast Cable Corporation
++D89C8E     (base 16)		Comcast Cable Corporation
++				1800 Arch Street
++				Philadelphia  PA  19103
++				US
++
++74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
++				Pin-Jen  Taoyuan  324
++				TW
++
++EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+ 8C-6B-DB   (hex)		Huawei Device Co., Ltd.
+@@ -75686,6 +75728,24 @@ E06CC5     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++E0-6C-C5   (hex)		Huawei Device Co., Ltd.
++E06CC5     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++30-96-3B   (hex)		Huawei Device Co., Ltd.
++30963B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
+ 98-59-7A   (hex)		Intel Corporate
+ 98597A     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -75698,11 +75758,11 @@ E06CC5     (base 16)		Huawei Device Co., Ltd.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-B8-D6-1A   (hex)		Espressif Inc.
+-B8D61A     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
++B4-83-51   (hex)		Intel Corporate
++B48351     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+ 00-25-CA   (hex)		Laird Connectivity
+ 0025CA     (base 16)		Laird Connectivity
+@@ -75710,66 +75770,18 @@ B8D61A     (base 16)		Espressif Inc.
+ 				Cedarburg  WI  53012
+ 				US
+ 
+-90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+-74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+-				Pin-Jen  Taoyuan  324
+-				TW
+-
+-D8-9C-8E   (hex)		Comcast Cable Corporation
+-D89C8E     (base 16)		Comcast Cable Corporation
+-				1800 Arch Street
+-				Philadelphia  PA  19103
+-				US
+-
+ 04-B9-7D   (hex)		AiVIS Co., Itd.
+ 04B97D     (base 16)		AiVIS Co., Itd.
+ 				112, Dumipo-ro, Jung-gu 
+ 				Incheon  Incheon  22394
+ 				KR
+ 
+-BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+-				Nanning  Guangxi  530007
+-				CN
+-
+ C4-C0-63   (hex)		New H3C Technologies Co., Ltd
+ C4C063     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
+-EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+-E0-79-8D   (hex)		Silicon Laboratories
+-E0798D     (base 16)		Silicon Laboratories
+-				400 West Cesar Chavez Street
+-				Austin  TX  78701
+-				US
+-
+-B4-83-51   (hex)		Intel Corporate
+-B48351     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-34-AD-61   (hex)		CELESTICA INC.
+-34AD61     (base 16)		CELESTICA INC.
+-				1900-5140 Yonge Street PO Box 42   
+-				Toronto  Ontario  M2N 6L7
+-				CA
+-
+ 54-43-B2   (hex)		Espressif Inc.
+ 5443B2     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -75782,12 +75794,18 @@ C0DD8A     (base 16)		Facebook Technologies, LLC
+ 				Menlo Park  CA  94025
+ 				US
+ 
+-AC-D3-1D   (hex)		Cisco Meraki
+-ACD31D     (base 16)		Cisco Meraki
+-				500 Terry A. Francois Blvd
+-				San Francisco    94158
++E0-79-8D   (hex)		Silicon Laboratories
++E0798D     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
+ 				US
+ 
++34-AD-61   (hex)		CELESTICA INC.
++34AD61     (base 16)		CELESTICA INC.
++				1900-5140 Yonge Street PO Box 42   
++				Toronto  Ontario  M2N 6L7
++				CA
++
+ 10-96-1A   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+ 10961A     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+ 				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+@@ -75800,18 +75818,6 @@ BCE9E2     (base 16)		Brocade Communications Systems LLC
+ 				San Jose  CA  95131
+ 				US
+ 
+-00-18-48   (hex)		Vecima Networks Inc.
+-001848     (base 16)		Vecima Networks Inc.
+-				150 Cardinal Place 
+-				Saskatoon  SK  S7L 6H7
+-				CA
+-
+-2C-55-3C   (hex)		Vecima Networks Inc.
+-2C553C     (base 16)		Vecima Networks Inc.
+-				150 Cardinal Place 
+-				Saskatoon  SK  S7L 6H7
+-				CA
+-
+ AC-BF-71   (hex)		Bose Corporation
+ ACBF71     (base 16)		Bose Corporation
+ 				The Mountain
+@@ -75824,6 +75830,12 @@ ACBF71     (base 16)		Bose Corporation
+ 				Piscataway  NJ  08554
+ 				US
+ 
++AC-D3-1D   (hex)		Cisco Meraki
++ACD31D     (base 16)		Cisco Meraki
++				500 Terry A. Francois Blvd
++				San Francisco    94158
++				US
++
+ 74-84-69   (hex)		Nintendo Co.,Ltd
+ 748469     (base 16)		Nintendo Co.,Ltd
+ 				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+@@ -75866,6 +75878,18 @@ B41974     (base 16)		Apple, Inc.
+ 				Shenzhen  Guangdong  518117
+ 				CN
+ 
++00-18-48   (hex)		Vecima Networks Inc.
++001848     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
++2C-55-3C   (hex)		Vecima Networks Inc.
++2C553C     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
+ 60-95-BD   (hex)		Apple, Inc.
+ 6095BD     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -75914,30 +75938,24 @@ D0989C     (base 16)		ConMet
+ 				Vancouver    WA  98661
+ 				US
+ 
+-1C-A4-10   (hex)		Amlogic, Inc.
+-1CA410     (base 16)		Amlogic, Inc.
+-				2518 Mission College Blvd, Suite 120
+-				Santa Clara  CA  95054
+-				US
+-
+ 24-26-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 2426D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-70-A6-BD   (hex)		Honor Device Co., Ltd.
+-70A6BD     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
+-				CN
+-
+ EC-81-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ EC819C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
++1C-A4-10   (hex)		Amlogic, Inc.
++1CA410     (base 16)		Amlogic, Inc.
++				2518 Mission College Blvd, Suite 120
++				Santa Clara  CA  95054
++				US
++
+ 20-0B-16   (hex)		Texas Instruments
+ 200B16     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -75962,23 +75980,23 @@ F85548     (base 16)		Texas Instruments
+ 				Dallas  TX  75243
+ 				US
+ 
++70-A6-BD   (hex)		Honor Device Co., Ltd.
++70A6BD     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
+ 4C-9E-6C   (hex)		BROADEX TECHNOLOGIES CO.LTD
+ 4C9E6C     (base 16)		BROADEX TECHNOLOGIES CO.LTD
+ 				NO.306 YATAI ROAD
+ 				JIAXING  ZHEJIANG  314006
+ 				CN
+ 
+-AC-A3-2F   (hex)		Solidigm Technology
+-ACA32F     (base 16)		Solidigm Technology
+-				1921 Corporate Center Circle, Suite 3B
+-				Longmont    80501
+-				US
+-
+-AC-71-2E   (hex)		Fortinet, Inc.
+-AC712E     (base 16)		Fortinet, Inc.
+-				899 Kifer Road
+-				Sunnyvale    94086
+-				US
++54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
++542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
++				Bldg 1,No.401,Caobao RD,Xuhui Dist
++				Shanghai    200233
++				CN
+ 
+ E4-B6-33   (hex)		Wuxi Stars Microsystem Technology Co., Ltd
+ E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
+@@ -75998,16 +76016,10 @@ E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-98-D9-3D   (hex)		Demant Enterprise A/S
+-98D93D     (base 16)		Demant Enterprise A/S
+-				Kongebakken 9
+-				Smorum    2765
+-				DK
+-
+-B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
+-B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+-				Hangzhou  Zhejiang  310024
++54-E1-5B   (hex)		Huawei Device Co., Ltd.
++54E15B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+ AC-C4-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+@@ -76016,17 +76028,11 @@ ACC4BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-54-E1-5B   (hex)		Huawei Device Co., Ltd.
+-54E15B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
+-542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
+-				Bldg 1,No.401,Caobao RD,Xuhui Dist
+-				Shanghai    200233
+-				CN
++AC-A3-2F   (hex)		Solidigm Technology
++ACA32F     (base 16)		Solidigm Technology
++				1921 Corporate Center Circle, Suite 3B
++				Longmont    80501
++				US
+ 
+ C4-A1-0E   (hex)		IEEE Registration Authority
+ C4A10E     (base 16)		IEEE Registration Authority
+@@ -76034,6 +76040,12 @@ C4A10E     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
++AC-71-2E   (hex)		Fortinet, Inc.
++AC712E     (base 16)		Fortinet, Inc.
++				899 Kifer Road
++				Sunnyvale    94086
++				US
++
+ 0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ 0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -76064,6 +76076,18 @@ B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				HongKong    999077
+ 				HK
+ 
++98-D9-3D   (hex)		Demant Enterprise A/S
++98D93D     (base 16)		Demant Enterprise A/S
++				Kongebakken 9
++				Smorum    2765
++				DK
++
++B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
++B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
++				CN
++
+ 88-F2-BD   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 88F2BD     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 				Midea Global Innovation Center,Beijiao Town,Shunde
+@@ -76082,12 +76106,6 @@ A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				NEW DELHI  DELHI  110015
+ 				IN
+ 
+-70-AC-08   (hex)		Silicon Laboratories
+-70AC08     (base 16)		Silicon Laboratories
+-				400 West Cesar Chavez Street
+-				Austin  TX  78701
+-				US
+-
+ 2C-07-F6   (hex)		SKG Health Technologies Co., Ltd. 
+ 2C07F6     (base 16)		SKG Health Technologies Co., Ltd. 
+ 				23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China
+@@ -76106,24 +76124,6 @@ A47EFA     (base 16)		Withings
+ 				Issy-les-Moulineaux    92130
+ 				FR
+ 
+-3C-26-E4   (hex)		Cisco Systems, Inc
+-3C26E4     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-38-91-B7   (hex)		Cisco Systems, Inc
+-3891B7     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-34-5D-A8   (hex)		Cisco Systems, Inc
+-345DA8     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+ 78-91-DE   (hex)		Guangdong ACIGA Science&Technology Co.,Ltd
+ 7891DE     (base 16)		Guangdong ACIGA Science&Technology Co.,Ltd
+ 				L203 Biguiyuan International Club, Beijiao Town, Shunde District
+@@ -76136,6 +76136,12 @@ E0806B     (base 16)		Xiaomi Communications Co Ltd
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
++70-AC-08   (hex)		Silicon Laboratories
++70AC08     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
+ 70-50-E7   (hex)		IEEE Registration Authority
+ 7050E7     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -76160,6 +76166,24 @@ B0E45C     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
++3C-26-E4   (hex)		Cisco Systems, Inc
++3C26E4     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++38-91-B7   (hex)		Cisco Systems, Inc
++3891B7     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++34-5D-A8   (hex)		Cisco Systems, Inc
++345DA8     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
+ BC-4C-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -76172,18 +76196,6 @@ BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+-6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+ 68-7F-F0   (hex)		TP-Link Corporation Limited
+ 687FF0     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+@@ -76202,6 +76214,18 @@ DC360C     (base 16)		Hitron Technologies. Inc
+ 				Bayan Lepas  Penang  11900
+ 				MY
+ 
++C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++60-CF-69   (hex)		meerecompany
++60CF69     (base 16)		meerecompany
++				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
++				Hwaseong-si    18630
++				KR
++
+ 4C-62-7B   (hex)		SmartCow AI Technologies Taiwan Ltd.
+ 4C627B     (base 16)		SmartCow AI Technologies Taiwan Ltd.
+ 				16F., No. 102, Songlong Rd., Xinyi Dist.,
+@@ -76220,6 +76244,18 @@ F82B7F     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++40-C3-BC   (hex)		Huawei Device Co., Ltd.
++40C3BC     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
++34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
++				#31 Jangja-ro, Namdong-gu
++				Incheon-si    21532
++				KR
++
+ D8-68-A0   (hex)		Samsung Electronics Co.,Ltd
+ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -76232,10 +76268,10 @@ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-40-C3-BC   (hex)		Huawei Device Co., Ltd.
+-40C3BC     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
+ 				CN
+ 
+ 28-53-E0   (hex)		Sintela Ltd
+@@ -76244,78 +76280,66 @@ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				Pill  Bristol  BS20 0DH
+ 				GB
+ 
+-60-CF-69   (hex)		meerecompany
+-60CF69     (base 16)		meerecompany
+-				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
+-				Hwaseong-si    18630
+-				KR
+-
+-34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
+-34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
+-				#31 Jangja-ro, Namdong-gu
+-				Incheon-si    21532
+-				KR
+-
+ F4-93-9F   (hex)		Hon Hai Precision Industry Co., Ltd.
+ F4939F     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+ 				ShenZhen  GuangDong  518109
+ 				CN
+ 
+-A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
+-A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
++AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
+-38-F0-C8   (hex)		Logitech
+-38F0C8     (base 16)		Logitech
+-				7700 Gateway Blvd
+-				Newark  CA  94560
+-				US
+-
+ BC-5D-A3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ BC5DA3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+ 				Chengdu  Sichuan  611330
+ 				CN
+ 
+-80-75-1F   (hex)		SKY UK LIMITED
+-80751F     (base 16)		SKY UK LIMITED
++80-72-15   (hex)		SKY UK LIMITED
++807215     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-C0-A3-6E   (hex)		SKY UK LIMITED
+-C0A36E     (base 16)		SKY UK LIMITED
++B0-3E-51   (hex)		SKY UK LIMITED
++B03E51     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-00-A3-88   (hex)		SKY UK LIMITED
+-00A388     (base 16)		SKY UK LIMITED
++80-75-1F   (hex)		SKY UK LIMITED
++80751F     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
++A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
+ 				CN
+ 
+-80-72-15   (hex)		SKY UK LIMITED
+-807215     (base 16)		SKY UK LIMITED
++C0-A3-6E   (hex)		SKY UK LIMITED
++C0A36E     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-B0-3E-51   (hex)		SKY UK LIMITED
+-B03E51     (base 16)		SKY UK LIMITED
++00-A3-88   (hex)		SKY UK LIMITED
++00A388     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
++38-F0-C8   (hex)		Logitech
++38F0C8     (base 16)		Logitech
++				7700 Gateway Blvd
++				Newark  CA  94560
++				US
++
+ 1C-EF-03   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+ 1CEF03     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+ 				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+@@ -76328,12 +76352,6 @@ B03E51     (base 16)		SKY UK LIMITED
+ 				KYOTO  KYOTO  601-8501
+ 				JP
+ 
+-54-45-38   (hex)		Texas Instruments
+-544538     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+ 74-13-EA   (hex)		Intel Corporate
+ 7413EA     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -76358,53 +76376,35 @@ B0DCEF     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-2C-A7-74   (hex)		Texas Instruments
+-2CA774     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-DC-F3-1C   (hex)		Texas Instruments
+-DCF31C     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+ 28-BC-05   (hex)		BLU Products Inc
+ 28BC05     (base 16)		BLU Products Inc
+ 				10814 NW 33rd Street
+ 				Miami  FL  33172
+ 				US
+ 
++2C-A7-74   (hex)		Texas Instruments
++2CA774     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
+ 18-4E-03   (hex)		HMD Global Oy
+ 184E03     (base 16)		HMD Global Oy
+ 				Bertel Jungin aukio 9
+ 				Espoo    02600
+ 				FI
+ 
+-40-22-D8   (hex)		Espressif Inc.
+-4022D8     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+ E0-08-71   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+ E00871     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+ 				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+ 				dongguan   guangdong  523000
+ 				CN
+ 
+-90-65-60   (hex)		EM Microelectronic
+-906560     (base 16)		EM Microelectronic
+-				Rue des Sors 3
+-				Marin-Epagnier  Neuchatel  2074
+-				CH
+-
+-A0-FB-83   (hex)		Honor Device Co., Ltd.
+-A0FB83     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
+-				CN
++9C-95-6E   (hex)		Microchip Technology Inc.
++9C956E     (base 16)		Microchip Technology Inc.
++				2355 W. Chandler Blvd.
++				Chandler  AZ  85224
++				US
+ 
+ DC-0B-09   (hex)		Cisco Systems, Inc
+ DC0B09     (base 16)		Cisco Systems, Inc
+@@ -76418,17 +76418,17 @@ DC0B09     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-88-0A-A3   (hex)		Juniper Networks
+-880AA3     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
++DC-F3-1C   (hex)		Texas Instruments
++DCF31C     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
+ 				US
+ 
+-04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
+-04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
++54-45-38   (hex)		Texas Instruments
++544538     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
+ 
+ 78-C2-13   (hex)		Sagemcom Broadband SAS
+ 78C213     (base 16)		Sagemcom Broadband SAS
+@@ -76436,6 +76436,12 @@ DC0B09     (base 16)		Cisco Systems, Inc
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
++40-22-D8   (hex)		Espressif Inc.
++4022D8     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
+ A0-36-BC   (hex)		ASUSTek COMPUTER INC.
+ A036BC     (base 16)		ASUSTek COMPUTER INC.
+ 				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+@@ -76448,29 +76454,23 @@ A036BC     (base 16)		ASUSTek COMPUTER INC.
+ 				Cranbrook  British Columbia  V1C 2L9
+ 				CA
+ 
+-9C-95-6E   (hex)		Microchip Technology Inc.
+-9C956E     (base 16)		Microchip Technology Inc.
+-				2355 W. Chandler Blvd.
+-				Chandler  AZ  85224
+-				US
+-
+ 84-0B-BB   (hex)		MitraStar Technology Corp.
+ 840BBB     (base 16)		MitraStar Technology Corp.
+ 				No. 6, Innovation Road II,
+ 				Hsinchu    300
+ 				TW
+ 
+-70-B3-06   (hex)		Apple, Inc.
+-70B306     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
++04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
+ 
+-B8-49-6D   (hex)		Apple, Inc.
+-B8496D     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++A0-FB-83   (hex)		Honor Device Co., Ltd.
++A0FB83     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
+ 
+ 9C-92-4F   (hex)		Apple, Inc.
+ 9C924F     (base 16)		Apple, Inc.
+@@ -76490,12 +76490,96 @@ F0D793     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
++70-B3-06   (hex)		Apple, Inc.
++70B306     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++B8-49-6D   (hex)		Apple, Inc.
++B8496D     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++90-65-60   (hex)		EM Microelectronic
++906560     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++88-0A-A3   (hex)		Juniper Networks
++880AA3     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
+ 30-3D-51   (hex)		IEEE Registration Authority
+ 303D51     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+ 				Piscataway  NJ  08554
+ 				US
+ 
++CC-D3-C1   (hex)		Vestel Elektronik San ve Tic. A.S.
++CCD3C1     (base 16)		Vestel Elektronik San ve Tic. A.S.
++				Organize san
++				Manisa  Turket  45030
++				TR
++
++EC-BE-5F   (hex)		Vestel Elektronik San ve Tic. A.S.
++ECBE5F     (base 16)		Vestel Elektronik San ve Tic. A.S.
++				Organize san
++				Manisa  Turket  45030
++				TR
++
++F4-BB-C7   (hex)		vivo Mobile Communication Co., Ltd.
++F4BBC7     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++4C-36-4E   (hex)		Panasonic Connect Co., Ltd.
++4C364E     (base 16)		Panasonic Connect Co., Ltd.
++				4-1-62 Minoshima, Hakata-ku
++				Fukuoka-shi  Fukuoka  812-8531
++				JP
++
++98-66-10   (hex)		zte corporation
++986610     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++44-71-47   (hex)		Beijing Xiaomi Electronics Co.,Ltd
++447147     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
++				Xiaomi Campus
++				Beijing  Beijing  100085
++				CN
++
++A8-DC-5A   (hex)		Digital Watchdog
++A8DC5A     (base 16)		Digital Watchdog
++				16220 Bloomfield Ave
++				Cerritos  CA  90703
++				US
++
++1C-24-CD   (hex)		ASKEY COMPUTER CORP
++1C24CD     (base 16)		ASKEY COMPUTER CORP
++				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
++				NEW TAIPEI CITY    23585
++				TW
++
++DC-AA-43   (hex)		Shenzhen Terca Information Technology Co., Ltd.
++DCAA43     (base 16)		Shenzhen Terca Information Technology Co., Ltd.
++				Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen
++				SHENZHEN  GUANGDONG  518000
++				CN
++
++00-FB-F9   (hex)		Axiado Corporation
++00FBF9     (base 16)		Axiado Corporation
++				2610 Orchard Parkway, Suite 300
++				San Jose  CA  95134
++				US
++
+ 84-80-94   (hex)		Meter, Inc.
+ 848094     (base 16)		Meter, Inc.
+ 				148 Townsend St
+@@ -79160,12 +79244,6 @@ A4EA8E     (base 16)		Extreme Networks, Inc.
+ 				San Jose  CA  94568
+ 				US
+ 
+-00-09-DF   (hex)		Vestel Elektronik San ve Tic. A.Ş.
+-0009DF     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
+-				Organize san
+-				Manisa  Turket  45030
+-				TR
+-
+ F4-03-2F   (hex)		Reduxio Systems
+ F4032F     (base 16)		Reduxio Systems
+ 				2 Granit St
+@@ -113789,18 +113867,6 @@ B4B742     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-60-BE-B4   (hex)		S-Bluetech co., limited
+-60BEB4     (base 16)		S-Bluetech co., limited
+-				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+-90-DF-7D   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-90DF7D     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+-				Chongqing   China  401120
+-				CN
+-
+ 50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
+ 50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
+ 				No.15 Xinghua Avenue, Xiqing Economic Development Area
+@@ -113813,6 +113879,24 @@ F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
++58-11-22   (hex)		ASUSTek COMPUTER INC.
++581122     (base 16)		ASUSTek COMPUTER INC.
++				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
++				Taipei  Taiwan  112
++				TW
++
++60-BE-B4   (hex)		S-Bluetech co., limited
++60BEB4     (base 16)		S-Bluetech co., limited
++				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
++				Shenzhen  Guangdong  518000
++				CN
++
++90-DF-7D   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++90DF7D     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
+ A8-54-A2   (hex)		Heimgard Technologies AS
+ A854A2     (base 16)		Heimgard Technologies AS
+ 				Dronning Mauds gate 15
+@@ -113837,11 +113921,11 @@ B87EE5     (base 16)		Intelbras
+ 				São José  Santa Catarina  88104800
+ 				BR
+ 
+-58-11-22   (hex)		ASUSTek COMPUTER INC.
+-581122     (base 16)		ASUSTek COMPUTER INC.
+-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+-				Taipei  Taiwan  112
+-				TW
++94-AB-FE   (hex)		Nokia
++94ABFE     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
+ 
+ 74-69-4A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 74694A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+@@ -113855,12 +113939,6 @@ B87EE5     (base 16)		Intelbras
+ 				shenzhen    518000
+ 				CN
+ 
+-94-AB-FE   (hex)		Nokia
+-94ABFE     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
+-
+ 98-A9-2D   (hex)		New H3C Technologies Co., Ltd
+ 98A92D     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+@@ -113885,6 +113963,18 @@ B87EE5     (base 16)		Intelbras
+ 				Austin  TX  78759
+ 				US
+ 
++E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
++E0036B     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++18-69-D4   (hex)		Samsung Electronics Co.,Ltd
++1869D4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
+ D4-F0-EA   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+@@ -113897,12 +113987,6 @@ D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Suzhou    215021
+ 				CN
+ 
+-E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
+-E0036B     (base 16)		Samsung Electronics Co.,Ltd
+-				129, Samsung-ro, Youngtongl-Gu
+-				Suwon  Gyeonggi-Do  16677
+-				KR
+-
+ 80-69-1A   (hex)		Belkin International Inc.
+ 80691A     (base 16)		Belkin International Inc.
+ 				12045 East Waterfront Drive
+@@ -113957,6 +114041,18 @@ E046EE     (base 16)		NETGEAR
+ 				San Jose  CA  95134
+ 				US
+ 
++DC-BE-49   (hex)		ITEL MOBILE LIMITED
++DCBE49     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
++9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				No.75,Zhongkai High-Tech Development District,Huizhou
++				Hui Zhou  Guangdong  516006
++				CN
++
+ 9C-4F-5F   (hex)		Google, Inc.
+ 9C4F5F     (base 16)		Google, Inc.
+ 				15 rue Castel
+@@ -113975,36 +114071,24 @@ A02942     (base 16)		Intel Corporate
+ 				Hsichu  Taiwan  300
+ 				TW
+ 
+-04-63-D0   (hex)		Huawei Device Co., Ltd.
+-0463D0     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+ F0-D4-15   (hex)		Intel Corporate
+ F0D415     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-18-69-D4   (hex)		Samsung Electronics Co.,Ltd
+-1869D4     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
++D4-D8-53   (hex)		Intel Corporate
++D4D853     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+-9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+-9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+-				No.75,Zhongkai High-Tech Development District,Huizhou
+-				Hui Zhou  Guangdong  516006
++04-63-D0   (hex)		Huawei Device Co., Ltd.
++0463D0     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+-DC-BE-49   (hex)		ITEL MOBILE LIMITED
+-DCBE49     (base 16)		ITEL MOBILE LIMITED
+-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+-				Hong Kong  KOWLOON  999077
+-				HK
+-
+ 14-44-8F   (hex)		Edgecore Networks Corporation
+ 14448F     (base 16)		Edgecore Networks Corporation
+ 				1 Creation RD 3.
+@@ -114017,6 +114101,18 @@ DCBE49     (base 16)		ITEL MOBILE LIMITED
+ 				Reno  NV  89507
+ 				US
+ 
++C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++10-A5-62   (hex)		Iton Technology Corp.
++10A562     (base 16)		Iton Technology Corp.
++				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
++				Shenzhen  Guangdong   518116
++				CN
++
+ D4-A3-EB   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+ D4A3EB     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+ 				Room 601,Block B ,Digital Building,Garden City
+@@ -114047,12 +114143,6 @@ B89FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-D4-D8-53   (hex)		Intel Corporate
+-D4D853     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ 8C-76-3F   (hex)		ARRIS Group, Inc.
+ 8C763F     (base 16)		ARRIS Group, Inc.
+ 				6450 Sequence Drive
+@@ -114071,18 +114161,6 @@ C0A938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-				NO.18 HAIBIN ROAD,
+-				DONG GUAN  GUANG DONG  523860
+-				CN
+-
+-10-A5-62   (hex)		Iton Technology Corp.
+-10A562     (base 16)		Iton Technology Corp.
+-				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
+-				Shenzhen  Guangdong   518116
+-				CN
+-
+ 5C-24-E2   (hex)		Suzhou Denbom Electronic S&T Co., Ltd
+ 5C24E2     (base 16)		Suzhou Denbom Electronic S&T Co., Ltd
+ 				3F,Building 2, No.415,Changyang Street
+@@ -114119,12 +114197,6 @@ BCC746     (base 16)		Hon Hai Precision IND.CO.,LTD
+ 				New Taipei City  Banqiao Dist.  220871
+ 				TW
+ 
+-64-FD-96   (hex)		Sagemcom Broadband SAS
+-64FD96     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+ FC-B9-7E   (hex)		GE Appliances
+ FCB97E     (base 16)		GE Appliances
+ 				4000 Buechel Bank Road
+@@ -114143,6 +114215,12 @@ FCB97E     (base 16)		GE Appliances
+ 				Beijing    100089
+ 				CN
+ 
++64-FD-96   (hex)		Sagemcom Broadband SAS
++64FD96     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
+ C8-EB-EC   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+ C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+ 				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+@@ -114155,6 +114233,24 @@ C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+ 				New Taipei City  Taiwan  235
+ 				TW
+ 
++94-C5-A6   (hex)		ITEL MOBILE LIMITED
++94C5A6     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
++7C-EC-B1   (hex)		Apple, Inc.
++7CECB1     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++5C-E9-1E   (hex)		Apple, Inc.
++5CE91E     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ E0-D7-38   (hex)		WireStar Networks
+ E0D738     (base 16)		WireStar Networks
+ 				PO Box 10966
+@@ -114173,29 +114269,23 @@ E0D738     (base 16)		WireStar Networks
+ 				SHANGHAI    201114
+ 				CN
+ 
+-7C-EC-B1   (hex)		Apple, Inc.
+-7CECB1     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+-5C-E9-1E   (hex)		Apple, Inc.
+-5CE91E     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+ A8-B0-AE   (hex)		BizLink Special Cables Germany GmbH
+ A8B0AE     (base 16)		BizLink Special Cables Germany GmbH
+ 				Eschstrasse 1
+ 				Friesoythe    26169
+ 				DE
+ 
+-94-C5-A6   (hex)		ITEL MOBILE LIMITED
+-94C5A6     (base 16)		ITEL MOBILE LIMITED
+-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+-				Hong Kong  KOWLOON  999077
+-				HK
++F0-B6-61   (hex)		eero inc.
++F0B661     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
++E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
++E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
++				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
++				Shenzhen  Guangdong  518055
++				CN
+ 
+ 48-57-D2   (hex)		Broadcom Limited
+ 4857D2     (base 16)		Broadcom Limited
+@@ -114221,12 +114311,6 @@ D834EE     (base 16)		SHURE INCORPORATED
+ 				NILES  IL  60714 
+ 				US
+ 
+-F0-B6-61   (hex)		eero inc.
+-F0B661     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
+-
+ 04-25-F0   (hex)		Nokia
+ 0425F0     (base 16)		Nokia
+ 				600 March Road
+@@ -114239,10 +114323,16 @@ F0B661     (base 16)		eero inc.
+ 				Kyoto    619-0237
+ 				JP
+ 
+-E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+-E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+-				Shenzhen  Guangdong  518055
++40-3B-7B   (hex)		Huawei Device Co., Ltd.
++403B7B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
+ 90-CD-1F   (hex)		Quectel Wireless Solutions Co.,Ltd.
+@@ -114275,18 +114365,6 @@ E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-40-3B-7B   (hex)		Huawei Device Co., Ltd.
+-403B7B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
+-				CN
+-
+ B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -114305,12 +114383,24 @@ BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
++18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
++18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
+ 74-97-79   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 749779     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+ 				Nanning  Guangxi  530007
+ 				CN
+ 
++34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
++34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
++				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
++				Hangzhou  Zhejiang  310003
++				CN
++
+ F8-CD-C8   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ F8CDC8     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+@@ -114323,16 +114413,10 @@ B0285B     (base 16)		JUHUA Technology Inc.
+ 				Shenzhen City  Guangdong Province  518117
+ 				CN
+ 
+-18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				Building, No.33, Xiandong Rd, Xili
+-				Nanshan District, Shenzhen  PRC  518053
+-				CN
+-
+-34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
+-34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
+-				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
+-				Hangzhou  Zhejiang  310003
++C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
++C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
++				No.188 Nanhuan Road, TangQiao Town
++				Zhangjiagang   Jiangsu   215611
+ 				CN
+ 
+ E0-F6-78   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+@@ -114341,17 +114425,29 @@ E0F678     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
++40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++14-5B-B9   (hex)		ConMet
++145BB9     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
+ 28-F7-D6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ 28F7D6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				No.5 DongXin Road
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
+-C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
+-C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+-				No.188 Nanhuan Road, TangQiao Town
+-				Zhangjiagang   Jiangsu   215611
+-				CN
++B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
++B8B409     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
+ 
+ 24-18-C0   (hex)		E. Wehrle GmbH
+ 2418C0     (base 16)		E. Wehrle GmbH
+@@ -114359,12 +114455,6 @@ C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+ 				78120 Furtwangen  Baden-Württemberg  78120
+ 				DE
+ 
+-14-5B-B9   (hex)		ConMet
+-145BB9     (base 16)		ConMet
+-				5701 SE Columbia Way
+-				Vancouver    WA  98661
+-				US
+-
+ AC-83-F0   (hex)		Cobalt Digital Inc.
+ AC83F0     (base 16)		Cobalt Digital Inc.
+ 				2506 Galen Drive
+@@ -114377,6 +114467,12 @@ AC15A2     (base 16)		TP-Link Corporation Limited
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+ 
++AC-DF-9F   (hex)		Arcadyan Corporation
++ACDF9F     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
++
+ B8-59-C8   (hex)		70mai Co.,Ltd.
+ B859C8     (base 16)		70mai Co.,Ltd.
+ 				Room 2220, building 2, No. 588, Zixing road
+@@ -114389,23 +114485,11 @@ A8E207     (base 16)		GOIP Global Services Pvt. Ltd.
+ 				Noida   Uttar Pradesh  201301
+ 				IN
+ 
+-40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+-402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+-B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
+-B8B409     (base 16)		Samsung Electronics Co.,Ltd
+-				129, Samsung-ro, Youngtongl-Gu
+-				Suwon  Gyeonggi-Do  16677
+-				KR
+-
+-AC-DF-9F   (hex)		Arcadyan Corporation
+-ACDF9F     (base 16)		Arcadyan Corporation
+-				No.8, Sec.2, Guangfu Rd.
+-				Hsinchu City  Hsinchu  30071
+-				TW
++74-E7-98   (hex)		Juniper Networks
++74E798     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
+ 
+ D4-E2-2F   (hex)		Roku, Inc
+ D4E22F     (base 16)		Roku, Inc
+@@ -114443,18 +114527,6 @@ C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.,LTD
+ 				Mianyang  Sichuan  622650
+ 				CN
+ 
+-D8-7E-6F   (hex)		CASCINATION AG
+-D87E6F     (base 16)		CASCINATION AG
+-				Steigerhubelstrasse 3
+-				Bern  Bern  3008
+-				CH
+-
+-04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
+-044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
+-				32 Xuanwumen West Street,Xicheng District
+-				Beijing    100053
+-				CN
+-
+ 40-5E-F6   (hex)		Samsung Electronics Co.,Ltd
+ 405EF6     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -114479,23 +114551,29 @@ D87E6F     (base 16)		CASCINATION AG
+ 				Reno  NV  89507
+ 				US
+ 
++04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
++044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
+ C0-4E-30   (hex)		Espressif Inc.
+ C04E30     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-74-E7-98   (hex)		Juniper Networks
+-74E798     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
++AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
++AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
++				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
++				Shanghai     201206
++				CN
+ 
+-E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
+-E016B1     (base 16)		Advanced Design Technology co.,ltd.
+-				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
+-				Fucyu-city  Tokyo  1830056
+-				JP
++D8-7E-6F   (hex)		CASCINATION AG
++D87E6F     (base 16)		CASCINATION AG
++				Steigerhubelstrasse 3
++				Bern  Bern  3008
++				CH
+ 
+ 54-31-D4   (hex)		TGW Mechanics GmbH
+ 5431D4     (base 16)		TGW Mechanics GmbH
+@@ -114509,44 +114587,50 @@ E016B1     (base 16)		Advanced Design Technology co.,ltd.
+ 				Wuhan  Hubei  430206
+ 				CN
+ 
+-C0-69-11   (hex)		Arista Networks
+-C06911     (base 16)		Arista Networks
+-				5453 Great America Parkway
+-				Santa Clara  CA  95054
+-				US
+-
+-E4-B5-55   (hex)		Huawei Device Co., Ltd.
+-E4B555     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-24-A7-DC   (hex)		SKY UK LIMITED
+-24A7DC     (base 16)		SKY UK LIMITED
++00-19-FB   (hex)		SKY UK LIMITED
++0019FB     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-38-A6-CE   (hex)		SKY UK LIMITED
+-38A6CE     (base 16)		SKY UK LIMITED
++78-3E-53   (hex)		SKY UK LIMITED
++783E53     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
+-AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
+-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+-				Shanghai     201206
+-				CN
+-
+-00-19-FB   (hex)		SKY UK LIMITED
+-0019FB     (base 16)		SKY UK LIMITED
++24-A7-DC   (hex)		SKY UK LIMITED
++24A7DC     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-78-3E-53   (hex)		SKY UK LIMITED
+-783E53     (base 16)		SKY UK LIMITED
++E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
++E016B1     (base 16)		Advanced Design Technology co.,ltd.
++				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
++				Fucyu-city  Tokyo  1830056
++				JP
++
++E4-B5-55   (hex)		Huawei Device Co., Ltd.
++E4B555     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++C0-69-11   (hex)		Arista Networks
++C06911     (base 16)		Arista Networks
++				5453 Great America Parkway
++				Santa Clara  CA  95054
++				US
++
++2C-93-FB   (hex)		Sercomm France Sarl
++2C93FB     (base 16)		Sercomm France Sarl
++				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
++				Moulineaux    92370
++				FR
++
++38-A6-CE   (hex)		SKY UK LIMITED
++38A6CE     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+@@ -114635,11 +114719,11 @@ BC69CB     (base 16)		Panasonic Electric Works Networks Co., Ltd.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-2C-93-FB   (hex)		Sercomm France Sarl
+-2C93FB     (base 16)		Sercomm France Sarl
+-				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
+-				Moulineaux    92370
+-				FR
++58-2B-0A   (hex)		Texas Instruments
++582B0A     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
+ 
+ B4-46-6B   (hex)		REALTIMEID AS
+ B4466B     (base 16)		REALTIMEID AS
+@@ -114647,12 +114731,6 @@ B4466B     (base 16)		REALTIMEID AS
+ 				Snåsa    7760
+ 				NO
+ 
+-90-6A-EB   (hex)		Microsoft Corporation
+-906AEB     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
+-				US
+-
+ C4-EB-39   (hex)		Sagemcom Broadband SAS
+ C4EB39     (base 16)		Sagemcom Broadband SAS
+ 				250, route de l'Empereur
+@@ -114665,17 +114743,11 @@ C4EB39     (base 16)		Sagemcom Broadband SAS
+ 				Taipei City    10690
+ 				TW
+ 
+-08-9D-F4   (hex)		Intel Corporate
+-089DF4     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-DC-46-28   (hex)		Intel Corporate
+-DC4628     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
++F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
++				No.90 Zijin Rd.,New District,Suzhou,215011,China
++				Suzhou   JiangSu  215011
++				CN
+ 
+ 0C-91-92   (hex)		Intel Corporate
+ 0C9192     (base 16)		Intel Corporate
+@@ -114695,23 +114767,23 @@ DC4628     (base 16)		Intel Corporate
+ 				Shenzhen    518000
+ 				CN
+ 
+-F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
+-F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
+-				No.90 Zijin Rd.,New District,Suzhou,215011,China
+-				Suzhou   JiangSu  215011
+-				CN
++08-9D-F4   (hex)		Intel Corporate
++089DF4     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+-58-2B-0A   (hex)		Texas Instruments
+-582B0A     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
++DC-46-28   (hex)		Intel Corporate
++DC4628     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+-D8-E8-44   (hex)		zte corporation
+-D8E844     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
++90-6A-EB   (hex)		Microsoft Corporation
++906AEB     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
+ 
+ E4-6A-35   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+@@ -114737,6 +114809,18 @@ E838A0     (base 16)		Vizio, Inc
+ 				Irvine  CA  92618
+ 				US
+ 
++EC-C0-7A   (hex)		Laird Connectivity
++ECC07A     (base 16)		Laird Connectivity
++				3F.-1, No.145, Xianzheng 9th Rd.,
++				Zhubei    30251
++				TW
++
++68-B9-C2   (hex)		Earda Technologies co Ltd
++68B9C2     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
++				CN
++
+ C8-1E-C2   (hex)		ITEL MOBILE LIMITED
+ C81EC2     (base 16)		ITEL MOBILE LIMITED
+ 				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+@@ -114749,10 +114833,10 @@ C81EC2     (base 16)		ITEL MOBILE LIMITED
+ 				Hui Zhou  Guangdong  516025
+ 				CN
+ 
+-68-B9-C2   (hex)		Earda Technologies co Ltd
+-68B9C2     (base 16)		Earda Technologies co Ltd
+-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+-				Guangzhou  Guangdong  511455
++D8-E8-44   (hex)		zte corporation
++D8E844     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
+ 68-83-CB   (hex)		Apple, Inc.
+@@ -114761,18 +114845,66 @@ C81EC2     (base 16)		ITEL MOBILE LIMITED
+ 				Cupertino  CA  95014
+ 				US
+ 
+-EC-C0-7A   (hex)		Laird Connectivity
+-ECC07A     (base 16)		Laird Connectivity
+-				3F.-1, No.145, Xianzheng 9th Rd.,
+-				Zhubei    30251
++FC-12-63   (hex)		ASKEY COMPUTER CORP
++FC1263     (base 16)		ASKEY COMPUTER CORP
++				10F,No.119,JIANKANG RD,ZHONGHE DIST
++				NEW TAIPEI  TAIWAN  23585
+ 				TW
+ 
++58-30-5B   (hex)		Shanghai Junqian Sensing Technology Co.,LTD
++58305B     (base 16)		Shanghai Junqian Sensing Technology Co.,LTD
++				Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park,Minhang District,
++				Shanghai  Shanghai  201114
++				CN
++
++C0-71-AA   (hex)		ShenZhen OnMicro Electronics Co.,Ltd.
++C071AA     (base 16)		ShenZhen OnMicro Electronics Co.,Ltd.
++				Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District
++				Shenzhen  GuangDong  518057
++				CN
++
+ 9C-05-91   (hex)		Mellanox Technologies, Inc.
+ 9C0591     (base 16)		Mellanox Technologies, Inc.
+ 				350 Oakmead Parkway, Suite 100 
+ 				Sunnyvale  CA  94085
+ 				US
+ 
++70-9C-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++709C45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++00-09-DF   (hex)		Vestel Elektronik San ve Tic. A.S.
++0009DF     (base 16)		Vestel Elektronik San ve Tic. A.S.
++				Organize san
++				Manisa  Turket  45030
++				TR
++
++A0-31-31   (hex)		Procenne Digital Security
++A03131     (base 16)		Procenne Digital Security
++				Eski Buyukdere Cd. No:7/12 Maslak
++				Istanbul  Sariyer  34398
++				TR
++
++FC-07-36   (hex)		Huawei Device Co., Ltd.
++FC0736     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++94-A0-7D   (hex)		Huawei Device Co., Ltd.
++94A07D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++5C-07-58   (hex)		Ufispace Co., LTD.
++5C0758     (base 16)		Ufispace Co., LTD.
++				9F., No. 81 Jhongcheng Rd., Tucheng Dist.,
++				New Taipei    23674
++				TW
++
+ F8-D0-27   (hex)		Seiko Epson Corporation
+ F8D027     (base 16)		Seiko Epson Corporation
+ 				2070 Kotobuki Koaka
+@@ -152054,10 +152186,10 @@ B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
+ 				Shenzhen  GUANGDONG  518027
+ 				CN
+ 
+-EC-7C-5C   (hex)		Juniper Networks
+-EC7C5C     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
++CC-60-C8   (hex)		Microsoft Corporation
++CC60C8     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
+ 				US
+ 
+ 00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
+@@ -152066,12 +152198,6 @@ EC7C5C     (base 16)		Juniper Networks
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
+-CC-60-C8   (hex)		Microsoft Corporation
+-CC60C8     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
+-				US
+-
+ 6C-8D-77   (hex)		Cisco Systems, Inc
+ 6C8D77     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -152090,6 +152216,12 @@ B417A8     (base 16)		Facebook Technologies, LLC
+ 				Menlo Park  CA  94025
+ 				US
+ 
++EC-7C-5C   (hex)		Juniper Networks
++EC7C5C     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
+ 10-54-D2   (hex)		IEEE Registration Authority
+ 1054D2     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -152108,12 +152240,6 @@ C4DF39     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Chongqing   China  401120
+ 				CN
+ 
+-10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+-10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+ 80-97-33   (hex)		 Shenzhen Elebao Technology Co., Ltd
+ 809733     (base 16)		 Shenzhen Elebao Technology Co., Ltd
+ 				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
+@@ -152150,18 +152276,6 @@ D8365F     (base 16)		Intelbras
+ 				Moscow\    117335
+ 				RU
+ 
+-E8-4D-EC   (hex)		Xerox Corporation
+-E84DEC     (base 16)		Xerox Corporation
+-				800 Phillips Rd
+-				Webster  NY  14450
+-				US
+-
+-C8-B8-2F   (hex)		eero inc.
+-C8B82F     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
+-
+ 54-78-C9   (hex)		AMPAK Technology,Inc.
+ 5478C9     (base 16)		AMPAK Technology,Inc.
+ 				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+@@ -152186,60 +152300,54 @@ FC101A     (base 16)		Palo Alto Networks
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
++				Shenzhen  Guangdong  518057
+ 				CN
+ 
++E8-4D-EC   (hex)		Xerox Corporation
++E84DEC     (base 16)		Xerox Corporation
++				800 Phillips Rd
++				Webster  NY  14450
++				US
++
++C8-B8-2F   (hex)		eero inc.
++C8B82F     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
+ B4-3A-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ B43AE2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-D0-A4-6F   (hex)		China Dragon Technology Limited
+-D0A46F     (base 16)		China Dragon Technology Limited
+-				B4 Bldg.Haoshan 1st Industry Park,
+-				Shenzhen  Guangdong  518104
+-				CN
+-
+ F0-C8-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ F0C8B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-2C-60-CD   (hex)		NR ELECTRIC CO., LTD
+-2C60CD     (base 16)		NR ELECTRIC CO., LTD
+-				69,Suyuan Avenue
+-				Nanjing  Jiangsu  211102
+-				CN
+-
+-8C-1E-80   (hex)		Cisco Systems, Inc
+-8C1E80     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-A4-1E-E1   (hex)		Taicang T&W Electronics
+-A41EE1     (base 16)		Taicang T&W Electronics
+-				89# Jiang Nan RD
+-				Suzhou  Jiangsu  215412
++B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-E8-FB-1C   (hex)		AzureWave Technology Inc.
+-E8FB1C     (base 16)		AzureWave Technology Inc.
+-				8F., No. 94, Baozhong Rd.
+-				New Taipei City  Taiwan  231
+-				TW
+-
+ B4-A7-C6   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+ B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+ 				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+ 				NEW DELHI    NA
+ 				IN
+ 
++D0-A4-6F   (hex)		China Dragon Technology Limited
++D0A46F     (base 16)		China Dragon Technology Limited
++				B4 Bldg.Haoshan 1st Industry Park,
++				Shenzhen  Guangdong  518104
++				CN
++
+ 1C-76-F2   (hex)		Samsung Electronics Co.,Ltd
+ 1C76F2     (base 16)		Samsung Electronics Co.,Ltd
+ 				129, Samsung-ro, Youngtongl-Gu
+@@ -152258,6 +152366,12 @@ B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
++2C-60-CD   (hex)		NR ELECTRIC CO., LTD
++2C60CD     (base 16)		NR ELECTRIC CO., LTD
++				69,Suyuan Avenue
++				Nanjing  Jiangsu  211102
++				CN
++
+ 28-6B-35   (hex)		Intel Corporate
+ 286B35     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -152270,6 +152384,18 @@ B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+ 				Piscataway  NJ  08554
+ 				US
+ 
++A4-1E-E1   (hex)		Taicang T&W Electronics
++A41EE1     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
++				CN
++
++E8-FB-1C   (hex)		AzureWave Technology Inc.
++E8FB1C     (base 16)		AzureWave Technology Inc.
++				8F., No. 94, Baozhong Rd.
++				New Taipei City  Taiwan  231
++				TW
++
+ C0-EE-40   (hex)		Laird Connectivity
+ C0EE40     (base 16)		Laird Connectivity
+ 				50 South Main St
+@@ -152282,72 +152408,12 @@ A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+ 				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
+-84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+ 30-04-5C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 30045C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
+-90-79-CF   (hex)		zte corporation
+-9079CF     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+-88-8F-A4   (hex)		Huawei Device Co., Ltd.
+-888FA4     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-3C-82-C0   (hex)		Technicolor CH USA Inc.
+-3C82C0     (base 16)		Technicolor CH USA Inc.
+-				5030 Sugarloaf Parkway Bldg 6 
+-				Lawrenceville  GA  30044
+-				US
+-
+-C4-DE-E2   (hex)		Espressif Inc.
+-C4DEE2     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+-68-B6-B3   (hex)		Espressif Inc.
+-68B6B3     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+-FC-A0-5A   (hex)		Oray.com co., LTD.
+-FCA05A     (base 16)		Oray.com co., LTD.
+-				8008Rm, building No.1 GuoDing d. Yangpu District
+-				Shanghai  Shanghai  200433
+-				CN
+-
+-90-48-6C   (hex)		Ring LLC
+-90486C     (base 16)		Ring LLC
+-				1523 26th St
+-				Santa Monica  CA  90404
+-				US
+-
+ 3C-46-45   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+ 3C4645     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+ 				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
+@@ -152372,12 +152438,30 @@ A4F933     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
++88-8F-A4   (hex)		Huawei Device Co., Ltd.
++888FA4     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
+ 50-68-AC   (hex)		Huawei Device Co., Ltd.
+ 5068AC     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++90-79-CF   (hex)		zte corporation
++9079CF     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++8C-1E-80   (hex)		Cisco Systems, Inc
++8C1E80     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
+ 50-39-2F   (hex)		INGRAM MICRO SERVICES
+ 50392F     (base 16)		INGRAM MICRO SERVICES
+ 				100 CHEMIN DE BAILLOT
+@@ -152402,11 +152486,53 @@ FC8417     (base 16)		Honor Device Co., Ltd.
+ 				San Diego  CA  92121
+ 				US
+ 
+-AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+-ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+-				Phase 3, Bayan Lepas FIZ
+-				Bayan Lepas  Penang  11900
+-				MY
++C4-DE-E2   (hex)		Espressif Inc.
++C4DEE2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++68-B6-B3   (hex)		Espressif Inc.
++68B6B3     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++FC-A0-5A   (hex)		Oray.com co., LTD.
++FCA05A     (base 16)		Oray.com co., LTD.
++				8008Rm, building No.1 GuoDing d. Yangpu District
++				Shanghai  Shanghai  200433
++				CN
++
++84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++90-48-6C   (hex)		Ring LLC
++90486C     (base 16)		Ring LLC
++				1523 26th St
++				Santa Monica  CA  90404
++				US
++
++3C-82-C0   (hex)		Technicolor CH USA Inc.
++3C82C0     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
+ 
+ 10-24-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 102407     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+@@ -152426,12 +152552,6 @@ D021AC     (base 16)		Yohana
+ 				Palo Alto  CA  94304
+ 				US
+ 
+-38-1F-26   (hex)		IEEE Registration Authority
+-381F26     (base 16)		IEEE Registration Authority
+-				445 Hoes Lane
+-				Piscataway  NJ  08554
+-				US
+-
+ 7C-E1-52   (hex)		THE GOODYEAR TIRE & RUBBER COMPANY
+ 7CE152     (base 16)		THE GOODYEAR TIRE & RUBBER COMPANY
+ 				200 Innovation Way
+@@ -152450,17 +152570,17 @@ D021AC     (base 16)		Yohana
+ 				Mérignac    33700
+ 				FR
+ 
+-50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+-50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+-				Alt-Moabit 95
+-				Berlin  Berlin  10559
+-				DE
++AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
+ 
+-78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
+-7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
+-				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
+-				Beijing    100085
+-				CN
++38-1F-26   (hex)		IEEE Registration Authority
++381F26     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
+ 
+ EC-21-25   (hex)		Toshiba Corp.
+ EC2125     (base 16)		Toshiba Corp.
+@@ -152468,17 +152588,35 @@ EC2125     (base 16)		Toshiba Corp.
+ 				Tokyo    105-8001
+ 				JP
+ 
++00-E5-F1   (hex)		BUFFALO.INC
++00E5F1     (base 16)		BUFFALO.INC
++				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
++				Nagoya  Aichi Pref.  460-8315
++				JP
++
++34-EE-2A   (hex)		ConMet
++34EE2A     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
++50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++				Alt-Moabit 95
++				Berlin  Berlin  10559
++				DE
++
+ 68-4E-05   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+ 684E05     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+ 				No.8, Litong Road, Liuyan Economic & Tec
+ 				Changsha  HUNAN  410329
+ 				CN
+ 
+-04-99-BB   (hex)		Apple, Inc.
+-0499BB     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
++7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
++				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
++				Beijing    100085
++				CN
+ 
+ F0-4D-D4   (hex)		Sagemcom Broadband SAS
+ F04DD4     (base 16)		Sagemcom Broadband SAS
+@@ -152486,11 +152624,17 @@ F04DD4     (base 16)		Sagemcom Broadband SAS
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-00-E5-F1   (hex)		BUFFALO.INC
+-00E5F1     (base 16)		BUFFALO.INC
+-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+-				Nagoya  Aichi Pref.  460-8315
+-				JP
++AC-29-29   (hex)		Infinix mobility limited
++AC2929     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
++5C-1B-F4   (hex)		Apple, Inc.
++5C1BF4     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
+ 
+ A8-51-AB   (hex)		Apple, Inc.
+ A851AB     (base 16)		Apple, Inc.
+@@ -152498,17 +152642,35 @@ A851AB     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-5C-1B-F4   (hex)		Apple, Inc.
+-5C1BF4     (base 16)		Apple, Inc.
++3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
++3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
++04-99-BB   (hex)		Apple, Inc.
++0499BB     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-34-EE-2A   (hex)		ConMet
+-34EE2A     (base 16)		ConMet
+-				5701 SE Columbia Way
+-				Vancouver    WA  98661
+-				US
++60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
++240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
++				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
++				Shenzhen  GuangDong  518000
++				CN
++
++E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
++E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
+ 
+ 78-66-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+ 78669D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+@@ -152522,30 +152684,30 @@ A851AB     (base 16)		Apple, Inc.
+ 				Delft    2628 XJ
+ 				NL
+ 
+-90-49-92   (hex)		YSTen Technology Co.,Ltd
+-904992     (base 16)		YSTen Technology Co.,Ltd
+-				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+-				Beijing    100101
+-				CN
+-
+-AC-29-29   (hex)		Infinix mobility limited
+-AC2929     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+-3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
+-3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+-				Baoan Xin'an Streat
+-				Shenzhen    002052
+-				CN
+-
+ 00-0E-DD   (hex)		SHURE INCORPORATED
+ 000EDD     (base 16)		SHURE INCORPORATED
+ 				5800 W. TOUHY AVE.
+ 				NILES  IL  60714 
+ 				US
+ 
++6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
++6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
++6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++90-49-92   (hex)		YSTen Technology Co.,Ltd
++904992     (base 16)		YSTen Technology Co.,Ltd
++				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
++				Beijing    100101
++				CN
++
+ 18-FD-74   (hex)		Routerboard.com
+ 18FD74     (base 16)		Routerboard.com
+ 				Mikrotikls SIA
+@@ -152576,42 +152738,6 @@ E4902A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
+-E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
+-				32 Xuanwumen West Street,Xicheng District
+-				Beijing    100053
+-				CN
+-
+-60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+-				Nanning  Guangxi  530007
+-				CN
+-
+-24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
+-240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
+-				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
+-				Shenzhen  GuangDong  518000
+-				CN
+-
+-6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
+-6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+-				222 West Merchandise Mart Plaza
+-				Chicago  IL  60654
+-				US
+-
+-64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
+-6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
+-				222 West Merchandise Mart Plaza
+-				Chicago  IL  60654
+-				US
+-
+-10-F0-68   (hex)		Ruckus Wireless
+-10F068     (base 16)		Ruckus Wireless
+-				350 West Java Drive
+-				Sunnyvale  CA  94089
+-				US
+-
+ F0-87-7F   (hex)		Magnetar Technology Shenzhen Co., LTD.
+ F0877F     (base 16)		Magnetar Technology Shenzhen Co., LTD.
+ 				Room211, Building1, No.26 Puzai Road, Pingdi Longgang
+@@ -152630,10 +152756,10 @@ C8D6B7     (base 16)		Solidigm Technology
+ 				Longmont  CO  80501
+ 				US
+ 
+-60-5B-30   (hex)		Dell Inc.
+-605B30     (base 16)		Dell Inc.
+-				One Dell Way
+-				Round Rock  TX  78682
++10-F0-68   (hex)		Ruckus Wireless
++10F068     (base 16)		Ruckus Wireless
++				350 West Java Drive
++				Sunnyvale  CA  94089
+ 				US
+ 
+ 44-3C-9C   (hex)		Pintsch GmbH
+@@ -152642,6 +152768,18 @@ C8D6B7     (base 16)		Solidigm Technology
+ 				Dinslaken    46537
+ 				DE
+ 
++20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
++2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
++				3F.,No.98-1,Mincyuan Rd.Sindian City
++				Taipei County 231    231141
++				CN
++
++A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
+ D8-80-DC   (hex)		Huawei Device Co., Ltd.
+ D880DC     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -152672,12 +152810,6 @@ F46C68     (base 16)		Wistron Neweb Corporation
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
+-2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
+-				3F.,No.98-1,Mincyuan Rd.Sindian City
+-				Taipei County 231    231141
+-				CN
+-
+ 74-B7-25   (hex)		Huawei Device Co., Ltd.
+ 74B725     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -152690,12 +152822,6 @@ F46C68     (base 16)		Wistron Neweb Corporation
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-				NO.18 HAIBIN ROAD,
+-				DONG GUAN  GUANG DONG  523860
+-				CN
+-
+ BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -152708,6 +152834,12 @@ BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Minato-ku  Tokyo  108-0075
+ 				JP
+ 
++60-5B-30   (hex)		Dell Inc.
++605B30     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
+ 34-AC-11   (hex)		China Mobile Group Device Co.,Ltd.
+ 34AC11     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				32 Xuanwumen West Street,Xicheng District
+@@ -152780,6 +152912,24 @@ DC71DD     (base 16)		AX Technologies
+ 				Singapore    556741
+ 				SG
+ 
++3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
++3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
++				Peter-Dornier Strasse 10
++				Lindau  Bavaria  88131
++				DE
++
++04-BA-D6   (hex)		D-Link Corporation
++04BAD6     (base 16)		D-Link Corporation
++				No.289, Sinhu 3rd Rd., Neihu District, 
++				Taipei City     114
++				TW
++
++30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
++303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
++				JL.PALEM 1 BLOK DS-6
++				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
++				ID
++
+ 30-7F-10   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 307F10     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				NO.18 HAIBIN ROAD,
+@@ -152804,35 +152954,23 @@ B0FBDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
+-3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
+-3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
+-				Peter-Dornier Strasse 10
+-				Lindau  Bavaria  88131
+-				DE
+-
+ E0-9C-8D   (hex)		Seakeeper, Inc.
+ E09C8D     (base 16)		Seakeeper, Inc.
+ 				45310 Abell House Lane Suite 350
+ 				California  MD  20619
+ 				US
+ 
+-04-BA-D6   (hex)		D-Link Corporation
+-04BAD6     (base 16)		D-Link Corporation
+-				No.289, Sinhu 3rd Rd., Neihu District, 
+-				Taipei City     114
+-				TW
+-
+ 34-3A-20   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ 343A20     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				3333 Scott Blvd
+ 				Santa Clara  CA  95054
+ 				US
+ 
+-30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
+-303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
+-				JL.PALEM 1 BLOK DS-6
+-				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
+-				ID
++7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
++7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
++				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
++				Suzhou  Jingsu  215000
++				CN
+ 
+ 18-E9-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 18E91D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+@@ -152852,6 +152990,12 @@ F46ADD     (base 16)		Liteon Technology Corporation
+ 				New Taipei City  Taiwan  23585
+ 				TW
+ 
++98-D7-42   (hex)		Samsung Electronics Co.,Ltd
++98D742     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
+ C8-2A-F1   (hex)		TCT mobile ltd
+ C82AF1     (base 16)		TCT mobile ltd
+ 				No.86 hechang 7th road, zhongkai, Hi-Tech District
+@@ -152870,60 +153014,12 @@ A842E3     (base 16)		Espressif Inc.
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
+-7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
+-				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
+-				Suzhou  Jingsu  215000
+-				CN
+-
+ 04-26-05   (hex)		Bosch Building Automation GmbH
+ 042605     (base 16)		Bosch Building Automation GmbH
+ 				Kapellenweg 42
+ 				Verl    33415
+ 				DE
+ 
+-3C-FE-AC   (hex)		Cisco Systems, Inc
+-3CFEAC     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-04-A7-41   (hex)		Cisco Systems, Inc
+-04A741     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-A0-88-9D   (hex)		Huawei Device Co., Ltd.
+-A0889D     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-98-D7-42   (hex)		Samsung Electronics Co.,Ltd
+-98D742     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+-D4-9B-74   (hex)		Kinetic Technologies
+-D49B74     (base 16)		Kinetic Technologies
+-				6399 San Ignacio Ave #250
+-				San Jose  CA  95119
+-				US
+-
+-40-F8-DF   (hex)		CANON INC.
+-40F8DF     (base 16)		CANON INC.
+-				30-2 Shimomaruko 3-chome,
+-				Ohta-ku  Tokyo  146-8501
+-				JP
+-
+-20-47-ED   (hex)		SKY UK LIMITED
+-2047ED     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+ A0-BD-CD   (hex)		SKY UK LIMITED
+ A0BDCD     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -152960,6 +153056,42 @@ A0BDCD     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
++3C-FE-AC   (hex)		Cisco Systems, Inc
++3CFEAC     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++04-A7-41   (hex)		Cisco Systems, Inc
++04A741     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++A0-88-9D   (hex)		Huawei Device Co., Ltd.
++A0889D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++D4-9B-74   (hex)		Kinetic Technologies
++D49B74     (base 16)		Kinetic Technologies
++				6399 San Ignacio Ave #250
++				San Jose  CA  95119
++				US
++
++20-47-ED   (hex)		SKY UK LIMITED
++2047ED     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++40-F8-DF   (hex)		CANON INC.
++40F8DF     (base 16)		CANON INC.
++				30-2 Shimomaruko 3-chome,
++				Ohta-ku  Tokyo  146-8501
++				JP
++
+ F4-6B-8C   (hex)		Hon Hai Precision Industry Co., Ltd.
+ F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+@@ -152972,6 +153104,12 @@ F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				Calamba    Lot 1
+ 				PH
+ 
++F4-3B-D8   (hex)		Intel Corporate
++F43BD8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 7C-67-AB   (hex)		Roku, Inc
+ 7C67AB     (base 16)		Roku, Inc
+ 				1155 Coleman Ave
+@@ -152984,18 +153122,6 @@ F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-F4-3B-D8   (hex)		Intel Corporate
+-F43BD8     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-C8-4B-D6   (hex)		Dell Inc.
+-C84BD6     (base 16)		Dell Inc.
+-				One Dell Way
+-				Round Rock  TX  78682
+-				US
+-
+ E0-86-14   (hex)		Novatel Wireless Solutions, Inc.
+ E08614     (base 16)		Novatel Wireless Solutions, Inc.
+ 				9710 Scranton Rd., Suite 200
+@@ -153008,6 +153134,18 @@ A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
+ 				Beijing  Beijing  100000
+ 				CN
+ 
++3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
++				SHENZHEN  GUANGDONG  518057
++				CN
++
++C8-4B-D6   (hex)		Dell Inc.
++C84BD6     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
+ 6C-30-2A   (hex)		Texas Instruments
+ 6C302A     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -153020,6 +153158,12 @@ A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
+ 				Dallas  TX  75243
+ 				US
+ 
++08-B6-1F   (hex)		Espressif Inc.
++08B61F     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
+ 94-4E-5B   (hex)		Ubee Interactive Co., Limited
+ 944E5B     (base 16)		Ubee Interactive Co., Limited
+ 				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+@@ -153056,16 +153200,10 @@ FC6179     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+-3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+-				SHENZHEN  GUANGDONG  518057
+-				CN
+-
+-08-B6-1F   (hex)		Espressif Inc.
+-08B61F     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
++4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
++				ShenZHEN  GuangDong  518104
+ 				CN
+ 
+ 98-A2-C0   (hex)		Cisco Systems, Inc
+@@ -153080,12 +153218,6 @@ EC74D7     (base 16)		Grandstream Networks Inc
+ 				boston  MA  02215
+ 				US
+ 
+-4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+-4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+-				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+-				ShenZHEN  GuangDong  518104
+-				CN
+-
+ 30-63-71   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+ 306371     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+ 				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+@@ -153104,6 +153236,24 @@ EC74D7     (base 16)		Grandstream Networks Inc
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
++5C-3E-1B   (hex)		Apple, Inc.
++5C3E1B     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++7C-2A-CA   (hex)		Apple, Inc.
++7C2ACA     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++28-8E-EC   (hex)		Apple, Inc.
++288EEC     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ A0-8C-F2   (hex)		YINUOLINK CO.,LTD
+ A08CF2     (base 16)		YINUOLINK CO.,LTD
+ 				3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an
+@@ -153128,24 +153278,84 @@ F4931C     (base 16)		Universal Electronics, Inc.
+ 				Santa Ana  CA  92707
+ 				US
+ 
+-5C-3E-1B   (hex)		Apple, Inc.
+-5C3E1B     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
++C8-84-8C   (hex)		Ruckus Wireless
++C8848C     (base 16)		Ruckus Wireless
++				350 West Java Drive
++				Sunnyvale  CA  94089
+ 				US
+ 
+-7C-2A-CA   (hex)		Apple, Inc.
+-7C2ACA     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++B0-78-39   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++B07839     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++				Midea Global Innovation Center,Beijiao Town,Shunde
++				Foshan  Guangdong  528311
++				CN
+ 
+-28-8E-EC   (hex)		Apple, Inc.
+-288EEC     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
++74-9E-75   (hex)		Aruba, a Hewlett Packard Enterprise Company
++749E75     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
+ 				US
+ 
++E0-5A-1B   (hex)		Espressif Inc.
++E05A1B     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++48-8A-E8   (hex)		vivo Mobile Communication Co., Ltd.
++488AE8     (base 16)		vivo Mobile Communication Co., Ltd.
++				No.1, vivo Road, Chang'an
++				Dongguan  Guangdong  523860
++				CN
++
++CC-BA-6F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++CCBA6F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++78-5C-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++785C5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++98-81-8A   (hex)		Huawei Device Co., Ltd.
++98818A     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++A8-AA-7C   (hex)		Huawei Device Co., Ltd.
++A8AA7C     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++B4-C2-F7   (hex)		Huawei Device Co., Ltd.
++B4C2F7     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++1C-32-83   (hex)		COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
++1C3283     (base 16)		COMTTI Intelligent Technology(Shenzhen) Co., Ltd.
++				Building 7/6 building 6 room 307, Area A, Baoan Internet Industrial Base, Mabu Community, Xixiang Street, Baoan District,
++				Shenzhen  Guangdong  518000
++				CN
++
++F4-1C-71   (hex)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
++F41C71     (base 16)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
++				17/F,Block 1A,Software Industry Base, XueFu Road,Nanshan  District,
++				Shenzhen  GuangDong  518100
++				CN
++
++70-11-0E   (hex)		zte corporation
++70110E     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
+ 7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+@@ -159575,12 +159785,6 @@ FC9114     (base 16)		Technicolor CH USA Inc.
+ 				Lawrenceville  GA  30044
+ 				US
+ 
+-48-6D-BB   (hex)		Vestel Elektronik San ve Tic. A.Ş.
+-486DBB     (base 16)		Vestel Elektronik San ve Tic. A.Ş.
+-				Organize san
+-				Manisa  Turket  45030
+-				TR
+-
+ 00-2A-10   (hex)		Cisco Systems, Inc
+ 002A10     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -190325,6 +190529,18 @@ BC6193     (base 16)		Xiaomi Communications Co Ltd
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
++94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
++C8-54-A4   (hex)		Infinix mobility limited
++C854A4     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
+ EC-71-DB   (hex)		Reolink Innovation Limited
+ EC71DB     (base 16)		Reolink Innovation Limited
+ 				705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET
+@@ -190343,12 +190559,6 @@ F8E57E     (base 16)		Cisco Systems, Inc
+ 				Seoul  Seocho-Gu  #137-902
+ 				KR
+ 
+-94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+ 38-5B-44   (hex)		Silicon Laboratories
+ 385B44     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+@@ -190391,6 +190601,12 @@ EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
++74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
++74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
++				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
++				SHENZHEN    518000
++				CN
++
+ 10-4D-15   (hex)		Viaanix Inc
+ 104D15     (base 16)		Viaanix Inc
+ 				434 N Main St.
+@@ -190403,18 +190619,6 @@ EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Shenzhen  Nanshan District  518000
+ 				CN
+ 
+-C8-54-A4   (hex)		Infinix mobility limited
+-C854A4     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+-A0-09-2E   (hex)		zte corporation
+-A0092E     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+ B0-AF-F7   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ 				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+@@ -190433,12 +190637,18 @@ B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ 				Changsha  HUNAN  410329
+ 				CN
+ 
+-74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
+-74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
+-				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
+-				SHENZHEN    518000
++A0-09-2E   (hex)		zte corporation
++A0092E     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
++14-75-5B   (hex)		Intel Corporate
++14755B     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ A8-B1-3B   (hex)		HP Inc.
+ A8B13B     (base 16)		HP Inc.
+ 				10300 Energy Dr
+@@ -190457,6 +190667,12 @@ C43875     (base 16)		Sonos, Inc.
+ 				Reno  NV  89507
+ 				US
+ 
++20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
+ DC-A9-56   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ DCA956     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				NO.18 HAIBIN ROAD,
+@@ -190475,24 +190691,12 @@ BCD206     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
++CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
++CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
++				No.666, Han-Pu Rd. Yu-Shan
++				Kun-Shan  Jiang Su  215316
+ 				CN
+ 
+-14-75-5B   (hex)		Intel Corporate
+-14755B     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-F4-E2-04   (hex)		COYOTE SYSTEM
+-F4E204     (base 16)		COYOTE SYSTEM
+-				1, rue Royale
+-				Saint-Cloud    92210
+-				FR
+-
+ F8-4E-58   (hex)		Samsung Electronics Co.,Ltd
+ F84E58     (base 16)		Samsung Electronics Co.,Ltd
+ 				129, Samsung-ro, Youngtongl-Gu
+@@ -190505,11 +190709,29 @@ B47064     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
+-CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
+-				No.666, Han-Pu Rd. Yu-Shan
+-				Kun-Shan  Jiang Su  215316
+-				CN
++4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
++4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
++645DF4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
++D81068     (base 16)		Murata Manufacturing Co., Ltd.
++				1-10-1, Higashikotari
++				Nagaokakyo-shi  Kyoto  617-8555
++				JP
++
++5C-04-5A   (hex)		Company NA Stage & Light
++5C045A     (base 16)		Company NA Stage & Light
++				Lambertu 9
++				M?rupe    LV-2167
++				LV
+ 
+ 88-3F-0C   (hex)		system a.v. co., ltd.
+ 883F0C     (base 16)		system a.v. co., ltd.
+@@ -190529,17 +190751,11 @@ C8BE35     (base 16)		Extreme Networks, Inc.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
+-D81068     (base 16)		Murata Manufacturing Co., Ltd.
+-				1-10-1, Higashikotari
+-				Nagaokakyo-shi  Kyoto  617-8555
+-				JP
+-
+-5C-04-5A   (hex)		Company NA Stage & Light
+-5C045A     (base 16)		Company NA Stage & Light
+-				Lambertu 9
+-				M?rupe    LV-2167
+-				LV
++F4-E2-04   (hex)		COYOTE SYSTEM
++F4E204     (base 16)		COYOTE SYSTEM
++				1, rue Royale
++				Saint-Cloud    92210
++				FR
+ 
+ 58-C3-56   (hex)		EM Microelectronic
+ 58C356     (base 16)		EM Microelectronic
+@@ -190565,17 +190781,11 @@ CCDD58     (base 16)		Robert Bosch GmbH
+ 				Stuttgart    70499
+ 				DE
+ 
+-4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
+-4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+-64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
+-645DF4     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
++D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
++D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
+ 
+ 88-FC-5D   (hex)		Cisco Systems, Inc
+ 88FC5D     (base 16)		Cisco Systems, Inc
+@@ -190607,11 +190817,11 @@ F4C88A     (base 16)		Intel Corporate
+ 				Beijing    100053
+ 				CN
+ 
+-D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
++50-28-4A   (hex)		Intel Corporate
++50284A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+ 5C-A4-F4   (hex)		zte corporation
+ 5CA4F4     (base 16)		zte corporation
+@@ -190625,11 +190835,11 @@ D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				kakuda-City  Miyagi-Pref  981-1595
+ 				JP
+ 
+-50-28-4A   (hex)		Intel Corporate
+-50284A     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++24-6C-60   (hex)		Huawei Device Co., Ltd.
++246C60     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
+ 
+ 98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+ 98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+@@ -190637,11 +190847,11 @@ D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
+-24-6C-60   (hex)		Huawei Device Co., Ltd.
+-246C60     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
++30-3E-A7   (hex)		Intel Corporate
++303EA7     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+ 28-A3-31   (hex)		Sierra Wireless
+ 28A331     (base 16)		Sierra Wireless
+@@ -190649,12 +190859,6 @@ D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				Richmond  BC  V6V 3A4
+ 				CA
+ 
+-18-34-AF   (hex)		Kaonmedia CO., LTD.
+-1834AF     (base 16)		Kaonmedia CO., LTD.
+-				884-3, Seongnam-daero, Bundang-gu
+-				Seongnam-si  Gyeonggi-do  13517
+-				KR
+-
+ EC-62-60   (hex)		Espressif Inc.
+ EC6260     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -190667,23 +190871,23 @@ B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Chongqing   China  401120
+ 				CN
+ 
+-30-3E-A7   (hex)		Intel Corporate
+-303EA7     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ 60-7D-09   (hex)		Luxshare Precision Industry Co., Ltd
+ 607D09     (base 16)		Luxshare Precision Industry Co., Ltd
+ 				2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District
+ 				Shenzhen City  Guangdong Province  518100
+ 				CN
+ 
+-CC-3E-79   (hex)		ARRIS Group, Inc.
+-CC3E79     (base 16)		ARRIS Group, Inc.
+-				6450 Sequence Drive
+-				San Diego  CA  92121
+-				US
++18-34-AF   (hex)		Kaonmedia CO., LTD.
++1834AF     (base 16)		Kaonmedia CO., LTD.
++				884-3, Seongnam-daero, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13517
++				KR
++
++28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++				No.17 Longmen Road
++				Changzhou  JiangSu  213164
++				CN
+ 
+ 28-F5-D1   (hex)		ARRIS Group, Inc.
+ 28F5D1     (base 16)		ARRIS Group, Inc.
+@@ -190697,12 +190901,6 @@ CC3E79     (base 16)		ARRIS Group, Inc.
+ 				San Diego  CA  92121
+ 				US
+ 
+-28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+-28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+-				No.17 Longmen Road
+-				Changzhou  JiangSu  213164
+-				CN
+-
+ 90-D4-73   (hex)		vivo Mobile Communication Co., Ltd.
+ 90D473     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				No.1, vivo Road, Chang'an
+@@ -190715,6 +190913,30 @@ CC3E79     (base 16)		ARRIS Group, Inc.
+ 				Dongguan    523808
+ 				CN
+ 
++CC-3E-79   (hex)		ARRIS Group, Inc.
++CC3E79     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
++
++00-16-A3   (hex)		INGETEAM
++0016A3     (base 16)		INGETEAM
++				Parque Tecnologico de Bizkaia, Edificio 110
++				Zamudio  Bizkaia  48170
++				ES
++
++F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
++F06C5D     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
++				CN
++
+ C8-F0-9E   (hex)		Espressif Inc.
+ C8F09E     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -190733,16 +190955,16 @@ DC5475     (base 16)		Espressif Inc.
+ 				San Francisco    94158
+ 				US
+ 
+-00-16-A3   (hex)		INGETEAM
+-0016A3     (base 16)		INGETEAM
+-				Parque Tecnologico de Bizkaia, Edificio 110
+-				Zamudio  Bizkaia  48170
+-				ES
++28-6F-40   (hex)		Tonly Technology Co. Ltd 
++286F40     (base 16)		Tonly Technology Co. Ltd 
++				Section 37, Zhongkai Hi-Tech Development Zone
++				Huizhou  Guangdong  516006
++				CN
+ 
+-24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+-24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+-				Beijing  Beijing  100085
++0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
++0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
++				Huangpu 128, JunCheng Road
++				GuangZhou  Guangdong  510530
+ 				CN
+ 
+ 1C-0D-7D   (hex)		Apple, Inc.
+@@ -190763,48 +190985,6 @@ DC5475     (base 16)		Espressif Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
+-F06C5D     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-40-B0-2F   (hex)		Miele & Cie. KG
+-40B02F     (base 16)		Miele & Cie. KG
+-				Carl-Miele-Straße 29
+-				Gütersloh    33332
+-				DE
+-
+-18-66-F0   (hex)		Jupiter Systems
+-1866F0     (base 16)		Jupiter Systems
+-				31015 Huntwood Ave
+-				Hayward  CA  94544-7007
+-				US
+-
+-74-60-4C   (hex)		RØDE
+-74604C     (base 16)		RØDE
+-				107 Carnarvon St
+-				Silverwater  NSW  2128
+-				AU
+-
+-28-6F-40   (hex)		Tonly Technology Co. Ltd 
+-286F40     (base 16)		Tonly Technology Co. Ltd 
+-				Section 37, Zhongkai Hi-Tech Development Zone
+-				Huizhou  Guangdong  516006
+-				CN
+-
+-BC-C7-DA   (hex)		Earda Technologies co Ltd
+-BCC7DA     (base 16)		Earda Technologies co Ltd
+-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+-				Guangzhou  Guangdong  511455
+-				CN
+-
+-0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
+-0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
+-				Huangpu 128, JunCheng Road
+-				GuangZhou  Guangdong  510530
+-				CN
+-
+ 14-94-6C   (hex)		Apple, Inc.
+ 14946C     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -190817,11 +190997,17 @@ BCC7DA     (base 16)		Earda Technologies co Ltd
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-58-00-32   (hex)		Genexis B.V.
+-580032     (base 16)		Genexis B.V.
+-				Lodewijkstraat 1A
+-				Eindhoven    5652AC
+-				NL
++74-60-4C   (hex)		RØDE
++74604C     (base 16)		RØDE
++				107 Carnarvon St
++				Silverwater  NSW  2128
++				AU
++
++40-B0-2F   (hex)		Miele & Cie. KG
++40B02F     (base 16)		Miele & Cie. KG
++				Carl-Miele-Straße 29
++				Gütersloh    33332
++				DE
+ 
+ B4-7D-76   (hex)		KNS Group LLC
+ B47D76     (base 16)		KNS Group LLC
+@@ -190835,18 +191021,6 @@ C0AD97     (base 16)		TECNO MOBILE LIMITED
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
+-B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
+-B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+-				Wanan  China/jiangxi  343800
+-				CN
+-
+-4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+-4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+-				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
+-				ChongQing  ChongQing  400025
+-				CN
+-
+ 70-A9-83   (hex)		Cisco Systems, Inc
+ 70A983     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -190859,22 +191033,16 @@ BCFAEB     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-74-76-7D   (hex)		shenzhen kexint technology co.,ltd
+-74767D     (base 16)		shenzhen kexint technology co.,ltd
+-				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
+-				shenzhen  guangdong  518000
+-				CN
+-
+-E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+-E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+-				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
+-				Guangzhou    510623
+-				CN
++18-66-F0   (hex)		Jupiter Systems
++1866F0     (base 16)		Jupiter Systems
++				31015 Huntwood Ave
++				Hayward  CA  94544-7007
++				US
+ 
+-F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
++BC-C7-DA   (hex)		Earda Technologies co Ltd
++BCC7DA     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
+ 				CN
+ 
+ 84-85-53   (hex)		Biznes Systema Telecom, LLC
+@@ -190883,6 +191051,12 @@ F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				Moscow    121087
+ 				RU
+ 
++58-00-32   (hex)		Genexis B.V.
++580032     (base 16)		Genexis B.V.
++				Lodewijkstraat 1A
++				Eindhoven    5652AC
++				NL
++
+ D8-88-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ D88863     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -190901,6 +191075,36 @@ C03E50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
++4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
++				ChongQing  ChongQing  400025
++				CN
++
++74-76-7D   (hex)		shenzhen kexint technology co.,ltd
++74767D     (base 16)		shenzhen kexint technology co.,ltd
++				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
++				shenzhen  guangdong  518000
++				CN
++
++B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
++B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
++				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
++				Wanan  China/jiangxi  343800
++				CN
++
++E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
++				Guangzhou    510623
++				CN
++
++F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
+ A0-C9-8B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+ A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Werinherstrasse 91
+@@ -190913,18 +191117,6 @@ A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-4C-9D-22   (hex)		ACES Co.,Ltd
+-4C9D22     (base 16)		ACES Co.,Ltd
+-				TianGong Avenue #916, Tianfu New Area
+-				ChengDu  Sichuan Province  610000
+-				CN
+-
+-88-C9-E8   (hex)		Sony Corporation
+-88C9E8     (base 16)		Sony Corporation
+-				Sony City Osaki 2-10-1
+-				Shinagawa-ku   Tokyo  141-8610
+-				JP
+-
+ B8-F0-B9   (hex)		zte corporation
+ B8F0B9     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+@@ -190937,22 +191129,28 @@ B8F0B9     (base 16)		zte corporation
+ 				Gwangju  Gwangsan-gu  506-731
+ 				KR
+ 
+-D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
+-D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+-				No.1199,Waterfront Road 
+-				Hangzhou  Zhejiang  310053
++4C-9D-22   (hex)		ACES Co.,Ltd
++4C9D22     (base 16)		ACES Co.,Ltd
++				TianGong Avenue #916, Tianfu New Area
++				ChengDu  Sichuan Province  610000
+ 				CN
+ 
++88-C9-E8   (hex)		Sony Corporation
++88C9E8     (base 16)		Sony Corporation
++				Sony City Osaki 2-10-1
++				Shinagawa-ku   Tokyo  141-8610
++				JP
++
+ 00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ 00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+-44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				Building, No.33, Xiandong Rd, Xili
+-				Nanshan District, Shenzhen  PRC  518053
++D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
++D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
++				No.1199,Waterfront Road 
++				Hangzhou  Zhejiang  310053
+ 				CN
+ 
+ F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+@@ -190961,12 +191159,36 @@ F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Chongqing   China  401120
+ 				CN
+ 
++44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
++44D3AD     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
+ 94-D3-31   (hex)		Xiaomi Communications Co Ltd
+ 94D331     (base 16)		Xiaomi Communications Co Ltd
+ 				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
++34-DD-04   (hex)		Minut AB
++34DD04     (base 16)		Minut AB
++				Baltzarsgatan 23
++				Malmö    21136
++				SE
++
++60-1E-98   (hex)		Axevast Technology
++601E98     (base 16)		Axevast Technology
++				5F., No. 20, Guanqian Road, Zhongzheng District
++				Taipei City    100007
++				TW
++
++A8-F7-D9   (hex)		Mist Systems, Inc.
++A8F7D9     (base 16)		Mist Systems, Inc.
++				1601 South De Anza Blvd, Suite 248
++				Cupertino  CA  95014
++				US
++
+ 5C-8C-30   (hex)		Taicang T&W Electronics
+ 5C8C30     (base 16)		Taicang T&W Electronics
+ 				89# Jiang Nan RD
+@@ -190985,18 +191207,6 @@ F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				San Jose  CA  94568
+ 				US
+ 
+-34-DD-04   (hex)		Minut AB
+-34DD04     (base 16)		Minut AB
+-				Baltzarsgatan 23
+-				Malmö    21136
+-				SE
+-
+-E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+ 68-D9-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 68D927     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -191033,17 +191243,11 @@ E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Shanghai    200233
+ 				CN
+ 
+-60-1E-98   (hex)		Axevast Technology
+-601E98     (base 16)		Axevast Technology
+-				5F., No. 20, Guanqian Road, Zhongzheng District
+-				Taipei City    100007
+-				TW
+-
+-A8-F7-D9   (hex)		Mist Systems, Inc.
+-A8F7D9     (base 16)		Mist Systems, Inc.
+-				1601 South De Anza Blvd, Suite 248
+-				Cupertino  CA  95014
+-				US
++E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
+ 
+ 2C-3B-70   (hex)		AzureWave Technology Inc.
+ 2C3B70     (base 16)		AzureWave Technology Inc.
+@@ -191069,6 +191273,12 @@ F4227A     (base 16)		Guangdong Seneasy Intelligent Technology Co., Ltd.
+ 				Piscataway  NJ  08554
+ 				US
+ 
++DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
++DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
++				1F, No.236 Ba’ai Street, Shulin District
++				New Taipei City    23845
++				TW
++
+ A4-75-B9   (hex)		Samsung Electronics Co.,Ltd
+ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -191081,18 +191291,18 @@ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-6C-60-D0   (hex)		Huawei Device Co., Ltd.
+-6C60D0     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+ 1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
+ 1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
++6C-60-D0   (hex)		Huawei Device Co., Ltd.
++6C60D0     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
+ 64-0E-6A   (hex)		SECO-LARM USA Inc
+ 640E6A     (base 16)		SECO-LARM USA Inc
+ 				16842 Millikan
+@@ -191105,12 +191315,6 @@ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				San Jose  CA  95110
+ 				US
+ 
+-DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
+-DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
+-				1F, No.236 Ba’ai Street, Shulin District
+-				New Taipei City    23845
+-				TW
+-
+ 70-20-84   (hex)		Hon Hai Precision Industry Co., Ltd.
+ 702084     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+@@ -191123,12 +191327,6 @@ DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
+ 				ShenZhen  GuangDong  518109
+ 				CN
+ 
+-1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
+-1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+ 18-AA-1E   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 18AA1E     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 				4F,Block A, Skyworth?Building,
+@@ -191147,6 +191345,18 @@ D452EE     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
++1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
++1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
++E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
++E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
++				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
++				Hong Kong    999077
++				HK
++
+ 90-21-06   (hex)		SKY UK LIMITED
+ 902106     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -191165,11 +191375,17 @@ F08756     (base 16)		Zyxel Communications Corporation
+ 				Hsichu  Taiwan  300
+ 				TW
+ 
+-E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
+-E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
+-				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
+-				Hong Kong    999077
+-				HK
++18-C3-00   (hex)		Nokia
++18C300     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++D4-4D-77   (hex)		Nokia
++D44D77     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
+ 
+ 48-27-E2   (hex)		Espressif Inc.
+ 4827E2     (base 16)		Espressif Inc.
+@@ -191177,6 +191393,12 @@ E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
++F4-6D-3F   (hex)		Intel Corporate
++F46D3F     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 58-B3-8F   (hex)		New H3C Technologies Co., Ltd
+ 58B38F     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+@@ -191189,30 +191411,12 @@ E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
+ 				Zhenjiang  Jiangsu  212003
+ 				CN
+ 
+-F4-6D-3F   (hex)		Intel Corporate
+-F46D3F     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ 6C-72-4A   (hex)		Onkyo Technology K.K.
+ 6C724A     (base 16)		Onkyo Technology K.K.
+ 				Lux Building (5th floor),1-1-41 Kawamata
+ 				Higashiosaka City  Osaka  577-0063
+ 				JP
+ 
+-18-C3-00   (hex)		Nokia
+-18C300     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
+-
+-D4-4D-77   (hex)		Nokia
+-D44D77     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
+-
+ DC-05-39   (hex)		Cisco Systems, Inc
+ DC0539     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -191225,6 +191429,18 @@ DC0539     (base 16)		Cisco Systems, Inc
+ 				East Greenwich  RI  02818
+ 				US
+ 
++E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++C4-64-F2   (hex)		Infinix mobility limited
++C464F2     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
+ B0-1F-47   (hex)		Heights Telecom T ltd
+ B01F47     (base 16)		Heights Telecom T ltd
+ 				Moshe Lerer 15
+@@ -191279,30 +191495,12 @@ BC1541     (base 16)		Nokia
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
+-
+-C4-64-F2   (hex)		Infinix mobility limited
+-C464F2     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+ 94-6D-AE   (hex)		Mellanox Technologies, Inc.
+ 946DAE     (base 16)		Mellanox Technologies, Inc.
+ 				350 Oakmead Parkway, Suite 100 
+ 				Sunnyvale  CA  94085
+ 				US
+ 
+-40-FD-F3   (hex)		AMPAK Technology,Inc.
+-40FDF3     (base 16)		AMPAK Technology,Inc.
+-				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+-				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+-				TW
+-
+ E4-A6-34   (hex)		Universal Electronics, Inc.
+ E4A634     (base 16)		Universal Electronics, Inc.
+ 				201 E. Sandpointe Ave
+@@ -191315,8 +191513,92 @@ E4A634     (base 16)		Universal Electronics, Inc.
+ 				Racho Santa MArgarita  CA  92688
+ 				US
+ 
++50-63-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++506391     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++E8-A3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E8A34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++04-18-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++041892     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++14-65-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++14656A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++AC-B6-87   (hex)		Arcadyan Corporation
++ACB687     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
++
++6C-B7-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++6CB7E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C4-75-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C475EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++90-25-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++9025F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
+ 38-7C-76   (hex)		Universal Global Scientific Industrial Co., Ltd.
+ 387C76     (base 16)		Universal Global Scientific Industrial Co., Ltd.
+ 				141, Lane 351, Taiping Road, Sec.1,Tsao Tuen
+ 				Nan-Tou  Taiwan  54261
+ 				TW
++
++40-FD-F3   (hex)		AMPAK Technology,Inc.
++40FDF3     (base 16)		AMPAK Technology,Inc.
++				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
++				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
++				TW
++
++EC-E6-1D   (hex)		Huawei Device Co., Ltd.
++ECE61D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++48-6D-BB   (hex)		Vestel Elektronik San ve Tic. A.S.
++486DBB     (base 16)		Vestel Elektronik San ve Tic. A.S.
++				Organize san
++				Manisa  Turket  45030
++				TR
++
++4C-63-AD   (hex)		Huawei Device Co., Ltd.
++4C63AD     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++DC-DB-27   (hex)		Huawei Device Co., Ltd.
++DCDB27     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++CC-96-E5   (hex)		Dell Inc.
++CC96E5     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
+diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
+index 18806ccc14..3ff16ce0bf 100644
+--- a/hwdb.d/ma-medium.txt
++++ b/hwdb.d/ma-medium.txt
+@@ -4856,12 +4856,6 @@ C00000-CFFFFF     (base 16)		Shenzhen Micro&Nano Perception Computing Technology
+ 				Tokyo  Minato  108-0023
+ 				JP
+ 
+-0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+-900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
+-				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
+-				HONGKONG    999077
+-				CN
+-
+ 0C-86-29   (hex)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ 				27 Shucun West Road, Haidian District,
+@@ -4874,6 +4868,12 @@ D00000-DFFFFF     (base 16)		BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD
+ 				ShenZhen  GuangDong  518055
+ 				CN
+ 
++0C-86-29   (hex)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++900000-9FFFFF     (base 16)		HONGKONG SAINT TECH INDUSTRIAL LIMITED
++				RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK
++				HONGKONG    999077
++				CN
++
+ 0C-86-29   (hex)		Akribis Systems
+ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5
+@@ -4892,12 +4892,6 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Rydalmere   NSW  2116
+ 				AU
+ 
+-6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
+-100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
+-				7430 NEW TECHNOLOGY WAY, Suite 150
+-				FREDERICK    21703
+-				US
+-
+ 50-FF-99   (hex)		COYOTE SYSTEM
+ 100000-1FFFFF     (base 16)		COYOTE SYSTEM
+ 				24 quai Gallieni
+@@ -4916,10 +4910,10 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Kunshan  Jiangsu  215324
+ 				CN
+ 
+-38-1F-26   (hex)		Avon Protection
+-800000-8FFFFF     (base 16)		Avon Protection
+-				503 8th Street
+-				Cadillac  MI  49601
++6C-93-08   (hex)		WATERFORD CONSULTANTS LLC
++100000-1FFFFF     (base 16)		WATERFORD CONSULTANTS LLC
++				7430 NEW TECHNOLOGY WAY, Suite 150
++				FREDERICK    21703
+ 				US
+ 
+ 30-43-D7   (hex)		DIGICITI Technology Co.,Ltd
+@@ -4934,6 +4928,18 @@ B00000-BFFFFF     (base 16)		Akribis Systems
+ 				Suzhou    215021
+ 				CN
+ 
++38-1F-26   (hex)		Avon Protection
++800000-8FFFFF     (base 16)		Avon Protection
++				503 8th Street
++				Cadillac  MI  49601
++				US
++
++18-A5-9C   (hex)		Thermia AB
++500000-5FFFFF     (base 16)		Thermia AB
++				Snickaregatan 1
++				Arvika    67134
++				SE
++
+ 38-1F-26   (hex)		SMS Evoko Group AB
+ 900000-9FFFFF     (base 16)		SMS Evoko Group AB
+ 				Hastholmsvagen 32
+@@ -4946,12 +4952,6 @@ B00000-BFFFFF     (base 16)		CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFO
+ 				MANAUS  AMAZONAS  69041-025
+ 				BR
+ 
+-18-A5-9C   (hex)		Thermia AB
+-500000-5FFFFF     (base 16)		Thermia AB
+-				Snickaregatan 1
+-				Arvika    67134
+-				SE
+-
+ 18-A5-9C   (hex)		BlueEyes Technology
+ C00000-CFFFFF     (base 16)		BlueEyes Technology
+ 				7F-3, No.200, Sec. 4, Wenxin Rd.,
+@@ -4970,18 +4970,6 @@ E00000-EFFFFF     (base 16)		Globe Tracker ApS
+ 				kobenhavn  State / Province*  1401
+ 				DK
+ 
+-C4-A1-0E   (hex)		HYOSUNG HEAVY INDUSTRIES
+-000000-0FFFFF     (base 16)		HYOSUNG HEAVY INDUSTRIES
+-				119, Mapo-daero (Gongdeok-dong), Mapo-gu
+-				Seoul    04144
+-				KR
+-
+-C4-A1-0E   (hex)		Consolinno Energy GmbH
+-300000-3FFFFF     (base 16)		Consolinno Energy GmbH
+-				Franz-Mayer-Straße 1
+-				Regensburg  Bayern  93053
+-				DE
+-
+ C4-A1-0E   (hex)		Connectlab SRL
+ D00000-DFFFFF     (base 16)		Connectlab SRL
+ 				via donatello 30
+@@ -4994,6 +4982,18 @@ C4-A1-0E   (hex)		BARTEC PIXAVI AS
+ 				SANDNES  Rogaland  4313
+ 				NO
+ 
++C4-A1-0E   (hex)		HYOSUNG HEAVY INDUSTRIES
++000000-0FFFFF     (base 16)		HYOSUNG HEAVY INDUSTRIES
++				119, Mapo-daero (Gongdeok-dong), Mapo-gu
++				Seoul    04144
++				KR
++
++C4-A1-0E   (hex)		Consolinno Energy GmbH
++300000-3FFFFF     (base 16)		Consolinno Energy GmbH
++				Franz-Mayer-Straße 1
++				Regensburg  Bayern  93053
++				DE
++
+ C4-A1-0E   (hex)		Ayla Networks (Shenzhen) Co., Ltd.
+ 800000-8FFFFF     (base 16)		Ayla Networks (Shenzhen) Co., Ltd.
+ 				Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, 
+@@ -5012,12 +5012,6 @@ E00000-EFFFFF     (base 16)		KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD)
+ 				Ningbo  ZheJiang Province, P.R.C.  315400
+ 				CN
+ 
+-80-7B-85   (hex)		SCALA Digital Technology(Ningbo) CO, LTD
+-C00000-CFFFFF     (base 16)		SCALA Digital Technology(Ningbo) CO, LTD
+-				7 Hong Da Road, Hong Tang Industrial Park Zone A
+-				Ningbo  Zhejiang  315040
+-				CN
+-
+ 80-02-F4   (hex)		Baicells Technologies Co., Ltd
+ B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
+ 				10-11F,AL, No.1 Zhongguancun, Haidian
+@@ -5030,6 +5024,12 @@ B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
+ 				Suwon-si  Gyeonggi-do  16371
+ 				KR
+ 
++80-7B-85   (hex)		SCALA Digital Technology(Ningbo) CO, LTD
++C00000-CFFFFF     (base 16)		SCALA Digital Technology(Ningbo) CO, LTD
++				7 Hong Da Road, Hong Tang Industrial Park Zone A
++				Ningbo  Zhejiang  315040
++				CN
++
+ 8C-51-09   (hex)		Heliox Automotive B.V.
+ 500000-5FFFFF     (base 16)		Heliox Automotive B.V.
+ 				De Waal 24
+@@ -5042,6 +5042,12 @@ B00000-BFFFFF     (base 16)		Baicells Technologies Co., Ltd
+ 				Norcross  GA  30093
+ 				US
+ 
++0C-7F-ED   (hex)		Annapurna labs
++A00000-AFFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
+ FC-61-79   (hex)		Qisda Corporation
+ 500000-5FFFFF     (base 16)		Qisda Corporation
+ 				No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan
+@@ -5054,12 +5060,6 @@ FC-61-79   (hex)		Qisda Corporation
+ 				Foshan    528000
+ 				CN
+ 
+-0C-7F-ED   (hex)		Annapurna labs
+-A00000-AFFFFF     (base 16)		Annapurna labs
+-				Matam Scientific Industries Center,   Building 8.2
+-				Mail box 15123  Haifa  3508409
+-				IL
+-
+ FC-61-79   (hex)		Shenzhen Xmitech Electronic Co.,Ltd
+ C00000-CFFFFF     (base 16)		Shenzhen Xmitech Electronic Co.,Ltd
+ 				Room 8B1888, Block AB, New Energy Building, No.2239, Nanhai Avenue, Nanguang Community, Nanshan Street, Nanshan District, Shenzhen
+@@ -5072,6 +5072,12 @@ C00000-CFFFFF     (base 16)		Shenzhen Xmitech Electronic Co.,Ltd
+ 				Shenzhen  Guangdong  518052
+ 				CN
+ 
++30-3D-51   (hex)		Labman Automation
++B00000-BFFFFF     (base 16)		Labman Automation
++				Labman Automation LtdSeamer Hill
++				Stokesley  North Yorkshire  TS9 5NQ
++				GB
++
+ 4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+ 400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+ 				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+@@ -9644,23 +9650,17 @@ D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+ 				Guangzhou    511400
+ 				CN
+ 
+-10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
+-900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
+-				No.146, Sec. 1,Donxing Rd.
+-				Zhubei City, Hsinchu County   Taiwan  302058
+-				TW
+-
+ 10-54-D2   (hex)		Raylogic Control Systems Private Limited
+ 400000-4FFFFF     (base 16)		Raylogic Control Systems Private Limited
+ 				Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West
+ 				Mumbai  Maharashtra  400054
+ 				IN
+ 
+-10-54-D2   (hex)		Sybersense
+-500000-5FFFFF     (base 16)		Sybersense
+-				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
+-				Hong Kong    999077
+-				CN
++10-54-D2   (hex)		Bamboo Dynamics Corporation., Ltd.
++900000-9FFFFF     (base 16)		Bamboo Dynamics Corporation., Ltd.
++				No.146, Sec. 1,Donxing Rd.
++				Zhubei City, Hsinchu County   Taiwan  302058
++				TW
+ 
+ 10-54-D2   (hex)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+ 700000-7FFFFF     (base 16)		SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD
+@@ -9686,6 +9686,12 @@ D00000-DFFFFF     (base 16)		Shenzhen Vitalitim Technology Co., Ltd
+ 				Edison   NJ  08837
+ 				US
+ 
++10-54-D2   (hex)		Sybersense
++500000-5FFFFF     (base 16)		Sybersense
++				Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK
++				Hong Kong    999077
++				CN
++
+ 0C-86-29   (hex)		MyGregor Ltd
+ 800000-8FFFFF     (base 16)		MyGregor Ltd
+ 				11A, Carnegie str.
+@@ -9698,18 +9704,18 @@ D00000-DFFFFF     (base 16)		Annapurna labs
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
+-6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+-900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
+-				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+ 6C-93-08   (hex)		Shenzhen TOPWAY Technology Co.,LTD
+ A00000-AFFFFF     (base 16)		Shenzhen TOPWAY Technology Co.,LTD
+ 				Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist
+ 				ShenZhen  Guangdong  518055
+ 				CN
+ 
++6C-93-08   (hex)		Shenzhen DOOGEE Hengtong Technology CO., LTD
++900000-9FFFFF     (base 16)		Shenzhen DOOGEE Hengtong Technology CO., LTD
++				B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District
++				Shenzhen  Guangdong  518000
++				CN
++
+ 30-43-D7   (hex)		SYMES SA
+ 000000-0FFFFF     (base 16)		SYMES SA
+ 				4 allée technopolis, chemin des presses
+@@ -9734,6 +9740,12 @@ E00000-EFFFFF     (base 16)		ANDDORO LLC
+ 				New York  NY  10018
+ 				US
+ 
++38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
++				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
++				Jiaxing    314000
++				CN
++
+ 38-1F-26   (hex)		Synamedia
+ 200000-2FFFFF     (base 16)		Synamedia
+ 				Luipaardstraat 12
+@@ -9746,12 +9758,6 @@ C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
+ 				Beijing    100871
+ 				CN
+ 
+-38-1F-26   (hex)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+-500000-5FFFFF     (base 16)		Zhejiang Huazhou Intelligent Equipment Co,. Ltd
+-				Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, 
+-				Jiaxing    314000
+-				CN
+-
+ 18-A5-9C   (hex)		Omwave
+ 000000-0FFFFF     (base 16)		Omwave
+ 				5 rue Barbes
+@@ -9770,11 +9776,11 @@ C00000-CFFFFF     (base 16)		Jade Bird Fire Co., Ltd.
+ 				nanjing    211100
+ 				CN
+ 
+-1C-59-74   (hex)		Topway Global Technology Limited
+-800000-8FFFFF     (base 16)		Topway Global Technology Limited
+-				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
+-				Hong Kong  Hong Kong  999077
+-				HK
++1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
++D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
++				12th Floor, Block B, Building 7, International Innovation Valley
++				Shenzhen  Gunagdong  518000
++				CN
+ 
+ 1C-59-74   (hex)		King-On Technology Ltd.
+ C00000-CFFFFF     (base 16)		King-On Technology Ltd.
+@@ -9782,11 +9788,11 @@ C00000-CFFFFF     (base 16)		King-On Technology Ltd.
+ 				New Taipei  Taiwan  23146
+ 				TW
+ 
+-1C-59-74   (hex)		Shenzhen Geshem Technology Co Ltd
+-D00000-DFFFFF     (base 16)		Shenzhen Geshem Technology Co Ltd
+-				12th Floor, Block B, Building 7, International Innovation Valley
+-				Shenzhen  Gunagdong  518000
+-				CN
++1C-59-74   (hex)		Topway Global Technology Limited
++800000-8FFFFF     (base 16)		Topway Global Technology Limited
++				Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong  
++				Hong Kong  Hong Kong  999077
++				HK
+ 
+ 18-A5-9C   (hex)		Annapurna labs
+ D00000-DFFFFF     (base 16)		Annapurna labs
+@@ -9866,12 +9872,6 @@ C00000-CFFFFF     (base 16)		shenzhen newbridge communication equipment CO.,LTD
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
+-8C-51-09   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+-A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+-				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+-				Suzhou    215021
+-				CN
+-
+ 8C-51-09   (hex)		TianJin JointOptic Technology Co., LTD.
+ 000000-0FFFFF     (base 16)		TianJin JointOptic Technology Co., LTD.
+ 				Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, 
+@@ -9884,10 +9884,10 @@ A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ 				Shenzhen  Guangdong  518100
+ 				CN
+ 
+-8C-51-09   (hex)		Beijing Superhexa Century Technology Co., Ltd.
+-B00000-BFFFFF     (base 16)		Beijing Superhexa Century Technology Co., Ltd.
+-				Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing
+-				Beijing    100010
++8C-51-09   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++A00000-AFFFFF     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
++				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
++				Suzhou    215021
+ 				CN
+ 
+ E4-95-6E   (hex)		Tband srl
+@@ -9896,24 +9896,30 @@ E4-95-6E   (hex)		Tband srl
+ 				PORTOGRUARO  Venezia  30026
+ 				IT
+ 
++8C-51-09   (hex)		Beijing Superhexa Century Technology Co., Ltd.
++B00000-BFFFFF     (base 16)		Beijing Superhexa Century Technology Co., Ltd.
++				Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing
++				Beijing    100010
++				CN
++
+ 0C-7F-ED   (hex)		ALT Co., Ltd.
+ D00000-DFFFFF     (base 16)		ALT Co., Ltd.
+ 				#1201, 8, Seongnam-dearo 331beon-gil
+ 				Bundang-gu, Seongnam-si  Gyeonggi-do  13558
+ 				KR
+ 
+-0C-7F-ED   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
+-900000-9FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
+-				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
+-				shenzhen    518000
+-				CN
+-
+ 0C-7F-ED   (hex)		Netweb Technologies India Pvt Ltd
+ 600000-6FFFFF     (base 16)		Netweb Technologies India Pvt Ltd
+ 				Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh
+ 				Faridabad  Haryana  121004
+ 				IN
+ 
++0C-7F-ED   (hex)		Shenzhen ORVIBO Technology Co., Ltd.
++900000-9FFFFF     (base 16)		Shenzhen ORVIBO Technology Co., Ltd.
++				F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC.
++				shenzhen    518000
++				CN
++
+ FC-61-79   (hex)		Kvaliteta Systems and Solutions Private Limited 
+ 700000-7FFFFF     (base 16)		Kvaliteta Systems and Solutions Private Limited 
+ 				2207 Yamuna Building Techno Park Phase 3
+@@ -14783,6 +14789,12 @@ A00000-AFFFFF     (base 16)		Pavana Technologies JSC.
+ 				Vinh Phuc    35000
+ 				VN
+ 
++10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
++E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
++				Haier Information Industrial Complex, No.1 HaierRoad
++				Qingdao  Shandong  266101
++				CN
++
+ 10-54-D2   (hex)		GIPS Technology Co., Ltd.
+ 000000-0FFFFF     (base 16)		GIPS Technology Co., Ltd.
+ 				Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist.
+@@ -14807,12 +14819,6 @@ C00000-CFFFFF     (base 16)		LUXSHARE-ICT Co., Ltd.
+ 				Taipei City  Taiwan  114754
+ 				TW
+ 
+-10-54-D2   (hex)		COSMO AIOT TECHNOLOGY CO LTD
+-E00000-EFFFFF     (base 16)		COSMO AIOT TECHNOLOGY CO LTD
+-				Haier Information Industrial Complex, No.1 HaierRoad
+-				Qingdao  Shandong  266101
+-				CN
+-
+ 0C-86-29   (hex)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+ C00000-CFFFFF     (base 16)		SHENZHEN YINGMU TECHNOLOGY.,LTD
+ 				8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District,
+@@ -14837,12 +14843,6 @@ E00000-EFFFFF     (base 16)		FX TECHNOLOGY LIMITED
+ 				Karlsruhe    76131
+ 				DE
+ 
+-30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
+-100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+-				Baoan Xin'an Streat
+-				Shenzhen    002052
+-				CN
+-
+ 30-43-D7   (hex)		Sprocomm Technologies Co., Ltd.Guangming Branch
+ 600000-6FFFFF     (base 16)		Sprocomm Technologies Co., Ltd.Guangming Branch
+ 				Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, 
+@@ -14855,6 +14855,12 @@ C00000-CFFFFF     (base 16)		Shenzhen haichangxing Technology Co., Ltd.
+ 				SHENZHEN  GUANGZHOU  518000
+ 				CN
+ 
++30-43-D7   (hex)		Shenzhen juduoping Technology Co.,Ltd
++100000-1FFFFF     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
+ 30-43-D7   (hex)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ 				10 Keyuan Road, Songshan Lake
+@@ -14867,18 +14873,18 @@ E00000-EFFFFF     (base 16)		Guangdong Hongqin Telecom  Technology Co. Ltd.
+ 				Bengaluru  Karnataka  560100
+ 				IN
+ 
+-18-A5-9C   (hex)		Erba Lachema s.r.o.
+-A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
+-				Karasek1d
+-				Brno    62100
+-				CZ
+-
+ 18-A5-9C   (hex)		ePower Network Solution Co., Ltd.
+ 700000-7FFFFF     (base 16)		ePower Network Solution Co., Ltd.
+ 				No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., 
+ 				New Taipei City ,    242063
+ 				TW
+ 
++18-A5-9C   (hex)		Erba Lachema s.r.o.
++A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
++				Karasek1d
++				Brno    62100
++				CZ
++
+ 1C-59-74   (hex)		Shenzhen Hanshine Technology Co.Ltd.
+ 000000-0FFFFF     (base 16)		Shenzhen Hanshine Technology Co.Ltd.
+ 				Buiding 2 ,row 3,number 2 industrail  zone,yulv community,Yutang street 
+@@ -14891,12 +14897,24 @@ A00000-AFFFFF     (base 16)		Erba Lachema s.r.o.
+ 				Chongqing    400000
+ 				CN
+ 
++6C-15-24   (hex)		Telsonic AG
++100000-1FFFFF     (base 16)		Telsonic AG
++				Industriestrasse 6b
++				Bronschhofen  St.Gallen  9552
++				CH
++
+ 18-A5-9C   (hex)		Beijing QS Medical Technology Co., Ltd.
+ 300000-3FFFFF     (base 16)		Beijing QS Medical Technology Co., Ltd.
+ 				Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area
+ 				Beijing    100176
+ 				CN
+ 
++6C-15-24   (hex)		SYMLINK CORPORATION
++D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
++				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
++				Taipei    11492
++				TW
++
+ C4-A1-0E   (hex)		Clinton Electronics Corporation
+ B00000-BFFFFF     (base 16)		Clinton Electronics Corporation
+ 				6701 Clinton Road
+@@ -14909,12 +14927,6 @@ C4-A1-0E   (hex)		Wistron InfoComn (Kunshan) Co., Ltd.
+ 				Kunshan  Jiangsu  215300
+ 				CN
+ 
+-6C-15-24   (hex)		Telsonic AG
+-100000-1FFFFF     (base 16)		Telsonic AG
+-				Industriestrasse 6b
+-				Bronschhofen  St.Gallen  9552
+-				CH
+-
+ C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 700000-7FFFFF     (base 16)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 				Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District,
+@@ -14927,18 +14939,24 @@ C4-A1-0E   (hex)		Guangzhou South Satellite Navigation Instrument Co., Ltd.
+ 				Bentley  Western Australia  6102
+ 				AU
+ 
+-6C-15-24   (hex)		SYMLINK CORPORATION
+-D00000-DFFFFF     (base 16)		SYMLINK CORPORATION
+-				6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park
+-				Taipei    11492
+-				TW
+-
+ 6C-15-24   (hex)		AEC s.r.l.
+ E00000-EFFFFF     (base 16)		AEC s.r.l.
+ 				Via Zambon, 33/A
+ 				Creazzo  Vicenza  36051
+ 				IT
+ 
++70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
++000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
++				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
++				ShenZhen  GuangDong  518000
++				CN
++
++70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
++B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
++				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
++				beijing  beijing  100029
++				CN
++
+ C4-A1-0E   (hex)		Harbour Cross Technology Ltd
+ 400000-4FFFFF     (base 16)		Harbour Cross Technology Ltd
+ 				Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang,
+@@ -14951,16 +14969,10 @@ C4-A1-0E   (hex)		Harbour Cross Technology Ltd
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
+-70-50-E7   (hex)		Shenzhen C & D Electronics Co., Ltd.
+-000000-0FFFFF     (base 16)		Shenzhen C & D Electronics Co., Ltd.
+-				9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District
+-				ShenZhen  GuangDong  518000
+-				CN
+-
+-70-50-E7   (hex)		Beijing Shannoncyber Technology Co.,Ltd
+-B00000-BFFFFF     (base 16)		Beijing Shannoncyber Technology Co.,Ltd
+-				913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District
+-				beijing  beijing  100029
++80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
++				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
++				XIAMEN    361106
+ 				CN
+ 
+ 80-02-F4   (hex)		PassiveLogic
+@@ -14969,10 +14981,10 @@ A00000-AFFFFF     (base 16)		PassiveLogic
+ 				Holladay  UT  84121
+ 				US
+ 
+-80-02-F4   (hex)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+-900000-9FFFFF     (base 16)		XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD.
+-				SECOND  FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA
+-				XIAMEN    361106
++80-02-F4   (hex)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
++D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
++				No. 52, Guoxiang Road, Wujin economic development zone
++				ChangZhou  JiangSu  213100
+ 				CN
+ 
+ 80-02-F4   (hex)		Sichuan Fanyi Technology Co. Ltd.
+@@ -14981,12 +14993,6 @@ A00000-AFFFFF     (base 16)		PassiveLogic
+ 				Chengdu  Sichuan  650000
+ 				CN
+ 
+-80-02-F4   (hex)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
+-D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd
+-				No. 52, Guoxiang Road, Wujin economic development zone
+-				ChangZhou  JiangSu  213100
+-				CN
+-
+ 80-02-F4   (hex)		Infors AG
+ 400000-4FFFFF     (base 16)		Infors AG
+ 				Wuhrmattstr. 7
+@@ -15023,23 +15029,23 @@ D00000-DFFFFF     (base 16)		Jiangsu Vedkang Medicl Sclence and Technology Co.,L
+ 				Union City  CA  94587
+ 				US
+ 
+-0C-7F-ED   (hex)		Soft dB
+-300000-3FFFFF     (base 16)		Soft dB
+-				1040, avenue Belvédère #215
+-				Québec  Quebec  G1S 3G3
+-				CA
+-
+ FC-61-79   (hex)		MACH SYSTEMS s.r.o.
+ 900000-9FFFFF     (base 16)		MACH SYSTEMS s.r.o.
+ 				Pocernicka 272/96
+ 				Prague    10800
+ 				CZ
+ 
+-30-3D-51   (hex)		Media Hub Digital Smart Home Pty Ltd.
+-500000-5FFFFF     (base 16)		Media Hub Digital Smart Home Pty Ltd.
+-				40 Koornang Road
+-				Scoresby  VIC  3179
+-				AU
++0C-7F-ED   (hex)		Soft dB
++300000-3FFFFF     (base 16)		Soft dB
++				1040, avenue Belvédère #215
++				Québec  Quebec  G1S 3G3
++				CA
++
++FC-61-79   (hex)		Annapurna labs
++800000-8FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
+ 
+ FC-61-79   (hex)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+ 000000-0FFFFF     (base 16)		Zhuhai Anjubao Electronics Technology Co., Ltd.
+@@ -15053,11 +15059,17 @@ FC-61-79   (hex)		Shenzhen Shenshui Electronic Commerce Co.,Ltd
+ 				Shenzhen    518132
+ 				CN
+ 
+-FC-61-79   (hex)		Annapurna labs
+-800000-8FFFFF     (base 16)		Annapurna labs
+-				Matam Scientific Industries Center,   Building 8.2
+-				Mail box 15123  Haifa  3508409
+-				IL
++30-3D-51   (hex)		Media Hub Digital Smart Home Pty Ltd.
++500000-5FFFFF     (base 16)		Media Hub Digital Smart Home Pty Ltd.
++				40 Koornang Road
++				Scoresby  VIC  3179
++				AU
++
++30-3D-51   (hex)		Dspread Technology (Beijing) Inc.
++400000-4FFFFF     (base 16)		Dspread Technology (Beijing) Inc.
++				Jingxin Building, 2045 Suite , Chaoyang District
++				Beijing    100027
++				CN
+ 
+ 30-3D-51   (hex)		TeraNXT Global India Pvt Ltd.
+ A00000-AFFFFF     (base 16)		TeraNXT Global India Pvt Ltd.
+@@ -15065,6 +15077,12 @@ A00000-AFFFFF     (base 16)		TeraNXT Global India Pvt Ltd.
+ 				DELHI  DELHI  110005
+ 				IN
+ 
++30-3D-51   (hex)		S & A Systems
++300000-3FFFFF     (base 16)		S & A Systems
++				992 Sids Rd.
++				Rockwall  TX  75032
++				US
++
+ 4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+ 600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+ 				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+@@ -19847,18 +19865,18 @@ D00000-DFFFFF     (base 16)		Sun wealth technology corporation limited
+ 				Seoul    05808
+ 				KR
+ 
+-6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+-B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
+-				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
+-				shenz  guangdong  518055
+-				CN
+-
+ 0C-86-29   (hex)		HagerEnergy GmbH
+ 700000-7FFFFF     (base 16)		HagerEnergy GmbH
+ 				Karlstrasse 5
+ 				Osnabrueck    49074
+ 				DE
+ 
++6C-93-08   (hex)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
++B00000-BFFFFF     (base 16)		Shenzhen EZpro Sound & Light Technology Co., Ltd.
++				E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District
++				shenz  guangdong  518055
++				CN
++
+ 30-43-D7   (hex)		Xiaoniu network technology (Shanghai) Co., Ltd.
+ C00000-CFFFFF     (base 16)		Xiaoniu network technology (Shanghai) Co., Ltd.
+ 				Room 706, building 3, no.20 east road, jingan district.
+@@ -19877,23 +19895,17 @@ A00000-AFFFFF     (base 16)		Flextronics International Kft
+ 				Zalaegerszeg    8900
+ 				HU
+ 
+-38-1F-26   (hex)		Airmaster A/S
+-400000-4FFFFF     (base 16)		Airmaster A/S
+-				Industrivej 59
+-				Aars    9600
+-				DK
+-
+ 38-1F-26   (hex)		HWACHANG CORPORATION 
+ D00000-DFFFFF     (base 16)		HWACHANG CORPORATION 
+ 				90, NONGGONGANJI-GIL
+ 				SOCHO-SI    24899
+ 				KR
+ 
+-18-A5-9C   (hex)		Residence Control Ltd
+-800000-8FFFFF     (base 16)		Residence Control Ltd
+-				Cvetan Vuchkov 7
+-				Sofia  Sofia  1614
+-				BG
++38-1F-26   (hex)		Airmaster A/S
++400000-4FFFFF     (base 16)		Airmaster A/S
++				Industrivej 59
++				Aars    9600
++				DK
+ 
+ 18-A5-9C   (hex)		Actiontec Electronics Inc.
+ 200000-2FFFFF     (base 16)		Actiontec Electronics Inc.
+@@ -19907,6 +19919,12 @@ D00000-DFFFFF     (base 16)		HWACHANG CORPORATION
+ 				Yeongtong-gu, Suwon-si  Gyeonggi-do  16229
+ 				KR
+ 
++18-A5-9C   (hex)		Residence Control Ltd
++800000-8FFFFF     (base 16)		Residence Control Ltd
++				Cvetan Vuchkov 7
++				Sofia  Sofia  1614
++				BG
++
+ 7C-70-BC   (hex)		Motec GmbH
+ A00000-AFFFFF     (base 16)		Motec GmbH
+ 				287 27 Road
+@@ -19931,12 +19949,6 @@ B00000-BFFFFF     (base 16)		Beijing Flintec Electronic Technology Co.,Ltd.
+ 				shanghai    201614
+ 				CN
+ 
+-1C-59-74   (hex)		Square Inc.
+-600000-6FFFFF     (base 16)		Square Inc.
+-				1455 Market St.
+-				San Francisco  CA  94103
+-				US
+-
+ 6C-15-24   (hex)		Shenzhen Electron Technology Co., LTD.
+ 500000-5FFFFF     (base 16)		Shenzhen Electron Technology Co., LTD.
+ 				Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District
+@@ -19955,6 +19967,18 @@ B00000-BFFFFF     (base 16)		Annapurna labs
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
++1C-59-74   (hex)		Square Inc.
++600000-6FFFFF     (base 16)		Square Inc.
++				1455 Market St.
++				San Francisco  CA  94103
++				US
++
++6C-15-24   (hex)		DEFA AS
++000000-0FFFFF     (base 16)		DEFA AS
++				Blingsmovegen 30
++				Nesbyen    3540
++				NO
++
+ 6C-15-24   (hex)		Linkplay
+ 200000-2FFFFF     (base 16)		Linkplay
+ 				891 W. Washington Ave.
+@@ -19967,12 +19991,6 @@ C00000-CFFFFF     (base 16)		CORAL-TAIYI
+ 				Taipei City    114
+ 				TW
+ 
+-6C-15-24   (hex)		DEFA AS
+-000000-0FFFFF     (base 16)		DEFA AS
+-				Blingsmovegen 30
+-				Nesbyen    3540
+-				NO
+-
+ C4-A1-0E   (hex)		O-NET Industrial Technologies (Shenzhen) Limited
+ 500000-5FFFFF     (base 16)		O-NET Industrial Technologies (Shenzhen) Limited
+ 				501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District
+@@ -19997,18 +20015,18 @@ D00000-DFFFFF     (base 16)		Eta Compute Inc.
+ 				Sunnyvale  CA  94086
+ 				US
+ 
+-80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+-C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
+-				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
+-				Wuhan  Hubei  430073
+-				CN
+-
+ 80-02-F4   (hex)		Sichuan lookout environment protection technology co.,Ltd
+ 100000-1FFFFF     (base 16)		Sichuan lookout environment protection technology co.,Ltd
+ 				No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone
+ 				Chengdu  Sichuan  610052
+ 				CN
+ 
++80-02-F4   (hex)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++C00000-CFFFFF     (base 16)		Wuhan Glory Road Intelligent Technology Co., Ltd.
++				18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone
++				Wuhan  Hubei  430073
++				CN
++
+ 8C-51-09   (hex)		PROCET Technology Co., Ltd(HK)
+ 200000-2FFFFF     (base 16)		PROCET Technology Co., Ltd(HK)
+ 				Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong
+@@ -20039,12 +20057,6 @@ C00000-CFFFFF     (base 16)		SpotterRF LLC
+ 				SuZhou  JiangSu  215000
+ 				CN
+ 
+-FC-61-79   (hex)		CHOEUNENG
+-400000-4FFFFF     (base 16)		CHOEUNENG
+-				22, Ildong-ro, Sangnok-gu
+-				Ansan-si  Gyeonggi-do  15326
+-				KR
+-
+ FC-61-79   (hex)		EchoStar Mobile
+ 300000-3FFFFF     (base 16)		EchoStar Mobile
+ 				25/28 NORTH WALL QUAY, DUBLIN 1, D01H104        Ireland
+@@ -20057,6 +20069,12 @@ E00000-EFFFFF     (base 16)		environmental systems corporation
+ 				Barrie    Ontario  L4N 8W8 
+ 				CA
+ 
++FC-61-79   (hex)		CHOEUNENG
++400000-4FFFFF     (base 16)		CHOEUNENG
++				22, Ildong-ro, Sangnok-gu
++				Ansan-si  Gyeonggi-do  15326
++				KR
++
+ FC-61-79   (hex)		Hangzhou LiDe Communication Co.,Ltd
+ 600000-6FFFFF     (base 16)		Hangzhou LiDe Communication Co.,Ltd
+ 				No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang,
+@@ -20075,6 +20093,12 @@ E00000-EFFFFF     (base 16)		ACCO Brands USA LLC
+ 				Lake Zurich  IL  60047-2997
+ 				US
+ 
++30-3D-51   (hex)		Annapurna labs
++900000-9FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
+ 20-85-93   (hex)		Great Lite International
+ 700000-7FFFFF     (base 16)		Great Lite International
+ 				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
+@@ -24878,6 +24902,12 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				Colorado Springs  CO  80907
+ 				US
+ 
++6C-93-08   (hex)		Uconfree technology(shenzhen)limited
++600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
++				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
++				SHENZHEN    518111
++				CN
++
+ 0C-86-29   (hex)		Annapurna labs
+ 300000-3FFFFF     (base 16)		Annapurna labs
+ 				Matam Scientific Industries Center,   Building 8.2
+@@ -24890,11 +24920,11 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				Hangzhou City  Zhejiang Province  31000
+ 				CN
+ 
+-6C-93-08   (hex)		Uconfree technology(shenzhen)limited
+-600000-6FFFFF     (base 16)		Uconfree technology(shenzhen)limited
+-				Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China
+-				SHENZHEN    518111
+-				CN
++30-43-D7   (hex)		Bodhi
++A00000-AFFFFF     (base 16)		Bodhi
++				3150 W. Prospect Road, Suite 330
++				Fort Lauderdale  FL  33309
++				US
+ 
+ 6C-93-08   (hex)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+ 200000-2FFFFF     (base 16)		ZHEJIANG XIAN DA Environmental Technology Co., Ltd
+@@ -24902,24 +24932,24 @@ E00000-EFFFFF     (base 16)		CEL Terminus (Shanghai) Information Technologies Co
+ 				HANGZHOU  ZHEJIANG  310000
+ 				CN
+ 
++30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
++800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
++				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
++				Shanghai    202150
++				CN
++
+ 30-43-D7   (hex)		PK Solutions LLC
+ 900000-9FFFFF     (base 16)		PK Solutions LLC
+ 				10811 E Harry
+ 				Wichita  KS  67207
+ 				US
+ 
+-30-43-D7   (hex)		Bodhi
+-A00000-AFFFFF     (base 16)		Bodhi
+-				3150 W. Prospect Road, Suite 330
+-				Fort Lauderdale  FL  33309
++30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
++400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
++				1749 Old Meadow Rd.
++				McLean  VA  22102
+ 				US
+ 
+-30-43-D7   (hex)		Kesu (Shanghai) Electronic Technology Co., Ltd
+-800000-8FFFFF     (base 16)		Kesu (Shanghai) Electronic Technology Co., Ltd
+-				3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District
+-				Shanghai    202150
+-				CN
+-
+ 38-1F-26   (hex)		NOITAC sp. z o.o. sp.k.
+ 600000-6FFFFF     (base 16)		NOITAC sp. z o.o. sp.k.
+ 				Szlak 28/3
+@@ -24932,12 +24962,6 @@ A00000-AFFFFF     (base 16)		Bodhi
+ 				YANG YANG GUN    25017
+ 				KR
+ 
+-30-43-D7   (hex)		FIBERME COMMUNICATIONS LLC
+-400000-4FFFFF     (base 16)		FIBERME COMMUNICATIONS LLC
+-				1749 Old Meadow Rd.
+-				McLean  VA  22102
+-				US
+-
+ 38-1F-26   (hex)		Deutronic Elektronik GmbH
+ B00000-BFFFFF     (base 16)		Deutronic Elektronik GmbH
+ 				Deutronicstraße 5
+@@ -25004,18 +25028,18 @@ A00000-AFFFFF     (base 16)		Jiangsu Perceive World Technology Co.,Ltd.
+ 				Nur-Sultan    010000
+ 				KZ
+ 
+-6C-15-24   (hex)		STERIS
+-A00000-AFFFFF     (base 16)		STERIS
+-				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
+-				Bishops Stortford  herts  CM23 5GZ
+-				GB
+-
+ C4-A1-0E   (hex)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+ 900000-9FFFFF     (base 16)		XI'AN YEP TELECOM TECHNOLOGY CO.,LTD
+ 				No.211 Tiangu 8th Road, High-tech Zone
+ 				Xi 'an   Shaanxi  710065
+ 				CN
+ 
++6C-15-24   (hex)		STERIS
++A00000-AFFFFF     (base 16)		STERIS
++				Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road
++				Bishops Stortford  herts  CM23 5GZ
++				GB
++
+ C4-A1-0E   (hex)		Alio, Inc
+ E00000-EFFFFF     (base 16)		Alio, Inc
+ 				10901 W. 120th Ave, Suite 380
+@@ -25058,18 +25082,6 @@ A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Z
+ 				San Jose  CA  95112
+ 				US
+ 
+-80-02-F4   (hex)		Annapurna labs
+-800000-8FFFFF     (base 16)		Annapurna labs
+-				Matam Scientific Industries Center,   Building 8.2
+-				Mail box 15123  Haifa  3508409
+-				IL
+-
+-8C-51-09   (hex)		Avxav Electronic Trading LLC
+-600000-6FFFFF     (base 16)		Avxav Electronic Trading LLC
+-				Office 534 Building # 6WA Dubai Airport Free Zone
+-				Dubai  Dubai  33964
+-				AE
+-
+ 80-02-F4   (hex)		Lazer Safe Pty Ltd
+ 700000-7FFFFF     (base 16)		Lazer Safe Pty Ltd
+ 				27 Action Road
+@@ -25082,11 +25094,17 @@ A00000-AFFFFF     (base 16)		Guangzhou Tianhe High Tech Industrial Development Z
+ 				Beijing  Beijing  100028
+ 				CN
+ 
+-8C-51-09   (hex)		SHENZHEN LDROBOT CO., LTD.
+-300000-3FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
+-				Nanshan
+-				Shenzhen    518000
+-				CN
++80-02-F4   (hex)		Annapurna labs
++800000-8FFFFF     (base 16)		Annapurna labs
++				Matam Scientific Industries Center,   Building 8.2
++				Mail box 15123  Haifa  3508409
++				IL
++
++8C-51-09   (hex)		Avxav Electronic Trading LLC
++600000-6FFFFF     (base 16)		Avxav Electronic Trading LLC
++				Office 534 Building # 6WA Dubai Airport Free Zone
++				Dubai  Dubai  33964
++				AE
+ 
+ 8C-51-09   (hex)		nerospec
+ 800000-8FFFFF     (base 16)		nerospec
+@@ -25100,6 +25118,12 @@ D00000-DFFFFF     (base 16)		Surpedia Technologies Co., Ltd.
+ 				Xhzhi Dist.  New Taipei City  22103
+ 				TW
+ 
++8C-51-09   (hex)		SHENZHEN LDROBOT CO., LTD.
++300000-3FFFFF     (base 16)		SHENZHEN LDROBOT CO., LTD.
++				Nanshan
++				Shenzhen    518000
++				CN
++
+ 8C-51-09   (hex)		IROOTELLUCKY Corp.
+ E00000-EFFFFF     (base 16)		IROOTELLUCKY Corp.
+ 				609ho, 13, LS-ro
+@@ -25124,6 +25148,12 @@ B00000-BFFFFF     (base 16)		TelX Systems
+ 				DEIRA  DUBAI  48235
+ 				AE
+ 
++FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
++100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
++				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
++				Shenzhen  Guangdong  518000
++				CN
++
+ FC-61-79   (hex)		Int'Act Pty Ltd
+ D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
+ 				4 Pine Street
+@@ -25142,12 +25172,6 @@ D00000-DFFFFF     (base 16)		Int'Act Pty Ltd
+ 				Chattanooga    37408
+ 				US
+ 
+-FC-61-79   (hex)		Signalinks Communication Technology Co.,Ltd
+-100000-1FFFFF     (base 16)		Signalinks Communication Technology Co.,Ltd
+-				3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+ FC-61-79   (hex)		Fulian Precision Electronics(Tianjin) Co., Ltd
+ B00000-BFFFFF     (base 16)		Fulian Precision Electronics(Tianjin) Co., Ltd
+ 				No 36. North Street, West Zone, Economic & Technological Development Area, Tianjin, China
+@@ -25159,3 +25183,9 @@ A00000-AFFFFF     (base 16)		Shenzhen Dptek Technology Co., Ltd.
+ 				Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District
+ 				Shenzhen  Guangdong  518000
+ 				CN
++
++30-3D-51   (hex)		XOR UK Corporation Limited
++D00000-DFFFFF     (base 16)		XOR UK Corporation Limited
++				Unit 11-12, Stanhope Gate, Stanhope Rd
++				Camberley  Surrey  GU15 3DW
++				GB
+diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
+index 496fd55c73..dfaf330309 100644
+--- a/hwdb.d/ma-small.txt
++++ b/hwdb.d/ma-small.txt
+@@ -5687,12 +5687,6 @@ F74000-F74FFF     (base 16)		GE AVIC Civil Avionics Systems Company Limited
+ 				Shanghai    200241
+ 				CN
+ 
+-8C-1F-64   (hex)		Stercom Power Solutions GmbH
+-2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
+-				Ziegelstr. 1
+-				Weyarn  Bayern  83629
+-				DE
+-
+ 8C-1F-64   (hex)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ 				1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, 
+@@ -5705,6 +5699,12 @@ A5D000-A5DFFF     (base 16)		Shenzhen zhushida Technology lnformation Co.,Ltd
+ 				Sydney  New South Wales  2132
+ 				AU
+ 
++8C-1F-64   (hex)		Stercom Power Solutions GmbH
++2B6000-2B6FFF     (base 16)		Stercom Power Solutions GmbH
++				Ziegelstr. 1
++				Weyarn  Bayern  83629
++				DE
++
+ 8C-1F-64   (hex)		Gateview Technologies
+ B7B000-B7BFFF     (base 16)		Gateview Technologies
+ 				 104 White St #201
+@@ -5741,12 +5741,6 @@ FBA000-FBAFFF     (base 16)		Onto Innovation
+ 				Wilmington  MA  01887
+ 				US
+ 
+-8C-1F-64   (hex)		DAVE SRL
+-967000-967FFF     (base 16)		DAVE SRL
+-				VIA TALPONEDO 29/A
+-				PORCIA  PORDENONE  330850
+-				IT
+-
+ 8C-1F-64   (hex)		Becton Dickinson
+ 775000-775FFF     (base 16)		Becton Dickinson
+ 				7 Loveton Circle
+@@ -5765,6 +5759,12 @@ BFB000-BFBFFF     (base 16)		TechArgos
+ 				Moscow     105066
+ 				RU
+ 
++8C-1F-64   (hex)		DAVE SRL
++967000-967FFF     (base 16)		DAVE SRL
++				VIA TALPONEDO 29/A
++				PORCIA  PORDENONE  330850
++				IT
++
+ 8C-1F-64   (hex)		e.kundenservice Netz GmbH
+ 855000-855FFF     (base 16)		e.kundenservice Netz GmbH
+ 				Steindamm 100
+@@ -5801,17 +5801,23 @@ EB5000-EB5FFF     (base 16)		Meiryo Denshi Corp.
+ 				Gadag  Karnataka  582103
+ 				IN
+ 
++8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
++F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
++				Gerberstrasse 49
++				Backnang    71522
++				DE
++
+ 8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+ 059000-059FFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+ 				Winnettener Straße 6
+ 				Dinkelsbuehl  Bavaria  91550
+ 				DE
+ 
+-8C-1F-64   (hex)		Tesat-Spacecom GmbH & Co. KG
+-F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
+-				Gerberstrasse 49
+-				Backnang    71522
+-				DE
++8C-1F-64   (hex)		JBF
++F45000-F45FFF     (base 16)		JBF
++				via goretta 90
++				mappano  torino  10079
++				IT
+ 
+ 8C-1F-64   (hex)		REFU Storage System GmbH
+ 53B000-53BFFF     (base 16)		REFU Storage System GmbH
+@@ -5825,12 +5831,6 @@ F27000-F27FFF     (base 16)		Tesat-Spacecom GmbH & Co. KG
+ 				Bergisch Gladbach  North Rhine-Westphalia  51465
+ 				DE
+ 
+-8C-1F-64   (hex)		JBF
+-F45000-F45FFF     (base 16)		JBF
+-				via goretta 90
+-				mappano  torino  10079
+-				IT
+-
+ 8C-1F-64   (hex)		Micro Electroninc Products
+ 765000-765FFF     (base 16)		Micro Electroninc Products
+ 				TT Vasumweg 150
+@@ -5849,23 +5849,17 @@ F45000-F45FFF     (base 16)		JBF
+ 				Indianapolis  IN  46240
+ 				US
+ 
+-8C-1F-64   (hex)		Sicon srl
+-B3B000-B3BFFF     (base 16)		Sicon srl
+-				Via Sila 1/3
+-				Isola Vicentina  Vicenza  36033
+-				IT
+-
+ 8C-1F-64   (hex)		INVIXIUM ACCESS INC
+ 274000-274FFF     (base 16)		INVIXIUM ACCESS INC
+ 				111 Gordon Baker Road, Suite #300
+ 				Toronto  Ontario  M2H 3R1
+ 				CA
+ 
+-8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
+-0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
+-				644-1 Tenjingoe,Ooaza-Kamiishizuka
+-				Oyama  Tochigi  323-0063
+-				JP
++8C-1F-64   (hex)		Sicon srl
++B3B000-B3BFFF     (base 16)		Sicon srl
++				Via Sila 1/3
++				Isola Vicentina  Vicenza  36033
++				IT
+ 
+ 8C-1F-64   (hex)		Sanchar Telesystems limited
+ 958000-958FFF     (base 16)		Sanchar Telesystems limited
+@@ -5873,6 +5867,24 @@ B3B000-B3BFFF     (base 16)		Sicon srl
+ 				New Delhi  Delhi  110020
+ 				IN
+ 
++8C-1F-64   (hex)		Tantronic AG
++1EF000-1EFFFF     (base 16)		Tantronic AG
++				Gewerbering 12
++				Wohlen  AG  5610
++				CH
++
++8C-1F-64   (hex)		Tunstall A/S
++F2C000-F2CFFF     (base 16)		Tunstall A/S
++				Niels Bohrs vej 42
++				Stilling  Skanderborg  8660
++				DK
++
++8C-1F-64   (hex)		Bunka Shutter Co., Ltd.
++0B0000-0B0FFF     (base 16)		Bunka Shutter Co., Ltd.
++				644-1 Tenjingoe,Ooaza-Kamiishizuka
++				Oyama  Tochigi  323-0063
++				JP
++
+ 8C-1F-64   (hex)		Rodgers Instruments US LLC
+ A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
+ 				6497 NE Croeni Avenue
+@@ -5891,18 +5903,6 @@ A42000-A42FFF     (base 16)		Rodgers Instruments US LLC
+ 				Ottawa  ON  K2G 0G3
+ 				CA
+ 
+-8C-1F-64   (hex)		Tunstall A/S
+-F2C000-F2CFFF     (base 16)		Tunstall A/S
+-				Niels Bohrs vej 42
+-				Stilling  Skanderborg  8660
+-				DK
+-
+-8C-1F-64   (hex)		Tantronic AG
+-1EF000-1EFFFF     (base 16)		Tantronic AG
+-				Gewerbering 12
+-				Wohlen  AG  5610
+-				CH
+-
+ 8C-1F-64   (hex)		Strategic Robotic Systems
+ C57000-C57FFF     (base 16)		Strategic Robotic Systems
+ 				14842 NE 95th StreetBuilding 5
+@@ -5939,17 +5939,23 @@ DB7000-DB7FFF     (base 16)		Lambda Systems Inc.
+ 				St. Gallen    9008
+ 				CH
+ 
++8C-1F-64   (hex)		Satelles Inc
++9FF000-9FFFFF     (base 16)		Satelles Inc
++				1835 Alexander Bell Dr., Suite 240
++				Reston  VA  20191
++				US
++
+ 8C-1F-64   (hex)		KCS Co., Ltd.
+ 4AE000-4AEFFF     (base 16)		KCS Co., Ltd.
+ 				1101, NexZone, 50, Wanam-ro, Seongsan-gu,
+ 				Changwon-si    51573
+ 				KR
+ 
+-8C-1F-64   (hex)		Satelles Inc
+-9FF000-9FFFFF     (base 16)		Satelles Inc
+-				1835 Alexander Bell Dr., Suite 240
+-				Reston  VA  20191
+-				US
++8C-1F-64   (hex)		Peter Huber Kaeltemaschinenbau AG
++C35000-C35FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
++				Werner-von-Siemens-Str. 1
++				Offenburg  Ba-Wue  77656
++				DE
+ 
+ 70-B3-D5   (hex)		EVCO SPA
+ A80000-A80FFF     (base 16)		EVCO SPA
+@@ -11513,16 +11519,22 @@ ED9000-ED9FFF     (base 16)		NETGEN HITECH SOLUTIONS LLP
+ 				MUMBAI  MAHARASHTRA  400064
+ 				IN
+ 
++8C-1F-64   (hex)		Wolfspyre Labs
++9D4000-9D4FFF     (base 16)		Wolfspyre Labs
++				5007 Highland Ct #WPL-IEEE
++				Austin  TX  78731
++				US
++
+ 8C-1F-64   (hex)		Vekto
+ 4AC000-4ACFFF     (base 16)		Vekto
+ 				Televisieweg 75
+ 				Almere    1322AK
+ 				NL
+ 
+-8C-1F-64   (hex)		Wolfspyre Labs
+-9D4000-9D4FFF     (base 16)		Wolfspyre Labs
+-				5007 Highland Ct #WPL-IEEE
+-				Austin  TX  78731
++8C-1F-64   (hex)		SpectraDynamics, Inc.
++581000-581FFF     (base 16)		SpectraDynamics, Inc.
++				1849 Cherry St.
++				Louisville  CO  80027
+ 				US
+ 
+ 8C-1F-64   (hex)		IO Master Technology
+@@ -11531,11 +11543,11 @@ BD3000-BD3FFF     (base 16)		IO Master Technology
+ 				New Taipei City 235  Taipei  235
+ 				TW
+ 
+-8C-1F-64   (hex)		SpectraDynamics, Inc.
+-581000-581FFF     (base 16)		SpectraDynamics, Inc.
+-				1849 Cherry St.
+-				Louisville  CO  80027
+-				US
++8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
++05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
++				Escadstr. 1
++				Pfullendorf    88630
++				DE
+ 
+ 8C-1F-64   (hex)		TIFLEX
+ 194000-194FFF     (base 16)		TIFLEX
+@@ -11543,11 +11555,11 @@ BD3000-BD3FFF     (base 16)		IO Master Technology
+ 				PONCIN    01450
+ 				FR
+ 
+-8C-1F-64   (hex)		ESCAD AUTOMATION GmbH
+-05F000-05FFFF     (base 16)		ESCAD AUTOMATION GmbH
+-				Escadstr. 1
+-				Pfullendorf    88630
+-				DE
++8C-1F-64   (hex)		Neuralog LP
++115000-115FFF     (base 16)		Neuralog LP
++				4800 Sugar Grove Blvd., Ste. 200
++				Stafford  TX  77479
++				US
+ 
+ 8C-1F-64   (hex)		Sichuan Aiyijan Technology Company Ltd.
+ 40C000-40CFFF     (base 16)		Sichuan Aiyijan Technology Company Ltd.
+@@ -11573,11 +11585,11 @@ C24000-C24FFF     (base 16)		Alifax S.r.l.
+ 				POLVERARA  PD  35020
+ 				IT
+ 
+-8C-1F-64   (hex)		Neuralog LP
+-115000-115FFF     (base 16)		Neuralog LP
+-				4800 Sugar Grove Blvd., Ste. 200
+-				Stafford  TX  77479
+-				US
++8C-1F-64   (hex)		Flextronics International Kft
++A4C000-A4CFFF     (base 16)		Flextronics International Kft
++				Zrínyi Miklós str. 38.
++				Zalaegerszeg    8900
++				HU
+ 
+ 8C-1F-64   (hex)		Pietro Fiorentini Spa
+ 8D9000-8D9FFF     (base 16)		Pietro Fiorentini Spa
+@@ -11585,30 +11597,24 @@ C24000-C24FFF     (base 16)		Alifax S.r.l.
+ 				San Vito al Tagliamento (PN)    33078
+ 				IT
+ 
+-8C-1F-64   (hex)		Flextronics International Kft
+-A4C000-A4CFFF     (base 16)		Flextronics International Kft
+-				Zrínyi Miklós str. 38.
+-				Zalaegerszeg    8900
+-				HU
+-
+ 8C-1F-64   (hex)		Flextronics International Kft
+ D02000-D02FFF     (base 16)		Flextronics International Kft
+ 				38. Zrinyi Str.
+ 				Zalaegerszeg  Zala  8900
+ 				HU
+ 
+-8C-1F-64   (hex)		Autark GmbH
+-943000-943FFF     (base 16)		Autark GmbH
+-				Platz des Friedens 8
+-				Baunatal  Hessen  D-34225
+-				DE
+-
+ 8C-1F-64   (hex)		VMukti Solutions Private Limited
+ E30000-E30FFF     (base 16)		VMukti Solutions Private Limited
+ 				3-4, Shivalik Plaza, Panjrapole, Ambawadi
+ 				Ahmedabad  Gujarat  380015
+ 				IN
+ 
++8C-1F-64   (hex)		Autark GmbH
++943000-943FFF     (base 16)		Autark GmbH
++				Platz des Friedens 8
++				Baunatal  Hessen  D-34225
++				DE
++
+ 8C-1F-64   (hex)		ACTELSER S.L.
+ 3F4000-3F4FFF     (base 16)		ACTELSER S.L.
+ 				CARRER ALBERT EINSTEIN, 44
+@@ -11645,11 +11651,11 @@ FA2000-FA2FFF     (base 16)		AZD Praha s.r.o., ZOZ Olomouc
+ 				Knoxville  TN  37932
+ 				US
+ 
+-8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
+-AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
+-				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
+-				Beijing  Beijing  100081
+-				CN
++70-B3-D5   (hex)		Watteco
++E75000-E75FFF     (base 16)		Watteco
++				Rue Gutenberg
++				Hennebont  Brittany  56700
++				FR
+ 
+ 8C-1F-64   (hex)		Toolplanet Co., Ltd.
+ 54F000-54FFFF     (base 16)		Toolplanet Co., Ltd.
+@@ -11663,11 +11669,11 @@ AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
+ 				Dubai  Dubai  74249
+ 				AE
+ 
+-70-B3-D5   (hex)		Watteco
+-E75000-E75FFF     (base 16)		Watteco
+-				Rue Gutenberg
+-				Hennebont  Brittany  56700
+-				FR
++8C-1F-64   (hex)		Beijing Zhongchen Microelectronics Co.,Ltd
++AB4000-AB4FFF     (base 16)		Beijing Zhongchen Microelectronics Co.,Ltd
++				Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District
++				Beijing  Beijing  100081
++				CN
+ 
+ 8C-1F-64   (hex)		Weidmann Tecnologia Electrica de Mexico
+ 7B7000-7B7FFF     (base 16)		Weidmann Tecnologia Electrica de Mexico
+@@ -11705,17 +11711,23 @@ B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
+ 				Nelson  Nelson  7010
+ 				NZ
+ 
++8C-1F-64   (hex)		Stratis IOT
++3C5000-3C5FFF     (base 16)		Stratis IOT
++				4230 Main Street
++				Philadelphia  PA  19127
++				US
++
+ 8C-1F-64   (hex)		e.p.g. Elettronica s.r.l.
+ 3D4000-3D4FFF     (base 16)		e.p.g. Elettronica s.r.l.
+ 				Via della Crocetta 3
+ 				Oltrona di San Mamette  Como (CO)  22070
+ 				IT
+ 
+-8C-1F-64   (hex)		Stratis IOT
+-3C5000-3C5FFF     (base 16)		Stratis IOT
+-				4230 Main Street
+-				Philadelphia  PA  19127
+-				US
++8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
++3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
++				Austraße 59e
++				Bludenz  Austria  6700
++				AT
+ 
+ 8C-1F-64   (hex)		Twinleaf LLC
+ 080000-080FFF     (base 16)		Twinleaf LLC
+@@ -11723,11 +11735,11 @@ B7C000-B7CFFF     (base 16)		EVERNET CO,.LTD TAIWAN
+ 				Plainsboro  NJ  08536
+ 				US
+ 
+-8C-1F-64   (hex)		FMTec GmbH - Future Management Technologies
+-3E3000-3E3FFF     (base 16)		FMTec GmbH - Future Management Technologies
+-				Austraße 59e
+-				Bludenz  Austria  6700
+-				AT
++8C-1F-64   (hex)		Tinkerbee Innovations Private Limited
++544000-544FFF     (base 16)		Tinkerbee Innovations Private Limited
++				#677, 1st Floor, 27th Main, 13th Cross Road,HSR Layout, Sector 1
++				Bengaluru  Karnataka  560102
++				IN
+ 
+ 8C-1F-64   (hex)		Genius Vision Digital Private Limited
+ CC6000-CC6FFF     (base 16)		Genius Vision Digital Private Limited
+@@ -11741,6 +11753,24 @@ CC6000-CC6FFF     (base 16)		Genius Vision Digital Private Limited
+ 				Houston  TX  77024-7338
+ 				US
+ 
++8C-1F-64   (hex)		Abode Systems Inc
++B13000-B13FFF     (base 16)		Abode Systems Inc
++				2625 Middlefield Road
++				Palo Alto  CA  94306
++				US
++
++8C-1F-64   (hex)		DAVE SRL
++0EF000-0EFFFF     (base 16)		DAVE SRL
++				VIA TALPONEDO 29/A
++				PORCIA  PORDENONE  330850
++				IT
++
++8C-1F-64   (hex)		GO development GmbH
++7BC000-7BCFFF     (base 16)		GO development GmbH
++				Zeppelinstraße 126
++				Esslingen am Neckar    73730
++				DE
++
+ 70-B3-D5   (hex)		System West dba ICS Electronics
+ E06000-E06FFF     (base 16)		System West dba ICS Electronics
+ 				7034 Commerce Circle Suite A
+@@ -17300,18 +17330,18 @@ E61000-E61FFF     (base 16)		Stange Elektronik GmbH
+ 				Beijing  Beijing  100029
+ 				CN
+ 
+-8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
+-429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
+-				P. O.  Box 6863 Rodeløkka
+-				Oslo  Oslo  0504
+-				NO
+-
+ 8C-1F-64   (hex)		EOLANE
+ 911000-911FFF     (base 16)		EOLANE
+ 				ZI DU VAL D OMBREE
+ 				COMBREE  -  49520
+ 				FR
+ 
++8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
++429000-429FFF     (base 16)		Abbott Diagnostics Technologies AS
++				P. O.  Box 6863 Rodeløkka
++				Oslo  Oslo  0504
++				NO
++
+ 8C-1F-64   (hex)		Huz Electronics Ltd
+ BC2000-BC2FFF     (base 16)		Huz Electronics Ltd
+ 				10 Avondale road
+@@ -17372,6 +17402,12 @@ E64000-E64FFF     (base 16)		Indefac company
+ 				São Paulo  São Paulo  04268020
+ 				BR
+ 
++8C-1F-64   (hex)		Real Digital
++3B2000-3B2FFF     (base 16)		Real Digital
++				655 SW James Pl
++				Pullman  WA  99163
++				US
++
+ 8C-1F-64   (hex)		Fingoti Limited
+ CD9000-CD9FFF     (base 16)		Fingoti Limited
+ 				Barnam Ham Farm
+@@ -17390,12 +17426,6 @@ FB7000-FB7FFF     (base 16)		Grace Design/Lunatec LLC
+ 				Leawood  KS  66251
+ 				US
+ 
+-8C-1F-64   (hex)		Real Digital
+-3B2000-3B2FFF     (base 16)		Real Digital
+-				655 SW James Pl
+-				Pullman  WA  99163
+-				US
+-
+ 8C-1F-64   (hex)		Zhuhai Yunzhou Intelligence Technology Ltd.
+ 254000-254FFF     (base 16)		Zhuhai Yunzhou Intelligence Technology Ltd.
+ 				Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town
+@@ -17432,6 +17462,12 @@ CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
+ 				suzhou  jiangsu  215000
+ 				CN
+ 
++8C-1F-64   (hex)		Paragraf
++01A000-01AFFF     (base 16)		Paragraf
++				7-8 West Newlands
++				Somersham  Cambridgeshire  PE28 3EB
++				GB
++
+ 8C-1F-64   (hex)		nke marine electronics
+ 817000-817FFF     (base 16)		nke marine electronics
+ 				6 rue gutenberg
+@@ -17444,12 +17480,6 @@ CCB000-CCBFFF     (base 16)		suzhou yuecrown Electronic Technology Co.,LTD
+ 				Leverkusen    51381
+ 				DE
+ 
+-8C-1F-64   (hex)		Paragraf
+-01A000-01AFFF     (base 16)		Paragraf
+-				7-8 West Newlands
+-				Somersham  Cambridgeshire  PE28 3EB
+-				GB
+-
+ 8C-1F-64   (hex)		YUYAMA MFG Co.,Ltd
+ 5AC000-5ACFFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				1-4-30
+@@ -17474,23 +17504,53 @@ CDB000-CDBFFF     (base 16)		EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT
+ 				Budapest    1132
+ 				HU
+ 
++8C-1F-64   (hex)		HTK Hamburg GmbH
++6D5000-6D5FFF     (base 16)		HTK Hamburg GmbH
++				Frahmredder 49
++				Hamburg  Hamburg  22393
++				DE
++
+ 8C-1F-64   (hex)		Goodtech AS dep Fredrikstad
+ C0E000-C0EFFF     (base 16)		Goodtech AS dep Fredrikstad
+ 				Gamle Beddingvei 28
+ 				FREDRIKSTAD  Viken  1671
+ 				NO
+ 
++8C-1F-64   (hex)		DIALTRONICS SYSTEMS PVT LTD
++1A5000-1A5FFF     (base 16)		DIALTRONICS SYSTEMS PVT LTD
++				Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur
++				Hyderabad  Telangana  500081
++				IN
++
+ 70-B3-D5   (hex)		TRUMPF Huttinger GmbH + Co. KG,
+ CD2000-CD2FFF     (base 16)		TRUMPF Huttinger GmbH + Co. KG,
+ 				Helmholtzstr. 1
+ 				Stutensee    76297
+ 				DE
+ 
+-8C-1F-64   (hex)		DIALTRONICS SYSTEMS PVT LTD
+-1A5000-1A5FFF     (base 16)		DIALTRONICS SYSTEMS PVT LTD
+-				Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur
+-				Hyderabad  Telangana  500081
+-				IN
++8C-1F-64   (hex)		Agvolution GmbH
++098000-098FFF     (base 16)		Agvolution GmbH
++				Philipp-Reis-Str. 2A
++				Göttingen    37075
++				DE
++
++8C-1F-64   (hex)		dinosys
++5CB000-5CBFFF     (base 16)		dinosys
++				501,35,Gwangnaruro 6-gil,
++				Seoul  Seoul  133-832
++				KR
++
++8C-1F-64   (hex)		HIROSAWA ELECTRIC Co.,Ltd.
++7D8000-7D8FFF     (base 16)		HIROSAWA ELECTRIC Co.,Ltd.
++				2-13-14 Nishikoujiya
++				Otaku  Tokyo  1440034
++				JP
++
++8C-1F-64   (hex)		WonATech Co., Ltd.
++890000-890FFF     (base 16)		WonATech Co., Ltd.
++				7, Neunganmal 1-gil
++				Seocho-gu  Seoul  06801
++				KR
+ 
+ 70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+ BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+@@ -23162,24 +23222,36 @@ BD6000-BD6FFF     (base 16)		NOVA Products GmbH
+ 				Munich    80538
+ 				DE
+ 
+-70-B3-D5   (hex)		Flextronics International Kft
+-E2F000-E2FFFF     (base 16)		Flextronics International Kft
++8C-1F-64   (hex)		ECO-ADAPT
++C38000-C38FFF     (base 16)		ECO-ADAPT
++				39 Rue de Chateaudun
++				Paris  Ile-de-France  75009
++				FR
++
++8C-1F-64   (hex)		Flextronics International Kft
++F5C000-F5CFFF     (base 16)		Flextronics International Kft
+ 				Zrínyi Miklós str. 38.
+ 				Zalaegerszeg    8900
+ 				HU
+ 
+-8C-1F-64   (hex)		Flextronics International Kft
+-F5C000-F5CFFF     (base 16)		Flextronics International Kft
++70-B3-D5   (hex)		Flextronics International Kft
++E2F000-E2FFFF     (base 16)		Flextronics International Kft
+ 				Zrínyi Miklós str. 38.
+ 				Zalaegerszeg    8900
+ 				HU
+ 
+-8C-1F-64   (hex)		ECO-ADAPT
+-C38000-C38FFF     (base 16)		ECO-ADAPT
+-				39 Rue de Chateaudun
+-				Paris  Ile-de-France  75009
++8C-1F-64   (hex)		ADETEC SAS
++AE8000-AE8FFF     (base 16)		ADETEC SAS
++				8 rue de l'Angoumois
++				ARGENTEUIL    95100
+ 				FR
+ 
++8C-1F-64   (hex)		AML
++634000-634FFF     (base 16)		AML
++				2190 Regal Parkway
++				Euless  TX  76040
++				US
++
+ 8C-1F-64   (hex)		In-lite Design BV
+ 557000-557FFF     (base 16)		In-lite Design BV
+ 				Stephensonweg 18
+@@ -23204,18 +23276,6 @@ A6D000-A6DFFF     (base 16)		CyberneX Co., Ltd
+ 				YOKOHAMA  Kanagawa  222-0033
+ 				JP
+ 
+-8C-1F-64   (hex)		ADETEC SAS
+-AE8000-AE8FFF     (base 16)		ADETEC SAS
+-				8 rue de l'Angoumois
+-				ARGENTEUIL    95100
+-				FR
+-
+-8C-1F-64   (hex)		AML
+-634000-634FFF     (base 16)		AML
+-				2190 Regal Parkway
+-				Euless  TX  76040
+-				US
+-
+ 70-B3-D5   (hex)		Active Research Limited
+ 6A0000-6A0FFF     (base 16)		Active Research Limited
+ 				21 Harwell Road
+@@ -23276,23 +23336,23 @@ D69000-D69FFF     (base 16)		ADiCo Corporation
+ 				Utsunomiya-shi  Tochigi  320-0075
+ 				JP
+ 
+-8C-1F-64   (hex)		METRONA-Union GmbH
+-9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
+-				Aidenbachstr. 40
+-				München    81379
+-				DE
+-
+ 8C-1F-64   (hex)		Wittra Networks AB
+ DF8000-DF8FFF     (base 16)		Wittra Networks AB
+ 				Västra Järnvägsgatan 39th floor(Convendum)
+ 				Stockholm  Stockholm  111 64
+ 				SE
+ 
+-8C-1F-64   (hex)		Unitron Systems b.v.
+-FA8000-FA8FFF     (base 16)		Unitron Systems b.v.
+-				SCHANSESTRAAT 7
+-				IJzendijke    4515 RN
+-				NL
++8C-1F-64   (hex)		METRONA-Union GmbH
++9FA000-9FAFFF     (base 16)		METRONA-Union GmbH
++				Aidenbachstr. 40
++				München    81379
++				DE
++
++8C-1F-64   (hex)		Retency
++BBF000-BBFFFF     (base 16)		Retency
++				19 rue Vivienne
++				Paris    75002
++				FR
+ 
+ 8C-1F-64   (hex)		University of Geneva - Department of Particle Physics
+ D88000-D88FFF     (base 16)		University of Geneva - Department of Particle Physics
+@@ -23300,11 +23360,11 @@ D88000-D88FFF     (base 16)		University of Geneva - Department of Particle Physi
+ 				Geneva    1211
+ 				CH
+ 
+-8C-1F-64   (hex)		Massar Networks
+-FAA000-FAAFFF     (base 16)		Massar Networks
+-				Postfach 1207PEAX ID 473.1849.6740.89
+-				Baar  Zug  CH-6341
+-				CH
++8C-1F-64   (hex)		Camius
++601000-601FFF     (base 16)		Camius
++				41593 Winchester Rd., Ste 200
++				Temecula  CA  92590
++				US
+ 
+ 8C-1F-64   (hex)		Vytahy-Vymyslicky s.r.o.
+ 737000-737FFF     (base 16)		Vytahy-Vymyslicky s.r.o.
+@@ -23312,17 +23372,17 @@ FAA000-FAAFFF     (base 16)		Massar Networks
+ 				Uherske Hradiste - Jarosov    60801
+ 				CZ
+ 
+-8C-1F-64   (hex)		Retency
+-BBF000-BBFFFF     (base 16)		Retency
+-				19 rue Vivienne
+-				Paris    75002
+-				FR
++8C-1F-64   (hex)		Unitron Systems b.v.
++FA8000-FA8FFF     (base 16)		Unitron Systems b.v.
++				SCHANSESTRAAT 7
++				IJzendijke    4515 RN
++				NL
+ 
+-8C-1F-64   (hex)		Camius
+-601000-601FFF     (base 16)		Camius
+-				41593 Winchester Rd., Ste 200
+-				Temecula  CA  92590
+-				US
++8C-1F-64   (hex)		Massar Networks
++FAA000-FAAFFF     (base 16)		Massar Networks
++				Postfach 1207PEAX ID 473.1849.6740.89
++				Baar  Zug  CH-6341
++				CH
+ 
+ 8C-1F-64   (hex)		Patch Technologies, Inc.
+ 0AC000-0ACFFF     (base 16)		Patch Technologies, Inc.
+@@ -23360,12 +23420,6 @@ C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
+ 				Vancouver  BC  V5K 2B2
+ 				CA
+ 
+-8C-1F-64   (hex)		Benison Tech
+-3AC000-3ACFFF     (base 16)		Benison Tech
+-				2100 Geng Road, Suite 210
+-				Palo Alto  CA  94043
+-				US
+-
+ 8C-1F-64   (hex)		HIGHVOLT Prüftechnik
+ 8F8000-8F8FFF     (base 16)		HIGHVOLT Prüftechnik
+ 				Marie-Curie-Straße10
+@@ -23378,17 +23432,11 @@ C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
+ 				Vaajakoski    40800
+ 				FI
+ 
+-8C-1F-64   (hex)		BCMTECH
+-94C000-94CFFF     (base 16)		BCMTECH
+-				803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu,
+-				Anyang-si  Gyeonggi-do  14042
+-				KR
+-
+-8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
+-97C000-97CFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
+-				Winnettener Straße 6
+-				Dinkelsbuehl  Bavaria  91550
+-				DE
++8C-1F-64   (hex)		Benison Tech
++3AC000-3ACFFF     (base 16)		Benison Tech
++				2100 Geng Road, Suite 210
++				Palo Alto  CA  94043
++				US
+ 
+ 8C-1F-64   (hex)		SLAT
+ 683000-683FFF     (base 16)		SLAT
+@@ -23396,30 +23444,30 @@ C3A000-C3AFFF     (base 16)		YUSUR Technology Co., Ltd.
+ 				Champagne au Mont d'Or  Rhône  69543
+ 				FR
+ 
++8C-1F-64   (hex)		MB connect line GmbH Fernwartungssysteme
++97C000-97CFFF     (base 16)		MB connect line GmbH Fernwartungssysteme
++				Winnettener Straße 6
++				Dinkelsbuehl  Bavaria  91550
++				DE
++
+ 8C-1F-64   (hex)		E VISION INDIA PVT LTD 
+ 7AF000-7AFFFF     (base 16)		E VISION INDIA PVT LTD 
+ 				9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002
+ 				Faridabad  HARYANA  121002
+ 				IN
+ 
++8C-1F-64   (hex)		BCMTECH
++94C000-94CFFF     (base 16)		BCMTECH
++				803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu,
++				Anyang-si  Gyeonggi-do  14042
++				KR
++
+ 8C-1F-64   (hex)		Fink Zeitsysteme GmbH
+ 73B000-73BFFF     (base 16)		Fink Zeitsysteme GmbH
+ 				Möslestraße 21
+ 				Altach  Vorarlberg  6844
+ 				AT
+ 
+-70-B3-D5   (hex)		PLANET INNOVATION (PI)
+-C75000-C75FFF     (base 16)		PLANET INNOVATION (PI)
+-				6 Thomas
+-				Irvine  CA  92618
+-				US
+-
+-8C-1F-64   (hex)		KST technology
+-DD7000-DD7FFF     (base 16)		KST technology
+-				KST B/D 4-5, Wiryeseong-daero 12-gil
+-				Songpa-gu  Seoul  05636
+-				KR
+-
+ 8C-1F-64   (hex)		Bavaria Digital Technik GmbH
+ FB5000-FB5FFF     (base 16)		Bavaria Digital Technik GmbH
+ 				Rehbichler Weg 26
+@@ -23432,6 +23480,42 @@ CF4000-CF4FFF     (base 16)		NT
+ 				Tel Aviv    6701101
+ 				IL
+ 
++8C-1F-64   (hex)		KST technology
++DD7000-DD7FFF     (base 16)		KST technology
++				KST B/D 4-5, Wiryeseong-daero 12-gil
++				Songpa-gu  Seoul  05636
++				KR
++
++70-B3-D5   (hex)		PLANET INNOVATION (PI)
++C75000-C75FFF     (base 16)		PLANET INNOVATION (PI)
++				6 Thomas
++				Irvine  CA  92618
++				US
++
++8C-1F-64   (hex)		UniJet Co., Ltd.
++946000-946FFF     (base 16)		UniJet Co., Ltd.
++				53-24,Dongtansandan 6-gil
++				Hwaseong  Gyeonggi-do  18487
++				KR
++
++8C-1F-64   (hex)		BELIMO Automation AG
++90F000-90FFFF     (base 16)		BELIMO Automation AG
++				brunnenbachstrasse 1
++				Hinwil  Zurich  8340
++				CH
++
++8C-1F-64   (hex)		Sanchar Communication Systems
++685000-685FFF     (base 16)		Sanchar Communication Systems
++				X-47, okhla phase 2
++				delhi  delhi  110020
++				IN
++
++8C-1F-64   (hex)		BRS Sistemas Eletrônicos
++CAF000-CAFFFF     (base 16)		BRS Sistemas Eletrônicos
++				Rua Gomes de Freitas, 491 / 204
++				Porto Alegre  RS  91380-000
++				BR
++
+ 70-B3-D5   (hex)		DISMUNTEL SAL
+ 92C000-92CFFF     (base 16)		DISMUNTEL SAL
+ 				Pol ind cotes
+@@ -28877,12 +28961,6 @@ DC0000-DC0FFF     (base 16)		Pigs Can Fly Labs LLC
+ 				Beaverton  OR  97008
+ 				US
+ 
+-8C-1F-64   (hex)		United States Technologies Inc.
+-525000-525FFF     (base 16)		United States Technologies Inc.
+-				1701 Pollitt Drive
+-				Fair Lawn  NJ  07410
+-				US
+-
+ 8C-1F-64   (hex)		EMBSYS SISTEMAS EMBARCADOS
+ FD4000-FD4FFF     (base 16)		EMBSYS SISTEMAS EMBARCADOS
+ 				AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324
+@@ -28895,11 +28973,17 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Webb City  MO  64870
+ 				US
+ 
+-8C-1F-64   (hex)		PuS GmbH und Co. KG
+-4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
+-				Hainstr. 13
+-				Gera  Germany  07545
+-				DE
++8C-1F-64   (hex)		United States Technologies Inc.
++525000-525FFF     (base 16)		United States Technologies Inc.
++				1701 Pollitt Drive
++				Fair Lawn  NJ  07410
++				US
++
++8C-1F-64   (hex)		Rumble, Inc
++837000-837FFF     (base 16)		Rumble, Inc
++				Bluebonnet Ln
++				Austin  TX  78704
++				US
+ 
+ 8C-1F-64   (hex)		EA Elektroautomatik GmbH & Co. KG
+ 504000-504FFF     (base 16)		EA Elektroautomatik GmbH & Co. KG
+@@ -28907,11 +28991,11 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Viersen  NRW  41747
+ 				DE
+ 
+-8C-1F-64   (hex)		Rumble, Inc
+-837000-837FFF     (base 16)		Rumble, Inc
+-				Bluebonnet Ln
+-				Austin  TX  78704
+-				US
++8C-1F-64   (hex)		PuS GmbH und Co. KG
++4E0000-4E0FFF     (base 16)		PuS GmbH und Co. KG
++				Hainstr. 13
++				Gera  Germany  07545
++				DE
+ 
+ 8C-1F-64   (hex)		Cinetix Srl
+ 89E000-89EFFF     (base 16)		Cinetix Srl
+@@ -28919,18 +29003,18 @@ DD5000-DD5FFF     (base 16)		Cardinal Scales Manufacturing Co
+ 				Borgo Valsugana  Trento  38051
+ 				IT
+ 
+-8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
+-D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
+-				EL3, J BLOCK, M.I.D.C. Bhosari
+-				PUNE  Maharastra  411027
+-				IN
+-
+ 8C-1F-64   (hex)		ATM SOLUTIONS
+ 9BD000-9BDFFF     (base 16)		ATM SOLUTIONS
+ 				Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine
+ 				Navi Mumbai  Maharashatra  400709
+ 				IN
+ 
++8C-1F-64   (hex)		Mitsubishi Electric India Pvt. Ltd.
++D92000-D92FFF     (base 16)		Mitsubishi Electric India Pvt. Ltd.
++				EL3, J BLOCK, M.I.D.C. Bhosari
++				PUNE  Maharastra  411027
++				IN
++
+ 8C-1F-64   (hex)		Integer.pl S.A.
+ A97000-A97FFF     (base 16)		Integer.pl S.A.
+ 				Wielicka 28
+@@ -28949,17 +29033,11 @@ A97000-A97FFF     (base 16)		Integer.pl S.A.
+ 				Hagen    58119
+ 				DE
+ 
+-8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
+-01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
+-				6600 rue St. Urbain, Suite 300
+-				Montreal  Quebec  H2S 3G8
+-				CA
+-
+-8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
+-A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
+-				No.10 Shangdi Road, Haidian District
+-				Beijing  Beijing  100085
+-				CN
++8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
++F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
++				Felix-Wankel-Str. 13
++				Zaberfeld  Baden-Württemberg  74374
++				DE
+ 
+ 8C-1F-64   (hex)		XSENSOR Technology Corp.
+ 7AA000-7AAFFF     (base 16)		XSENSOR Technology Corp.
+@@ -28967,29 +29045,29 @@ A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
+ 				Calgary  Alberta  T2G 0Z9
+ 				CA
+ 
+-8C-1F-64   (hex)		ADAMCZEWSKI elektronische Messtechnik GmbH
+-F4E000-F4EFFF     (base 16)		ADAMCZEWSKI elektronische Messtechnik GmbH
+-				Felix-Wankel-Str. 13
+-				Zaberfeld  Baden-Württemberg  74374
+-				DE
+-
+ 8C-1F-64   (hex)		MG s.r.l.
+ 67A000-67AFFF     (base 16)		MG s.r.l.
+ 				via Monte Bianco, 1
+ 				Solbiate Olona  VA  21058
+ 				IT
+ 
++8C-1F-64   (hex)		Beijing Wenrise Technology Co., Ltd.
++A84000-A84FFF     (base 16)		Beijing Wenrise Technology Co., Ltd.
++				No.10 Shangdi Road, Haidian District
++				Beijing  Beijing  100085
++				CN
++
+ 8C-1F-64   (hex)		AMF Medical SA
+ F52000-F52FFF     (base 16)		AMF Medical SA
+ 				Chemin de la Dent-d'Oche 1 A
+ 				Ecublens VD  Vaud  1024 
+ 				CH
+ 
+-8C-1F-64   (hex)		Qualitrol LLC
+-905000-905FFF     (base 16)		Qualitrol LLC
+-				1385 Fairport Rd
+-				Fairport  NY  14450
+-				US
++8C-1F-64   (hex)		SCIREQ Scientific Respiratory Equipment  Inc
++01E000-01EFFF     (base 16)		SCIREQ Scientific Respiratory Equipment  Inc
++				6600 rue St. Urbain, Suite 300
++				Montreal  Quebec  H2S 3G8
++				CA
+ 
+ 8C-1F-64   (hex)		HUPI
+ 489000-489FFF     (base 16)		HUPI
+@@ -28997,6 +29075,18 @@ F52000-F52FFF     (base 16)		AMF Medical SA
+ 				Bidart  Sélectionnez un département / état  64210
+ 				FR
+ 
++8C-1F-64   (hex)		Qualitrol LLC
++905000-905FFF     (base 16)		Qualitrol LLC
++				1385 Fairport Rd
++				Fairport  NY  14450
++				US
++
++8C-1F-64   (hex)		WINTUS SYSTEM
++9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
++				E1102, 7 yeonmujang 5ga gil, seongdong-gu
++				SEOUL  SEOUL  04782 
++				KR
++
+ 8C-1F-64   (hex)		TTC TELEKOMUNIKACE, s.r.o.
+ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+ 				Trebohosticka 5
+@@ -29009,11 +29099,11 @@ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+ 				Yreka  CA  96097
+ 				US
+ 
+-8C-1F-64   (hex)		WINTUS SYSTEM
+-9BA000-9BAFFF     (base 16)		WINTUS SYSTEM
+-				E1102, 7 yeonmujang 5ga gil, seongdong-gu
+-				SEOUL  SEOUL  04782 
+-				KR
++8C-1F-64   (hex)		Proterra, Inc
++552000-552FFF     (base 16)		Proterra, Inc
++				1 Whitlee Court
++				Greenville  SC  29607
++				US
+ 
+ 8C-1F-64   (hex)		eumig industrie-TV GmbH.
+ 5B3000-5B3FFF     (base 16)		eumig industrie-TV GmbH.
+@@ -29021,12 +29111,6 @@ E4C000-E4CFFF     (base 16)		TTC TELEKOMUNIKACE, s.r.o.
+ 				Anif  Salzburg  5081
+ 				AT
+ 
+-8C-1F-64   (hex)		Proterra, Inc
+-552000-552FFF     (base 16)		Proterra, Inc
+-				1 Whitlee Court
+-				Greenville  SC  29607
+-				US
+-
+ 8C-1F-64   (hex)		TeraDiode / Panasonic
+ 2C3000-2C3FFF     (base 16)		TeraDiode / Panasonic
+ 				30 Upton Dr
+@@ -29045,18 +29129,6 @@ D7C000-D7CFFF     (base 16)		QUERCUS TECHNOLOGIES, S.L.
+ 				Uijeongbu-si  Gyonggi-do  11652
+ 				KR
+ 
+-8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
+-721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
+-				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
+-				Pune  Maharashtra  411051
+-				IN
+-
+-8C-1F-64   (hex)		JW Froehlich Maschinenfabrik GmbH
+-C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
+-				Kohlhammerstrasse 18-24
+-				Leinfelden-Echterdingen    70771
+-				DE
+-
+ 8C-1F-64   (hex)		VECOS Europe B.V.
+ C80000-C80FFF     (base 16)		VECOS Europe B.V.
+ 				ESP 237
+@@ -29069,6 +29141,18 @@ C80000-C80FFF     (base 16)		VECOS Europe B.V.
+ 				Albstadt  Baden Württemberg  72458
+ 				DE
+ 
++8C-1F-64   (hex)		M/S MILIND RAMACHANDRA RAJWADE
++721000-721FFF     (base 16)		M/S MILIND RAMACHANDRA RAJWADE
++				713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru
++				Pune  Maharashtra  411051
++				IN
++
++8C-1F-64   (hex)		JW Froehlich Maschinenfabrik GmbH
++C8F000-C8FFFF     (base 16)		JW Froehlich Maschinenfabrik GmbH
++				Kohlhammerstrasse 18-24
++				Leinfelden-Echterdingen    70771
++				DE
++
+ 8C-1F-64   (hex)		Power Electronics Espana, S.L.
+ D08000-D08FFF     (base 16)		Power Electronics Espana, S.L.
+ 				Poligono Industrial Carrases. Ronda del camp d Aviacio 4
+@@ -29087,18 +29171,18 @@ B01000-B01FFF     (base 16)		noah
+ 				Leipzig    04109
+ 				DE
+ 
+-8C-1F-64   (hex)		eumig industrie-TV GmbH.
+-426000-426FFF     (base 16)		eumig industrie-TV GmbH.
+-				Gewerbeparkstrasse 9
+-				Anif  Salzburg  5081
+-				AT
+-
+ 8C-1F-64   (hex)		Hamamatsu Photonics K.K.
+ 67F000-67FFFF     (base 16)		Hamamatsu Photonics K.K.
+ 				314-5 Shimokanzo
+ 				Iwata  Shizuoka  4380193
+ 				JP
+ 
++8C-1F-64   (hex)		eumig industrie-TV GmbH.
++426000-426FFF     (base 16)		eumig industrie-TV GmbH.
++				Gewerbeparkstrasse 9
++				Anif  Salzburg  5081
++				AT
++
+ 8C-1F-64   (hex)		Telemetrics Inc.
+ 5E5000-5E5FFF     (base 16)		Telemetrics Inc.
+ 				75 Commerce Dr
+@@ -29123,18 +29207,18 @@ E0E000-E0EFFF     (base 16)		Nokeval Oy
+ 				fuzhou    350008
+ 				CN
+ 
+-8C-1F-64   (hex)		TEKVOX, Inc
+-197000-197FFF     (base 16)		TEKVOX, Inc
+-				1965 Post Rd, Suite 400
+-				New Braunfels  TX  78130
+-				US
+-
+ 8C-1F-64   (hex)		ACSL Ltd.
+ A2D000-A2DFFF     (base 16)		ACSL Ltd.
+ 				3-6-4 Rinkaicho
+ 				Edogawa-ku  Tokyo  134-0086
+ 				JP
+ 
++8C-1F-64   (hex)		TEKVOX, Inc
++197000-197FFF     (base 16)		TEKVOX, Inc
++				1965 Post Rd, Suite 400
++				New Braunfels  TX  78130
++				US
++
+ 8C-1F-64   (hex)		Private
+ EE0000-EE0FFF     (base 16)		Private
+ 
+@@ -29161,3 +29245,9 @@ DFE000-DFEFFF     (base 16)		Nuvation Energy
+ 				630 Lively Blvd
+ 				Elk Grove Village  IL  60007
+ 				US
++
++8C-1F-64   (hex)		AperNet, LLC
++043000-043FFF     (base 16)		AperNet, LLC
++				651 North Broad StreetSuite 206
++				Middletown  DE  19709
++				US
+diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
+index 9bba38f431..dddb2b639a 100644
+--- a/hwdb.d/pci.ids
++++ b/hwdb.d/pci.ids
+@@ -1,8 +1,8 @@
+ #
+ #	List of PCI ID's
+ #
+-#	Version: 2022.05.03
+-#	Date:    2022-05-03 03:15:01
++#	Version: 2022.05.09
++#	Date:    2022-05-09 03:15:02
+ #
+ #	Maintained by Albert Pool, Martin Mares, and other volunteers from
+ #	the PCI ID Project at https://pci-ids.ucw.cz/.
+@@ -70,6 +70,8 @@
+ 018a  LevelOne
+ 	0106  FPC-0106TX misprogrammed [RTL81xx]
+ 01de  Oxide Computer Company
++	0000  Propolis NVMe Controller
++	0001  Propolis xHCI Controller
+ # probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board
+ 0200  Dell (wrong ID)
+ # 021b is not Compaq but there is a board misprogrammed
+@@ -743,7 +745,7 @@
+ 		1028 213e  PERC H765i MX
+ 		1028 213f  PERC H365i Adapter
+ 		1028 2140  PERC H365i Front
+-		1028 2141  PERC H360 MX
++		1028 2141  PERC H365i MX
+ 		1028 2142  HBA465e Adapter
+ 		1028 2209  HBA465i Adapter
+ 		1028 220a  HBA465i Front
+@@ -6821,6 +6823,8 @@
+ 	3505  SH7751 PCI Controller (PCIC)
+ 	350e  SH7751R PCI Controller (PCIC)
+ 1055  Microchip Technology / SMSC
++	7430  LAN7430
++	7431  LAN7431
+ 	9130  SLC90E66 [Victory66] IDE
+ 	9460  SLC90E66 [Victory66] ISA
+ 	9462  SLC90E66 [Victory66] USB
+@@ -12479,8 +12483,9 @@
+ 	223f  GA102GL
+ 	228b  GA104 High Definition Audio Controller
+ 	2296  Tegra PCIe Endpoint Virtual Network
+-	2302  GA103
+-	2321  GA103
++	2302  GH100
++	2321  GH100
++	2336  GH100 [H100 96GB]
+ 	2414  GA103 [GeForce RTX 3060 Ti]
+ 	2420  GA103M [GeForce RTX 3080 Ti Mobile]
+ 	2438  GA103GLM [RTX A5500 Laptop GPU]
+@@ -17216,8 +17221,42 @@
+ 	5190  9200 ECO NVMe SSD
+ 	5191  9200 PRO NVMe SSD
+ 	5192  9200 MAX NVMe SSD
+-	51a2  9300 PRO NVMe SSD
+-	51a3  9300 MAX NVMe SSD
++	51a2  7300 PRO NVMe SSD
++	51a3  7300 MAX NVMe SSD
++	51b1  9300 PRO NVMe SSD
++		1344 4000  3.84TB U.2
++		1344 5000  7.68TB U.2
++		1344 6000  15.36TB U.2
++	51b2  9300 MAX NVMe SSD
++		1344 4000  3.2TB U.2
++		1344 5000  6.4 TB U.2
++		1344 6000  12.8TB U.2
++	51c0  7400 PRO NVMe SSD
++		1344 1100  M.2 480GB
++		1344 2000  U.3 960GB
++		1344 2100  M.2 960GB
++		1344 2600  E1.S 960GB
++		1344 2b00  M.2 1920GB
++		1344 2d00  E1.2 1920GB
++		1344 3000  U.3 1920GB
++		1344 3e00  M.2 3840GB
++		1344 3f00  E1.S 3840GB
++		1344 4000  U.3 3840GB
++		1344 5000  U.3 7680GB
++	51c1  7400 MAX NVMe SSD
++		1344 1100  M.2 400GB
++		1344 2000  U.3 800GB
++		1344 2100  M.2 800GB
++		1344 2600  E1.S 800GB
++		1344 2b00  M.2 1600GB
++		1344 2d00  E1.S 1600GB
++		1344 3000  U.3 1600GB
++		1344 3e00  M.2 3200GB
++		1344 3f00  E1.S 3200GB
++		1344 4000  U.3 3200GB
++		1344 5000  U.3 6400GB
++	51c3  7450 PRO NVMe SSD
++	51c4  7450 MAX NVMe SSD
+ 1345  Arescom Inc
+ 1347  Odetics
+ 1349  Sumitomo Electric Industries, Ltd.
+@@ -18734,6 +18773,8 @@
+ 	6088  T62100-6088 Unified Wire Ethernet Controller
+ 	6089  T62100-6089 Unified Wire Ethernet Controller
+ 	608a  T62100-608a Unified Wire Ethernet Controller
++	6092  T62100-KR Unified Wire Ethernet Controller
++		01de fff9  Gimlet T6
+ 	6401  T6225-CR Unified Wire Ethernet Controller
+ 	6402  T6225-SO-CR Unified Wire Ethernet Controller
+ 	6403  T6425-CR Unified Wire Ethernet Controller
+@@ -18758,6 +18799,8 @@
+ 	6488  T62100-6088 Unified Wire Ethernet Controller
+ 	6489  T62100-6089 Unified Wire Ethernet Controller
+ 	648a  T62100-608a Unified Wire Ethernet Controller
++	6492  T62100-KR Unified Wire Ethernet Controller
++		01de fff9  Gimlet T6
+ 	6501  T6225-CR Unified Wire Storage Controller
+ 	6502  T6225-SO-CR Unified Wire Storage Controller
+ 	6503  T6425-CR Unified Wire Storage Controller
+@@ -18782,6 +18825,7 @@
+ 	6588  T62100-6088 Unified Wire Storage Controller
+ 	6589  T62100-6089 Unified Wire Storage Controller
+ 	658a  T62100-608a Unified Wire Storage Controller
++	6592  T62100-KR Unified Wire Storage Controller
+ 	6601  T6225-CR Unified Wire Storage Controller
+ 	6602  T6225-SO-CR Unified Wire Storage Controller
+ 	6603  T6425-CR Unified Wire Storage Controller
+@@ -18806,6 +18850,7 @@
+ 	6688  T62100-6088 Unified Wire Storage Controller
+ 	6689  T62100-6089 Unified Wire Storage Controller
+ 	668a  T62100-608a Unified Wire Storage Controller
++	6692  T62100-KR Unified Wire Storage Controller
+ 	6801  T6225-CR Unified Wire Ethernet Controller [VF]
+ 	6802  T6225-SO-CR Unified Wire Ethernet Controller [VF]
+ 	6803  T6425-CR Unified Wire Ethernet Controller [VF]
+@@ -23434,7 +23479,9 @@
+ # nee Qumranet, Inc.
+ 1af4  Red Hat, Inc.
+ 	1000  Virtio network device
++		01de fffb  Propolis Virtio network device
+ 	1001  Virtio block device
++		01de fffa  Propolis Virtio block device
+ 	1002  Virtio memory balloon
+ 	1003  Virtio console
+ 	1004  Virtio SCSI
+@@ -24749,6 +24796,45 @@
+ 		1f2f 6115  KM660 U.2 3.2TB NVMe SSD
+ 		1f2f 6116  KM560 U.2 3.84TB NVMe SSD
+ 		1f2f 6118  KM560 U.2 7.68TB NVMe SSD
++1f3f  3SNIC Ltd
++	2100  3SRAID SAS/SATA HBA
++		1f3f 0120  HBA 32 Ports
++		1f3f 0125  HBA 40 Ports
++		1f3f 0180  HBA 16 Ports
++		1f3f 0185  HBA 8 Ports
++	2200  3SRAID RAID controller
++		1f3f 0185  RAID Controller 16 Ports with 2G Cache
++		1f3f 01a1  RAID Controller 40 Ports with 2G Cache
++		1f3f 01a4  RAID Controller 16 Ports with 4G Cache
++		1f3f 01a8  RAID Controller 32 Ports with 4G Cache
++		1f3f 01ad  RAID Controller 40 Ports with 4G Cache
++	9001  Ethernet VF
++		1f3f 1000  Ethernet VF
++	9002  Ethernet VF Hyper-V
++		1f3f 1000  Ethernet VF Hyper-V
++	9003  Ethernet SDI VF
++		1f3f 1000  Ethernet SDI VF
++	9004  Ethernet SDI VF Hyper-V
++		1f3f 1000  Ethernet SDI VF Hyper-V
++	9008  3SFC VF
++		1f3f 1000  3SFC VF
++	9009  3SFC VF Hyper-V
++		1f3f 1000  3SFC VF Hyper-V
++	9010  3SFC FC Controller
++		1f3f 0041  Dual Port 16GE FC to PCIe Gen4 x16 Adapter
++		1f3f 0061  Dual Port 32GE FC to PCIe Gen4 x16 Adapter
++	9020  Ethernet Network Adapter
++		1f3f 0051  Dual Port 25GE Ethernet Network Adapter
++		1f3f 0052  Quad Port 25GE Ethernet Network Adapter
++		1f3f 00a1  Dual Port 100GE Ethernet Network Adapter
++	9030  IPU
++		1f3f 0051  Dual Port 25GE IPU
++	9031  SDI5.0
++		1f3f 0051  Dual Port 25GE SDI5.0lite
++		1f3f 00a1  Dual Port 100GE SDI5.0
++	9032  SDI5.1
++		1f3f 00a1  Dual Port 100GE SDI5.1
++1faa  Hexaflake (Shanghai) Information Technology Co., Ltd.
+ 1fab  Unifabrix Ltd.
+ 	0000  Nexus Alpha IVPU
+ # nee Tumsan Oy
+@@ -25278,8 +25364,6 @@
+ 5168  Animation Technologies Inc.
+ 	0300  FlyDVB-S
+ 	0301  FlyDVB-T
+-51d8  Alder Lake-P Serial IO I2C Controller #2
+-51d9  Alder Lake-P Serial IO I2C Controller #3
+ 5301  Alliance Semiconductor Corp.
+ 	0001  ProMotion aT3D
+ 5333  S3 Graphics Ltd.
+@@ -25498,11 +25582,11 @@
+ 	1800  CooVOX TDM BRI Module
+ 6766  Glenfly Tech Co., Ltd.
+ 	3d00  Arise-GT-10C0
+-	3d02  Arise 1020
++	3d02  Arise1020
+ 	3d03  Arise-GT-1040
+ 	3d04  Arise1010
+ 	3d40  Arise-GT-10C0 High Definition Audio Controller
+-	3d41  Arise 1020 High Definition Audio Controller
++	3d41  Arise1020 High Definition Audio Controller
+ 6899  ZT Systems
+ # nee Qumranet
+ 6900  Red Hat, Inc.
+@@ -27378,6 +27462,7 @@
+ 	1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)
+ 	1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)
+ 	1237  440FX - 82441FX PMC [Natoma]
++		01de fffe  Propolis Virtual 440FX
+ 		1af4 1100  Qemu virtual machine
+ 	1239  82371FB PIIX IDE Interface
+ 	123b  82380PB PCI to PCI Docking Bridge
+@@ -32754,6 +32839,7 @@
+ 	6ffd  Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent
+ 	6ffe  Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent
+ 	7000  82371SB PIIX3 ISA [Natoma/Triton II]
++		01de fffd  Propolis Virtual PIIX3 ISA Controller
+ 		1af4 1100  Qemu virtual machine
+ 	7010  82371SB PIIX3 IDE [Natoma/Triton II]
+ 		1af4 1100  Qemu virtual machine
+@@ -32771,6 +32857,7 @@
+ 		15ad 1976  Virtual Machine Chipset
+ 		1af4 1100  QEMU Virtual Machine
+ 	7113  82371AB/EB/MB PIIX4 ACPI
++		01de fffc  Propolis Virtual PIIX4 PM Controller
+ 		15ad 1976  Virtual Machine Chipset
+ 		1af4 1100  Qemu virtual machine
+ 	7120  82810 GMCH (Graphics Memory Controller Hub)
+@@ -32845,6 +32932,9 @@
+ 	7aa4  Alder Lake-S PCH SPI Controller
+ 	7aa7  Alder Lake-S PCH Shared SRAM
+ 	7ab4  Alder Lake-S PCH PCI Express Root Port #13
++	7ab8  Alder Lake-S PCH PCI Express Root Port #1
++	7ab9  Alder Lake-S PCH PCI Express Root Port #2
++	7abc  Alder Lake-S PCH PCI Express Root Port #5
+ 	7abd  Alder Lake-S PCH PCI Express Root Port #6
+ 	7acc  Alder Lake-S PCH I2C Controller #0
+ 	7ad0  Alder Lake-S HD Audio Controller
+diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
+index 9342f7c331..7f41fd0b07 100644
+--- a/hwdb.d/usb.ids
++++ b/hwdb.d/usb.ids
+@@ -9,8 +9,8 @@
+ #	The latest version can be obtained from
+ #		http://www.linux-usb.org/usb.ids
+ #
+-# Version: 2022.05.03
+-# Date:    2022-05-03 20:34:10
++# Version: 2022.05.09
++# Date:    2022-05-09 20:34:10
+ #
+ 
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -21558,6 +21558,12 @@
+ 	061d  PCTV Deluxe (NTSC) Device
+ 	061e  PCTV Deluxe (PAL) Device
+ 	2304  1689
++2309  TimeLink Technology Co., Ltd
++	1001  Touch Device(hid)
++	1005  Touch Device
++	1006  Touch Device(2)
++	1007  MulTouch Device(hid)
++	1009  Touch Device(hid)
+ 230d  Teracom
+ 	0103  Huwaii 3g wireless modem
+ 2314  INQ Mobile
diff --git a/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch b/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch
new file mode 100644
index 0000000..0808a87
--- /dev/null
+++ b/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch
@@ -0,0 +1,30 @@
+From a80d44db309d07425e1efe06722220876caf1f8d Mon Sep 17 00:00:00 2001
+From: Nikolai Grigoriev <2364632+ngrigoriev@users.noreply.github.com>
+Date: Sat, 14 May 2022 17:39:02 -0400
+Subject: [PATCH] hwdb: add touchpad parameters for Lenovo T15g Gen1 (#23373)
+
+(cherry picked from commit 5a6bcbb00134e4f810bcefa0c6e1340c75e6981e)
+
+Related: #2087778
+---
+ hwdb.d/60-evdev.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
+index 2d1751b478..da4eb0070a 100644
+--- a/hwdb.d/60-evdev.hwdb
++++ b/hwdb.d/60-evdev.hwdb
+@@ -588,6 +588,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadP14sGen2a:*
+  EVDEV_ABS_35=::44
+  EVDEV_ABS_36=::52
+ 
++# Lenovo ThinkPad T15g Gen1
++evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*pvrThinkPadT15gGen1**
++ EVDEV_ABS_00=::44
++ EVDEV_ABS_01=::50
++ EVDEV_ABS_35=::44
++ EVDEV_ABS_36=::50
++
+ # Lenovo Legion Y9000X2020
+ evdev:name:MSFT0001:02 04F3:304B Touchpad:dmi:*svnLENOVO:*pvrLenovoLegionY9000X2020:*
+  EVDEV_ABS_00=::31
diff --git a/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch b/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch
new file mode 100644
index 0000000..ed48025
--- /dev/null
+++ b/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch
@@ -0,0 +1,26 @@
+From a3a1bb14b60c215bd39c5ffde16ffe85fcafe109 Mon Sep 17 00:00:00 2001
+From: Martin <zach@b1-systems.de>
+Date: Sun, 15 May 2022 00:51:59 +0200
+Subject: [PATCH]  hwdb: Add accel orientation for the I15-TG
+
+Add accel orientation for the Cube iWork 10 I15-TG
+
+(cherry picked from commit c4c336e0cdf66a4c0922f2b77a7e6e3811287114)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index d883db22a1..3fb308f3f1 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -277,6 +277,7 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni18B:*
+ 
+ # Cube iWork 10 Flagship
+ sensor:modalias:acpi:BOSC0200*:dmi:*:svnCube:pnI15-TC:*
++sensor:modalias:acpi:BOSC0200*:dmi:*:svnALLDOCUBE:pnI15-TG:*
+  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
+ # Cube iWork 11 Stylus
diff --git a/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch b/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch
new file mode 100644
index 0000000..2dfd67b
--- /dev/null
+++ b/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch
@@ -0,0 +1,32 @@
+From 8373d5f5a1c9604a1a87cdc04668000720fe3155 Mon Sep 17 00:00:00 2001
+From: Nikolai Kostrigin <nickel@altlinux.org>
+Date: Fri, 13 May 2022 17:13:00 +0300
+Subject: [PATCH] hwdb: fix accelerometer mount matrix for Aquarius NS483
+
+Signed-off-by: Nikolai Kostrigin <nickel@altlinux.org>
+(cherry picked from commit e4bb1a07ef834f4e4eabe1fa21e838586e7dd2a3)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 3fb308f3f1..104fe05187 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -106,6 +106,14 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svn*Acer*:*pn*Spin*SP111-33:*
+ sensor:modalias:acpi:BOSC0200*:dmi:*svnAcer*:*pnSpinSP111-34:*
+  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ 
++#########################################
++# Aquarius
++#########################################
++
++# Aquarius NS483
++sensor:modalias:acpi:MXC6655*:dmi:*:svnAquarius*:pnNS483:*
++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
++
+ #########################################
+ # Archos
+ #########################################
diff --git a/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch b/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch
new file mode 100644
index 0000000..19b1384
--- /dev/null
+++ b/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch
@@ -0,0 +1,37 @@
+From 20537f77e4b66c5e657174a4f29dfaf883b8929c Mon Sep 17 00:00:00 2001
+From: Pablo Ceballos <pceballos@google.com>
+Date: Fri, 13 May 2022 23:33:07 +0000
+Subject: [PATCH] hwdb: Add Google Hangouts Meet speakermic
+
+This device implements the phone mute HID usage as a toggle switch,
+where 1 indicates muted, and 0 indicates unmuted. However, for a key
+event 1 indicates that the key has been pressed and 0 indicates it has
+been released. This mismatch causes issues, so prevent key events from
+being generated for this HID usage.
+
+(cherry picked from commit 2d251543211dae43bcf6f01ed32a3dbe8fef1ea7)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index b852f33608..2e4f6f4293 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -511,6 +511,14 @@ evdev:input:b0003v0458p0708*
+  KEYBOARD_KEY_0900fd=scale
+  KEYBOARD_KEY_0900fc=screenlock
+ 
++###########################################################
++# Google
++###########################################################
++
++# Google Hangouts Meet speakermic
++evdev:input:b0003v18D1p8001*
++ KEYBOARD_KEY_b002f=reserved                            # Disable micmute key
++
+ ###########################################################
+ # Hewlett Packard
+ ###########################################################
diff --git a/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch b/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch
new file mode 100644
index 0000000..7266877
--- /dev/null
+++ b/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch
@@ -0,0 +1,7079 @@
+From a3cfd0001a0854d247ac30c111e41058276abd52 Mon Sep 17 00:00:00 2001
+From: Luca Boccassi <bluca@debian.org>
+Date: Sat, 21 May 2022 12:44:36 +0100
+Subject: [PATCH] hwdb: update via ninja -C build update-hwdb
+
+(cherry picked from commit 5ea8bcd93d1df1caedf240f41e243584d4cf8258)
+
+Related: #2087778
+---
+ hwdb.d/20-OUI.hwdb               |  199 +-
+ hwdb.d/20-acpi-vendor.hwdb.patch |    4 +-
+ hwdb.d/20-pci-vendor-model.hwdb  |  108 +-
+ hwdb.d/20-usb-vendor-model.hwdb  |    4 +-
+ hwdb.d/ma-large.txt              | 3648 ++++++++++++++++--------------
+ hwdb.d/ma-medium.txt             |  159 +-
+ hwdb.d/ma-small.txt              |   95 +-
+ hwdb.d/pci.ids                   |   58 +-
+ hwdb.d/usb.ids                   |    8 +-
+ 9 files changed, 2485 insertions(+), 1798 deletions(-)
+
+diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb
+index d9d17f4b2c..c46086633c 100644
+--- a/hwdb.d/20-OUI.hwdb
++++ b/hwdb.d/20-OUI.hwdb
+@@ -29592,7 +29592,7 @@ OUI:0025DE*
+  ID_OUI_FROM_DATABASE=Probits Co., LTD.
+ 
+ OUI:0025DF*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=Taser International Inc.
+ 
+ OUI:0025E0*
+  ID_OUI_FROM_DATABASE=CeedTec Sdn Bhd
+@@ -34914,7 +34914,7 @@ OUI:0081F9*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
+ OUI:0084ED*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC.
+ 
+ OUI:00869C*
+  ID_OUI_FROM_DATABASE=Palo Alto Networks
+@@ -41750,6 +41750,9 @@ OUI:088F2C*
+ OUI:0890BA*
+  ID_OUI_FROM_DATABASE=Danlaw Inc
+ 
++OUI:089115*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:089204*
+  ID_OUI_FROM_DATABASE=Dell Inc.
+ 
+@@ -41940,7 +41943,7 @@ OUI:08CA45*
+  ID_OUI_FROM_DATABASE=Toyou Feiji Electronics Co., Ltd.
+ 
+ OUI:08CBE5*
+- ID_OUI_FROM_DATABASE=R3 - Reliable Realtime Radio Communications GmbH
++ ID_OUI_FROM_DATABASE=R3 Solutions GmbH
+ 
+ OUI:08CC27*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+@@ -44568,7 +44571,7 @@ OUI:141FBAE*
+  ID_OUI_FROM_DATABASE=POS Systema LLC
+ 
+ OUI:141FBAF*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=IEEE Registration Authority
+ 
+ OUI:14205E*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+@@ -44615,6 +44618,9 @@ OUI:142D27*
+ OUI:142D4D*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:142D79*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:142D8B*
+  ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
+ 
+@@ -51833,6 +51839,48 @@ OUI:2C6798*
+ OUI:2C67FB*
+  ID_OUI_FROM_DATABASE=ShenZhen Zhengjili Electronics Co., LTD
+ 
++OUI:2C691D0*
++ ID_OUI_FROM_DATABASE=Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
++
++OUI:2C691D1*
++ ID_OUI_FROM_DATABASE=KATEK SE
++
++OUI:2C691D2*
++ ID_OUI_FROM_DATABASE=Abode Systems Inc
++
++OUI:2C691D3*
++ ID_OUI_FROM_DATABASE=Sunsa, Inc
++
++OUI:2C691D4*
++ ID_OUI_FROM_DATABASE=SPEEDTECH CORP.
++
++OUI:2C691D5*
++ ID_OUI_FROM_DATABASE=LG Electronics Inc.
++
++OUI:2C691D6*
++ ID_OUI_FROM_DATABASE=Carnegie Robotics
++
++OUI:2C691D7*
++ ID_OUI_FROM_DATABASE=Shenzhen Gigalight Technology Co., Ltd
++
++OUI:2C691D8*
++ ID_OUI_FROM_DATABASE=IBM
++
++OUI:2C691D9*
++ ID_OUI_FROM_DATABASE=SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
++
++OUI:2C691DA*
++ ID_OUI_FROM_DATABASE=Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd
++
++OUI:2C691DB*
++ ID_OUI_FROM_DATABASE=Shenzhen Daren HI-Tech Electronics Co., Ltd.
++
++OUI:2C691DC*
++ ID_OUI_FROM_DATABASE=Aparian, Inc.
++
++OUI:2C691DD*
++ ID_OUI_FROM_DATABASE=Ascentac Inc.
++
+ OUI:2C69BA*
+  ID_OUI_FROM_DATABASE=RF Controls, LLC
+ 
+@@ -52623,7 +52671,7 @@ OUI:3024A9*
+  ID_OUI_FROM_DATABASE=HP Inc.
+ 
+ OUI:3027CF*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=Canopy Growth Corp
+ 
+ OUI:302952*
+  ID_OUI_FROM_DATABASE=Hillstone Networks Inc
+@@ -52694,6 +52742,9 @@ OUI:303ABA*
+ OUI:303D08*
+  ID_OUI_FROM_DATABASE=GLINTT TES S.A.
+ 
++OUI:303D510*
++ ID_OUI_FROM_DATABASE=Fink Telecom Services GmbH
++
+ OUI:303D511*
+  ID_OUI_FROM_DATABASE=SHENZHEN WLINK TECHNOLOGY CO., LTD.
+ 
+@@ -52709,6 +52760,12 @@ OUI:303D514*
+ OUI:303D515*
+  ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd.
+ 
++OUI:303D516*
++ ID_OUI_FROM_DATABASE=Amber-Link Network Technology Co.,Ltd.
++
++OUI:303D517*
++ ID_OUI_FROM_DATABASE=Destiny Automate Limited
++
+ OUI:303D518*
+  ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam
+ 
+@@ -52721,9 +52778,15 @@ OUI:303D51A*
+ OUI:303D51B*
+  ID_OUI_FROM_DATABASE=Labman Automation
+ 
++OUI:303D51C*
++ ID_OUI_FROM_DATABASE=TalkGo, Inc.
++
+ OUI:303D51D*
+  ID_OUI_FROM_DATABASE=XOR UK Corporation Limited
+ 
++OUI:303D51E*
++ ID_OUI_FROM_DATABASE=Percent.com
++
+ OUI:303EA7*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
+@@ -53796,7 +53859,7 @@ OUI:343794*
+  ID_OUI_FROM_DATABASE=Hamee Corp.
+ 
+ OUI:3438AF*
+- ID_OUI_FROM_DATABASE=Inlab Software GmbH
++ ID_OUI_FROM_DATABASE=Inlab Networks GmbH
+ 
+ OUI:3438B7*
+  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+@@ -55352,6 +55415,9 @@ OUI:38A851*
+ OUI:38A86B*
+  ID_OUI_FROM_DATABASE=Orga BV
+ 
++OUI:38A89B*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:38A8CD0*
+  ID_OUI_FROM_DATABASE=ACiiST Smart Networks Ltd.
+ 
+@@ -57518,6 +57584,9 @@ OUI:407496*
+ OUI:4074E0*
+  ID_OUI_FROM_DATABASE=Intel Corporate
+ 
++OUI:4075C3*
++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
++
+ OUI:4076A9*
+  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+ 
+@@ -58223,6 +58292,9 @@ OUI:441102*
+ OUI:4411C2*
+  ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH
+ 
++OUI:441244*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:441319*
+  ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD.
+ 
+@@ -59642,6 +59714,9 @@ OUI:48706F*
+ OUI:487119*
+  ID_OUI_FROM_DATABASE=SGB GROUP LTD.
+ 
++OUI:487310*
++ ID_OUI_FROM_DATABASE=Juniper Networks
++
+ OUI:487397*
+  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+ 
+@@ -66719,6 +66794,9 @@ OUI:643409*
+ OUI:64351C*
+  ID_OUI_FROM_DATABASE=e-CON SYSTEMS INDIA PVT LTD
+ 
++OUI:6437A4*
++ ID_OUI_FROM_DATABASE=TOKYOSHUHA CO.,LTD.
++
+ OUI:643AB1*
+  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD
+ 
+@@ -69728,6 +69806,9 @@ OUI:7040FF*
+ OUI:7041B7*
+  ID_OUI_FROM_DATABASE=Edwards Lifesciences LLC
+ 
++OUI:7042D3*
++ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
++
+ OUI:70441C*
+  ID_OUI_FROM_DATABASE=SHENZHEN KAIFA TECHNOLOGY CO.,LTD.
+ 
+@@ -71169,7 +71250,7 @@ OUI:70B3D5119*
+  ID_OUI_FROM_DATABASE=Private
+ 
+ OUI:70B3D511A*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=Mahindra Electric Mobility Limited
+ 
+ OUI:70B3D511B*
+  ID_OUI_FROM_DATABASE=HoseoTelnet Inc...
+@@ -83723,6 +83804,9 @@ OUI:74D21D*
+ OUI:74D285*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:74D423*
++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
++
+ OUI:74D435*
+  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+ 
+@@ -86411,6 +86495,9 @@ OUI:7CDAC3*
+ OUI:7CDB98*
+  ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+ 
++OUI:7CDCCC*
++ ID_OUI_FROM_DATABASE=Beijing Yixin Techology Co.,Ltd
++
+ OUI:7CDD11*
+  ID_OUI_FROM_DATABASE=Chongqing MAS SCI&TECH.Co.,Ltd
+ 
+@@ -88649,6 +88736,9 @@ OUI:84F1D0*
+ OUI:84F3EB*
+  ID_OUI_FROM_DATABASE=Espressif Inc.
+ 
++OUI:84F44C*
++ ID_OUI_FROM_DATABASE=International Integrated Systems., Inc.
++
+ OUI:84F493*
+  ID_OUI_FROM_DATABASE=OMS spol. s.r.o.
+ 
+@@ -89037,7 +89127,7 @@ OUI:885D90E*
+  ID_OUI_FROM_DATABASE=Unitac Technology Limited
+ 
+ OUI:885D90F*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=IEEE Registration Authority
+ 
+ OUI:885DFB*
+  ID_OUI_FROM_DATABASE=zte corporation
+@@ -89436,7 +89526,7 @@ OUI:88B362*
+  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+ 
+ OUI:88B436*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=FUJIFILM Corporation
+ 
+ OUI:88B4A6*
+  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+@@ -90029,6 +90119,9 @@ OUI:8C1F6408B*
+ OUI:8C1F6408F*
+  ID_OUI_FROM_DATABASE=AixControl GmbH
+ 
++OUI:8C1F64092*
++ ID_OUI_FROM_DATABASE=Gogo BA
++
+ OUI:8C1F64098*
+  ID_OUI_FROM_DATABASE=Agvolution GmbH
+ 
+@@ -90164,6 +90257,9 @@ OUI:8C1F641B6*
+ OUI:8C1F641BB*
+  ID_OUI_FROM_DATABASE=Renwei Electronics Technology (Shenzhen) Co.,LTD.
+ 
++OUI:8C1F641BD*
++ ID_OUI_FROM_DATABASE=DORLET SAU
++
+ OUI:8C1F641BF*
+  ID_OUI_FROM_DATABASE=Ossia Inc
+ 
+@@ -90281,6 +90377,9 @@ OUI:8C1F642F5*
+ OUI:8C1F642FD*
+  ID_OUI_FROM_DATABASE=Enestone Corporation
+ 
++OUI:8C1F64300*
++ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
++
+ OUI:8C1F64301*
+  ID_OUI_FROM_DATABASE=Agar Corporation Inc.
+ 
+@@ -90551,6 +90650,9 @@ OUI:8C1F64544*
+ OUI:8C1F64549*
+  ID_OUI_FROM_DATABASE=Brad Technology
+ 
++OUI:8C1F6454A*
++ ID_OUI_FROM_DATABASE=Belden India Private Limited
++
+ OUI:8C1F6454C*
+  ID_OUI_FROM_DATABASE=Gemini Electronics B.V.
+ 
+@@ -90584,6 +90686,9 @@ OUI:8C1F6457B*
+ OUI:8C1F64581*
+  ID_OUI_FROM_DATABASE=SpectraDynamics, Inc.
+ 
++OUI:8C1F6458C*
++ ID_OUI_FROM_DATABASE=Ear Micro LLC
++
+ OUI:8C1F6459F*
+  ID_OUI_FROM_DATABASE=Delta Computers LLC.
+ 
+@@ -90671,6 +90776,9 @@ OUI:8C1F6465F*
+ OUI:8C1F64660*
+  ID_OUI_FROM_DATABASE=LLC NTPC
+ 
++OUI:8C1F64662*
++ ID_OUI_FROM_DATABASE=Suzhou Leamore Optronics Co., Ltd.
++
+ OUI:8C1F64663*
+  ID_OUI_FROM_DATABASE=mal-tech Technological Solutions Ltd/CRISP
+ 
+@@ -90719,6 +90827,9 @@ OUI:8C1F646B5*
+ OUI:8C1F646B9*
+  ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH
+ 
++OUI:8C1F646BB*
++ ID_OUI_FROM_DATABASE=Season Electronics Ltd
++
+ OUI:8C1F646C6*
+  ID_OUI_FROM_DATABASE=FIT
+ 
+@@ -90989,6 +91100,9 @@ OUI:8C1F648D1*
+ OUI:8C1F648D4*
+  ID_OUI_FROM_DATABASE=Recab Sweden AB
+ 
++OUI:8C1F648D5*
++ ID_OUI_FROM_DATABASE=Agramkow A/S
++
+ OUI:8C1F648D9*
+  ID_OUI_FROM_DATABASE=Pietro Fiorentini Spa
+ 
+@@ -91079,6 +91193,9 @@ OUI:8C1F6497C*
+ OUI:8C1F64984*
+  ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd
+ 
++OUI:8C1F6498F*
++ ID_OUI_FROM_DATABASE=Breas Medical AB
++
+ OUI:8C1F64991*
+  ID_OUI_FROM_DATABASE=DB Systel GmbH
+ 
+@@ -91508,6 +91625,9 @@ OUI:8C1F64D54*
+ OUI:8C1F64D56*
+  ID_OUI_FROM_DATABASE=Wisdom Audio
+ 
++OUI:8C1F64D5E*
++ ID_OUI_FROM_DATABASE=Integer.pl S.A.
++
+ OUI:8C1F64D69*
+  ID_OUI_FROM_DATABASE=ADiCo Corporation
+ 
+@@ -92039,6 +92159,9 @@ OUI:8C5109D*
+ OUI:8C5109E*
+  ID_OUI_FROM_DATABASE=IROOTELLUCKY Corp.
+ 
++OUI:8C5219*
++ ID_OUI_FROM_DATABASE=SHARP Corporation
++
+ OUI:8C53C3*
+  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+ 
+@@ -93638,6 +93761,9 @@ OUI:90C7D8*
+ OUI:90C99B*
+  ID_OUI_FROM_DATABASE=Tesorion Nederland B.V.
+ 
++OUI:90CAFA*
++ ID_OUI_FROM_DATABASE=Google, Inc.
++
+ OUI:90CC24*
+  ID_OUI_FROM_DATABASE=Synaptics, Inc
+ 
+@@ -95016,7 +95142,7 @@ OUI:9802D8E*
+  ID_OUI_FROM_DATABASE=Private
+ 
+ OUI:9802D8F*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=IEEE Registration Authority
+ 
+ OUI:98039B*
+  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+@@ -97709,6 +97835,9 @@ OUI:A0445C*
+ OUI:A04466*
+  ID_OUI_FROM_DATABASE=Intellics
+ 
++OUI:A044F3*
++ ID_OUI_FROM_DATABASE=RafaelMicro
++
+ OUI:A047D7*
+  ID_OUI_FROM_DATABASE=Best IT World (India) Pvt Ltd
+ 
+@@ -99251,6 +99380,9 @@ OUI:A49BF5*
+ OUI:A49D49*
+  ID_OUI_FROM_DATABASE=Ketra, Inc.
+ 
++OUI:A49E69*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:A49EDB*
+  ID_OUI_FROM_DATABASE=AutoCrib, Inc.
+ 
+@@ -102977,6 +103109,9 @@ OUI:B439D6*
+ OUI:B43A28*
+  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+ 
++OUI:B43A31*
++ ID_OUI_FROM_DATABASE=Silicon Laboratories
++
+ OUI:B43AE2*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -104523,7 +104658,7 @@ OUI:B8D812E*
+  ID_OUI_FROM_DATABASE=ZheJiang FangTai Electirc Co., Ltd
+ 
+ OUI:B8D812F*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=IEEE Registration Authority
+ 
+ OUI:B8D94D*
+  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+@@ -105537,7 +105672,7 @@ OUI:BCD713*
+  ID_OUI_FROM_DATABASE=Owl Labs
+ 
+ OUI:BCD767*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=BAE Systems Apllied Intelligence
+ 
+ OUI:BCD7A5*
+  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+@@ -106524,7 +106659,7 @@ OUI:C0D391A*
+  ID_OUI_FROM_DATABASE=Alpha Audiotronics, Inc.
+ 
+ OUI:C0D391B*
+- ID_OUI_FROM_DATABASE=Private
++ ID_OUI_FROM_DATABASE=Celliber Technologies Pvt Limited
+ 
+ OUI:C0D391C*
+  ID_OUI_FROM_DATABASE=Zhinengguo technology company limited
+@@ -107723,6 +107858,9 @@ OUI:C4EEF5*
+ OUI:C4EF70*
+  ID_OUI_FROM_DATABASE=Home Skinovations
+ 
++OUI:C4EFDA*
++ ID_OUI_FROM_DATABASE=Honeywell
++
+ OUI:C4F081*
+  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+ 
+@@ -109346,6 +109484,9 @@ OUI:CC5D57*
+ OUI:CC5D78*
+  ID_OUI_FROM_DATABASE=JTD Consulting
+ 
++OUI:CC5EF8*
++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++
+ OUI:CC5FBF*
+  ID_OUI_FROM_DATABASE=Topwise 3G Communication Co., Ltd.
+ 
+@@ -111330,7 +111471,7 @@ OUI:D42C46*
+  ID_OUI_FROM_DATABASE=BUFFALO.INC
+ 
+ OUI:D42DC5*
+- ID_OUI_FROM_DATABASE=Panasonic i-PRO Sensing Solutions Co., Ltd.
++ ID_OUI_FROM_DATABASE=i-PRO Co., Ltd.
+ 
+ OUI:D42F23*
+  ID_OUI_FROM_DATABASE=Akenori PTE Ltd
+@@ -112481,6 +112622,9 @@ OUI:D8539A*
+ OUI:D8543A*
+  ID_OUI_FROM_DATABASE=Texas Instruments
+ 
++OUI:D85482*
++ ID_OUI_FROM_DATABASE=Oxit, LLC
++
+ OUI:D854A2*
+  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+ 
+@@ -113123,6 +113267,9 @@ OUI:D8F3BC*
+ OUI:D8F3DB*
+  ID_OUI_FROM_DATABASE=Post CH AG
+ 
++OUI:D8F507*
++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
++
+ OUI:D8F710*
+  ID_OUI_FROM_DATABASE=Libre Wireless Technologies Inc.
+ 
+@@ -113891,6 +114038,9 @@ OUI:DCB54F*
+ OUI:DCB72E*
+  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+ 
++OUI:DCB7AC*
++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
++
+ OUI:DCB7FC*
+  ID_OUI_FROM_DATABASE=Alps Electric (Ireland) Ltd
+ 
+@@ -114101,6 +114251,9 @@ OUI:DCE55B*
+ OUI:DCE578*
+  ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department
+ 
++OUI:DCE650*
++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
++
+ OUI:DCE71C*
+  ID_OUI_FROM_DATABASE=AUG Elektronik GmbH
+ 
+@@ -114464,6 +114617,9 @@ OUI:E046E5*
+ OUI:E046EE*
+  ID_OUI_FROM_DATABASE=NETGEAR
+ 
++OUI:E04735*
++ ID_OUI_FROM_DATABASE=Ericsson AB
++
+ OUI:E048AF*
+  ID_OUI_FROM_DATABASE=Premietech Limited
+ 
+@@ -114938,6 +115094,9 @@ OUI:E0B9BA*
+ OUI:E0B9E5*
+  ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV
+ 
++OUI:E0BAAD*
++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
++
+ OUI:E0BAB4*
+  ID_OUI_FROM_DATABASE=Arrcus, Inc
+ 
+@@ -116705,6 +116864,9 @@ OUI:E884C6*
+ OUI:E8854B*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
++OUI:E886CF*
++ ID_OUI_FROM_DATABASE=Nokia
++
+ OUI:E887A3*
+  ID_OUI_FROM_DATABASE=Loxley Public Company Limited
+ 
+@@ -117299,6 +117461,9 @@ OUI:EC1D7F*
+ OUI:EC1D8B*
+  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+ 
++OUI:EC1D9E*
++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd.
++
+ OUI:EC1F72*
+  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 
+@@ -119309,6 +119474,9 @@ OUI:F417B8*
+ OUI:F419E2*
+  ID_OUI_FROM_DATABASE=Volterra
+ 
++OUI:F41AB0*
++ ID_OUI_FROM_DATABASE=Shenzhen Xingguodu Technology Co., Ltd.
++
+ OUI:F41BA1*
+  ID_OUI_FROM_DATABASE=Apple, Inc.
+ 
+@@ -119369,6 +119537,9 @@ OUI:F42A7D*
+ OUI:F42B48*
+  ID_OUI_FROM_DATABASE=Ubiqam
+ 
++OUI:F42B7D*
++ ID_OUI_FROM_DATABASE=Chipsguide technology CO.,LTD.
++
+ OUI:F42C56*
+  ID_OUI_FROM_DATABASE=SENOR TECH CO LTD
+ 
+diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch
+index 35f3430268..f884cd8240 100644
+--- a/hwdb.d/20-acpi-vendor.hwdb.patch
++++ b/hwdb.d/20-acpi-vendor.hwdb.patch
+@@ -1,5 +1,5 @@
+---- 20-acpi-vendor.hwdb.base	2022-05-13 17:14:22.098059674 +0100
+-+++ 20-acpi-vendor.hwdb	2022-05-13 17:14:22.102059756 +0100
++--- 20-acpi-vendor.hwdb.base	2022-05-21 12:43:45.053612968 +0100
+++++ 20-acpi-vendor.hwdb	2022-05-21 12:43:45.057613062 +0100
+ @@ -3,6 +3,8 @@
+  # Data imported from:
+  #     https://uefi.org/uefi-pnp-export
+diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb
+index 926247eefc..1344fab356 100644
+--- a/hwdb.d/20-pci-vendor-model.hwdb
++++ b/hwdb.d/20-pci-vendor-model.hwdb
+@@ -2967,7 +2967,7 @@ pci:v00001002d000013E9*
+  ID_MODEL_FROM_DATABASE=Ariel
+ 
+ pci:v00001002d000013FE*
+- ID_MODEL_FROM_DATABASE=Cyan Skillfish
++ ID_MODEL_FROM_DATABASE=Cyan Skillfish [BC-250]
+ 
+ pci:v00001002d00001478*
+  ID_MODEL_FROM_DATABASE=Navi 10 XL Upstream Port of PCI Express Switch
+@@ -2975,6 +2975,9 @@ pci:v00001002d00001478*
+ pci:v00001002d00001479*
+  ID_MODEL_FROM_DATABASE=Navi 10 XL Downstream Port of PCI Express Switch
+ 
++pci:v00001002d00001506*
++ ID_MODEL_FROM_DATABASE=Mendocino
++
+ pci:v00001002d0000154C*
+  ID_MODEL_FROM_DATABASE=Kryptos [Radeon RX 350]
+ 
+@@ -2993,6 +2996,9 @@ pci:v00001002d00001552*
+ pci:v00001002d00001561*
+  ID_MODEL_FROM_DATABASE=Anubis
+ 
++pci:v00001002d000015BF*
++ ID_MODEL_FROM_DATABASE=Phoenix
++
+ pci:v00001002d000015D8*
+  ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series]
+ 
+@@ -3077,6 +3083,9 @@ pci:v00001002d0000164C*
+ pci:v00001002d0000164D*
+  ID_MODEL_FROM_DATABASE=Rembrandt
+ 
++pci:v00001002d0000164F*
++ ID_MODEL_FROM_DATABASE=Phoenix
++
+ pci:v00001002d00001681*
+  ID_MODEL_FROM_DATABASE=Rembrandt [Radeon 680M]
+ 
+@@ -11006,6 +11015,9 @@ pci:v00001002d00007312*
+ pci:v00001002d00007314*
+  ID_MODEL_FROM_DATABASE=Navi 10 USB
+ 
++pci:v00001002d0000731E*
++ ID_MODEL_FROM_DATABASE=TDC-150
++
+ pci:v00001002d0000731F*
+  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
+ 
+@@ -11040,7 +11052,7 @@ pci:v00001002d0000734F*
+  ID_MODEL_FROM_DATABASE=Navi 14 [Radeon Pro W5300M]
+ 
+ pci:v00001002d00007360*
+- ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M / V520]
++ ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M/V520/BC-160]
+ 
+ pci:v00001002d00007362*
+  ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro V520]
+@@ -11054,6 +11066,9 @@ pci:v00001002d0000738C*
+ pci:v00001002d0000738E*
+  ID_MODEL_FROM_DATABASE=Arcturus GL-XL [Instinct MI100]
+ 
++pci:v00001002d000073A1*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620]
++
+ pci:v00001002d000073A2*
+  ID_MODEL_FROM_DATABASE=Navi 21 Pro-XTA [Radeon Pro W6900X]
+ 
+@@ -11069,6 +11084,9 @@ pci:v00001002d000073A5*
+ pci:v00001002d000073AB*
+  ID_MODEL_FROM_DATABASE=Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
+ 
++pci:v00001002d000073AE*
++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620 MxGPU]
++
+ pci:v00001002d000073AF*
+  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT]
+ 
+@@ -11096,6 +11114,9 @@ pci:v00001002d000073C3*
+ pci:v00001002d000073C4*
+  ID_MODEL_FROM_DATABASE=Navi 22 USB
+ 
++pci:v00001002d000073CE*
++ ID_MODEL_FROM_DATABASE=Navi22-XL SRIOV MxGPU
++
+ pci:v00001002d000073DF*
+  ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+ 
+@@ -11135,6 +11156,12 @@ pci:v00001002d00007421*
+ pci:v00001002d00007422*
+  ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6400]
+ 
++pci:v00001002d00007423*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6300/W6300M]
++
++pci:v00001002d00007424*
++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6300]
++
+ pci:v00001002d0000743F*
+  ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT]
+ 
+@@ -14255,6 +14282,9 @@ pci:v00001022d00001482*
+ pci:v00001022d00001483*
+  ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge
+ 
++pci:v00001022d00001483sv000001DEsd0000FFF9*
++ ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge (Gimlet Baseboard)
++
+ pci:v00001022d00001484*
+  ID_MODEL_FROM_DATABASE=Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
+ 
+@@ -16211,6 +16241,9 @@ pci:v00001028d00000016sv00001028sd00001F24*
+ pci:v00001028d00000073*
+  ID_MODEL_FROM_DATABASE=NV-RAM Adapter
+ 
++pci:v00001028d00001028*
++ ID_MODEL_FROM_DATABASE=PCIe Bridge riser
++
+ pci:v00001029*
+  ID_VENDOR_FROM_DATABASE=Siemens Nixdorf IS
+ 
+@@ -38525,9 +38558,24 @@ pci:v000010EEd00003FC5*
+ pci:v000010EEd00003FC6*
+  ID_MODEL_FROM_DATABASE=RME Hammerfall DSP MADI
+ 
++pci:v000010EEd00005000*
++ ID_MODEL_FROM_DATABASE=Alveo U200 XDMA Platform
++
++pci:v000010EEd00005004*
++ ID_MODEL_FROM_DATABASE=Alveo U250 XDMA Platform
++
+ pci:v000010EEd00005005*
+  ID_MODEL_FROM_DATABASE=Alveo U250
+ 
++pci:v000010EEd0000500C*
++ ID_MODEL_FROM_DATABASE=Alveo U280 XDMA Platform
++
++pci:v000010EEd00005020*
++ ID_MODEL_FROM_DATABASE=Alveo U50 XMDA Platform
++
++pci:v000010EEd0000505C*
++ ID_MODEL_FROM_DATABASE=Alveo U55C
++
+ pci:v000010EEd00007038*
+  ID_MODEL_FROM_DATABASE=FPGA Card XC7VX690T
+ 
+@@ -38546,6 +38594,18 @@ pci:v000010EEd00008380*
+ pci:v000010EEd00008381*
+  ID_MODEL_FROM_DATABASE=Ellips Santos Frame Grabber
+ 
++pci:v000010EEd0000D000*
++ ID_MODEL_FROM_DATABASE=Alveo U200 Golden Image
++
++pci:v000010EEd0000D004*
++ ID_MODEL_FROM_DATABASE=Alveo U250 Golden Image
++
++pci:v000010EEd0000D00C*
++ ID_MODEL_FROM_DATABASE=Alveo U280 Golden Image
++
++pci:v000010EEd0000D020*
++ ID_MODEL_FROM_DATABASE=Alveo U50 Golden Image
++
+ pci:v000010EEd0000D154*
+  ID_MODEL_FROM_DATABASE=Copley Controls CAN card (PCI-CAN-02)
+ 
+@@ -55572,7 +55632,7 @@ pci:v00001425d00006092*
+  ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
+ 
+ pci:v00001425d00006092sv000001DEsd0000FFF9*
+- ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6)
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard)
+ 
+ pci:v00001425d00006401*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller
+@@ -55650,7 +55710,7 @@ pci:v00001425d00006492*
+  ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller
+ 
+ pci:v00001425d00006492sv000001DEsd0000FFF9*
+- ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6)
++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard)
+ 
+ pci:v00001425d00006501*
+  ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller
+@@ -68978,6 +69038,9 @@ pci:v00001ADEd00003038sv00004254sd00000552*
+ pci:v00001AE0*
+  ID_VENDOR_FROM_DATABASE=Google, Inc.
+ 
++pci:v00001AE0d0000001F*
++ ID_MODEL_FROM_DATABASE=NVMe device
++
+ pci:v00001AE0d00000042*
+  ID_MODEL_FROM_DATABASE=Compute Engine Virtual Ethernet [gVNIC]
+ 
+@@ -69563,6 +69626,9 @@ pci:v00001B4Bd00002241sv00001028sd00002151*
+ pci:v00001B4Bd00002241sv00001028sd00002196*
+  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ROR-N100)
+ 
++pci:v00001B4Bd00002241sv00001B4Bsd00002241*
++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (Santa Cruz NVMe Host Adapter)
++
+ pci:v00001B4Bd00002241sv00001D49sd00000306*
+  ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit)
+ 
+@@ -71486,6 +71552,9 @@ pci:v00001DA3d00001000*
+ pci:v00001DA3d00001010*
+  ID_MODEL_FROM_DATABASE=HL-2000 AI Training Accelerator [Gaudi secured]
+ 
++pci:v00001DA8*
++ ID_VENDOR_FROM_DATABASE=Corigine, Inc.
++
+ pci:v00001DAD*
+  ID_VENDOR_FROM_DATABASE=Fungible
+ 
+@@ -72932,6 +73001,9 @@ pci:v00001F3Fd00009032*
+ pci:v00001F3Fd00009032sv00001F3Fsd000000A1*
+  ID_MODEL_FROM_DATABASE=SDI5.1 (Dual Port 100GE SDI5.1)
+ 
++pci:v00001F40*
++ ID_VENDOR_FROM_DATABASE=Netac Technology Co.,Ltd
++
+ pci:v00001FAA*
+  ID_VENDOR_FROM_DATABASE=Hexaflake (Shanghai) Information Technology Co., Ltd.
+ 
+@@ -82070,6 +82142,9 @@ pci:v00008086d000015FFsv00008086sd0000000B*
+ pci:v00008086d000015FFsv00008086sd0000000C*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0)
+ 
++pci:v00008086d000015FFsv00008086sd0000000D*
++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 2P X710-T2L-t OCP)
++
+ pci:v00008086d000015FFsv00008086sd0000000F*
+  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0)
+ 
+@@ -92505,10 +92580,28 @@ pci:v00008086d000031A8sv00001849sd000031A8*
+  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
+ 
+ pci:v00008086d000031AC*
+- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 0
+ 
+ pci:v00008086d000031AE*
+- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 1
++
++pci:v00008086d000031B0*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 2
++
++pci:v00008086d000031B2*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 3
++
++pci:v00008086d000031B4*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 4
++
++pci:v00008086d000031B6*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 5
++
++pci:v00008086d000031B8*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 6
++
++pci:v00008086d000031BA*
++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 7
+ 
+ pci:v00008086d000031BC*
+  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO UART Host Controller
+@@ -96944,6 +97037,9 @@ pci:v00008086d00008818*
+ pci:v00008086d00008819*
+  ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T IEEE 1588 Hardware Assist
+ 
++pci:v00008086d00008A03*
++ ID_MODEL_FROM_DATABASE=Processor Power and Thermal Controller
++
+ pci:v00008086d00008A0D*
+  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #1
+ 
+diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb
+index ee890a8f28..a9b2eabd54 100644
+--- a/hwdb.d/20-usb-vendor-model.hwdb
++++ b/hwdb.d/20-usb-vendor-model.hwdb
+@@ -51843,7 +51843,7 @@ usb:v1391p1000*
+  ID_MODEL_FROM_DATABASE=URTC-1000
+ 
+ usb:v1395*
+- ID_VENDOR_FROM_DATABASE=Sennheiser Communications
++ ID_VENDOR_FROM_DATABASE=DSEA A/S
+ 
+ usb:v1395p0025*
+  ID_MODEL_FROM_DATABASE=Headset [PC 8]
+@@ -51969,7 +51969,7 @@ usb:v1395p0067*
+  ID_MODEL_FROM_DATABASE=SP 20 D MS
+ 
+ usb:v1395p006B*
+- ID_MODEL_FROM_DATABASE=SC5x5 MS
++ ID_MODEL_FROM_DATABASE=SC6x5
+ 
+ usb:v1395p0072*
+  ID_MODEL_FROM_DATABASE=Headset
+diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt
+index 8481ff91b9..d98eb3f384 100644
+--- a/hwdb.d/ma-large.txt
++++ b/hwdb.d/ma-large.txt
+@@ -31745,12 +31745,6 @@ FC1CA1     (base 16)		Nokia
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-D4-2D-C5   (hex)		Panasonic i-PRO Sensing Solutions Co., Ltd.
+-D42DC5     (base 16)		Panasonic i-PRO Sensing Solutions Co., Ltd.
+-				4-1-62 Minoshima, Hakata-ku
+-				Fukuoka City     812-8531
+-				JP
+-
+ E8-D0-3C   (hex)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+ E8D03C     (base 16)		Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+ 				3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District
+@@ -32141,9 +32135,6 @@ F06728     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-BC-D7-67   (hex)		Private
+-BCD767     (base 16)		Private
+-
+ 9C-E1-76   (hex)		Cisco Systems, Inc
+ 9CE176     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Dr.
+@@ -37388,6 +37379,12 @@ DC8084     (base 16)		Apple, Inc.
+ 				Ernakulam  KL  686662
+ 				IN
+ 
++E4-DA-DF   (hex)		Taicang T&W Electronics
++E4DADF     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
++				CN
++
+ 7C-35-F8   (hex)		Zhejiang Tmall Technology Co., Ltd.
+ 7C35F8     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+ 				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+@@ -37412,12 +37409,6 @@ C85895     (base 16)		Motorola Mobility LLC, a Lenovo Company
+ 				Chicago  IL  60654
+ 				US
+ 
+-E4-DA-DF   (hex)		Taicang T&W Electronics
+-E4DADF     (base 16)		Taicang T&W Electronics
+-				89# Jiang Nan RD
+-				Suzhou  Jiangsu  215412
+-				CN
+-
+ A8-53-7D   (hex)		Mist Systems, Inc.
+ A8537D     (base 16)		Mist Systems, Inc.
+ 				1601 South De Anza Blvd, Suite 248
+@@ -37448,6 +37439,12 @@ E8D322     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
++30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
++302BDC     (base 16)		Top-Unum Electronics Co., LTD
++				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
++				New Taipei City 239,  Taiwan  239
++				CN
++
+ 8C-15-53   (hex)		Beijing Memblaze Technology Co Ltd
+ 8C1553     (base 16)		Beijing Memblaze Technology Co Ltd
+ 				Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian
+@@ -37496,24 +37493,6 @@ E8EBD3     (base 16)		Mellanox Technologies, Inc.
+ 				Sunnyvale  CA  94085
+ 				US
+ 
+-30-2B-DC   (hex)		Top-Unum Electronics Co., LTD
+-302BDC     (base 16)		Top-Unum Electronics Co., LTD
+-				No. 58, Ln. 137, Jianshan Rd., Yingge Dist., 
+-				New Taipei City 239,  Taiwan  239
+-				CN
+-
+-90-F7-B2   (hex)		New H3C Technologies Co., Ltd
+-90F7B2     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
+-
+-04-E3-1A   (hex)		Sagemcom Broadband SAS
+-04E31A     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+ C0-06-0C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ C0060C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -37532,18 +37511,24 @@ B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
++90-F7-B2   (hex)		New H3C Technologies Co., Ltd
++90F7B2     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++04-E3-1A   (hex)		Sagemcom Broadband SAS
++04E31A     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
+ 6C-99-9D   (hex)		Amazon Technologies Inc.
+ 6C999D     (base 16)		Amazon Technologies Inc.
+ 				P.O Box 8102 
+ 				Reno  NV  89507
+ 				US
+ 
+-6C-93-08   (hex)		IEEE Registration Authority
+-6C9308     (base 16)		IEEE Registration Authority
+-				445 Hoes Lane
+-				Piscataway  NJ  08554
+-				US
+-
+ 7C-6A-60   (hex)		China Mobile Group Device Co.,Ltd.
+ 7C6A60     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				32 Xuanwumen West Street,Xicheng District
+@@ -37562,20 +37547,14 @@ B0A4F0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				York    YO30 4RY
+ 				GB
+ 
+-D8-E2-DF   (hex)		Microsoft Corporation
+-D8E2DF     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
+-				US
+-
+-1C-61-B4   (hex)		TP-Link Corporation Limited
+-1C61B4     (base 16)		TP-Link Corporation Limited
++9C-A2-F4   (hex)		TP-Link Corporation Limited
++9CA2F4     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+ 
+-9C-A2-F4   (hex)		TP-Link Corporation Limited
+-9CA2F4     (base 16)		TP-Link Corporation Limited
++1C-61-B4   (hex)		TP-Link Corporation Limited
++1C61B4     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+@@ -37586,23 +37565,29 @@ B4695F     (base 16)		TCT mobile ltd
+ 				Hui Zhou  Guang Dong  516006
+ 				CN
+ 
++D8-E2-DF   (hex)		Microsoft Corporation
++D8E2DF     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
++6C-93-08   (hex)		IEEE Registration Authority
++6C9308     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
+ 38-8F-30   (hex)		Samsung Electronics Co.,Ltd
+ 388F30     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-A0-44-66   (hex)		Intellics
+-A04466     (base 16)		Intellics
+-				697, Pangyo-ro, Bundang-gu
+-				Seongnam-si  Gyeonggi-do  13511
+-				KR
+-
+-44-6D-7F   (hex)		Amazon Technologies Inc.
+-446D7F     (base 16)		Amazon Technologies Inc.
+-				P.O Box 8102 
+-				Reno    89507
+-				US
++24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
+ 
+ 84-C6-92   (hex)		Texas Instruments
+ 84C692     (base 16)		Texas Instruments
+@@ -37622,10 +37607,40 @@ A04466     (base 16)		Intellics
+ 				London    E14 5EY
+ 				GB
+ 
+-24-06-F2   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-2406F2     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
++A0-44-66   (hex)		Intellics
++A04466     (base 16)		Intellics
++				697, Pangyo-ro, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13511
++				KR
++
++CC-66-18   (hex)		Adtran Inc
++CC6618     (base 16)		Adtran Inc
++				901 Explorer Blvd.
++				Huntsville  AL  35806-2807
++				US
++
++C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++50-42-89   (hex)		zte corporation
++504289     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
+ C0-6D-ED   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+@@ -37634,6 +37649,18 @@ C06DED     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
++44-6D-7F   (hex)		Amazon Technologies Inc.
++446D7F     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno    89507
++				US
++
++E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
++E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
++				No.6, 4th Yunpu Road, Yunpu industry District
++				Guangzhou  Guangdong  510530
++				CN
++
+ 90-93-5A   (hex)		ARRIS Group, Inc.
+ 90935A     (base 16)		ARRIS Group, Inc.
+ 				6450 Sequence Drive
+@@ -37652,42 +37679,12 @@ AC8FA9     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Sunnyvale  CA  94089
+ 				US
+ 
+-C0-C1-70   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+-C0C170     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+-50-42-89   (hex)		zte corporation
+-504289     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+-44-29-1E   (hex)		AltoBeam (China) Inc.
+-44291E     (base 16)		AltoBeam (China) Inc.
+-				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
+-				Beijing  Beijing  100083
+-				CN
+-
+ 24-EB-ED   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 24EBED     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-30-8E-7A   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-308E7A     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-2C-DD-5F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-2CDD5F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+ AC-51-AB   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -37700,16 +37697,22 @@ AC51AB     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-CC-66-18   (hex)		Adtran Inc
+-CC6618     (base 16)		Adtran Inc
+-				901 Explorer Blvd.
+-				Huntsville  AL  35806-2807
+-				US
++F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
+ 
+-E0-27-6C   (hex)		Guangzhou Shiyuan Electronic Technology Company Limited
+-E0276C     (base 16)		Guangzhou Shiyuan Electronic Technology Company Limited
+-				No.6, 4th Yunpu Road, Yunpu industry District
+-				Guangzhou  Guangdong  510530
++A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
++A8C98A     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
++
++44-29-1E   (hex)		AltoBeam (China) Inc.
++44291E     (base 16)		AltoBeam (China) Inc.
++				B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian
++				Beijing  Beijing  100083
+ 				CN
+ 
+ DC-8E-95   (hex)		Silicon Laboratories
+@@ -37718,6 +37721,12 @@ DC8E95     (base 16)		Silicon Laboratories
+ 				Austin  TX  78701
+ 				US
+ 
++7C-EF-40   (hex)		Nextorage Corporation
++7CEF40     (base 16)		Nextorage Corporation
++				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
++				Kawasaki City  Kanagawa  210-0007
++				JP
++
+ 28-BE-43   (hex)		vivo Mobile Communication Co., Ltd.
+ 28BE43     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				No.1, vivo Road, Chang'an
+@@ -37730,11 +37739,11 @@ DC8E95     (base 16)		Silicon Laboratories
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-F8-AD-24   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-F8AD24     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+-				Chongqing   China  401120
+-				CN
++28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
++2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
++				Werinherstrasse 91
++				München  Bavaria  D-81541
++				DE
+ 
+ B0-1F-8C   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+@@ -37742,11 +37751,11 @@ B01F8C     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				Santa Clara  CA  95054
+ 				US
+ 
+-A8-C9-8A   (hex)		New H3C Technologies Co., Ltd
+-A8C98A     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
++C0-E0-1C   (hex)		IoT Security Group, SL
++C0E01C     (base 16)		IoT Security Group, SL
++				Calle Pez Dorado, 27, local 2
++				Torremolinos  Malaga  29620
++				ES
+ 
+ 00-26-04   (hex)		WorldCast Systems
+ 002604     (base 16)		WorldCast Systems
+@@ -37754,11 +37763,23 @@ A8C98A     (base 16)		New H3C Technologies Co., Ltd
+ 				Mérignac    33700
+ 				FR
+ 
+-7C-EF-40   (hex)		Nextorage Corporation
+-7CEF40     (base 16)		Nextorage Corporation
+-				Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku
+-				Kawasaki City  Kanagawa  210-0007
+-				JP
++00-CB-7A   (hex)		Technicolor CH USA Inc.
++00CB7A     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++F8-AB-82   (hex)		Xiaomi Communications Co Ltd
++F8AB82     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++EC-30-B3   (hex)		Xiaomi Communications Co Ltd
++EC30B3     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
+ 
+ 1C-AF-4A   (hex)		Samsung Electronics Co.,Ltd
+ 1CAF4A     (base 16)		Samsung Electronics Co.,Ltd
+@@ -37772,17 +37793,17 @@ C8120B     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
+-28-74-F5   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+-2874F5     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+-				Werinherstrasse 91
+-				München  Bavaria  D-81541
+-				DE
++90-2C-FB   (hex)		CanTops Co,.Ltd.
++902CFB     (base 16)		CanTops Co,.Ltd.
++				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
++				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
++				KR
+ 
+-C0-E0-1C   (hex)		IoT Security Group, SL
+-C0E01C     (base 16)		IoT Security Group, SL
+-				Calle Pez Dorado, 27, local 2
+-				Torremolinos  Malaga  29620
+-				ES
++A8-A2-37   (hex)		Arcadyan Corporation
++A8A237     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
+ 
+ 00-00-BD   (hex)		RYOSEI, Ltd.
+ 0000BD     (base 16)		RYOSEI, Ltd.
+@@ -37790,42 +37811,42 @@ C0E01C     (base 16)		IoT Security Group, SL
+ 				Amagasaki-shi  Hyogo   660-0834
+ 				JP
+ 
+-00-CB-7A   (hex)		Technicolor CH USA Inc.
+-00CB7A     (base 16)		Technicolor CH USA Inc.
+-				5030 Sugarloaf Parkway Bldg 6 
+-				Lawrenceville  GA  30044
+-				US
+-
+ AC-CC-FC   (hex)		Amazon Technologies Inc.
+ ACCCFC     (base 16)		Amazon Technologies Inc.
+ 				P.O Box 8102 
+ 				Reno  NV  89507
+ 				US
+ 
+-90-2C-FB   (hex)		CanTops Co,.Ltd.
+-902CFB     (base 16)		CanTops Co,.Ltd.
+-				A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil
+-				Yeongtong-gu  Suwon-si, Gyonggi-do  1660
+-				KR
+-
+-F8-AB-82   (hex)		Xiaomi Communications Co Ltd
+-F8AB82     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
++08-E6-3B   (hex)		zte corporation
++08E63B     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
+-EC-30-B3   (hex)		Xiaomi Communications Co Ltd
+-EC30B3     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
++88-C1-74   (hex)		zte corporation
++88C174     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
++C8-9E-61   (hex)		Lyngsoe Systems LTd
++C89E61     (base 16)		Lyngsoe Systems LTd
++				101 Simona Dr., Unit 2
++				Bolton  Ontario  L7E 4E8
++				CA
++
+ 9C-57-BC   (hex)		eero inc.
+ 9C57BC     (base 16)		eero inc.
+ 				660 3rd Street
+ 				San Francisco  CA  94107
+ 				US
+ 
++2C-82-17   (hex)		Apple, Inc.
++2C8217     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ 14-2D-4D   (hex)		Apple, Inc.
+ 142D4D     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -37844,12 +37865,6 @@ B8211C     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-B0-3F-64   (hex)		Apple, Inc.
+-B03F64     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+ D4-5A-3F   (hex)		Juniper Networks
+ D45A3F     (base 16)		Juniper Networks
+ 				1133 Innovation Way
+@@ -37862,35 +37877,35 @@ E8DC6C     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-A8-A2-37   (hex)		Arcadyan Corporation
+-A8A237     (base 16)		Arcadyan Corporation
+-				No.8, Sec.2, Guangfu Rd.
+-				Hsinchu City  Hsinchu  30071
+-				TW
++48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
++48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
+ 
+-2C-82-17   (hex)		Apple, Inc.
+-2C8217     (base 16)		Apple, Inc.
++B0-3F-64   (hex)		Apple, Inc.
++B03F64     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-08-E6-3B   (hex)		zte corporation
+-08E63B     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++68-A7-B4   (hex)		Honor Device Co., Ltd.
++68A7B4     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
+ 				CN
+ 
+-88-C1-74   (hex)		zte corporation
+-88C174     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-C8-9E-61   (hex)		Lyngsoe Systems LTd
+-C89E61     (base 16)		Lyngsoe Systems LTd
+-				101 Simona Dr., Unit 2
+-				Bolton  Ontario  L7E 4E8
+-				CA
++A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
+ 
+ E0-28-B1   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ E028B1     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+@@ -37910,12 +37925,6 @@ C08D51     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-48-B4-C3   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-48B4C3     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
+-
+ 6C-15-24   (hex)		IEEE Registration Authority
+ 6C1524     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -37928,6 +37937,12 @@ C08D51     (base 16)		Amazon Technologies Inc.
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
++00-12-93   (hex)		ABB Switzerland Ltd.
++001293     (base 16)		ABB Switzerland Ltd.
++				Via Luserte Sud 9  Quartino 
++				Quartino     6572
++				CH
++
+ C0-E9-11   (hex)		Private
+ C0E911     (base 16)		Private
+ 
+@@ -37943,28 +37958,28 @@ C0E911     (base 16)		Private
+ 				London    SW1Y 4AR
+ 				GB
+ 
+-68-A7-B4   (hex)		Honor Device Co., Ltd.
+-68A7B4     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
++24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
++242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
+ 				CN
+ 
+-80-3C-20   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-803C20     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++A0-42-D1   (hex)		Huawei Device Co., Ltd.
++A042D1     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+-A4-DD-58   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-A4DD58     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
++2C-DC-78   (hex)		Descartes Systems (USA) LLC
++2CDC78     (base 16)		Descartes Systems (USA) LLC
++				2030 Powers Ferry Road SE
++				Atlanta  GA  303339
++				US
+ 
+-24-2C-FE   (hex)		Zhejiang Tmall Technology Co., Ltd.
+-242CFE     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+-				Hangzhou  Zhejiang  310024
++58-87-9F   (hex)		Huawei Device Co., Ltd.
++58879F     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+ E8-D8-7E   (hex)		Amazon Technologies Inc.
+@@ -37973,59 +37988,47 @@ E8D87E     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-00-12-93   (hex)		ABB Switzerland Ltd.
+-001293     (base 16)		ABB Switzerland Ltd.
+-				Via Luserte Sud 9  Quartino 
+-				Quartino     6572
+-				CH
+-
+ 9C-1F-CA   (hex)		Hangzhou AlmightyDigit Technology Co., Ltd
+ 9C1FCA     (base 16)		Hangzhou AlmightyDigit Technology Co., Ltd
+ 				Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District
+ 				Hangzhou  Zhejiang   310000
+ 				CN
+ 
+-2C-DC-78   (hex)		Descartes Systems (USA) LLC
+-2CDC78     (base 16)		Descartes Systems (USA) LLC
+-				2030 Powers Ferry Road SE
+-				Atlanta  GA  303339
++84-70-D7   (hex)		eero inc.
++8470D7     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
+ 				US
+ 
+-A0-42-D1   (hex)		Huawei Device Co., Ltd.
+-A042D1     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-58-87-9F   (hex)		Huawei Device Co., Ltd.
+-58879F     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+ E0-6C-4E   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
++58-1D-D8   (hex)		Sagemcom Broadband SAS
++581DD8     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
+ 80-6A-B0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ 806AB0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+-84-70-D7   (hex)		eero inc.
+-8470D7     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
++F4-B3-B1   (hex)		Silicon Laboratories
++F4B3B1     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
+ 				US
+ 
+-10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+-10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
+-				No.218 Qianwangang Road
+-				Qingdao  Shangdong  266510
+-				CN
++04-69-8F   (hex)		Juniper Networks
++04698F     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
+ 
+ 14-9B-F3   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 149BF3     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+@@ -38039,11 +38042,11 @@ E06C4E     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
+-F4-B3-B1   (hex)		Silicon Laboratories
+-F4B3B1     (base 16)		Silicon Laboratories
+-				400 West Cesar Chavez Street
+-				Austin  TX  78701
+-				US
++10-B2-32   (hex)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++10B232     (base 16)		Qingdao Intelligent&Precise Electronics Co.,Ltd.
++				No.218 Qianwangang Road
++				Qingdao  Shangdong  266510
++				CN
+ 
+ B8-50-D8   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+@@ -38051,36 +38054,6 @@ B850D8     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Beijing  Beijing  100085
+ 				CN
+ 
+-58-1D-D8   (hex)		Sagemcom Broadband SAS
+-581DD8     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+-04-69-8F   (hex)		Juniper Networks
+-04698F     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
+-
+-5C-53-C3   (hex)		Ubee Interactive Co., Limited
+-5C53C3     (base 16)		Ubee Interactive Co., Limited
+-				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+-				North Point    00000
+-				HK
+-
+-AC-5A-F0   (hex)		LG Electronics
+-AC5AF0     (base 16)		LG Electronics
+-				222 LG-ro, JINWI-MYEON
+-				Pyeongtaek-si  Gyeonggi-do  451-713
+-				KR
+-
+-EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+ C0-9F-51   (hex)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ C09F51     (base 16)		SERNET (SUZHOU) TECHNOLOGIES CORPORATION
+ 				NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China
+@@ -38099,17 +38072,11 @@ A0CDF3     (base 16)		Murata Manufacturing Co., Ltd.
+ 				Nagaokakyo-shi  Kyoto  617-8555
+ 				JP
+ 
+-24-29-34   (hex)		Google, Inc.
+-242934     (base 16)		Google, Inc.
+-				1600 Amphitheatre Parkway
+-				Mountain View  CA  94043
+-				US
+-
+-38-0A-4F   (hex)		PRACHI ENTERPRISES
+-380A4F     (base 16)		PRACHI ENTERPRISES
+-				B-141, 2nd FLOOR SECTOR-6 NOIDA
+-				NOIDA  UTTARPRADESH  201301
+-				IN
++B4-8A-0A   (hex)		Espressif Inc.
++B48A0A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
+ 
+ C8-3A-1B   (hex)		Toshiba TEC Corporation Inc
+ C83A1B     (base 16)		Toshiba TEC Corporation Inc
+@@ -38117,29 +38084,23 @@ C83A1B     (base 16)		Toshiba TEC Corporation Inc
+ 				Shinagawa-ku  Tokyo  141-8664
+ 				JP
+ 
+-B4-8A-0A   (hex)		Espressif Inc.
+-B48A0A     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
++EC-A6-2F   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++ECA62F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-80-19-70   (hex)		Samsung Electronics Co.,Ltd
+-801970     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
++AC-5A-F0   (hex)		LG Electronics
++AC5AF0     (base 16)		LG Electronics
++				222 LG-ro, JINWI-MYEON
++				Pyeongtaek-si  Gyeonggi-do  451-713
+ 				KR
+ 
+-E0-F7-28   (hex)		Amazon Technologies Inc.
+-E0F728     (base 16)		Amazon Technologies Inc.
+-				P.O Box 8102 
+-				Reno  NV  89507
+-				US
+-
+-1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
++5C-53-C3   (hex)		Ubee Interactive Co., Limited
++5C53C3     (base 16)		Ubee Interactive Co., Limited
++				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
++				North Point    00000
++				HK
+ 
+ 24-32-AE   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+ 2432AE     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
+@@ -38171,6 +38132,12 @@ AC936A     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++1C-0E-D3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++1C0ED3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
+ 7C-4C-A5   (hex)		SKY UK LIMITED
+ 7C4CA5     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -38195,17 +38162,41 @@ C03E0F     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-D0-58-FC   (hex)		SKY UK LIMITED
+-D058FC     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
++24-29-34   (hex)		Google, Inc.
++242934     (base 16)		Google, Inc.
++				1600 Amphitheatre Parkway
++				Mountain View  CA  94043
++				US
+ 
+-90-02-18   (hex)		SKY UK LIMITED
+-900218     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
++38-0A-4F   (hex)		PRACHI ENTERPRISES
++380A4F     (base 16)		PRACHI ENTERPRISES
++				B-141, 2nd FLOOR SECTOR-6 NOIDA
++				NOIDA  UTTARPRADESH  201301
++				IN
++
++80-19-70   (hex)		Samsung Electronics Co.,Ltd
++801970     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++E0-F7-28   (hex)		Amazon Technologies Inc.
++E0F728     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
++B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
++				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
++				xiamen  fujian  361000
++				CN
++
++34-85-18   (hex)		Espressif Inc.
++348518     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
+ 
+ D4-DA-CD   (hex)		SKY UK LIMITED
+ D4DACD     (base 16)		SKY UK LIMITED
+@@ -38231,66 +38222,6 @@ B04530     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
+-A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+-7C-DE-78   (hex)		New H3C Technologies Co., Ltd
+-7CDE78     (base 16)		New H3C Technologies Co., Ltd
+-				466 Changhe Road, Binjiang District
+-				Hangzhou  Zhejiang  310052
+-				CN
+-
+-3C-E0-64   (hex)		Texas Instruments
+-3CE064     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-E0-92-8F   (hex)		Texas Instruments
+-E0928F     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-CC-03-7B   (hex)		Texas Instruments
+-CC037B     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
+-
+-58-1C-F8   (hex)		Intel Corporate
+-581CF8     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-AC-19-8E   (hex)		Intel Corporate
+-AC198E     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-C8-5E-A9   (hex)		Intel Corporate
+-C85EA9     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-B8-FB-AF   (hex)		Xiamen IPRT Technology CO.,LTD
+-B8FBAF     (base 16)		Xiamen IPRT Technology CO.,LTD
+-				3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China.
+-				xiamen  fujian  361000
+-				CN
+-
+-34-85-18   (hex)		Espressif Inc.
+-348518     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+ EC-E6-A2   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ ECE6A2     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				No.5 DongXin Road
+@@ -38309,12 +38240,24 @@ E02E0B     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-CC-29-BD   (hex)		zte corporation
+-CC29BD     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++A4-AE-11   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE11     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
+ 				CN
+ 
++D0-58-FC   (hex)		SKY UK LIMITED
++D058FC     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
++90-02-18   (hex)		SKY UK LIMITED
++900218     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
+ 38-5C-FB   (hex)		Silicon Laboratories
+ 385CFB     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+@@ -38327,23 +38270,65 @@ C43D1A     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
++BC-F8-8B   (hex)		zte corporation
++BCF88B     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
+ 68-53-9D   (hex)		EM Microelectronic
+ 68539D     (base 16)		EM Microelectronic
+ 				Rue des Sors 3
+ 				Marin-Epagnier  Neuchatel  2074
+ 				CH
+ 
++E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
++				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
++				SHEN ZHEN  GUANG DONG  518100
++				CN
++
+ C8-BF-4C   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ C8BF4C     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+ 				Beijing  Beijing  100085
+ 				CN
+ 
+-E4-65-64   (hex)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+-E46564     (base 16)		SHENZHEN KTC TECHNOLOGY CO.,LTD
+-				Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China
+-				SHEN ZHEN  GUANG DONG  518100
+-				CN
++58-1C-F8   (hex)		Intel Corporate
++581CF8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++AC-19-8E   (hex)		Intel Corporate
++AC198E     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++C8-5E-A9   (hex)		Intel Corporate
++C85EA9     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++3C-E0-64   (hex)		Texas Instruments
++3CE064     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++E0-92-8F   (hex)		Texas Instruments
++E0928F     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++CC-03-7B   (hex)		Texas Instruments
++CC037B     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
+ 
+ E0-51-D8   (hex)		China Dragon Technology Limited
+ E051D8     (base 16)		China Dragon Technology Limited
+@@ -38351,17 +38336,17 @@ E051D8     (base 16)		China Dragon Technology Limited
+ 				Shenzhen  Guangdong  518104
+ 				CN
+ 
+-BC-F8-8B   (hex)		zte corporation
+-BCF88B     (base 16)		zte corporation
++CC-29-BD   (hex)		zte corporation
++CC29BD     (base 16)		zte corporation
+ 				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-5C-60-BA   (hex)		HP Inc.
+-5C60BA     (base 16)		HP Inc.
+-				10300 Energy Dr
+-				Spring  TX  77389
+-				US
++7C-DE-78   (hex)		New H3C Technologies Co., Ltd
++7CDE78     (base 16)		New H3C Technologies Co., Ltd
++				466 Changhe Road, Binjiang District
++				Hangzhou  Zhejiang  310052
++				CN
+ 
+ E0-EF-02   (hex)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+ E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+@@ -38375,6 +38360,18 @@ E0EF02     (base 16)		Chengdu Quanjing Intelligent Technology Co.,Ltd
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
++20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
++209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
++E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
++				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
++				Chengdu  Sichuan  610000
++				CN
++
+ A8-AB-B5   (hex)		Apple, Inc.
+ A8ABB5     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -38393,29 +38390,11 @@ A8ABB5     (base 16)		Apple, Inc.
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+-74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+-				Phase 3, Bayan Lepas FIZ
+-				Bayan Lepas  Penang  11900
+-				MY
+-
+-04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
+-
+-A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
+-A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
+-				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
+-				Guangzhou  Guangdong  510640
+-				CN
+-
+-E8-CC-8C   (hex)		Chengdu Jiarui Hualian Communication Technology Co
+-E8CC8C     (base 16)		Chengdu Jiarui Hualian Communication Technology Co
+-				5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province
+-				Chengdu  Sichuan  610000
+-				CN
++B0-67-B5   (hex)		Apple, Inc.
++B067B5     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
+ 
+ 5C-52-84   (hex)		Apple, Inc.
+ 5C5284     (base 16)		Apple, Inc.
+@@ -38435,11 +38414,17 @@ C0956D     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-20-9C-B4   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-209CB4     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
++04-43-FD   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++0443FD     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++74-80-3F   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++74803F     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
+ 
+ EC-A1-38   (hex)		Amazon Technologies Inc.
+ ECA138     (base 16)		Amazon Technologies Inc.
+@@ -38447,12 +38432,18 @@ ECA138     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-B0-67-B5   (hex)		Apple, Inc.
+-B067B5     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
++5C-60-BA   (hex)		HP Inc.
++5C60BA     (base 16)		HP Inc.
++				10300 Energy Dr
++				Spring  TX  77389
+ 				US
+ 
++A4-89-7E   (hex)		Guangzhou Yuhong Technology Co.,Ltd.
++A4897E     (base 16)		Guangzhou Yuhong Technology Co.,Ltd.
++				Room 402, No. 11 Software Road, Tianhe District, Guangzhou
++				Guangzhou  Guangdong  510640
++				CN
++
+ 90-0A-62   (hex)		Inventus Power Eletronica do Brasil LTDA
+ 900A62     (base 16)		Inventus Power Eletronica do Brasil LTDA
+ 				Av Buriti, 4285 Distrito Industrial
+@@ -38477,18 +38468,6 @@ B067B5     (base 16)		Apple, Inc.
+ 				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
+-50-5F-B5   (hex)		ASKEY COMPUTER CORP
+-505FB5     (base 16)		ASKEY COMPUTER CORP
+-				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
+-				NEW TAIPEI     235
+-				TW
+-
+-88-DE-7C   (hex)		ASKEY COMPUTER CORP
+-88DE7C     (base 16)		ASKEY COMPUTER CORP
+-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+-				NEW TAIPEI CITY    23585
+-				TW
+-
+ AC-31-84   (hex)		Huawei Device Co., Ltd.
+ AC3184     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -38501,6 +38480,18 @@ AC3184     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++50-5F-B5   (hex)		ASKEY COMPUTER CORP
++505FB5     (base 16)		ASKEY COMPUTER CORP
++				10F, NO. 119, JIANKANG RD., ZHONGHE DIST.
++				NEW TAIPEI     235
++				TW
++
++88-DE-7C   (hex)		ASKEY COMPUTER CORP
++88DE7C     (base 16)		ASKEY COMPUTER CORP
++				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
++				NEW TAIPEI CITY    23585
++				TW
++
+ 48-1C-B9   (hex)		SZ DJI TECHNOLOGY CO.,LTD
+ 481CB9     (base 16)		SZ DJI TECHNOLOGY CO.,LTD
+ 				6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd
+@@ -38531,6 +38522,72 @@ B8208E     (base 16)		Panasonic Connect Co., Ltd.
+ 				San Mateo  CA  94402
+ 				US
+ 
++E0-BA-AD   (hex)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++E0BAAD     (base 16)		Hangzhou Hikvision Digital Technology Co.,Ltd.
++				No.555 Qianmo Road
++				Hangzhou  Zhejiang  310052
++				CN
++
++08-91-15   (hex)		Amazon Technologies Inc.
++089115     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++74-D4-23   (hex)		Amazon Technologies Inc.
++74D423     (base 16)		Amazon Technologies Inc.
++				P.O Box 8102 
++				Reno  NV  89507
++				US
++
++EC-1D-9E   (hex)		Quectel Wireless Solutions Co.,Ltd.
++EC1D9E     (base 16)		Quectel Wireless Solutions Co.,Ltd.
++				7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District
++				Shanghai    200233
++				CN
++
++BC-D7-67   (hex)		BAE Systems Apllied Intelligence
++BCD767     (base 16)		BAE Systems Apllied Intelligence
++				170 Waterside House
++				Guildford  Surrey  GU2 7RQ
++				GB
++
++2C-69-1D   (hex)		IEEE Registration Authority
++2C691D     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++D4-2D-C5   (hex)		i-PRO Co., Ltd.
++D42DC5     (base 16)		i-PRO Co., Ltd.
++				4-1-62 Minoshima, Hakata-ku
++				Fukuoka City     812-8531
++				JP
++
++E0-47-35   (hex)		Ericsson AB
++E04735     (base 16)		Ericsson AB
++				Torshamnsgatan 36
++				Stockholm    SE-164 80
++				SE
++
++F4-2B-7D   (hex)		Chipsguide technology CO.,LTD.
++F42B7D     (base 16)		Chipsguide technology CO.,LTD.
++				No.758 in DongHua Design House, Nan Guang Road, Nan Shan Tone, ShenZhen, Guangdong, China
++				Shenzhen  Guangdong  518002
++				CN
++
++8C-52-19   (hex)		SHARP Corporation
++8C5219     (base 16)		SHARP Corporation
++				1 Takumi-cho, Sakai-ku
++				Sakai City  Osaka  590-8522
++				JP
++
++A0-44-F3   (hex)		RafaelMicro
++A044F3     (base 16)		RafaelMicro
++				8F.,No.28,Chenggong 12th St.
++				ChuBei City  HsinChu County  30264
++				TW
++
+ 9C-FF-C2   (hex)		AVI Systems GmbH
+ 9CFFC2     (base 16)		AVI Systems GmbH
+ 				Dr. Franz Wilhelmstraße 2A
+@@ -39272,9 +39329,6 @@ D0196A     (base 16)		Ciena Corporation
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-88-B4-36   (hex)		Private
+-88B436     (base 16)		Private
+-
+ 6C-AB-05   (hex)		Cisco Systems, Inc
+ 6CAB05     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -69548,9 +69602,6 @@ A0224E     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-30-27-CF   (hex)		Private
+-3027CF     (base 16)		Private
+-
+ 38-43-E5   (hex)		Grotech Inc
+ 3843E5     (base 16)		Grotech Inc
+ 				19, Ojeongongeop-gil
+@@ -75452,6 +75503,24 @@ D850A1     (base 16)		Hunan Danuo Technology Co.,LTD
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
++7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
++7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
++				Shenzhen   guangdong  518053
++				CN
++
++00-C3-0A   (hex)		Xiaomi Communications Co Ltd
++00C30A     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++88-52-EB   (hex)		Xiaomi Communications Co Ltd
++8852EB     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
+ B4-28-75   (hex)		Futecho Solutions Private Limited
+ B42875     (base 16)		Futecho Solutions Private Limited
+ 				504, Commercial Complex, Savitri Cinema Compound, GK2
+@@ -75470,24 +75539,6 @@ B42875     (base 16)		Futecho Solutions Private Limited
+ 				San Francisco  CA  94107
+ 				US
+ 
+-00-C3-0A   (hex)		Xiaomi Communications Co Ltd
+-00C30A     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-88-52-EB   (hex)		Xiaomi Communications Co Ltd
+-8852EB     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-7C-6C-F0   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-7C6CF0     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen 
+-				Shenzhen   guangdong  518053
+-				CN
+-
+ 00-A0-A2   (hex)		B810 S.R.L.
+ 00A0A2     (base 16)		B810 S.R.L.
+ 				Via E. Lazzaretti 2/1
+@@ -75560,6 +75611,12 @@ DC9A7D     (base 16)		HISENSE VISUAL TECHNOLOGY CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
++30-CB-36   (hex)		Belden Singapore Pte. Ltd.
++30CB36     (base 16)		Belden Singapore Pte. Ltd.
++				151 Lorong Chuan #05-01 New Tech Park Singapore
++				Singapore    556741
++				SG
++
+ B8-3F-D2   (hex)		Mellanox Technologies, Inc.
+ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				350 Oakmead Parkway, Suite 100 
+@@ -75572,12 +75629,6 @@ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				 Chiyoda-ku  Tokyo  100-0004
+ 				JP
+ 
+-30-CB-36   (hex)		Belden Singapore Pte. Ltd.
+-30CB36     (base 16)		Belden Singapore Pte. Ltd.
+-				151 Lorong Chuan #05-01 New Tech Park Singapore
+-				Singapore    556741
+-				SG
+-
+ 8C-17-59   (hex)		Intel Corporate
+ 8C1759     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -75590,11 +75641,29 @@ B83FD2     (base 16)		Mellanox Technologies, Inc.
+ 				San Jose  CA  95131
+ 				US
+ 
+-BC-6E-6D   (hex)		EM Microelectronic
+-BC6E6D     (base 16)		EM Microelectronic
+-				Rue des Sors 3
+-				Marin-Epagnier  Neuchatel  2074
+-				CH
++6C-A4-01   (hex)		essensys plc
++6CA401     (base 16)		essensys plc
++				Aldgate Tower, Leman Street
++				London    E1 8FA
++				GB
++
++34-92-C2   (hex)		Square Route Co., Ltd.
++3492C2     (base 16)		Square Route Co., Ltd.
++				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
++				Tokyo  Tokyo  108-0075
++				JP
++
++34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
++34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
++				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
++				Hangzhou    310052
++				CN
++
++64-C2-69   (hex)		eero inc.
++64C269     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
+ 
+ B0-4A-6A   (hex)		Samsung Electronics Co.,Ltd
+ B04A6A     (base 16)		Samsung Electronics Co.,Ltd
+@@ -75614,48 +75683,30 @@ A8798D     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-34-92-C2   (hex)		Square Route Co., Ltd.
+-3492C2     (base 16)		Square Route Co., Ltd.
+-				Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku
+-				Tokyo  Tokyo  108-0075
+-				JP
+-
+ 28-3D-C2   (hex)		Samsung Electronics Co.,Ltd
+ 283DC2     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
++BC-6E-6D   (hex)		EM Microelectronic
++BC6E6D     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
+ 00-D4-9E   (hex)		Intel Corporate
+ 00D49E     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-6C-A4-01   (hex)		essensys plc
+-6CA401     (base 16)		essensys plc
+-				Aldgate Tower, Leman Street
+-				London    E1 8FA
+-				GB
+-
+ CC-F3-05   (hex)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+ CCF305     (base 16)		SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD
+ 				Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District
+ 				Shenzhen  Guangdong  518126
+ 				CN
+ 
+-34-BD-20   (hex)		Hangzhou Hikrobot Technology Co., Ltd.
+-34BD20     (base 16)		Hangzhou Hikrobot Technology Co., Ltd.
+-				Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang
+-				Hangzhou    310052
+-				CN
+-
+-64-C2-69   (hex)		eero inc.
+-64C269     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
+-
+ AC-2A-A1   (hex)		Cisco Systems, Inc
+ AC2AA1     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -75674,34 +75725,16 @@ F8E94F     (base 16)		Cisco Systems, Inc
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-B8-D6-1A   (hex)		Espressif Inc.
+-B8D61A     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+-BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+-				Nanning  Guangxi  530007
++E0-6C-C5   (hex)		Huawei Device Co., Ltd.
++E06CC5     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+-D8-9C-8E   (hex)		Comcast Cable Corporation
+-D89C8E     (base 16)		Comcast Cable Corporation
+-				1800 Arch Street
+-				Philadelphia  PA  19103
+-				US
+-
+-74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+-74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
+-				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
+-				Pin-Jen  Taoyuan  324
+-				TW
+-
+-EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++30-96-3B   (hex)		Huawei Device Co., Ltd.
++30963B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+ 8C-6B-DB   (hex)		Huawei Device Co., Ltd.
+@@ -75728,24 +75761,6 @@ EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-E0-6C-C5   (hex)		Huawei Device Co., Ltd.
+-E06CC5     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-30-96-3B   (hex)		Huawei Device Co., Ltd.
+-30963B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+ 98-59-7A   (hex)		Intel Corporate
+ 98597A     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -75758,11 +75773,11 @@ E06CC5     (base 16)		Huawei Device Co., Ltd.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-B4-83-51   (hex)		Intel Corporate
+-B48351     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++B8-D6-1A   (hex)		Espressif Inc.
++B8D61A     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
+ 
+ 00-25-CA   (hex)		Laird Connectivity
+ 0025CA     (base 16)		Laird Connectivity
+@@ -75770,42 +75785,84 @@ B48351     (base 16)		Intel Corporate
+ 				Cedarburg  WI  53012
+ 				US
+ 
++90-B5-7F   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++90B57F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++74-56-3C   (hex)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++74563C     (base 16)		GIGA-BYTE TECHNOLOGY CO.,LTD.
++				Pin-Jen City, Taoyuan, Taiwan, R.O.C.
++				Pin-Jen  Taoyuan  324
++				TW
++
++D8-9C-8E   (hex)		Comcast Cable Corporation
++D89C8E     (base 16)		Comcast Cable Corporation
++				1800 Arch Street
++				Philadelphia  PA  19103
++				US
++
+ 04-B9-7D   (hex)		AiVIS Co., Itd.
+ 04B97D     (base 16)		AiVIS Co., Itd.
+ 				112, Dumipo-ro, Jung-gu 
+ 				Incheon  Incheon  22394
+ 				KR
+ 
++BC-F4-D4   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++BCF4D4     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
+ C4-C0-63   (hex)		New H3C Technologies Co., Ltd
+ C4C063     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+ 				Hangzhou  Zhejiang  310052
+ 				CN
+ 
+-54-43-B2   (hex)		Espressif Inc.
+-5443B2     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
++EC-55-1C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++EC551C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-C0-DD-8A   (hex)		Facebook Technologies, LLC
+-C0DD8A     (base 16)		Facebook Technologies, LLC
+-				1601 Willow Rd
+-				Menlo Park  CA  94025
+-				US
+-
+ E0-79-8D   (hex)		Silicon Laboratories
+ E0798D     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+ 				Austin  TX  78701
+ 				US
+ 
++B4-83-51   (hex)		Intel Corporate
++B48351     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 34-AD-61   (hex)		CELESTICA INC.
+ 34AD61     (base 16)		CELESTICA INC.
+ 				1900-5140 Yonge Street PO Box 42   
+ 				Toronto  Ontario  M2N 6L7
+ 				CA
+ 
++54-43-B2   (hex)		Espressif Inc.
++5443B2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++C0-DD-8A   (hex)		Facebook Technologies, LLC
++C0DD8A     (base 16)		Facebook Technologies, LLC
++				1601 Willow Rd
++				Menlo Park  CA  94025
++				US
++
++AC-D3-1D   (hex)		Cisco Meraki
++ACD31D     (base 16)		Cisco Meraki
++				500 Terry A. Francois Blvd
++				San Francisco    94158
++				US
++
+ 10-96-1A   (hex)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+ 10961A     (base 16)		CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+ 				9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT
+@@ -75818,6 +75875,18 @@ BCE9E2     (base 16)		Brocade Communications Systems LLC
+ 				San Jose  CA  95131
+ 				US
+ 
++00-18-48   (hex)		Vecima Networks Inc.
++001848     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
++2C-55-3C   (hex)		Vecima Networks Inc.
++2C553C     (base 16)		Vecima Networks Inc.
++				150 Cardinal Place 
++				Saskatoon  SK  S7L 6H7
++				CA
++
+ AC-BF-71   (hex)		Bose Corporation
+ ACBF71     (base 16)		Bose Corporation
+ 				The Mountain
+@@ -75830,12 +75899,6 @@ ACBF71     (base 16)		Bose Corporation
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-AC-D3-1D   (hex)		Cisco Meraki
+-ACD31D     (base 16)		Cisco Meraki
+-				500 Terry A. Francois Blvd
+-				San Francisco    94158
+-				US
+-
+ 74-84-69   (hex)		Nintendo Co.,Ltd
+ 748469     (base 16)		Nintendo Co.,Ltd
+ 				11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU
+@@ -75878,18 +75941,6 @@ B41974     (base 16)		Apple, Inc.
+ 				Shenzhen  Guangdong  518117
+ 				CN
+ 
+-00-18-48   (hex)		Vecima Networks Inc.
+-001848     (base 16)		Vecima Networks Inc.
+-				150 Cardinal Place 
+-				Saskatoon  SK  S7L 6H7
+-				CA
+-
+-2C-55-3C   (hex)		Vecima Networks Inc.
+-2C553C     (base 16)		Vecima Networks Inc.
+-				150 Cardinal Place 
+-				Saskatoon  SK  S7L 6H7
+-				CA
+-
+ 60-95-BD   (hex)		Apple, Inc.
+ 6095BD     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -75938,24 +75989,30 @@ D0989C     (base 16)		ConMet
+ 				Vancouver    WA  98661
+ 				US
+ 
++1C-A4-10   (hex)		Amlogic, Inc.
++1CA410     (base 16)		Amlogic, Inc.
++				2518 Mission College Blvd, Suite 120
++				Santa Clara  CA  95054
++				US
++
+ 24-26-D6   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 2426D6     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
++70-A6-BD   (hex)		Honor Device Co., Ltd.
++70A6BD     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
++
+ EC-81-9C   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ EC819C     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-1C-A4-10   (hex)		Amlogic, Inc.
+-1CA410     (base 16)		Amlogic, Inc.
+-				2518 Mission College Blvd, Suite 120
+-				Santa Clara  CA  95054
+-				US
+-
+ 20-0B-16   (hex)		Texas Instruments
+ 200B16     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -75980,23 +76037,23 @@ F85548     (base 16)		Texas Instruments
+ 				Dallas  TX  75243
+ 				US
+ 
+-70-A6-BD   (hex)		Honor Device Co., Ltd.
+-70A6BD     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
+-				CN
+-
+ 4C-9E-6C   (hex)		BROADEX TECHNOLOGIES CO.LTD
+ 4C9E6C     (base 16)		BROADEX TECHNOLOGIES CO.LTD
+ 				NO.306 YATAI ROAD
+ 				JIAXING  ZHEJIANG  314006
+ 				CN
+ 
+-54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
+-542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
+-				Bldg 1,No.401,Caobao RD,Xuhui Dist
+-				Shanghai    200233
+-				CN
++AC-A3-2F   (hex)		Solidigm Technology
++ACA32F     (base 16)		Solidigm Technology
++				1921 Corporate Center Circle, Suite 3B
++				Longmont    80501
++				US
++
++AC-71-2E   (hex)		Fortinet, Inc.
++AC712E     (base 16)		Fortinet, Inc.
++				899 Kifer Road
++				Sunnyvale    94086
++				US
+ 
+ E4-B6-33   (hex)		Wuxi Stars Microsystem Technology Co., Ltd
+ E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
+@@ -76016,10 +76073,16 @@ E4B633     (base 16)		Wuxi Stars Microsystem Technology Co., Ltd
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-54-E1-5B   (hex)		Huawei Device Co., Ltd.
+-54E15B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++98-D9-3D   (hex)		Demant Enterprise A/S
++98D93D     (base 16)		Demant Enterprise A/S
++				Kongebakken 9
++				Smorum    2765
++				DK
++
++B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
++B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
++				No.969 Wenyi West Road, Wuchang Street, Yuhang District
++				Hangzhou  Zhejiang  310024
+ 				CN
+ 
+ AC-C4-BD   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+@@ -76028,11 +76091,17 @@ ACC4BD     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				DONG GUAN  GUANG DONG  523860
+ 				CN
+ 
+-AC-A3-2F   (hex)		Solidigm Technology
+-ACA32F     (base 16)		Solidigm Technology
+-				1921 Corporate Center Circle, Suite 3B
+-				Longmont    80501
+-				US
++54-E1-5B   (hex)		Huawei Device Co., Ltd.
++54E15B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++54-2F-04   (hex)		Shanghai Longcheer Technology Co., Ltd.
++542F04     (base 16)		Shanghai Longcheer Technology Co., Ltd.
++				Bldg 1,No.401,Caobao RD,Xuhui Dist
++				Shanghai    200233
++				CN
+ 
+ C4-A1-0E   (hex)		IEEE Registration Authority
+ C4A10E     (base 16)		IEEE Registration Authority
+@@ -76040,12 +76109,6 @@ C4A10E     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-AC-71-2E   (hex)		Fortinet, Inc.
+-AC712E     (base 16)		Fortinet, Inc.
+-				899 Kifer Road
+-				Sunnyvale    94086
+-				US
+-
+ 0C-EC-84   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ 0CEC84     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -76076,18 +76139,6 @@ B43939     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				HongKong    999077
+ 				HK
+ 
+-98-D9-3D   (hex)		Demant Enterprise A/S
+-98D93D     (base 16)		Demant Enterprise A/S
+-				Kongebakken 9
+-				Smorum    2765
+-				DK
+-
+-B4-A6-78   (hex)		Zhejiang Tmall Technology Co., Ltd.
+-B4A678     (base 16)		Zhejiang Tmall Technology Co., Ltd.
+-				No.969 Wenyi West Road, Wuchang Street, Yuhang District
+-				Hangzhou  Zhejiang  310024
+-				CN
+-
+ 88-F2-BD   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 88F2BD     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+ 				Midea Global Innovation Center,Beijiao Town,Shunde
+@@ -76106,6 +76157,12 @@ A0F895     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				NEW DELHI  DELHI  110015
+ 				IN
+ 
++70-AC-08   (hex)		Silicon Laboratories
++70AC08     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez Street
++				Austin  TX  78701
++				US
++
+ 2C-07-F6   (hex)		SKG Health Technologies Co., Ltd. 
+ 2C07F6     (base 16)		SKG Health Technologies Co., Ltd. 
+ 				23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China
+@@ -76124,6 +76181,24 @@ A47EFA     (base 16)		Withings
+ 				Issy-les-Moulineaux    92130
+ 				FR
+ 
++3C-26-E4   (hex)		Cisco Systems, Inc
++3C26E4     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++38-91-B7   (hex)		Cisco Systems, Inc
++3891B7     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++34-5D-A8   (hex)		Cisco Systems, Inc
++345DA8     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
+ 78-91-DE   (hex)		Guangdong ACIGA Science&Technology Co.,Ltd
+ 7891DE     (base 16)		Guangdong ACIGA Science&Technology Co.,Ltd
+ 				L203 Biguiyuan International Club, Beijiao Town, Shunde District
+@@ -76136,12 +76211,6 @@ E0806B     (base 16)		Xiaomi Communications Co Ltd
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
+-70-AC-08   (hex)		Silicon Laboratories
+-70AC08     (base 16)		Silicon Laboratories
+-				400 West Cesar Chavez Street
+-				Austin  TX  78701
+-				US
+-
+ 70-50-E7   (hex)		IEEE Registration Authority
+ 7050E7     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -76166,24 +76235,6 @@ B0E45C     (base 16)		Samsung Electronics Co.,Ltd
+ 				Suwon  Gyeonggi-Do  16677
+ 				KR
+ 
+-3C-26-E4   (hex)		Cisco Systems, Inc
+-3C26E4     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-38-91-B7   (hex)		Cisco Systems, Inc
+-3891B7     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-34-5D-A8   (hex)		Cisco Systems, Inc
+-345DA8     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+ BC-4C-A0   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -76196,6 +76247,18 @@ BC4CA0     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
++C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
+ 68-7F-F0   (hex)		TP-Link Corporation Limited
+ 687FF0     (base 16)		TP-Link Corporation Limited
+ 				Room 901,9/F.New East Ocean Centre, 9 Science Museum Road
+@@ -76214,18 +76277,6 @@ DC360C     (base 16)		Hitron Technologies. Inc
+ 				Bayan Lepas  Penang  11900
+ 				MY
+ 
+-C4-12-EC   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-C412EC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+-60-CF-69   (hex)		meerecompany
+-60CF69     (base 16)		meerecompany
+-				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
+-				Hwaseong-si    18630
+-				KR
+-
+ 4C-62-7B   (hex)		SmartCow AI Technologies Taiwan Ltd.
+ 4C627B     (base 16)		SmartCow AI Technologies Taiwan Ltd.
+ 				16F., No. 102, Songlong Rd., Xinyi Dist.,
+@@ -76244,18 +76295,6 @@ F82B7F     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-40-C3-BC   (hex)		Huawei Device Co., Ltd.
+-40C3BC     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
+-34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
+-				#31 Jangja-ro, Namdong-gu
+-				Incheon-si    21532
+-				KR
+-
+ D8-68-A0   (hex)		Samsung Electronics Co.,Ltd
+ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -76268,10 +76307,10 @@ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-6C-C2-42   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-6CC242     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
++40-C3-BC   (hex)		Huawei Device Co., Ltd.
++40C3BC     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
+ 				CN
+ 
+ 28-53-E0   (hex)		Sintela Ltd
+@@ -76280,66 +76319,78 @@ D868A0     (base 16)		Samsung Electronics Co.,Ltd
+ 				Pill  Bristol  BS20 0DH
+ 				GB
+ 
++60-CF-69   (hex)		meerecompany
++60CF69     (base 16)		meerecompany
++				69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of  Korea
++				Hwaseong-si    18630
++				KR
++
++34-FE-1C   (hex)		CHOUNG HWA TECH CO.,LTD
++34FE1C     (base 16)		CHOUNG HWA TECH CO.,LTD
++				#31 Jangja-ro, Namdong-gu
++				Incheon-si    21532
++				KR
++
+ F4-93-9F   (hex)		Hon Hai Precision Industry Co., Ltd.
+ F4939F     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+ 				ShenZhen  GuangDong  518109
+ 				CN
+ 
+-AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
++A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
++A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
+ 				CN
+ 
++38-F0-C8   (hex)		Logitech
++38F0C8     (base 16)		Logitech
++				7700 Gateway Blvd
++				Newark  CA  94560
++				US
++
+ BC-5D-A3   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ BC5DA3     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+ 				Chengdu  Sichuan  611330
+ 				CN
+ 
+-80-72-15   (hex)		SKY UK LIMITED
+-807215     (base 16)		SKY UK LIMITED
++80-75-1F   (hex)		SKY UK LIMITED
++80751F     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-B0-3E-51   (hex)		SKY UK LIMITED
+-B03E51     (base 16)		SKY UK LIMITED
++C0-A3-6E   (hex)		SKY UK LIMITED
++C0A36E     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-80-75-1F   (hex)		SKY UK LIMITED
+-80751F     (base 16)		SKY UK LIMITED
++00-A3-88   (hex)		SKY UK LIMITED
++00A388     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-A4-AE-12   (hex)		Hon Hai Precision Industry Co., Ltd.
+-A4AE12     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
++AC-4E-65   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++AC4E65     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
+-C0-A3-6E   (hex)		SKY UK LIMITED
+-C0A36E     (base 16)		SKY UK LIMITED
++80-72-15   (hex)		SKY UK LIMITED
++807215     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-00-A3-88   (hex)		SKY UK LIMITED
+-00A388     (base 16)		SKY UK LIMITED
++B0-3E-51   (hex)		SKY UK LIMITED
++B03E51     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-38-F0-C8   (hex)		Logitech
+-38F0C8     (base 16)		Logitech
+-				7700 Gateway Blvd
+-				Newark  CA  94560
+-				US
+-
+ 1C-EF-03   (hex)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+ 1CEF03     (base 16)		Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+ 				Room 601,Originality Building B2, NO.162 Science Avenue,Science Town
+@@ -76352,6 +76403,12 @@ C0A36E     (base 16)		SKY UK LIMITED
+ 				KYOTO  KYOTO  601-8501
+ 				JP
+ 
++54-45-38   (hex)		Texas Instruments
++544538     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
+ 74-13-EA   (hex)		Intel Corporate
+ 7413EA     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -76376,35 +76433,53 @@ B0DCEF     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-28-BC-05   (hex)		BLU Products Inc
+-28BC05     (base 16)		BLU Products Inc
+-				10814 NW 33rd Street
+-				Miami  FL  33172
+-				US
+-
+ 2C-A7-74   (hex)		Texas Instruments
+ 2CA774     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+ 				Dallas  TX  75243
+ 				US
+ 
++DC-F3-1C   (hex)		Texas Instruments
++DCF31C     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
++				US
++
++28-BC-05   (hex)		BLU Products Inc
++28BC05     (base 16)		BLU Products Inc
++				10814 NW 33rd Street
++				Miami  FL  33172
++				US
++
+ 18-4E-03   (hex)		HMD Global Oy
+ 184E03     (base 16)		HMD Global Oy
+ 				Bertel Jungin aukio 9
+ 				Espoo    02600
+ 				FI
+ 
++40-22-D8   (hex)		Espressif Inc.
++4022D8     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
+ E0-08-71   (hex)		Dongguan Liesheng Electronic Co., Ltd.
+ E00871     (base 16)		Dongguan Liesheng Electronic Co., Ltd.
+ 				F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci
+ 				dongguan   guangdong  523000
+ 				CN
+ 
+-9C-95-6E   (hex)		Microchip Technology Inc.
+-9C956E     (base 16)		Microchip Technology Inc.
+-				2355 W. Chandler Blvd.
+-				Chandler  AZ  85224
+-				US
++90-65-60   (hex)		EM Microelectronic
++906560     (base 16)		EM Microelectronic
++				Rue des Sors 3
++				Marin-Epagnier  Neuchatel  2074
++				CH
++
++A0-FB-83   (hex)		Honor Device Co., Ltd.
++A0FB83     (base 16)		Honor Device Co., Ltd.
++				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
++				Shenzhen   Guangdong  518040
++				CN
+ 
+ DC-0B-09   (hex)		Cisco Systems, Inc
+ DC0B09     (base 16)		Cisco Systems, Inc
+@@ -76418,17 +76493,17 @@ DC0B09     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-DC-F3-1C   (hex)		Texas Instruments
+-DCF31C     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
++88-0A-A3   (hex)		Juniper Networks
++880AA3     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
+ 				US
+ 
+-54-45-38   (hex)		Texas Instruments
+-544538     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
++04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
++04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
+ 
+ 78-C2-13   (hex)		Sagemcom Broadband SAS
+ 78C213     (base 16)		Sagemcom Broadband SAS
+@@ -76436,12 +76511,6 @@ DCF31C     (base 16)		Texas Instruments
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-40-22-D8   (hex)		Espressif Inc.
+-4022D8     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+ A0-36-BC   (hex)		ASUSTek COMPUTER INC.
+ A036BC     (base 16)		ASUSTek COMPUTER INC.
+ 				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+@@ -76454,72 +76523,48 @@ A036BC     (base 16)		ASUSTek COMPUTER INC.
+ 				Cranbrook  British Columbia  V1C 2L9
+ 				CA
+ 
++9C-95-6E   (hex)		Microchip Technology Inc.
++9C956E     (base 16)		Microchip Technology Inc.
++				2355 W. Chandler Blvd.
++				Chandler  AZ  85224
++				US
++
+ 84-0B-BB   (hex)		MitraStar Technology Corp.
+ 840BBB     (base 16)		MitraStar Technology Corp.
+ 				No. 6, Innovation Road II,
+ 				Hsinchu    300
+ 				TW
+ 
+-04-D9-C8   (hex)		Hon Hai Precision Industry Co., Ltd.
+-04D9C8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+-A0-FB-83   (hex)		Honor Device Co., Ltd.
+-A0FB83     (base 16)		Honor Device Co., Ltd.
+-				Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District 
+-				Shenzhen   Guangdong  518040
+-				CN
+-
+-9C-92-4F   (hex)		Apple, Inc.
+-9C924F     (base 16)		Apple, Inc.
++70-B3-06   (hex)		Apple, Inc.
++70B306     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-20-0E-2B   (hex)		Apple, Inc.
+-200E2B     (base 16)		Apple, Inc.
++B8-49-6D   (hex)		Apple, Inc.
++B8496D     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-F0-D7-93   (hex)		Apple, Inc.
+-F0D793     (base 16)		Apple, Inc.
++9C-92-4F   (hex)		Apple, Inc.
++9C924F     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-70-B3-06   (hex)		Apple, Inc.
+-70B306     (base 16)		Apple, Inc.
++20-0E-2B   (hex)		Apple, Inc.
++200E2B     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-B8-49-6D   (hex)		Apple, Inc.
+-B8496D     (base 16)		Apple, Inc.
++F0-D7-93   (hex)		Apple, Inc.
++F0D793     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-90-65-60   (hex)		EM Microelectronic
+-906560     (base 16)		EM Microelectronic
+-				Rue des Sors 3
+-				Marin-Epagnier  Neuchatel  2074
+-				CH
+-
+-88-0A-A3   (hex)		Juniper Networks
+-880AA3     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
+-
+-30-3D-51   (hex)		IEEE Registration Authority
+-303D51     (base 16)		IEEE Registration Authority
+-				445 Hoes Lane
+-				Piscataway  NJ  08554
+-				US
+-
+ CC-D3-C1   (hex)		Vestel Elektronik San ve Tic. A.S.
+ CCD3C1     (base 16)		Vestel Elektronik San ve Tic. A.S.
+ 				Organize san
+@@ -76532,12 +76577,48 @@ ECBE5F     (base 16)		Vestel Elektronik San ve Tic. A.S.
+ 				Manisa  Turket  45030
+ 				TR
+ 
++A8-DC-5A   (hex)		Digital Watchdog
++A8DC5A     (base 16)		Digital Watchdog
++				16220 Bloomfield Ave
++				Cerritos  CA  90703
++				US
++
++1C-24-CD   (hex)		ASKEY COMPUTER CORP
++1C24CD     (base 16)		ASKEY COMPUTER CORP
++				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
++				NEW TAIPEI CITY    23585
++				TW
++
++30-3D-51   (hex)		IEEE Registration Authority
++303D51     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
++00-FB-F9   (hex)		Axiado Corporation
++00FBF9     (base 16)		Axiado Corporation
++				2610 Orchard Parkway, Suite 300
++				San Jose  CA  95134
++				US
++
++44-71-47   (hex)		Beijing Xiaomi Electronics Co.,Ltd
++447147     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
++				Xiaomi Campus
++				Beijing  Beijing  100085
++				CN
++
+ F4-BB-C7   (hex)		vivo Mobile Communication Co., Ltd.
+ F4BBC7     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				No.1, vivo Road, Chang'an
+ 				Dongguan  Guangdong  523860
+ 				CN
+ 
++DC-AA-43   (hex)		Shenzhen Terca Information Technology Co., Ltd.
++DCAA43     (base 16)		Shenzhen Terca Information Technology Co., Ltd.
++				Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen
++				SHENZHEN  GUANGDONG  518000
++				CN
++
+ 4C-36-4E   (hex)		Panasonic Connect Co., Ltd.
+ 4C364E     (base 16)		Panasonic Connect Co., Ltd.
+ 				4-1-62 Minoshima, Hakata-ku
+@@ -76550,34 +76631,34 @@ F4BBC7     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-44-71-47   (hex)		Beijing Xiaomi Electronics Co.,Ltd
+-447147     (base 16)		Beijing Xiaomi Electronics Co.,Ltd
+-				Xiaomi Campus
+-				Beijing  Beijing  100085
+-				CN
+-
+-A8-DC-5A   (hex)		Digital Watchdog
+-A8DC5A     (base 16)		Digital Watchdog
+-				16220 Bloomfield Ave
+-				Cerritos  CA  90703
+-				US
++88-B4-36   (hex)		FUJIFILM Corporation
++88B436     (base 16)		FUJIFILM Corporation
++				1-324,Uetake,Kita-ku
++				Saitama  Saitama  331-9624
++				JP
+ 
+-1C-24-CD   (hex)		ASKEY COMPUTER CORP
+-1C24CD     (base 16)		ASKEY COMPUTER CORP
+-				10F, No.119, JIANKANG RD.,ZHINGHE DIST,
+-				NEW TAIPEI CITY    23585
+-				TW
++30-27-CF   (hex)		Canopy Growth Corp
++3027CF     (base 16)		Canopy Growth Corp
++				350 Leggett Drive
++				Ottawa  Ontario  K2K 2W7
++				CA
+ 
+-DC-AA-43   (hex)		Shenzhen Terca Information Technology Co., Ltd.
+-DCAA43     (base 16)		Shenzhen Terca Information Technology Co., Ltd.
+-				Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen
+-				SHENZHEN  GUANGDONG  518000
++38-A8-9B   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++38A89B     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
+-00-FB-F9   (hex)		Axiado Corporation
+-00FBF9     (base 16)		Axiado Corporation
+-				2610 Orchard Parkway, Suite 300
+-				San Jose  CA  95134
++64-37-A4   (hex)		TOKYOSHUHA CO.,LTD.
++6437A4     (base 16)		TOKYOSHUHA CO.,LTD.
++				1-8-9 KANDAIZUMICHO
++				CHIYODA-KU  TOKYO  101-0024
++				JP
++
++90-CA-FA   (hex)		Google, Inc.
++90CAFA     (base 16)		Google, Inc.
++				1600 Amphitheatre Parkway
++				Mountain View  CA  94043
+ 				US
+ 
+ 84-80-94   (hex)		Meter, Inc.
+@@ -113867,24 +113948,6 @@ B4B742     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
+-50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
+-				No.15 Xinghua Avenue, Xiqing Economic Development Area
+-				Tianjin    300385
+-				CN
+-
+-F4-84-8D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
+-F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+-				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+-58-11-22   (hex)		ASUSTek COMPUTER INC.
+-581122     (base 16)		ASUSTek COMPUTER INC.
+-				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
+-				Taipei  Taiwan  112
+-				TW
+-
+ 60-BE-B4   (hex)		S-Bluetech co., limited
+ 60BEB4     (base 16)		S-Bluetech co., limited
+ 				Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu
+@@ -113897,6 +113960,18 @@ F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Chongqing   China  401120
+ 				CN
+ 
++50-C1-F0   (hex)		NXP Semiconductor (Tianjin) LTD.
++50C1F0     (base 16)		NXP Semiconductor (Tianjin) LTD.
++				No.15 Xinghua Avenue, Xiqing Economic Development Area
++				Tianjin    300385
++				CN
++
++F4-84-8D   (hex)		TP-LINK TECHNOLOGIES CO.,LTD.
++F4848D     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
++				Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan
++				Shenzhen  Guangdong  518057
++				CN
++
+ A8-54-A2   (hex)		Heimgard Technologies AS
+ A854A2     (base 16)		Heimgard Technologies AS
+ 				Dronning Mauds gate 15
+@@ -113921,11 +113996,11 @@ B87EE5     (base 16)		Intelbras
+ 				São José  Santa Catarina  88104800
+ 				BR
+ 
+-94-AB-FE   (hex)		Nokia
+-94ABFE     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
++58-11-22   (hex)		ASUSTek COMPUTER INC.
++581122     (base 16)		ASUSTek COMPUTER INC.
++				15,Li-Te Rd., Peitou, Taipei 112, Taiwan
++				Taipei  Taiwan  112
++				TW
+ 
+ 74-69-4A   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 74694A     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+@@ -113939,6 +114014,12 @@ B87EE5     (base 16)		Intelbras
+ 				shenzhen    518000
+ 				CN
+ 
++94-AB-FE   (hex)		Nokia
++94ABFE     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
+ 98-A9-2D   (hex)		New H3C Technologies Co., Ltd
+ 98A92D     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+@@ -113963,18 +114044,6 @@ B87EE5     (base 16)		Intelbras
+ 				Austin  TX  78759
+ 				US
+ 
+-E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
+-E0036B     (base 16)		Samsung Electronics Co.,Ltd
+-				129, Samsung-ro, Youngtongl-Gu
+-				Suwon  Gyeonggi-Do  16677
+-				KR
+-
+-18-69-D4   (hex)		Samsung Electronics Co.,Ltd
+-1869D4     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+ D4-F0-EA   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+ D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+@@ -113987,6 +114056,12 @@ D4F0EA     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+ 				Suzhou    215021
+ 				CN
+ 
++E0-03-6B   (hex)		Samsung Electronics Co.,Ltd
++E0036B     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
+ 80-69-1A   (hex)		Belkin International Inc.
+ 80691A     (base 16)		Belkin International Inc.
+ 				12045 East Waterfront Drive
+@@ -114041,18 +114116,6 @@ E046EE     (base 16)		NETGEAR
+ 				San Jose  CA  95134
+ 				US
+ 
+-DC-BE-49   (hex)		ITEL MOBILE LIMITED
+-DCBE49     (base 16)		ITEL MOBILE LIMITED
+-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+-				Hong Kong  KOWLOON  999077
+-				HK
+-
+-9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+-9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+-				No.75,Zhongkai High-Tech Development District,Huizhou
+-				Hui Zhou  Guangdong  516006
+-				CN
+-
+ 9C-4F-5F   (hex)		Google, Inc.
+ 9C4F5F     (base 16)		Google, Inc.
+ 				15 rue Castel
+@@ -114071,24 +114134,36 @@ A02942     (base 16)		Intel Corporate
+ 				Hsichu  Taiwan  300
+ 				TW
+ 
++04-63-D0   (hex)		Huawei Device Co., Ltd.
++0463D0     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
+ F0-D4-15   (hex)		Intel Corporate
+ F0D415     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-D4-D8-53   (hex)		Intel Corporate
+-D4D853     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++18-69-D4   (hex)		Samsung Electronics Co.,Ltd
++1869D4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
+ 
+-04-63-D0   (hex)		Huawei Device Co., Ltd.
+-0463D0     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++9C-95-61   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
++9C9561     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
++				No.75,Zhongkai High-Tech Development District,Huizhou
++				Hui Zhou  Guangdong  516006
+ 				CN
+ 
++DC-BE-49   (hex)		ITEL MOBILE LIMITED
++DCBE49     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
++
+ 14-44-8F   (hex)		Edgecore Networks Corporation
+ 14448F     (base 16)		Edgecore Networks Corporation
+ 				1 Creation RD 3.
+@@ -114101,18 +114176,6 @@ D4D853     (base 16)		Intel Corporate
+ 				Reno  NV  89507
+ 				US
+ 
+-C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-				NO.18 HAIBIN ROAD,
+-				DONG GUAN  GUANG DONG  523860
+-				CN
+-
+-10-A5-62   (hex)		Iton Technology Corp.
+-10A562     (base 16)		Iton Technology Corp.
+-				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
+-				Shenzhen  Guangdong   518116
+-				CN
+-
+ D4-A3-EB   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+ D4A3EB     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+ 				Room 601,Block B ,Digital Building,Garden City
+@@ -114143,6 +114206,12 @@ B89FCC     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
++D4-D8-53   (hex)		Intel Corporate
++D4D853     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 8C-76-3F   (hex)		ARRIS Group, Inc.
+ 8C763F     (base 16)		ARRIS Group, Inc.
+ 				6450 Sequence Drive
+@@ -114161,6 +114230,18 @@ C0A938     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
++C0-ED-E5   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++C0EDE5     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
++10-A5-62   (hex)		Iton Technology Corp.
++10A562     (base 16)		Iton Technology Corp.
++				Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District
++				Shenzhen  Guangdong   518116
++				CN
++
+ 5C-24-E2   (hex)		Suzhou Denbom Electronic S&T Co., Ltd
+ 5C24E2     (base 16)		Suzhou Denbom Electronic S&T Co., Ltd
+ 				3F,Building 2, No.415,Changyang Street
+@@ -114197,6 +114278,12 @@ BCC746     (base 16)		Hon Hai Precision IND.CO.,LTD
+ 				New Taipei City  Banqiao Dist.  220871
+ 				TW
+ 
++64-FD-96   (hex)		Sagemcom Broadband SAS
++64FD96     (base 16)		Sagemcom Broadband SAS
++				250, route de l'Empereur
++				Rueil Malmaison Cedex  hauts de seine  92848
++				FR
++
+ FC-B9-7E   (hex)		GE Appliances
+ FCB97E     (base 16)		GE Appliances
+ 				4000 Buechel Bank Road
+@@ -114215,12 +114302,6 @@ FCB97E     (base 16)		GE Appliances
+ 				Beijing    100089
+ 				CN
+ 
+-64-FD-96   (hex)		Sagemcom Broadband SAS
+-64FD96     (base 16)		Sagemcom Broadband SAS
+-				250, route de l'Empereur
+-				Rueil Malmaison Cedex  hauts de seine  92848
+-				FR
+-
+ C8-EB-EC   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+ C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+ 				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+@@ -114233,24 +114314,6 @@ C8EBEC     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+ 				New Taipei City  Taiwan  235
+ 				TW
+ 
+-94-C5-A6   (hex)		ITEL MOBILE LIMITED
+-94C5A6     (base 16)		ITEL MOBILE LIMITED
+-				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+-				Hong Kong  KOWLOON  999077
+-				HK
+-
+-7C-EC-B1   (hex)		Apple, Inc.
+-7CECB1     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+-5C-E9-1E   (hex)		Apple, Inc.
+-5CE91E     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+ E0-D7-38   (hex)		WireStar Networks
+ E0D738     (base 16)		WireStar Networks
+ 				PO Box 10966
+@@ -114269,23 +114332,29 @@ E0D738     (base 16)		WireStar Networks
+ 				SHANGHAI    201114
+ 				CN
+ 
++7C-EC-B1   (hex)		Apple, Inc.
++7CECB1     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
++5C-E9-1E   (hex)		Apple, Inc.
++5CE91E     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
++
+ A8-B0-AE   (hex)		BizLink Special Cables Germany GmbH
+ A8B0AE     (base 16)		BizLink Special Cables Germany GmbH
+ 				Eschstrasse 1
+ 				Friesoythe    26169
+ 				DE
+ 
+-F0-B6-61   (hex)		eero inc.
+-F0B661     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
+-
+-E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
+-E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
+-				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+-				Shenzhen  Guangdong  518055
+-				CN
++94-C5-A6   (hex)		ITEL MOBILE LIMITED
++94C5A6     (base 16)		ITEL MOBILE LIMITED
++				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
++				Hong Kong  KOWLOON  999077
++				HK
+ 
+ 48-57-D2   (hex)		Broadcom Limited
+ 4857D2     (base 16)		Broadcom Limited
+@@ -114311,6 +114380,12 @@ D834EE     (base 16)		SHURE INCORPORATED
+ 				NILES  IL  60714 
+ 				US
+ 
++F0-B6-61   (hex)		eero inc.
++F0B661     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
+ 04-25-F0   (hex)		Nokia
+ 0425F0     (base 16)		Nokia
+ 				600 March Road
+@@ -114323,16 +114398,10 @@ D834EE     (base 16)		SHURE INCORPORATED
+ 				Kyoto    619-0237
+ 				JP
+ 
+-40-3B-7B   (hex)		Huawei Device Co., Ltd.
+-403B7B     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
++E0-6A-05   (hex)		Shenzhen YOUHUA Technology Co., Ltd
++E06A05     (base 16)		Shenzhen YOUHUA Technology Co., Ltd
++				Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
++				Shenzhen  Guangdong  518055
+ 				CN
+ 
+ 90-CD-1F   (hex)		Quectel Wireless Solutions Co.,Ltd.
+@@ -114365,6 +114434,18 @@ D834EE     (base 16)		SHURE INCORPORATED
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
++40-3B-7B   (hex)		Huawei Device Co., Ltd.
++403B7B     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++08-30-CE   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++0830CE     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
+ B0-A2-E7   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ B0A2E7     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -114383,24 +114464,12 @@ BC4101     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+-18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				Building, No.33, Xiandong Rd, Xili
+-				Nanshan District, Shenzhen  PRC  518053
+-				CN
+-
+ 74-97-79   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 749779     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+ 				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+ 				Nanning  Guangxi  530007
+ 				CN
+ 
+-34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
+-34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
+-				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
+-				Hangzhou  Zhejiang  310003
+-				CN
+-
+ F8-CD-C8   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ F8CDC8     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+ 				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+@@ -114413,10 +114482,16 @@ B0285B     (base 16)		JUHUA Technology Inc.
+ 				Shenzhen City  Guangdong Province  518117
+ 				CN
+ 
+-C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
+-C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
+-				No.188 Nanhuan Road, TangQiao Town
+-				Zhangjiagang   Jiangsu   215611
++18-D6-1C   (hex)		Shenzhen TINNO Mobile Technology Corp.
++18D61C     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
++				CN
++
++34-CF-6C   (hex)		Hangzhou Taili wireless communication equipment Co.,Ltd
++34CF6C     (base 16)		Hangzhou Taili wireless communication equipment Co.,Ltd
++				Room 1901, No.258,  Zhonghe Middle Road, Shangcheng District, Hangzhou
++				Hangzhou  Zhejiang  310003
+ 				CN
+ 
+ E0-F6-78   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+@@ -114425,29 +114500,17 @@ E0F678     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
+-40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+-402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+-				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+-				Shenzhen  Guangdong  518000
+-				CN
+-
+-14-5B-B9   (hex)		ConMet
+-145BB9     (base 16)		ConMet
+-				5701 SE Columbia Way
+-				Vancouver    WA  98661
+-				US
+-
+ 28-F7-D6   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+ 28F7D6     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+ 				No.5 DongXin Road
+ 				Wuhan  Hubei  430074
+ 				CN
+ 
+-B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
+-B8B409     (base 16)		Samsung Electronics Co.,Ltd
+-				129, Samsung-ro, Youngtongl-Gu
+-				Suwon  Gyeonggi-Do  16677
+-				KR
++C8-24-96   (hex)		Jiangsu Yinhe  Electronics Co.,Ltd.
++C82496     (base 16)		Jiangsu Yinhe  Electronics Co.,Ltd.
++				No.188 Nanhuan Road, TangQiao Town
++				Zhangjiagang   Jiangsu   215611
++				CN
+ 
+ 24-18-C0   (hex)		E. Wehrle GmbH
+ 2418C0     (base 16)		E. Wehrle GmbH
+@@ -114455,6 +114518,12 @@ B8B409     (base 16)		Samsung Electronics Co.,Ltd
+ 				78120 Furtwangen  Baden-Württemberg  78120
+ 				DE
+ 
++14-5B-B9   (hex)		ConMet
++145BB9     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
++
+ AC-83-F0   (hex)		Cobalt Digital Inc.
+ AC83F0     (base 16)		Cobalt Digital Inc.
+ 				2506 Galen Drive
+@@ -114467,12 +114536,6 @@ AC15A2     (base 16)		TP-Link Corporation Limited
+ 				 Tsim Sha Tsui  Kowloon  999077
+ 				HK
+ 
+-AC-DF-9F   (hex)		Arcadyan Corporation
+-ACDF9F     (base 16)		Arcadyan Corporation
+-				No.8, Sec.2, Guangfu Rd.
+-				Hsinchu City  Hsinchu  30071
+-				TW
+-
+ B8-59-C8   (hex)		70mai Co.,Ltd.
+ B859C8     (base 16)		70mai Co.,Ltd.
+ 				Room 2220, building 2, No. 588, Zixing road
+@@ -114485,11 +114548,23 @@ A8E207     (base 16)		GOIP Global Services Pvt. Ltd.
+ 				Noida   Uttar Pradesh  201301
+ 				IN
+ 
+-74-E7-98   (hex)		Juniper Networks
+-74E798     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
++40-22-30   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
++402230     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
++				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
++				Shenzhen  Guangdong  518000
++				CN
++
++B8-B4-09   (hex)		Samsung Electronics Co.,Ltd
++B8B409     (base 16)		Samsung Electronics Co.,Ltd
++				129, Samsung-ro, Youngtongl-Gu
++				Suwon  Gyeonggi-Do  16677
++				KR
++
++AC-DF-9F   (hex)		Arcadyan Corporation
++ACDF9F     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
+ 
+ D4-E2-2F   (hex)		Roku, Inc
+ D4E22F     (base 16)		Roku, Inc
+@@ -114527,6 +114602,18 @@ C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.,LTD
+ 				Mianyang  Sichuan  622650
+ 				CN
+ 
++D8-7E-6F   (hex)		CASCINATION AG
++D87E6F     (base 16)		CASCINATION AG
++				Steigerhubelstrasse 3
++				Bern  Bern  3008
++				CH
++
++04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
++044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
+ 40-5E-F6   (hex)		Samsung Electronics Co.,Ltd
+ 405EF6     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -114551,29 +114638,23 @@ C43CB0     (base 16)		SHENZHEN BILIAN ELECTRONIC CO.,LTD
+ 				Reno  NV  89507
+ 				US
+ 
+-04-4F-7A   (hex)		China Mobile Group Device Co.,Ltd.
+-044F7A     (base 16)		China Mobile Group Device Co.,Ltd.
+-				32 Xuanwumen West Street,Xicheng District
+-				Beijing    100053
+-				CN
+-
+ C0-4E-30   (hex)		Espressif Inc.
+ C04E30     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
+-AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
+-				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
+-				Shanghai     201206
+-				CN
++74-E7-98   (hex)		Juniper Networks
++74E798     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
+ 
+-D8-7E-6F   (hex)		CASCINATION AG
+-D87E6F     (base 16)		CASCINATION AG
+-				Steigerhubelstrasse 3
+-				Bern  Bern  3008
+-				CH
++E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
++E016B1     (base 16)		Advanced Design Technology co.,ltd.
++				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
++				Fucyu-city  Tokyo  1830056
++				JP
+ 
+ 54-31-D4   (hex)		TGW Mechanics GmbH
+ 5431D4     (base 16)		TGW Mechanics GmbH
+@@ -114587,17 +114668,17 @@ D87E6F     (base 16)		CASCINATION AG
+ 				Wuhan  Hubei  430206
+ 				CN
+ 
+-00-19-FB   (hex)		SKY UK LIMITED
+-0019FB     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
++C0-69-11   (hex)		Arista Networks
++C06911     (base 16)		Arista Networks
++				5453 Great America Parkway
++				Santa Clara  CA  95054
++				US
+ 
+-78-3E-53   (hex)		SKY UK LIMITED
+-783E53     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
++E4-B5-55   (hex)		Huawei Device Co., Ltd.
++E4B555     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
+ 
+ 24-A7-DC   (hex)		SKY UK LIMITED
+ 24A7DC     (base 16)		SKY UK LIMITED
+@@ -114605,32 +114686,26 @@ D87E6F     (base 16)		CASCINATION AG
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-E0-16-B1   (hex)		Advanced Design Technology co.,ltd.
+-E016B1     (base 16)		Advanced Design Technology co.,ltd.
+-				1-1-3 Kotobukicho#10F Mitsukikotobukichobiru
+-				Fucyu-city  Tokyo  1830056
+-				JP
++38-A6-CE   (hex)		SKY UK LIMITED
++38A6CE     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
+ 
+-E4-B5-55   (hex)		Huawei Device Co., Ltd.
+-E4B555     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++AC-60-6F   (hex)		Nokia Shanghai Bell Co., Ltd.
++AC606F     (base 16)		Nokia Shanghai Bell Co., Ltd.
++				No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai
++				Shanghai     201206
+ 				CN
+ 
+-C0-69-11   (hex)		Arista Networks
+-C06911     (base 16)		Arista Networks
+-				5453 Great America Parkway
+-				Santa Clara  CA  95054
+-				US
+-
+-2C-93-FB   (hex)		Sercomm France Sarl
+-2C93FB     (base 16)		Sercomm France Sarl
+-				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
+-				Moulineaux    92370
+-				FR
++00-19-FB   (hex)		SKY UK LIMITED
++0019FB     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
+ 
+-38-A6-CE   (hex)		SKY UK LIMITED
+-38A6CE     (base 16)		SKY UK LIMITED
++78-3E-53   (hex)		SKY UK LIMITED
++783E53     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+ 				Brentwood  Essex  08854
+ 				GB
+@@ -114719,11 +114794,11 @@ BC69CB     (base 16)		Panasonic Electric Works Networks Co., Ltd.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-58-2B-0A   (hex)		Texas Instruments
+-582B0A     (base 16)		Texas Instruments
+-				12500 TI Blvd
+-				Dallas  TX  75243
+-				US
++2C-93-FB   (hex)		Sercomm France Sarl
++2C93FB     (base 16)		Sercomm France Sarl
++				2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France
++				Moulineaux    92370
++				FR
+ 
+ B4-46-6B   (hex)		REALTIMEID AS
+ B4466B     (base 16)		REALTIMEID AS
+@@ -114731,6 +114806,12 @@ B4466B     (base 16)		REALTIMEID AS
+ 				Snåsa    7760
+ 				NO
+ 
++90-6A-EB   (hex)		Microsoft Corporation
++906AEB     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
+ C4-EB-39   (hex)		Sagemcom Broadband SAS
+ C4EB39     (base 16)		Sagemcom Broadband SAS
+ 				250, route de l'Empereur
+@@ -114743,11 +114824,17 @@ C4EB39     (base 16)		Sagemcom Broadband SAS
+ 				Taipei City    10690
+ 				TW
+ 
+-F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
+-F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
+-				No.90 Zijin Rd.,New District,Suzhou,215011,China
+-				Suzhou   JiangSu  215011
+-				CN
++08-9D-F4   (hex)		Intel Corporate
++089DF4     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++DC-46-28   (hex)		Intel Corporate
++DC4628     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+ 0C-91-92   (hex)		Intel Corporate
+ 0C9192     (base 16)		Intel Corporate
+@@ -114767,24 +114854,24 @@ F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
+ 				Shenzhen    518000
+ 				CN
+ 
+-08-9D-F4   (hex)		Intel Corporate
+-089DF4     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+-DC-46-28   (hex)		Intel Corporate
+-DC4628     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++F0-C1-CE   (hex)		GoodWe Technologies CO., Ltd
++F0C1CE     (base 16)		GoodWe Technologies CO., Ltd
++				No.90 Zijin Rd.,New District,Suzhou,215011,China
++				Suzhou   JiangSu  215011
++				CN
+ 
+-90-6A-EB   (hex)		Microsoft Corporation
+-906AEB     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
++58-2B-0A   (hex)		Texas Instruments
++582B0A     (base 16)		Texas Instruments
++				12500 TI Blvd
++				Dallas  TX  75243
+ 				US
+ 
++D8-E8-44   (hex)		zte corporation
++D8E844     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
+ E4-6A-35   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ E46A35     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+@@ -114809,18 +114896,6 @@ E838A0     (base 16)		Vizio, Inc
+ 				Irvine  CA  92618
+ 				US
+ 
+-EC-C0-7A   (hex)		Laird Connectivity
+-ECC07A     (base 16)		Laird Connectivity
+-				3F.-1, No.145, Xianzheng 9th Rd.,
+-				Zhubei    30251
+-				TW
+-
+-68-B9-C2   (hex)		Earda Technologies co Ltd
+-68B9C2     (base 16)		Earda Technologies co Ltd
+-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+-				Guangzhou  Guangdong  511455
+-				CN
+-
+ C8-1E-C2   (hex)		ITEL MOBILE LIMITED
+ C81EC2     (base 16)		ITEL MOBILE LIMITED
+ 				RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+@@ -114833,10 +114908,10 @@ C81EC2     (base 16)		ITEL MOBILE LIMITED
+ 				Hui Zhou  Guangdong  516025
+ 				CN
+ 
+-D8-E8-44   (hex)		zte corporation
+-D8E844     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++68-B9-C2   (hex)		Earda Technologies co Ltd
++68B9C2     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
+ 				CN
+ 
+ 68-83-CB   (hex)		Apple, Inc.
+@@ -114857,11 +114932,11 @@ FC1263     (base 16)		ASKEY COMPUTER CORP
+ 				Shanghai  Shanghai  201114
+ 				CN
+ 
+-C0-71-AA   (hex)		ShenZhen OnMicro Electronics Co.,Ltd.
+-C071AA     (base 16)		ShenZhen OnMicro Electronics Co.,Ltd.
+-				Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District
+-				Shenzhen  GuangDong  518057
+-				CN
++EC-C0-7A   (hex)		Laird Connectivity
++ECC07A     (base 16)		Laird Connectivity
++				3F.-1, No.145, Xianzheng 9th Rd.,
++				Zhubei    30251
++				TW
+ 
+ 9C-05-91   (hex)		Mellanox Technologies, Inc.
+ 9C0591     (base 16)		Mellanox Technologies, Inc.
+@@ -114869,28 +114944,22 @@ C071AA     (base 16)		ShenZhen OnMicro Electronics Co.,Ltd.
+ 				Sunnyvale  CA  94085
+ 				US
+ 
+-70-9C-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-709C45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+ 00-09-DF   (hex)		Vestel Elektronik San ve Tic. A.S.
+ 0009DF     (base 16)		Vestel Elektronik San ve Tic. A.S.
+ 				Organize san
+ 				Manisa  Turket  45030
+ 				TR
+ 
+-A0-31-31   (hex)		Procenne Digital Security
+-A03131     (base 16)		Procenne Digital Security
+-				Eski Buyukdere Cd. No:7/12 Maslak
+-				Istanbul  Sariyer  34398
+-				TR
++C0-71-AA   (hex)		ShenZhen OnMicro Electronics Co.,Ltd.
++C071AA     (base 16)		ShenZhen OnMicro Electronics Co.,Ltd.
++				Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District
++				Shenzhen  GuangDong  518057
++				CN
+ 
+-FC-07-36   (hex)		Huawei Device Co., Ltd.
+-FC0736     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
++70-9C-45   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++709C45     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+ 94-A0-7D   (hex)		Huawei Device Co., Ltd.
+@@ -114905,6 +114974,66 @@ FC0736     (base 16)		Huawei Device Co., Ltd.
+ 				New Taipei    23674
+ 				TW
+ 
++FC-07-36   (hex)		Huawei Device Co., Ltd.
++FC0736     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++A0-31-31   (hex)		Procenne Digital Security
++A03131     (base 16)		Procenne Digital Security
++				Eski Buyukdere Cd. No:7/12 Maslak
++				Istanbul  Sariyer  34398
++				TR
++
++84-F4-4C   (hex)		International Integrated Systems., Inc.
++84F44C     (base 16)		International Integrated Systems., Inc.
++				6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., 
++				New Taipei City    22041
++				TW
++
++14-2D-79   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++142D79     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
++				CN
++
++DC-B7-AC   (hex)		Aruba, a Hewlett Packard Enterprise Company
++DCB7AC     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++A4-9E-69   (hex)		Silicon Laboratories
++A49E69     (base 16)		Silicon Laboratories
++				400 W Cesar Chavez St, Silicon La
++				Austin  TX  78701
++				US
++
++DC-E6-50   (hex)		Extreme Networks, Inc.
++DCE650     (base 16)		Extreme Networks, Inc.
++				6480 Via Del Oro
++				San Jose  CA  95119
++				US
++
++48-73-10   (hex)		Juniper Networks
++487310     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
++				US
++
++7C-DC-CC   (hex)		Beijing Yixin Techology Co.,Ltd
++7CDCCC     (base 16)		Beijing Yixin Techology Co.,Ltd
++				Unit 907, Building 4, Building 2, No. 9 Fenghao East Road, Haidian District, Beijing 
++				Beijing    100000
++				CN
++
++CC-5E-F8   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++CC5EF8     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
+ F8-D0-27   (hex)		Seiko Epson Corporation
+ F8D027     (base 16)		Seiko Epson Corporation
+ 				2070 Kotobuki Koaka
+@@ -126533,12 +126662,6 @@ C81B6B     (base 16)		Innova Security
+ 				Sao Paulo  Sao Paulo  02033000
+ 				BR
+ 
+-34-38-AF   (hex)		Inlab Software GmbH
+-3438AF     (base 16)		Inlab Software GmbH
+-				Josef-Wuerth-Str. 3
+-				Gruenwald  Bavaria  82031
+-				DE
+-
+ B4-A8-28   (hex)		Shenzhen Concox Information Technology Co., Ltd
+ B4A828     (base 16)		Shenzhen Concox Information Technology Co., Ltd
+ 				Floor 4th, Building B, Gaoxinqi Industrial Park, Liuxian 1st Road, district 67, Bao’an, Shenzhen, Guangdong,China
+@@ -148637,12 +148760,6 @@ FCD436     (base 16)		Motorola Mobility LLC, a Lenovo Company
+ 				Nakano-ku  Tokyo  164-8570
+ 				JP
+ 
+-08-CB-E5   (hex)		R3 - Reliable Realtime Radio Communications GmbH
+-08CBE5     (base 16)		R3 - Reliable Realtime Radio Communications GmbH
+-				Bismarckstrasse 10-12
+-				Berlin  Berlin  10625
+-				DE
+-
+ F0-23-AE   (hex)		AMPAK Technology,Inc.
+ F023AE     (base 16)		AMPAK Technology,Inc.
+ 				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+@@ -150446,12 +150563,6 @@ F02A2B     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-00-25-DF   (hex)		Private
+-0025DF     (base 16)		Private
+-				17800 N 85th St.
+-				Scottsdale  AZ  85255
+-				US
+-
+ D0-49-7C   (hex)		OnePlus Technology (Shenzhen) Co., Ltd
+ D0497C     (base 16)		OnePlus Technology (Shenzhen) Co., Ltd
+ 				18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,
+@@ -152186,10 +152297,10 @@ B4E265     (base 16)		Shenzhen SDMC Technology Co.,LTD
+ 				Shenzhen  GUANGDONG  518027
+ 				CN
+ 
+-CC-60-C8   (hex)		Microsoft Corporation
+-CC60C8     (base 16)		Microsoft Corporation
+-				One Microsoft Way
+-				REDMOND  WA  98052
++EC-7C-5C   (hex)		Juniper Networks
++EC7C5C     (base 16)		Juniper Networks
++				1133 Innovation Way
++				Sunnyvale  CA  94089
+ 				US
+ 
+ 00-EB-D8   (hex)		MERCUSYS TECHNOLOGIES CO., LTD.
+@@ -152198,6 +152309,12 @@ CC60C8     (base 16)		Microsoft Corporation
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
++CC-60-C8   (hex)		Microsoft Corporation
++CC60C8     (base 16)		Microsoft Corporation
++				One Microsoft Way
++				REDMOND  WA  98052
++				US
++
+ 6C-8D-77   (hex)		Cisco Systems, Inc
+ 6C8D77     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -152216,12 +152333,6 @@ B417A8     (base 16)		Facebook Technologies, LLC
+ 				Menlo Park  CA  94025
+ 				US
+ 
+-EC-7C-5C   (hex)		Juniper Networks
+-EC7C5C     (base 16)		Juniper Networks
+-				1133 Innovation Way
+-				Sunnyvale  CA  94089
+-				US
+-
+ 10-54-D2   (hex)		IEEE Registration Authority
+ 1054D2     (base 16)		IEEE Registration Authority
+ 				445 Hoes Lane
+@@ -152240,6 +152351,12 @@ C4DF39     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Chongqing   China  401120
+ 				CN
+ 
++10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
++				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
++				Shenzhen  Guangdong  518057
++				CN
++
+ 80-97-33   (hex)		 Shenzhen Elebao Technology Co., Ltd
+ 809733     (base 16)		 Shenzhen Elebao Technology Co., Ltd
+ 				F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District
+@@ -152276,6 +152393,18 @@ D8365F     (base 16)		Intelbras
+ 				Moscow\    117335
+ 				RU
+ 
++E8-4D-EC   (hex)		Xerox Corporation
++E84DEC     (base 16)		Xerox Corporation
++				800 Phillips Rd
++				Webster  NY  14450
++				US
++
++C8-B8-2F   (hex)		eero inc.
++C8B82F     (base 16)		eero inc.
++				660 3rd Street
++				San Francisco  CA  94107
++				US
++
+ 54-78-C9   (hex)		AMPAK Technology,Inc.
+ 5478C9     (base 16)		AMPAK Technology,Inc.
+ 				3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+@@ -152300,54 +152429,60 @@ FC101A     (base 16)		Palo Alto Networks
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-10-63-4B   (hex)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+-10634B     (base 16)		SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+-				3/F, Building R1-B, High-Tech Industrial Park, Nanshan District
+-				Shenzhen  Guangdong  518057
++B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
+ 				CN
+ 
+-E8-4D-EC   (hex)		Xerox Corporation
+-E84DEC     (base 16)		Xerox Corporation
+-				800 Phillips Rd
+-				Webster  NY  14450
+-				US
+-
+-C8-B8-2F   (hex)		eero inc.
+-C8B82F     (base 16)		eero inc.
+-				660 3rd Street
+-				San Francisco  CA  94107
+-				US
+-
+ B4-3A-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ B43AE2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
++D0-A4-6F   (hex)		China Dragon Technology Limited
++D0A46F     (base 16)		China Dragon Technology Limited
++				B4 Bldg.Haoshan 1st Industry Park,
++				Shenzhen  Guangdong  518104
++				CN
++
+ F0-C8-B5   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ F0C8B5     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-B8-5D-C3   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-B85DC3     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
++2C-60-CD   (hex)		NR ELECTRIC CO., LTD
++2C60CD     (base 16)		NR ELECTRIC CO., LTD
++				69,Suyuan Avenue
++				Nanjing  Jiangsu  211102
++				CN
++
++8C-1E-80   (hex)		Cisco Systems, Inc
++8C1E80     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++A4-1E-E1   (hex)		Taicang T&W Electronics
++A41EE1     (base 16)		Taicang T&W Electronics
++				89# Jiang Nan RD
++				Suzhou  Jiangsu  215412
+ 				CN
+ 
++E8-FB-1C   (hex)		AzureWave Technology Inc.
++E8FB1C     (base 16)		AzureWave Technology Inc.
++				8F., No. 94, Baozhong Rd.
++				New Taipei City  Taiwan  231
++				TW
++
+ B4-A7-C6   (hex)		SERVERCOM (INDIA) PRIVATE LIMITED
+ B4A7C6     (base 16)		SERVERCOM (INDIA) PRIVATE LIMITED
+ 				E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI
+ 				NEW DELHI    NA
+ 				IN
+ 
+-D0-A4-6F   (hex)		China Dragon Technology Limited
+-D0A46F     (base 16)		China Dragon Technology Limited
+-				B4 Bldg.Haoshan 1st Industry Park,
+-				Shenzhen  Guangdong  518104
+-				CN
+-
+ 1C-76-F2   (hex)		Samsung Electronics Co.,Ltd
+ 1C76F2     (base 16)		Samsung Electronics Co.,Ltd
+ 				129, Samsung-ro, Youngtongl-Gu
+@@ -152366,12 +152501,6 @@ D0A46F     (base 16)		China Dragon Technology Limited
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-2C-60-CD   (hex)		NR ELECTRIC CO., LTD
+-2C60CD     (base 16)		NR ELECTRIC CO., LTD
+-				69,Suyuan Avenue
+-				Nanjing  Jiangsu  211102
+-				CN
+-
+ 28-6B-35   (hex)		Intel Corporate
+ 286B35     (base 16)		Intel Corporate
+ 				Lot 8, Jalan Hi-Tech 2/3  
+@@ -152384,18 +152513,6 @@ D0A46F     (base 16)		China Dragon Technology Limited
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-A4-1E-E1   (hex)		Taicang T&W Electronics
+-A41EE1     (base 16)		Taicang T&W Electronics
+-				89# Jiang Nan RD
+-				Suzhou  Jiangsu  215412
+-				CN
+-
+-E8-FB-1C   (hex)		AzureWave Technology Inc.
+-E8FB1C     (base 16)		AzureWave Technology Inc.
+-				8F., No. 94, Baozhong Rd.
+-				New Taipei City  Taiwan  231
+-				TW
+-
+ C0-EE-40   (hex)		Laird Connectivity
+ C0EE40     (base 16)		Laird Connectivity
+ 				50 South Main St
+@@ -152408,12 +152525,72 @@ A47D9F     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+ 				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
++84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
++E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
++E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
++				Room 601,Block B ,Digital Building,Garden City
++				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
++				CN
++
+ 30-04-5C   (hex)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 30045C     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 				1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
++90-79-CF   (hex)		zte corporation
++9079CF     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++88-8F-A4   (hex)		Huawei Device Co., Ltd.
++888FA4     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++3C-82-C0   (hex)		Technicolor CH USA Inc.
++3C82C0     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++C4-DE-E2   (hex)		Espressif Inc.
++C4DEE2     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++68-B6-B3   (hex)		Espressif Inc.
++68B6B3     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
++				CN
++
++FC-A0-5A   (hex)		Oray.com co., LTD.
++FCA05A     (base 16)		Oray.com co., LTD.
++				8008Rm, building No.1 GuoDing d. Yangpu District
++				Shanghai  Shanghai  200433
++				CN
++
++90-48-6C   (hex)		Ring LLC
++90486C     (base 16)		Ring LLC
++				1523 26th St
++				Santa Monica  CA  90404
++				US
++
+ 3C-46-45   (hex)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+ 3C4645     (base 16)		Shanghai Infinity Wireless Technologies Co.,Ltd.
+ 				Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai
+@@ -152438,30 +152615,12 @@ A4F933     (base 16)		Intel Corporate
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-88-8F-A4   (hex)		Huawei Device Co., Ltd.
+-888FA4     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+ 50-68-AC   (hex)		Huawei Device Co., Ltd.
+ 5068AC     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-90-79-CF   (hex)		zte corporation
+-9079CF     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+-8C-1E-80   (hex)		Cisco Systems, Inc
+-8C1E80     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+ 50-39-2F   (hex)		INGRAM MICRO SERVICES
+ 50392F     (base 16)		INGRAM MICRO SERVICES
+ 				100 CHEMIN DE BAILLOT
+@@ -152486,53 +152645,11 @@ FC8417     (base 16)		Honor Device Co., Ltd.
+ 				San Diego  CA  92121
+ 				US
+ 
+-C4-DE-E2   (hex)		Espressif Inc.
+-C4DEE2     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+-68-B6-B3   (hex)		Espressif Inc.
+-68B6B3     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+-FC-A0-5A   (hex)		Oray.com co., LTD.
+-FCA05A     (base 16)		Oray.com co., LTD.
+-				8008Rm, building No.1 GuoDing d. Yangpu District
+-				Shanghai  Shanghai  200433
+-				CN
+-
+-84-EA-97   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-84EA97     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-14-B2-E5   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-14B2E5     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-E0-CB-56   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+-E0CB56     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+-				Room 601,Block B ,Digital Building,Garden City
+-				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+-				CN
+-
+-90-48-6C   (hex)		Ring LLC
+-90486C     (base 16)		Ring LLC
+-				1523 26th St
+-				Santa Monica  CA  90404
+-				US
+-
+-3C-82-C0   (hex)		Technicolor CH USA Inc.
+-3C82C0     (base 16)		Technicolor CH USA Inc.
+-				5030 Sugarloaf Parkway Bldg 6 
+-				Lawrenceville  GA  30044
+-				US
++AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
++ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
++				Phase 3, Bayan Lepas FIZ
++				Bayan Lepas  Penang  11900
++				MY
+ 
+ 10-24-07   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 102407     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+@@ -152552,6 +152669,12 @@ D021AC     (base 16)		Yohana
+ 				Palo Alto  CA  94304
+ 				US
+ 
++38-1F-26   (hex)		IEEE Registration Authority
++381F26     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				Piscataway  NJ  08554
++				US
++
+ 7C-E1-52   (hex)		THE GOODYEAR TIRE & RUBBER COMPANY
+ 7CE152     (base 16)		THE GOODYEAR TIRE & RUBBER COMPANY
+ 				200 Innovation Way
+@@ -152570,17 +152693,17 @@ D021AC     (base 16)		Yohana
+ 				Mérignac    33700
+ 				FR
+ 
+-AC-B5-66   (hex)		Renesas Electronics (Penang) Sdn. Bhd.
+-ACB566     (base 16)		Renesas Electronics (Penang) Sdn. Bhd.
+-				Phase 3, Bayan Lepas FIZ
+-				Bayan Lepas  Penang  11900
+-				MY
++50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
++				Alt-Moabit 95
++				Berlin  Berlin  10559
++				DE
+ 
+-38-1F-26   (hex)		IEEE Registration Authority
+-381F26     (base 16)		IEEE Registration Authority
+-				445 Hoes Lane
+-				Piscataway  NJ  08554
+-				US
++78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
++7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
++				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
++				Beijing    100085
++				CN
+ 
+ EC-21-25   (hex)		Toshiba Corp.
+ EC2125     (base 16)		Toshiba Corp.
+@@ -152588,35 +152711,17 @@ EC2125     (base 16)		Toshiba Corp.
+ 				Tokyo    105-8001
+ 				JP
+ 
+-00-E5-F1   (hex)		BUFFALO.INC
+-00E5F1     (base 16)		BUFFALO.INC
+-				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+-				Nagoya  Aichi Pref.  460-8315
+-				JP
+-
+-34-EE-2A   (hex)		ConMet
+-34EE2A     (base 16)		ConMet
+-				5701 SE Columbia Way
+-				Vancouver    WA  98661
+-				US
+-
+-50-E6-36   (hex)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+-50E636     (base 16)		AVM Audiovisuelles Marketing und Computersysteme GmbH
+-				Alt-Moabit 95
+-				Berlin  Berlin  10559
+-				DE
+-
+ 68-4E-05   (hex)		HUNAN FN-LINK TECHNOLOGY LIMITED
+ 684E05     (base 16)		HUNAN FN-LINK TECHNOLOGY LIMITED
+ 				No.8, Litong Road, Liuyan Economic & Tec
+ 				Changsha  HUNAN  410329
+ 				CN
+ 
+-78-20-BD   (hex)		Polysense (Beijing) Technologies Co. Ltd
+-7820BD     (base 16)		Polysense (Beijing) Technologies Co. Ltd
+-				9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist.
+-				Beijing    100085
+-				CN
++04-99-BB   (hex)		Apple, Inc.
++0499BB     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
+ 
+ F0-4D-D4   (hex)		Sagemcom Broadband SAS
+ F04DD4     (base 16)		Sagemcom Broadband SAS
+@@ -152624,17 +152729,11 @@ F04DD4     (base 16)		Sagemcom Broadband SAS
+ 				Rueil Malmaison Cedex  hauts de seine  92848
+ 				FR
+ 
+-AC-29-29   (hex)		Infinix mobility limited
+-AC2929     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+-5C-1B-F4   (hex)		Apple, Inc.
+-5C1BF4     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
++00-E5-F1   (hex)		BUFFALO.INC
++00E5F1     (base 16)		BUFFALO.INC
++				AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
++				Nagoya  Aichi Pref.  460-8315
++				JP
+ 
+ A8-51-AB   (hex)		Apple, Inc.
+ A851AB     (base 16)		Apple, Inc.
+@@ -152642,35 +152741,17 @@ A851AB     (base 16)		Apple, Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
+-3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
+-3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
+-				Baoan Xin'an Streat
+-				Shenzhen    002052
+-				CN
+-
+-04-99-BB   (hex)		Apple, Inc.
+-0499BB     (base 16)		Apple, Inc.
++5C-1B-F4   (hex)		Apple, Inc.
++5C1BF4     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+ 				Cupertino  CA  95014
+ 				US
+ 
+-60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+-				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
+-				Nanning  Guangxi  530007
+-				CN
+-
+-24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
+-240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
+-				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
+-				Shenzhen  GuangDong  518000
+-				CN
+-
+-E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
+-E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
+-				32 Xuanwumen West Street,Xicheng District
+-				Beijing    100053
+-				CN
++34-EE-2A   (hex)		ConMet
++34EE2A     (base 16)		ConMet
++				5701 SE Columbia Way
++				Vancouver    WA  98661
++				US
+ 
+ 78-66-9D   (hex)		Hui Zhou Gaoshengda Technology Co.,LTD
+ 78669D     (base 16)		Hui Zhou Gaoshengda Technology Co.,LTD
+@@ -152684,30 +152765,30 @@ E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				Delft    2628 XJ
+ 				NL
+ 
+-00-0E-DD   (hex)		SHURE INCORPORATED
+-000EDD     (base 16)		SHURE INCORPORATED
+-				5800 W. TOUHY AVE.
+-				NILES  IL  60714 
+-				US
+-
+-6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
+-6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
+-				222 West Merchandise Mart Plaza
+-				Chicago  IL  60654
+-				US
+-
+-64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
+-6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
+-				222 West Merchandise Mart Plaza
+-				Chicago  IL  60654
+-				US
+-
+ 90-49-92   (hex)		YSTen Technology Co.,Ltd
+ 904992     (base 16)		YSTen Technology Co.,Ltd
+ 				Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing.
+ 				Beijing    100101
+ 				CN
+ 
++AC-29-29   (hex)		Infinix mobility limited
++AC2929     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
++3C-CE-0D   (hex)		Shenzhen juduoping Technology Co.,Ltd
++3CCE0D     (base 16)		Shenzhen juduoping Technology Co.,Ltd
++				Baoan Xin'an Streat
++				Shenzhen    002052
++				CN
++
++00-0E-DD   (hex)		SHURE INCORPORATED
++000EDD     (base 16)		SHURE INCORPORATED
++				5800 W. TOUHY AVE.
++				NILES  IL  60714 
++				US
++
+ 18-FD-74   (hex)		Routerboard.com
+ 18FD74     (base 16)		Routerboard.com
+ 				Mikrotikls SIA
+@@ -152738,6 +152819,42 @@ E4902A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
++E8-3A-4B   (hex)		China Mobile Group Device Co.,Ltd.
++E83A4B     (base 16)		China Mobile Group Device Co.,Ltd.
++				32 Xuanwumen West Street,Xicheng District
++				Beijing    100053
++				CN
++
++60-E9-AA   (hex)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++60E9AA     (base 16)		CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
++				B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China
++				Nanning  Guangxi  530007
++				CN
++
++24-0F-5E   (hex)		Shenzhen z-router Technology Co., Ltd
++240F5E     (base 16)		Shenzhen z-router Technology Co., Ltd
++				406,Block A,Taojindi Building ,Tenglong Road,Longhua New District,
++				Shenzhen  GuangDong  518000
++				CN
++
++6C-97-6D   (hex)		Motorola Mobility LLC, a Lenovo Company
++6C976D     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++64-11-A4   (hex)		Motorola Mobility LLC, a Lenovo Company
++6411A4     (base 16)		Motorola Mobility LLC, a Lenovo Company
++				222 West Merchandise Mart Plaza
++				Chicago  IL  60654
++				US
++
++10-F0-68   (hex)		Ruckus Wireless
++10F068     (base 16)		Ruckus Wireless
++				350 West Java Drive
++				Sunnyvale  CA  94089
++				US
++
+ F0-87-7F   (hex)		Magnetar Technology Shenzhen Co., LTD.
+ F0877F     (base 16)		Magnetar Technology Shenzhen Co., LTD.
+ 				Room211, Building1, No.26 Puzai Road, Pingdi Longgang
+@@ -152756,10 +152873,10 @@ C8D6B7     (base 16)		Solidigm Technology
+ 				Longmont  CO  80501
+ 				US
+ 
+-10-F0-68   (hex)		Ruckus Wireless
+-10F068     (base 16)		Ruckus Wireless
+-				350 West Java Drive
+-				Sunnyvale  CA  94089
++60-5B-30   (hex)		Dell Inc.
++605B30     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
+ 				US
+ 
+ 44-3C-9C   (hex)		Pintsch GmbH
+@@ -152768,18 +152885,6 @@ C8D6B7     (base 16)		Solidigm Technology
+ 				Dinslaken    46537
+ 				DE
+ 
+-20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
+-2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
+-				3F.,No.98-1,Mincyuan Rd.Sindian City
+-				Taipei County 231    231141
+-				CN
+-
+-A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+-				NO.18 HAIBIN ROAD,
+-				DONG GUAN  GUANG DONG  523860
+-				CN
+-
+ D8-80-DC   (hex)		Huawei Device Co., Ltd.
+ D880DC     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -152810,6 +152915,12 @@ F46C68     (base 16)		Wistron Neweb Corporation
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
++20-64-DE   (hex)		Sunitec Enterprise Co.,Ltd
++2064DE     (base 16)		Sunitec Enterprise Co.,Ltd
++				3F.,No.98-1,Mincyuan Rd.Sindian City
++				Taipei County 231    231141
++				CN
++
+ 74-B7-25   (hex)		Huawei Device Co., Ltd.
+ 74B725     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -152822,6 +152933,12 @@ F46C68     (base 16)		Wistron Neweb Corporation
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++A4-0F-98   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++A40F98     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
++				NO.18 HAIBIN ROAD,
++				DONG GUAN  GUANG DONG  523860
++				CN
++
+ BC-44-34   (hex)		Shenzhen TINNO Mobile Technology Corp.
+ BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Building, No.33, Xiandong Rd, Xili
+@@ -152834,12 +152951,6 @@ BC4434     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+ 				Minato-ku  Tokyo  108-0075
+ 				JP
+ 
+-60-5B-30   (hex)		Dell Inc.
+-605B30     (base 16)		Dell Inc.
+-				One Dell Way
+-				Round Rock  TX  78682
+-				US
+-
+ 34-AC-11   (hex)		China Mobile Group Device Co.,Ltd.
+ 34AC11     (base 16)		China Mobile Group Device Co.,Ltd.
+ 				32 Xuanwumen West Street,Xicheng District
+@@ -152912,24 +153023,6 @@ DC71DD     (base 16)		AX Technologies
+ 				Singapore    556741
+ 				SG
+ 
+-3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
+-3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
+-				Peter-Dornier Strasse 10
+-				Lindau  Bavaria  88131
+-				DE
+-
+-04-BA-D6   (hex)		D-Link Corporation
+-04BAD6     (base 16)		D-Link Corporation
+-				No.289, Sinhu 3rd Rd., Neihu District, 
+-				Taipei City     114
+-				TW
+-
+-30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
+-303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
+-				JL.PALEM 1 BLOK DS-6
+-				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
+-				ID
+-
+ 30-7F-10   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 307F10     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				NO.18 HAIBIN ROAD,
+@@ -152954,23 +153047,35 @@ B0FBDD     (base 16)		Shenzhen SuperElectron Technology Co.,Ltd.
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
++3C-69-D1   (hex)		ADC Automotive Distance Control System GmbH
++3C69D1     (base 16)		ADC Automotive Distance Control System GmbH
++				Peter-Dornier Strasse 10
++				Lindau  Bavaria  88131
++				DE
++
+ E0-9C-8D   (hex)		Seakeeper, Inc.
+ E09C8D     (base 16)		Seakeeper, Inc.
+ 				45310 Abell House Lane Suite 350
+ 				California  MD  20619
+ 				US
+ 
++04-BA-D6   (hex)		D-Link Corporation
++04BAD6     (base 16)		D-Link Corporation
++				No.289, Sinhu 3rd Rd., Neihu District, 
++				Taipei City     114
++				TW
++
+ 34-3A-20   (hex)		Aruba, a Hewlett Packard Enterprise Company
+ 343A20     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+ 				3333 Scott Blvd
+ 				Santa Clara  CA  95054
+ 				US
+ 
+-7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
+-7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
+-				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
+-				Suzhou  Jingsu  215000
+-				CN
++30-3F-5D   (hex)		PT HAN SUNG ELECTORONICS INDONESIA
++303F5D     (base 16)		PT HAN SUNG ELECTORONICS INDONESIA
++				JL.PALEM 1 BLOK DS-6
++				KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN  BEKASI JAWA BARAT  17550
++				ID
+ 
+ 18-E9-1D   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 18E91D     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+@@ -152990,12 +153095,6 @@ F46ADD     (base 16)		Liteon Technology Corporation
+ 				New Taipei City  Taiwan  23585
+ 				TW
+ 
+-98-D7-42   (hex)		Samsung Electronics Co.,Ltd
+-98D742     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+ C8-2A-F1   (hex)		TCT mobile ltd
+ C82AF1     (base 16)		TCT mobile ltd
+ 				No.86 hechang 7th road, zhongkai, Hi-Tech District
+@@ -153014,12 +153113,60 @@ A842E3     (base 16)		Espressif Inc.
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
++7C-0C-92   (hex)		Suzhou Mobydata Smart System Co.,Ltd.
++7C0C92     (base 16)		Suzhou Mobydata Smart System Co.,Ltd.
++				3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China
++				Suzhou  Jingsu  215000
++				CN
++
+ 04-26-05   (hex)		Bosch Building Automation GmbH
+ 042605     (base 16)		Bosch Building Automation GmbH
+ 				Kapellenweg 42
+ 				Verl    33415
+ 				DE
+ 
++3C-FE-AC   (hex)		Cisco Systems, Inc
++3CFEAC     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++04-A7-41   (hex)		Cisco Systems, Inc
++04A741     (base 16)		Cisco Systems, Inc
++				80 West Tasman Drive
++				San Jose  CA  94568
++				US
++
++A0-88-9D   (hex)		Huawei Device Co., Ltd.
++A0889D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
++98-D7-42   (hex)		Samsung Electronics Co.,Ltd
++98D742     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++D4-9B-74   (hex)		Kinetic Technologies
++D49B74     (base 16)		Kinetic Technologies
++				6399 San Ignacio Ave #250
++				San Jose  CA  95119
++				US
++
++40-F8-DF   (hex)		CANON INC.
++40F8DF     (base 16)		CANON INC.
++				30-2 Shimomaruko 3-chome,
++				Ohta-ku  Tokyo  146-8501
++				JP
++
++20-47-ED   (hex)		SKY UK LIMITED
++2047ED     (base 16)		SKY UK LIMITED
++				130 Kings Road
++				Brentwood  Essex  08854
++				GB
++
+ A0-BD-CD   (hex)		SKY UK LIMITED
+ A0BDCD     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -153056,42 +153203,6 @@ A0BDCD     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-3C-FE-AC   (hex)		Cisco Systems, Inc
+-3CFEAC     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-04-A7-41   (hex)		Cisco Systems, Inc
+-04A741     (base 16)		Cisco Systems, Inc
+-				80 West Tasman Drive
+-				San Jose  CA  94568
+-				US
+-
+-A0-88-9D   (hex)		Huawei Device Co., Ltd.
+-A0889D     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+-D4-9B-74   (hex)		Kinetic Technologies
+-D49B74     (base 16)		Kinetic Technologies
+-				6399 San Ignacio Ave #250
+-				San Jose  CA  95119
+-				US
+-
+-20-47-ED   (hex)		SKY UK LIMITED
+-2047ED     (base 16)		SKY UK LIMITED
+-				130 Kings Road
+-				Brentwood  Essex  08854
+-				GB
+-
+-40-F8-DF   (hex)		CANON INC.
+-40F8DF     (base 16)		CANON INC.
+-				30-2 Shimomaruko 3-chome,
+-				Ohta-ku  Tokyo  146-8501
+-				JP
+-
+ F4-6B-8C   (hex)		Hon Hai Precision Industry Co., Ltd.
+ F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+@@ -153104,12 +153215,6 @@ F46B8C     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				Calamba    Lot 1
+ 				PH
+ 
+-F4-3B-D8   (hex)		Intel Corporate
+-F43BD8     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ 7C-67-AB   (hex)		Roku, Inc
+ 7C67AB     (base 16)		Roku, Inc
+ 				1155 Coleman Ave
+@@ -153122,6 +153227,18 @@ F43BD8     (base 16)		Intel Corporate
+ 				Piscataway  NJ  08554
+ 				US
+ 
++F4-3B-D8   (hex)		Intel Corporate
++F43BD8     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++C8-4B-D6   (hex)		Dell Inc.
++C84BD6     (base 16)		Dell Inc.
++				One Dell Way
++				Round Rock  TX  78682
++				US
++
+ E0-86-14   (hex)		Novatel Wireless Solutions, Inc.
+ E08614     (base 16)		Novatel Wireless Solutions, Inc.
+ 				9710 Scranton Rd., Suite 200
+@@ -153134,18 +153251,6 @@ A8DE68     (base 16)		Beijing Wide Technology Co.,Ltd
+ 				Beijing  Beijing  100000
+ 				CN
+ 
+-3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+-3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+-				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
+-				SHENZHEN  GUANGDONG  518057
+-				CN
+-
+-C8-4B-D6   (hex)		Dell Inc.
+-C84BD6     (base 16)		Dell Inc.
+-				One Dell Way
+-				Round Rock  TX  78682
+-				US
+-
+ 6C-30-2A   (hex)		Texas Instruments
+ 6C302A     (base 16)		Texas Instruments
+ 				12500 TI Blvd
+@@ -153158,12 +153263,6 @@ C84BD6     (base 16)		Dell Inc.
+ 				Dallas  TX  75243
+ 				US
+ 
+-08-B6-1F   (hex)		Espressif Inc.
+-08B61F     (base 16)		Espressif Inc.
+-				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+-				Shanghai  Shanghai  201203
+-				CN
+-
+ 94-4E-5B   (hex)		Ubee Interactive Co., Limited
+ 944E5B     (base 16)		Ubee Interactive Co., Limited
+ 				Flat/RM 1202, 12/F, AT Tower, 180 Electric Road
+@@ -153200,10 +153299,16 @@ FC6179     (base 16)		IEEE Registration Authority
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+-4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+-				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+-				ShenZHEN  GuangDong  518104
++3C-4E-56   (hex)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++3C4E56     (base 16)		SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
++				Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China
++				SHENZHEN  GUANGDONG  518057
++				CN
++
++08-B6-1F   (hex)		Espressif Inc.
++08B61F     (base 16)		Espressif Inc.
++				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
++				Shanghai  Shanghai  201203
+ 				CN
+ 
+ 98-A2-C0   (hex)		Cisco Systems, Inc
+@@ -153218,6 +153323,12 @@ EC74D7     (base 16)		Grandstream Networks Inc
+ 				boston  MA  02215
+ 				US
+ 
++4C-72-74   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++4C7274     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
++				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
++				ShenZHEN  GuangDong  518104
++				CN
++
+ 30-63-71   (hex)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+ 306371     (base 16)		Shenzhenshi Xinzhongxin Technology Co.Ltd
+ 				Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China
+@@ -153236,24 +153347,6 @@ EC74D7     (base 16)		Grandstream Networks Inc
+ 				shenzhen  guangdong  518057
+ 				CN
+ 
+-5C-3E-1B   (hex)		Apple, Inc.
+-5C3E1B     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+-7C-2A-CA   (hex)		Apple, Inc.
+-7C2ACA     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+-28-8E-EC   (hex)		Apple, Inc.
+-288EEC     (base 16)		Apple, Inc.
+-				1 Infinite Loop
+-				Cupertino  CA  95014
+-				US
+-
+ A0-8C-F2   (hex)		YINUOLINK CO.,LTD
+ A08CF2     (base 16)		YINUOLINK CO.,LTD
+ 				3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an
+@@ -153278,22 +153371,22 @@ F4931C     (base 16)		Universal Electronics, Inc.
+ 				Santa Ana  CA  92707
+ 				US
+ 
+-C8-84-8C   (hex)		Ruckus Wireless
+-C8848C     (base 16)		Ruckus Wireless
+-				350 West Java Drive
+-				Sunnyvale  CA  94089
++5C-3E-1B   (hex)		Apple, Inc.
++5C3E1B     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
+ 				US
+ 
+-B0-78-39   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+-B07839     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
+-				Midea Global Innovation Center,Beijiao Town,Shunde
+-				Foshan  Guangdong  528311
+-				CN
++7C-2A-CA   (hex)		Apple, Inc.
++7C2ACA     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
++				US
+ 
+-74-9E-75   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-749E75     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
++28-8E-EC   (hex)		Apple, Inc.
++288EEC     (base 16)		Apple, Inc.
++				1 Infinite Loop
++				Cupertino  CA  95014
+ 				US
+ 
+ E0-5A-1B   (hex)		Espressif Inc.
+@@ -153314,12 +153407,6 @@ CCBA6F     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-78-5C-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-785C5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
+-
+ 98-81-8A   (hex)		Huawei Device Co., Ltd.
+ 98818A     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -153344,18 +153431,84 @@ B4C2F7     (base 16)		Huawei Device Co., Ltd.
+ 				Shenzhen  Guangdong  518000
+ 				CN
+ 
++70-11-0E   (hex)		zte corporation
++70110E     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
++78-5C-5E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++785C5E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
++C8-84-8C   (hex)		Ruckus Wireless
++C8848C     (base 16)		Ruckus Wireless
++				350 West Java Drive
++				Sunnyvale  CA  94089
++				US
++
++B0-78-39   (hex)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++B07839     (base 16)		GD Midea Air-Conditioning Equipment Co.,Ltd.
++				Midea Global Innovation Center,Beijiao Town,Shunde
++				Foshan  Guangdong  528311
++				CN
++
++74-9E-75   (hex)		Aruba, a Hewlett Packard Enterprise Company
++749E75     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
+ F4-1C-71   (hex)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
+ F41C71     (base 16)		SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD
+ 				17/F,Block 1A,Software Industry Base, XueFu Road,Nanshan  District,
+ 				Shenzhen  GuangDong  518100
+ 				CN
+ 
+-70-11-0E   (hex)		zte corporation
+-70110E     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++00-25-DF   (hex)		Taser International Inc.
++0025DF     (base 16)		Taser International Inc.
++				17800 N 85th St.
++				Scottsdale  AZ  85255
++				US
++
++E8-86-CF   (hex)		Nokia
++E886CF     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++34-38-AF   (hex)		Inlab Networks GmbH
++3438AF     (base 16)		Inlab Networks GmbH
++				Josef-Wuerth-Str. 3
++				Gruenwald  Bavaria  82031
++				DE
++
++D8-F5-07   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++D8F507     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
++C4-EF-DA   (hex)		Honeywell
++C4EFDA     (base 16)		Honeywell
++				9680 Old Bailes Rd, Fort Mill, SC 29707
++				Fort Mill  SC  29707
++				US
++
++08-CB-E5   (hex)		R3 Solutions GmbH
++08CBE5     (base 16)		R3 Solutions GmbH
++				Kurfürstendamm 21
++				Berlin    10719
++				DE
++
++D8-54-82   (hex)		Oxit, LLC
++D85482     (base 16)		Oxit, LLC
++				3131 Westinghouse Blvd
++				Charlotte  NC  28273
++				US
++
+ 7C-8A-E1   (hex)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 7C8AE1     (base 16)		COMPAL INFORMATION (KUNSHAN) CO., LTD. 
+ 				NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE 
+@@ -154136,9 +154289,6 @@ D8D090     (base 16)		Dell Inc.
+ 				Nagoya  Aichi Pref.  460-8315
+ 				JP
+ 
+-00-84-ED   (hex)		Private
+-0084ED     (base 16)		Private
+-
+ E0-02-A5   (hex)		ABB Robotics
+ E002A5     (base 16)		ABB Robotics
+ 				Hydrovägen 10
+@@ -190529,18 +190679,6 @@ BC6193     (base 16)		Xiaomi Communications Co Ltd
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
+-94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+-C8-54-A4   (hex)		Infinix mobility limited
+-C854A4     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+ EC-71-DB   (hex)		Reolink Innovation Limited
+ EC71DB     (base 16)		Reolink Innovation Limited
+ 				705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET
+@@ -190559,6 +190697,12 @@ F8E57E     (base 16)		Cisco Systems, Inc
+ 				Seoul  Seocho-Gu  #137-902
+ 				KR
+ 
++94-7F-D8   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++947FD8     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
++				CN
++
+ 38-5B-44   (hex)		Silicon Laboratories
+ 385B44     (base 16)		Silicon Laboratories
+ 				400 West Cesar Chavez Street
+@@ -190601,12 +190745,6 @@ EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Shenzhen  Guangdong  518057
+ 				CN
+ 
+-74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
+-74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
+-				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
+-				SHENZHEN    518000
+-				CN
+-
+ 10-4D-15   (hex)		Viaanix Inc
+ 104D15     (base 16)		Viaanix Inc
+ 				434 N Main St.
+@@ -190619,6 +190757,18 @@ EC6073     (base 16)		TP-LINK TECHNOLOGIES CO.,LTD.
+ 				Shenzhen  Nanshan District  518000
+ 				CN
+ 
++C8-54-A4   (hex)		Infinix mobility limited
++C854A4     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
++
++A0-09-2E   (hex)		zte corporation
++A0092E     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
++				CN
++
+ B0-AF-F7   (hex)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ 				21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China
+@@ -190637,18 +190787,12 @@ B0AFF7     (base 16)		Shenzhen Yipingfang Network Technology Co., Ltd.
+ 				Changsha  HUNAN  410329
+ 				CN
+ 
+-A0-09-2E   (hex)		zte corporation
+-A0092E     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
++74-DD-CB   (hex)		China Leadshine Technology Co.,Ltd
++74DDCB     (base 16)		China Leadshine Technology Co.,Ltd
++				9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan?
++				SHENZHEN    518000
+ 				CN
+ 
+-14-75-5B   (hex)		Intel Corporate
+-14755B     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ A8-B1-3B   (hex)		HP Inc.
+ A8B13B     (base 16)		HP Inc.
+ 				10300 Energy Dr
+@@ -190667,12 +190811,6 @@ C43875     (base 16)		Sonos, Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+-				4F,Block A, Skyworth?Building,
+-				Shenzhen  Guangdong  518057
+-				CN
+-
+ DC-A9-56   (hex)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ DCA956     (base 16)		GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ 				NO.18 HAIBIN ROAD,
+@@ -190691,12 +190829,24 @@ BCD206     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
+-CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
+-				No.666, Han-Pu Rd. Yu-Shan
+-				Kun-Shan  Jiang Su  215316
++20-89-8A   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++20898A     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
++				4F,Block A, Skyworth?Building,
++				Shenzhen  Guangdong  518057
+ 				CN
+ 
++14-75-5B   (hex)		Intel Corporate
++14755B     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
++F4-E2-04   (hex)		COYOTE SYSTEM
++F4E204     (base 16)		COYOTE SYSTEM
++				1, rue Royale
++				Saint-Cloud    92210
++				FR
++
+ F8-4E-58   (hex)		Samsung Electronics Co.,Ltd
+ F84E58     (base 16)		Samsung Electronics Co.,Ltd
+ 				129, Samsung-ro, Youngtongl-Gu
+@@ -190709,29 +190859,11 @@ B47064     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
+-4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+-64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
+-645DF4     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+-D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
+-D81068     (base 16)		Murata Manufacturing Co., Ltd.
+-				1-10-1, Higashikotari
+-				Nagaokakyo-shi  Kyoto  617-8555
+-				JP
+-
+-5C-04-5A   (hex)		Company NA Stage & Light
+-5C045A     (base 16)		Company NA Stage & Light
+-				Lambertu 9
+-				M?rupe    LV-2167
+-				LV
++CC-82-7F   (hex)		Advantech Technology (CHINA) Co., Ltd.
++CC827F     (base 16)		Advantech Technology (CHINA) Co., Ltd.
++				No.666, Han-Pu Rd. Yu-Shan
++				Kun-Shan  Jiang Su  215316
++				CN
+ 
+ 88-3F-0C   (hex)		system a.v. co., ltd.
+ 883F0C     (base 16)		system a.v. co., ltd.
+@@ -190751,11 +190883,17 @@ C8BE35     (base 16)		Extreme Networks, Inc.
+ 				Kulim  Kedah  09000
+ 				MY
+ 
+-F4-E2-04   (hex)		COYOTE SYSTEM
+-F4E204     (base 16)		COYOTE SYSTEM
+-				1, rue Royale
+-				Saint-Cloud    92210
+-				FR
++D8-10-68   (hex)		Murata Manufacturing Co., Ltd.
++D81068     (base 16)		Murata Manufacturing Co., Ltd.
++				1-10-1, Higashikotari
++				Nagaokakyo-shi  Kyoto  617-8555
++				JP
++
++5C-04-5A   (hex)		Company NA Stage & Light
++5C045A     (base 16)		Company NA Stage & Light
++				Lambertu 9
++				M?rupe    LV-2167
++				LV
+ 
+ 58-C3-56   (hex)		EM Microelectronic
+ 58C356     (base 16)		EM Microelectronic
+@@ -190781,11 +190919,17 @@ CCDD58     (base 16)		Robert Bosch GmbH
+ 				Stuttgart    70499
+ 				DE
+ 
+-D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
+-D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
+-				3333 Scott Blvd
+-				Santa Clara  CA  95054
+-				US
++4C-2E-5E   (hex)		Samsung Electronics Co.,Ltd
++4C2E5E     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
++64-5D-F4   (hex)		Samsung Electronics Co.,Ltd
++645DF4     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
+ 
+ 88-FC-5D   (hex)		Cisco Systems, Inc
+ 88FC5D     (base 16)		Cisco Systems, Inc
+@@ -190817,11 +190961,11 @@ F4C88A     (base 16)		Intel Corporate
+ 				Beijing    100053
+ 				CN
+ 
+-50-28-4A   (hex)		Intel Corporate
+-50284A     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++D4-E0-53   (hex)		Aruba, a Hewlett Packard Enterprise Company
++D4E053     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
+ 
+ 5C-A4-F4   (hex)		zte corporation
+ 5CA4F4     (base 16)		zte corporation
+@@ -190835,11 +190979,11 @@ F4C88A     (base 16)		Intel Corporate
+ 				kakuda-City  Miyagi-Pref  981-1595
+ 				JP
+ 
+-24-6C-60   (hex)		Huawei Device Co., Ltd.
+-246C60     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
++50-28-4A   (hex)		Intel Corporate
++50284A     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
+ 
+ 98-C9-7C   (hex)		Shenzhen iComm Semiconductor CO.,LTD
+ 98C97C     (base 16)		Shenzhen iComm Semiconductor CO.,LTD
+@@ -190847,11 +190991,11 @@ F4C88A     (base 16)		Intel Corporate
+ 				Shenzhen  No.1079 Nanhai Road,Nanshan District  518067
+ 				CN
+ 
+-30-3E-A7   (hex)		Intel Corporate
+-303EA7     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
++24-6C-60   (hex)		Huawei Device Co., Ltd.
++246C60     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
+ 
+ 28-A3-31   (hex)		Sierra Wireless
+ 28A331     (base 16)		Sierra Wireless
+@@ -190859,6 +191003,12 @@ F4C88A     (base 16)		Intel Corporate
+ 				Richmond  BC  V6V 3A4
+ 				CA
+ 
++18-34-AF   (hex)		Kaonmedia CO., LTD.
++1834AF     (base 16)		Kaonmedia CO., LTD.
++				884-3, Seongnam-daero, Bundang-gu
++				Seongnam-si  Gyeonggi-do  13517
++				KR
++
+ EC-62-60   (hex)		Espressif Inc.
+ EC6260     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -190871,23 +191021,23 @@ B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Chongqing   China  401120
+ 				CN
+ 
++30-3E-A7   (hex)		Intel Corporate
++303EA7     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 60-7D-09   (hex)		Luxshare Precision Industry Co., Ltd
+ 607D09     (base 16)		Luxshare Precision Industry Co., Ltd
+ 				2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District
+ 				Shenzhen City  Guangdong Province  518100
+ 				CN
+ 
+-18-34-AF   (hex)		Kaonmedia CO., LTD.
+-1834AF     (base 16)		Kaonmedia CO., LTD.
+-				884-3, Seongnam-daero, Bundang-gu
+-				Seongnam-si  Gyeonggi-do  13517
+-				KR
+-
+-28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+-28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
+-				No.17 Longmen Road
+-				Changzhou  JiangSu  213164
+-				CN
++CC-3E-79   (hex)		ARRIS Group, Inc.
++CC3E79     (base 16)		ARRIS Group, Inc.
++				6450 Sequence Drive
++				San Diego  CA  92121
++				US
+ 
+ 28-F5-D1   (hex)		ARRIS Group, Inc.
+ 28F5D1     (base 16)		ARRIS Group, Inc.
+@@ -190901,6 +191051,12 @@ B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				San Diego  CA  92121
+ 				US
+ 
++28-82-7C   (hex)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++28827C     (base 16)		Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch
++				No.17 Longmen Road
++				Changzhou  JiangSu  213164
++				CN
++
+ 90-D4-73   (hex)		vivo Mobile Communication Co., Ltd.
+ 90D473     (base 16)		vivo Mobile Communication Co., Ltd.
+ 				No.1, vivo Road, Chang'an
+@@ -190913,30 +191069,6 @@ B06E72     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Dongguan    523808
+ 				CN
+ 
+-CC-3E-79   (hex)		ARRIS Group, Inc.
+-CC3E79     (base 16)		ARRIS Group, Inc.
+-				6450 Sequence Drive
+-				San Diego  CA  92121
+-				US
+-
+-00-16-A3   (hex)		INGETEAM
+-0016A3     (base 16)		INGETEAM
+-				Parque Tecnologico de Bizkaia, Edificio 110
+-				Zamudio  Bizkaia  48170
+-				ES
+-
+-F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
+-F06C5D     (base 16)		Xiaomi Communications Co Ltd
+-				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+-				Beijing  Haidian District  100085
+-				CN
+-
+-24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
+-24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
+-				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
+-				Beijing  Beijing  100085
+-				CN
+-
+ C8-F0-9E   (hex)		Espressif Inc.
+ C8F09E     (base 16)		Espressif Inc.
+ 				Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+@@ -190955,16 +191087,16 @@ DC5475     (base 16)		Espressif Inc.
+ 				San Francisco    94158
+ 				US
+ 
+-28-6F-40   (hex)		Tonly Technology Co. Ltd 
+-286F40     (base 16)		Tonly Technology Co. Ltd 
+-				Section 37, Zhongkai Hi-Tech Development Zone
+-				Huizhou  Guangdong  516006
+-				CN
++00-16-A3   (hex)		INGETEAM
++0016A3     (base 16)		INGETEAM
++				Parque Tecnologico de Bizkaia, Edificio 110
++				Zamudio  Bizkaia  48170
++				ES
+ 
+-0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
+-0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
+-				Huangpu 128, JunCheng Road
+-				GuangZhou  Guangdong  510530
++24-CF-24   (hex)		Beijing Xiaomi Mobile Software Co., Ltd
++24CF24     (base 16)		Beijing Xiaomi Mobile Software Co., Ltd
++				The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District
++				Beijing  Beijing  100085
+ 				CN
+ 
+ 1C-0D-7D   (hex)		Apple, Inc.
+@@ -190985,6 +191117,48 @@ DC5475     (base 16)		Espressif Inc.
+ 				Cupertino  CA  95014
+ 				US
+ 
++F0-6C-5D   (hex)		Xiaomi Communications Co Ltd
++F06C5D     (base 16)		Xiaomi Communications Co Ltd
++				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
++				Beijing  Haidian District  100085
++				CN
++
++40-B0-2F   (hex)		Miele & Cie. KG
++40B02F     (base 16)		Miele & Cie. KG
++				Carl-Miele-Straße 29
++				Gütersloh    33332
++				DE
++
++18-66-F0   (hex)		Jupiter Systems
++1866F0     (base 16)		Jupiter Systems
++				31015 Huntwood Ave
++				Hayward  CA  94544-7007
++				US
++
++74-60-4C   (hex)		RØDE
++74604C     (base 16)		RØDE
++				107 Carnarvon St
++				Silverwater  NSW  2128
++				AU
++
++28-6F-40   (hex)		Tonly Technology Co. Ltd 
++286F40     (base 16)		Tonly Technology Co. Ltd 
++				Section 37, Zhongkai Hi-Tech Development Zone
++				Huizhou  Guangdong  516006
++				CN
++
++BC-C7-DA   (hex)		Earda Technologies co Ltd
++BCC7DA     (base 16)		Earda Technologies co Ltd
++				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
++				Guangzhou  Guangdong  511455
++				CN
++
++0C-86-C7   (hex)		Jabil Circuit (Guangzhou) Limited
++0C86C7     (base 16)		Jabil Circuit (Guangzhou) Limited
++				Huangpu 128, JunCheng Road
++				GuangZhou  Guangdong  510530
++				CN
++
+ 14-94-6C   (hex)		Apple, Inc.
+ 14946C     (base 16)		Apple, Inc.
+ 				1 Infinite Loop
+@@ -190997,17 +191171,11 @@ DC5475     (base 16)		Espressif Inc.
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-74-60-4C   (hex)		RØDE
+-74604C     (base 16)		RØDE
+-				107 Carnarvon St
+-				Silverwater  NSW  2128
+-				AU
+-
+-40-B0-2F   (hex)		Miele & Cie. KG
+-40B02F     (base 16)		Miele & Cie. KG
+-				Carl-Miele-Straße 29
+-				Gütersloh    33332
+-				DE
++58-00-32   (hex)		Genexis B.V.
++580032     (base 16)		Genexis B.V.
++				Lodewijkstraat 1A
++				Eindhoven    5652AC
++				NL
+ 
+ B4-7D-76   (hex)		KNS Group LLC
+ B47D76     (base 16)		KNS Group LLC
+@@ -191021,6 +191189,18 @@ C0AD97     (base 16)		TECNO MOBILE LIMITED
+ 				Hong Kong  Hong Kong  999077
+ 				HK
+ 
++B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
++B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
++				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
++				Wanan  China/jiangxi  343800
++				CN
++
++4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
++				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
++				ChongQing  ChongQing  400025
++				CN
++
+ 70-A9-83   (hex)		Cisco Systems, Inc
+ 70A983     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -191033,16 +191213,22 @@ BCFAEB     (base 16)		Cisco Systems, Inc
+ 				San Jose  CA  94568
+ 				US
+ 
+-18-66-F0   (hex)		Jupiter Systems
+-1866F0     (base 16)		Jupiter Systems
+-				31015 Huntwood Ave
+-				Hayward  CA  94544-7007
+-				US
++74-76-7D   (hex)		shenzhen kexint technology co.,ltd
++74767D     (base 16)		shenzhen kexint technology co.,ltd
++				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
++				shenzhen  guangdong  518000
++				CN
+ 
+-BC-C7-DA   (hex)		Earda Technologies co Ltd
+-BCC7DA     (base 16)		Earda Technologies co Ltd
+-				Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District
+-				Guangzhou  Guangdong  511455
++E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
++				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
++				Guangzhou    510623
++				CN
++
++F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
++F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
++				No.5 DongXin Road
++				Wuhan  Hubei  430074
+ 				CN
+ 
+ 84-85-53   (hex)		Biznes Systema Telecom, LLC
+@@ -191051,12 +191237,6 @@ BCC7DA     (base 16)		Earda Technologies co Ltd
+ 				Moscow    121087
+ 				RU
+ 
+-58-00-32   (hex)		Genexis B.V.
+-580032     (base 16)		Genexis B.V.
+-				Lodewijkstraat 1A
+-				Eindhoven    5652AC
+-				NL
+-
+ D8-88-63   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ D88863     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -191075,36 +191255,6 @@ C03E50     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Dongguan    523808
+ 				CN
+ 
+-4C-53-69   (hex)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+-4C5369     (base 16)		YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd
+-				No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China
+-				ChongQing  ChongQing  400025
+-				CN
+-
+-74-76-7D   (hex)		shenzhen kexint technology co.,ltd
+-74767D     (base 16)		shenzhen kexint technology co.,ltd
+-				5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City
+-				shenzhen  guangdong  518000
+-				CN
+-
+-B0-38-E2   (hex)		Wanan Hongsheng Electronic Co.Ltd
+-B038E2     (base 16)		Wanan Hongsheng Electronic Co.Ltd
+-				1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province
+-				Wanan  China/jiangxi  343800
+-				CN
+-
+-E0-48-D8   (hex)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+-E048D8     (base 16)		Guangzhi Wulian Technology(Guangzhou) Co., Ltd
+-				Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, 
+-				Guangzhou    510623
+-				CN
+-
+-F8-E4-A4   (hex)		Fiberhome Telecommunication Technologies Co.,LTD
+-F8E4A4     (base 16)		Fiberhome Telecommunication Technologies Co.,LTD
+-				No.5 DongXin Road
+-				Wuhan  Hubei  430074
+-				CN
+-
+ A0-C9-8B   (hex)		Nokia Solutions and Networks GmbH & Co. KG
+ A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Werinherstrasse 91
+@@ -191117,18 +191267,6 @@ A0C98B     (base 16)		Nokia Solutions and Networks GmbH & Co. KG
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
+-B8-F0-B9   (hex)		zte corporation
+-B8F0B9     (base 16)		zte corporation
+-				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+-				shenzhen  guangdong  518057
+-				CN
+-
+-80-5B-65   (hex)		LG Innotek
+-805B65     (base 16)		LG Innotek
+-				26, Hanamsandan 5beon-ro
+-				Gwangju  Gwangsan-gu  506-731
+-				KR
+-
+ 4C-9D-22   (hex)		ACES Co.,Ltd
+ 4C9D22     (base 16)		ACES Co.,Ltd
+ 				TianGong Avenue #916, Tianfu New Area
+@@ -191141,22 +191279,28 @@ B8F0B9     (base 16)		zte corporation
+ 				Shinagawa-ku   Tokyo  141-8610
+ 				JP
+ 
+-00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
+-00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
+-				Building, No.33, Xiandong Rd, Xili
+-				Nanshan District, Shenzhen  PRC  518053
++B8-F0-B9   (hex)		zte corporation
++B8F0B9     (base 16)		zte corporation
++				12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
++				shenzhen  guangdong  518057
+ 				CN
+ 
++80-5B-65   (hex)		LG Innotek
++805B65     (base 16)		LG Innotek
++				26, Hanamsandan 5beon-ro
++				Gwangju  Gwangsan-gu  506-731
++				KR
++
+ D4-43-0E   (hex)		Zhejiang Dahua Technology Co., Ltd.
+ D4430E     (base 16)		Zhejiang Dahua Technology Co., Ltd.
+ 				No.1199,Waterfront Road 
+ 				Hangzhou  Zhejiang  310053
+ 				CN
+ 
+-F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+-				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
+-				Chongqing   China  401120
++00-73-8D   (hex)		Shenzhen TINNO Mobile Technology Corp.
++00738D     (base 16)		Shenzhen TINNO Mobile Technology Corp.
++				Building, No.33, Xiandong Rd, Xili
++				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
+ 44-D3-AD   (hex)		Shenzhen TINNO Mobile Technology Corp.
+@@ -191165,30 +191309,18 @@ F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+ 				Nanshan District, Shenzhen  PRC  518053
+ 				CN
+ 
++F8-5E-0B   (hex)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++F85E0B     (base 16)		Realme Chongqing Mobile Telecommunications Corp.,Ltd.
++				No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.
++				Chongqing   China  401120
++				CN
++
+ 94-D3-31   (hex)		Xiaomi Communications Co Ltd
+ 94D331     (base 16)		Xiaomi Communications Co Ltd
+ 				#019, 9th Floor, Building 6, 33 Xi'erqi Middle Road
+ 				Beijing  Haidian District  100085
+ 				CN
+ 
+-34-DD-04   (hex)		Minut AB
+-34DD04     (base 16)		Minut AB
+-				Baltzarsgatan 23
+-				Malmö    21136
+-				SE
+-
+-60-1E-98   (hex)		Axevast Technology
+-601E98     (base 16)		Axevast Technology
+-				5F., No. 20, Guanqian Road, Zhongzheng District
+-				Taipei City    100007
+-				TW
+-
+-A8-F7-D9   (hex)		Mist Systems, Inc.
+-A8F7D9     (base 16)		Mist Systems, Inc.
+-				1601 South De Anza Blvd, Suite 248
+-				Cupertino  CA  95014
+-				US
+-
+ 5C-8C-30   (hex)		Taicang T&W Electronics
+ 5C8C30     (base 16)		Taicang T&W Electronics
+ 				89# Jiang Nan RD
+@@ -191207,6 +191339,18 @@ A8F7D9     (base 16)		Mist Systems, Inc.
+ 				San Jose  CA  94568
+ 				US
+ 
++34-DD-04   (hex)		Minut AB
++34DD04     (base 16)		Minut AB
++				Baltzarsgatan 23
++				Malmö    21136
++				SE
++
++E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
++				Dongguan    523808
++				CN
++
+ 68-D9-27   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+ 68D927     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+@@ -191243,11 +191387,17 @@ A8F7D9     (base 16)		Mist Systems, Inc.
+ 				Shanghai    200233
+ 				CN
+ 
+-E8-AC-23   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-E8AC23     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+-				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+-				Dongguan    523808
+-				CN
++60-1E-98   (hex)		Axevast Technology
++601E98     (base 16)		Axevast Technology
++				5F., No. 20, Guanqian Road, Zhongzheng District
++				Taipei City    100007
++				TW
++
++A8-F7-D9   (hex)		Mist Systems, Inc.
++A8F7D9     (base 16)		Mist Systems, Inc.
++				1601 South De Anza Blvd, Suite 248
++				Cupertino  CA  95014
++				US
+ 
+ 2C-3B-70   (hex)		AzureWave Technology Inc.
+ 2C3B70     (base 16)		AzureWave Technology Inc.
+@@ -191273,12 +191423,6 @@ F4227A     (base 16)		Guangdong Seneasy Intelligent Technology Co., Ltd.
+ 				Piscataway  NJ  08554
+ 				US
+ 
+-DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
+-DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
+-				1F, No.236 Ba’ai Street, Shulin District
+-				New Taipei City    23845
+-				TW
+-
+ A4-75-B9   (hex)		Samsung Electronics Co.,Ltd
+ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				#94-1, Imsoo-Dong
+@@ -191291,18 +191435,18 @@ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				Gumi  Gyeongbuk  730-350
+ 				KR
+ 
+-1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
+-1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
+-				#94-1, Imsoo-Dong
+-				Gumi  Gyeongbuk  730-350
+-				KR
+-
+ 6C-60-D0   (hex)		Huawei Device Co., Ltd.
+ 6C60D0     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++1C-F8-D0   (hex)		Samsung Electronics Co.,Ltd
++1CF8D0     (base 16)		Samsung Electronics Co.,Ltd
++				#94-1, Imsoo-Dong
++				Gumi  Gyeongbuk  730-350
++				KR
++
+ 64-0E-6A   (hex)		SECO-LARM USA Inc
+ 640E6A     (base 16)		SECO-LARM USA Inc
+ 				16842 Millikan
+@@ -191315,6 +191459,12 @@ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				San Jose  CA  95110
+ 				US
+ 
++DC-8D-B7   (hex)		ATW TECHNOLOGY, INC.
++DC8DB7     (base 16)		ATW TECHNOLOGY, INC.
++				1F, No.236 Ba’ai Street, Shulin District
++				New Taipei City    23845
++				TW
++
+ 70-20-84   (hex)		Hon Hai Precision Industry Co., Ltd.
+ 702084     (base 16)		Hon Hai Precision Industry Co., Ltd.
+ 				GuangDongShenZhen
+@@ -191327,6 +191477,12 @@ A475B9     (base 16)		Samsung Electronics Co.,Ltd
+ 				ShenZhen  GuangDong  518109
+ 				CN
+ 
++1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
++1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
++				GuangDongShenZhen
++				ShenZhen  GuangDong  518109
++				CN
++
+ 18-AA-1E   (hex)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 18AA1E     (base 16)		Shenzhen Skyworth  Digital  Technology  CO., Ltd
+ 				4F,Block A, Skyworth?Building,
+@@ -191345,18 +191501,6 @@ D452EE     (base 16)		SKY UK LIMITED
+ 				Brentwood  Essex  08854
+ 				GB
+ 
+-1C-A0-B8   (hex)		Hon Hai Precision Industry Co., Ltd.
+-1CA0B8     (base 16)		Hon Hai Precision Industry Co., Ltd.
+-				GuangDongShenZhen
+-				ShenZhen  GuangDong  518109
+-				CN
+-
+-E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
+-E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
+-				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
+-				Hong Kong    999077
+-				HK
+-
+ 90-21-06   (hex)		SKY UK LIMITED
+ 902106     (base 16)		SKY UK LIMITED
+ 				130 Kings Road
+@@ -191375,17 +191519,11 @@ F08756     (base 16)		Zyxel Communications Corporation
+ 				Hsichu  Taiwan  300
+ 				TW
+ 
+-18-C3-00   (hex)		Nokia
+-18C300     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
+-
+-D4-4D-77   (hex)		Nokia
+-D44D77     (base 16)		Nokia
+-				600 March Road
+-				Kanata  Ontario  K2K 2E6
+-				CA
++E8-EF-05   (hex)		MIND TECH INTERNATIONAL LIMITED
++E8EF05     (base 16)		MIND TECH INTERNATIONAL LIMITED
++				FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK
++				Hong Kong    999077
++				HK
+ 
+ 48-27-E2   (hex)		Espressif Inc.
+ 4827E2     (base 16)		Espressif Inc.
+@@ -191393,12 +191531,6 @@ D44D77     (base 16)		Nokia
+ 				Shanghai  Shanghai  201203
+ 				CN
+ 
+-F4-6D-3F   (hex)		Intel Corporate
+-F46D3F     (base 16)		Intel Corporate
+-				Lot 8, Jalan Hi-Tech 2/3  
+-				Kulim  Kedah  09000
+-				MY
+-
+ 58-B3-8F   (hex)		New H3C Technologies Co., Ltd
+ 58B38F     (base 16)		New H3C Technologies Co., Ltd
+ 				466 Changhe Road, Binjiang District
+@@ -191411,12 +191543,30 @@ F46D3F     (base 16)		Intel Corporate
+ 				Zhenjiang  Jiangsu  212003
+ 				CN
+ 
++F4-6D-3F   (hex)		Intel Corporate
++F46D3F     (base 16)		Intel Corporate
++				Lot 8, Jalan Hi-Tech 2/3  
++				Kulim  Kedah  09000
++				MY
++
+ 6C-72-4A   (hex)		Onkyo Technology K.K.
+ 6C724A     (base 16)		Onkyo Technology K.K.
+ 				Lux Building (5th floor),1-1-41 Kawamata
+ 				Higashiosaka City  Osaka  577-0063
+ 				JP
+ 
++18-C3-00   (hex)		Nokia
++18C300     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
++D4-4D-77   (hex)		Nokia
++D44D77     (base 16)		Nokia
++				600 March Road
++				Kanata  Ontario  K2K 2E6
++				CA
++
+ DC-05-39   (hex)		Cisco Systems, Inc
+ DC0539     (base 16)		Cisco Systems, Inc
+ 				80 West Tasman Drive
+@@ -191429,18 +191579,6 @@ DC0539     (base 16)		Cisco Systems, Inc
+ 				East Greenwich  RI  02818
+ 				US
+ 
+-E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
+-				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
+-				Chengdu  Sichuan  611330
+-				CN
+-
+-C4-64-F2   (hex)		Infinix mobility limited
+-C464F2     (base 16)		Infinix mobility limited
+-				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
+-				HongKong  HongKong  999077
+-				HK
+-
+ B0-1F-47   (hex)		Heights Telecom T ltd
+ B01F47     (base 16)		Heights Telecom T ltd
+ 				Moshe Lerer 15
+@@ -191495,11 +191633,17 @@ BC1541     (base 16)		Nokia
+ 				Kanata  Ontario  K2K 2E6
+ 				CA
+ 
+-94-6D-AE   (hex)		Mellanox Technologies, Inc.
+-946DAE     (base 16)		Mellanox Technologies, Inc.
+-				350 Oakmead Parkway, Suite 100 
+-				Sunnyvale  CA  94085
+-				US
++E0-F3-18   (hex)		Sichuan Tianyi Comheart Telecom Co.,LTD
++E0F318     (base 16)		Sichuan Tianyi Comheart Telecom Co.,LTD
++				No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County
++				Chengdu  Sichuan  611330
++				CN
++
++C4-64-F2   (hex)		Infinix mobility limited
++C464F2     (base 16)		Infinix mobility limited
++				RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG
++				HongKong  HongKong  999077
++				HK
+ 
+ E4-A6-34   (hex)		Universal Electronics, Inc.
+ E4A634     (base 16)		Universal Electronics, Inc.
+@@ -191513,50 +191657,44 @@ E4A634     (base 16)		Universal Electronics, Inc.
+ 				Racho Santa MArgarita  CA  92688
+ 				US
+ 
+-50-63-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-506391     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++14-65-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++14656A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-E8-A3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-E8A34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++6C-B7-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++6CB7E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-04-18-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-041892     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++C4-75-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++C475EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-14-65-6A   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-14656A     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++90-25-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++9025F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-AC-B6-87   (hex)		Arcadyan Corporation
+-ACB687     (base 16)		Arcadyan Corporation
+-				No.8, Sec.2, Guangfu Rd.
+-				Hsinchu City  Hsinchu  30071
+-				TW
+-
+-6C-B7-E2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-6CB7E2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++50-63-91   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++506391     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-C4-75-EA   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-C475EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++E8-A3-4E   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++E8A34E     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+ 
+-90-25-F2   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
+-9025F2     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
++04-18-92   (hex)		HUAWEI TECHNOLOGIES CO.,LTD
++041892     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ 				Dongguan    523808
+ 				CN
+@@ -191573,18 +191711,36 @@ C475EA     (base 16)		HUAWEI TECHNOLOGIES CO.,LTD
+ 				Hsinchu  Hsinchu,Taiwan R.O.C.  30352
+ 				TW
+ 
+-EC-E6-1D   (hex)		Huawei Device Co., Ltd.
+-ECE61D     (base 16)		Huawei Device Co., Ltd.
+-				No.2 of Xincheng Road, Songshan Lake Zone
+-				Dongguan  Guangdong  523808
+-				CN
+-
+ 48-6D-BB   (hex)		Vestel Elektronik San ve Tic. A.S.
+ 486DBB     (base 16)		Vestel Elektronik San ve Tic. A.S.
+ 				Organize san
+ 				Manisa  Turket  45030
+ 				TR
+ 
++94-6D-AE   (hex)		Mellanox Technologies, Inc.
++946DAE     (base 16)		Mellanox Technologies, Inc.
++				350 Oakmead Parkway, Suite 100 
++				Sunnyvale  CA  94085
++				US
++
++00-84-ED   (hex)		LEXMARK INTERNATIONAL, INC.
++0084ED     (base 16)		LEXMARK INTERNATIONAL, INC.
++				740 W. New Circle Rd.
++				Lexington  KY  40550
++				US
++
++AC-B6-87   (hex)		Arcadyan Corporation
++ACB687     (base 16)		Arcadyan Corporation
++				No.8, Sec.2, Guangfu Rd.
++				Hsinchu City  Hsinchu  30071
++				TW
++
++B4-3A-31   (hex)		Silicon Laboratories
++B43A31     (base 16)		Silicon Laboratories
++				400 West Cesar Chavez
++				Austin  TX  78701
++				US
++
+ 4C-63-AD   (hex)		Huawei Device Co., Ltd.
+ 4C63AD     (base 16)		Huawei Device Co., Ltd.
+ 				No.2 of Xincheng Road, Songshan Lake Zone
+@@ -191597,8 +191753,38 @@ DCDB27     (base 16)		Huawei Device Co., Ltd.
+ 				Dongguan  Guangdong  523808
+ 				CN
+ 
++70-42-D3   (hex)		Ruijie Networks Co.,LTD
++7042D3     (base 16)		Ruijie Networks Co.,LTD
++				No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city
++				Fuzhou  Fujian  350002
++				CN
++
++44-12-44   (hex)		Aruba, a Hewlett Packard Enterprise Company
++441244     (base 16)		Aruba, a Hewlett Packard Enterprise Company
++				3333 Scott Blvd
++				Santa Clara  CA  95054
++				US
++
++EC-E6-1D   (hex)		Huawei Device Co., Ltd.
++ECE61D     (base 16)		Huawei Device Co., Ltd.
++				No.2 of Xincheng Road, Songshan Lake Zone
++				Dongguan  Guangdong  523808
++				CN
++
+ CC-96-E5   (hex)		Dell Inc.
+ CC96E5     (base 16)		Dell Inc.
+ 				One Dell Way
+ 				Round Rock  TX  78682
+ 				US
++
++40-75-C3   (hex)		Technicolor CH USA Inc.
++4075C3     (base 16)		Technicolor CH USA Inc.
++				5030 Sugarloaf Parkway Bldg 6 
++				Lawrenceville  GA  30044
++				US
++
++F4-1A-B0   (hex)		Shenzhen Xingguodu Technology Co., Ltd.
++F41AB0     (base 16)		Shenzhen Xingguodu Technology Co., Ltd.
++				18th Floor, Block B, Building 10, Shenzhen Bay Science and Technology Ecological Park, Nanshan District, Shenzhen
++				Shenzhen  Guangdong  518000
++				CN
+diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt
+index 3ff16ce0bf..3c84424c58 100644
+--- a/hwdb.d/ma-medium.txt
++++ b/hwdb.d/ma-medium.txt
+@@ -245,9 +245,6 @@ B00000-BFFFFF     (base 16)		KeyWest Networks, Inc
+ 				Orange  CA  92865
+ 				US
+ 
+-88-5D-90   (hex)		Private
+-F00000-FFFFFF     (base 16)		Private
+-
+ 60-95-CE   (hex)		Beijing Sinomedisite Bio-tech Co.,Ltd
+ B00000-BFFFFF     (base 16)		Beijing Sinomedisite Bio-tech Co.,Ltd
+ 				No.9 Kangding Street,Economic-Technological Development Area
+@@ -5078,6 +5075,36 @@ B00000-BFFFFF     (base 16)		Labman Automation
+ 				Stokesley  North Yorkshire  TS9 5NQ
+ 				GB
+ 
++30-3D-51   (hex)		Fink Telecom Services GmbH
++000000-0FFFFF     (base 16)		Fink Telecom Services GmbH
++				Paradieshofstrasse 101
++				Basel    4054
++				CH
++
++30-3D-51   (hex)		Amber-Link Network Technology Co.,Ltd.
++600000-6FFFFF     (base 16)		Amber-Link Network Technology Co.,Ltd.
++				Bld. #1, St. 356, Rd. Guo Shoujing
++				Shanghai    China
++				CN
++
++88-5D-90   (hex)		IEEE Registration Authority
++F00000-FFFFFF     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				PISCATAWAY  NJ  08854
++				US
++
++2C-69-1D   (hex)		IBM
++800000-8FFFFF     (base 16)		IBM
++				9000 South Rita Rd
++				Tucson  AZ  85744
++				US
++
++2C-69-1D   (hex)		SPEEDTECH CORP.
++400000-4FFFFF     (base 16)		SPEEDTECH CORP.
++				No. 568, Sec. 1, Minsheng N. Rd., Guishan Dist., Taoyuan City 338, Taiwan
++				Taoyuan    338
++				TW
++
+ 4C-4B-F9   (hex)		Shenzhen dingsheng technology co., LTD
+ 400000-4FFFFF     (base 16)		Shenzhen dingsheng technology co., LTD
+ 				Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district
+@@ -9926,6 +9953,30 @@ FC-61-79   (hex)		Kvaliteta Systems and Solutions Private Limited
+ 				Trivandrum  Kerala   695583
+ 				IN
+ 
++2C-69-1D   (hex)		Shenzhen Gigalight Technology Co., Ltd
++700000-7FFFFF     (base 16)		Shenzhen Gigalight Technology Co., Ltd
++				2/f, Block F3, Changfeng Ind. Park, Liuxian 3 Rd., Shenzhen, Guangdong, China 1/f, Block F4, Changfeng Ind. Park, 68 Zone,Baoan District,Shenzhen,China
++				Shenzhen  Guangdong  518100
++				CN
++
++2C-69-1D   (hex)		Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd
++A00000-AFFFFF     (base 16)		Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd
++				Lot 10, Jalan 13/2 
++				Petaling Jaya   Selangor  46200
++				MY
++
++30-3D-51   (hex)		TalkGo, Inc.
++C00000-CFFFFF     (base 16)		TalkGo, Inc.
++				3518 Fremont Ave N#473
++				Seattle  WA  98103
++				US
++
++2C-69-1D   (hex)		KATEK SE
++100000-1FFFFF     (base 16)		KATEK SE
++				Promenadeplatz 12
++				Munich    80333
++				DE
++
+ 20-85-93   (hex)		UNILUMIN GROUP CO.,LTD
+ 300000-3FFFFF     (base 16)		UNILUMIN GROUP CO.,LTD
+ 				No.112 Yongfu Rd.,BaoanDistrict,
+@@ -10319,9 +10370,6 @@ E00000-EFFFFF     (base 16)		ShenZhen Arts Changhua Intelligent Technology Co.,
+ 8C-C8-F4   (hex)		Private
+ 700000-7FFFFF     (base 16)		Private
+ 
+-98-02-D8   (hex)		Private
+-F00000-FFFFFF     (base 16)		Private
+-
+ D8-86-0B   (hex)		Get SAT
+ 200000-2FFFFF     (base 16)		Get SAT
+ 				Hamada 12
+@@ -15083,6 +15131,42 @@ A00000-AFFFFF     (base 16)		TeraNXT Global India Pvt Ltd.
+ 				Rockwall  TX  75032
+ 				US
+ 
++30-3D-51   (hex)		Percent.com
++E00000-EFFFFF     (base 16)		Percent.com
++				167/2, Fakirerpool D.I.T Extention Road, Motiheel
++				Dhaka  Dhaka  1000
++				BD
++
++98-02-D8   (hex)		IEEE Registration Authority
++F00000-FFFFFF     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				PISCATAWAY  NJ  08854
++				US
++
++2C-69-1D   (hex)		Sunsa, Inc
++300000-3FFFFF     (base 16)		Sunsa, Inc
++				3422 Fait Ave
++				Baltimore  MD  21224
++				US
++
++2C-69-1D   (hex)		SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
++900000-9FFFFF     (base 16)		SHENZHEN EX-LINK TECHNOLOGY CO.,LTD
++				818 Building 2,Nanyou Fourth Industrial Zone,No 1124 ,Nanshan Avenue,Nanguang Community,Nanshan Street,Nanshan District,Shenzhen
++				SHENZHEN  GUANGDONG  518052
++				CN
++
++2C-69-1D   (hex)		Aparian, Inc.
++C00000-CFFFFF     (base 16)		Aparian, Inc.
++				2709 S Orange AveUnit D
++				Santa Ana  CA  92707
++				US
++
++2C-69-1D   (hex)		Carnegie Robotics
++600000-6FFFFF     (base 16)		Carnegie Robotics
++				4501 Hatfield Street
++				Pittsburgh  PA  15201
++				US
++
+ 4C-4B-F9   (hex)		Shandong Linkotech Electronic Co., Ltd.
+ 600000-6FFFFF     (base 16)		Shandong Linkotech Electronic Co., Ltd.
+ 				22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone
+@@ -15152,9 +15236,6 @@ F00000-FFFFFF     (base 16)		Private
+ 78-C2-C0   (hex)		Private
+ F00000-FFFFFF     (base 16)		Private
+ 
+-14-1F-BA   (hex)		Private
+-F00000-FFFFFF     (base 16)		Private
+-
+ 58-FC-DB   (hex)		Private
+ F00000-FFFFFF     (base 16)		Private
+ 
+@@ -20099,6 +20180,42 @@ E00000-EFFFFF     (base 16)		ACCO Brands USA LLC
+ 				Mail box 15123  Haifa  3508409
+ 				IL
+ 
++2C-69-1D   (hex)		Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
++000000-0FFFFF     (base 16)		Hunan Xiangjiang Kunpeng Information Technology Co., Ltd.
++				Building 1# and Building 4#, No. 67 Ziyuan Road, Xueshi Street, Yuelu District,
++				Changsha  Hunan  410006
++				CN
++
++30-3D-51   (hex)		Destiny Automate Limited
++700000-7FFFFF     (base 16)		Destiny Automate Limited
++				Aw House, 6-8 Stuart Street
++				Luton  Bedfordshire  LU1 2SJ
++				GB
++
++2C-69-1D   (hex)		Abode Systems Inc
++200000-2FFFFF     (base 16)		Abode Systems Inc
++				2625 Middlefield Road
++				Palo Alto  CA  94306
++				US
++
++14-1F-BA   (hex)		IEEE Registration Authority
++F00000-FFFFFF     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				PISCATAWAY  NJ  08854
++				US
++
++2C-69-1D   (hex)		Shenzhen Daren HI-Tech Electronics Co., Ltd.
++B00000-BFFFFF     (base 16)		Shenzhen Daren HI-Tech Electronics Co., Ltd.
++				Room 401, No. 5, Jiayi Industrial Park, Guihua Community, Guanlan Street, Longhua District, Shenzhen
++				Shenzhen  Guangdong  518109
++				CN
++
++2C-69-1D   (hex)		Ascentac Inc.
++D00000-DFFFFF     (base 16)		Ascentac Inc.
++				11F.-1, No.80, Minzu 1st Rd., Sanmin Dist., Kaohsiung City 807, Taiwan (R.O.C.)
++				Kaohsiung City  Taiwan  807
++				TW
++
+ 20-85-93   (hex)		Great Lite International
+ 700000-7FFFFF     (base 16)		Great Lite International
+ 				11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,
+@@ -20735,9 +20852,6 @@ B00000-BFFFFF     (base 16)		YINUO-LINK LIMITED
+ 80-0A-80   (hex)		Private
+ F00000-FFFFFF     (base 16)		Private
+ 
+-C0-D3-91   (hex)		Private
+-B00000-BFFFFF     (base 16)		Private
+-
+ 1C-FD-08   (hex)		MESHBOX FOUNDATION PTE. LTD.
+ E00000-EFFFFF     (base 16)		MESHBOX FOUNDATION PTE. LTD.
+ 				152 Beach Road #14-02 GATEWAY EAST TOWER
+@@ -20780,9 +20894,6 @@ A00000-AFFFFF     (base 16)		Banmak Technogies Co.,Ltd
+ 				Huizhou  Guangdong  516100
+ 				CN
+ 
+-B8-D8-12   (hex)		Private
+-F00000-FFFFFF     (base 16)		Private
+-
+ A8-3F-A1   (hex)		Imecon Engineering SrL
+ 000000-0FFFFF     (base 16)		Imecon Engineering SrL
+ 				via Gerola 13/15
+@@ -25189,3 +25300,21 @@ D00000-DFFFFF     (base 16)		XOR UK Corporation Limited
+ 				Unit 11-12, Stanhope Gate, Stanhope Rd
+ 				Camberley  Surrey  GU15 3DW
+ 				GB
++
++C0-D3-91   (hex)		 Celliber Technologies Pvt Limited
++B00000-BFFFFF     (base 16)		 Celliber Technologies Pvt Limited
++				No.1027, 24th Main, 11th Cross,
++				Bangalore  Karnataka  560102
++				IN
++
++2C-69-1D   (hex)		LG Electronics Inc.
++500000-5FFFFF     (base 16)		LG Electronics Inc.
++				LG Twin Towers, 128, Yeoui-daero, Yeongdeungpo-gu
++				Seoul    150-721
++				KR
++
++B8-D8-12   (hex)		IEEE Registration Authority
++F00000-FFFFFF     (base 16)		IEEE Registration Authority
++				445 Hoes Lane
++				PISCATAWAY  NJ  08854
++				US
+diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt
+index dfaf330309..7492357661 100644
+--- a/hwdb.d/ma-small.txt
++++ b/hwdb.d/ma-small.txt
+@@ -4010,9 +4010,6 @@ E6F000-E6FFFF     (base 16)		Amazon Technologies Inc.
+ 				Reno  NV  89507
+ 				US
+ 
+-70-B3-D5   (hex)		Private
+-11A000-11AFFF     (base 16)		Private
+-
+ 70-B3-D5   (hex)		Mettler Toledo
+ 4FC000-4FCFFF     (base 16)		Mettler Toledo
+ 				1571 Northpointe Parkway
+@@ -5957,6 +5954,12 @@ C35000-C35FFF     (base 16)		Peter Huber Kaeltemaschinenbau AG
+ 				Offenburg  Ba-Wue  77656
+ 				DE
+ 
++70-B3-D5   (hex)		Mahindra Electric Mobility Limited
++11A000-11AFFF     (base 16)		Mahindra Electric Mobility Limited
++				690, Gold Hill Square, Hosur Road, Bommanahalli
++				Bangalore  Karnataka  560068
++				IN
++
+ 70-B3-D5   (hex)		EVCO SPA
+ A80000-A80FFF     (base 16)		EVCO SPA
+ 				VIA FELTRE N. 81
+@@ -11753,23 +11756,59 @@ CC6000-CC6FFF     (base 16)		Genius Vision Digital Private Limited
+ 				Houston  TX  77024-7338
+ 				US
+ 
++8C-1F-64   (hex)		GO development GmbH
++7BC000-7BCFFF     (base 16)		GO development GmbH
++				Zeppelinstraße 126
++				Esslingen am Neckar    73730
++				DE
++
+ 8C-1F-64   (hex)		Abode Systems Inc
+ B13000-B13FFF     (base 16)		Abode Systems Inc
+ 				2625 Middlefield Road
+ 				Palo Alto  CA  94306
+ 				US
+ 
++8C-1F-64   (hex)		Ear Micro LLC
++58C000-58CFFF     (base 16)		Ear Micro LLC
++				4043 Broadway
++				Kansas City  MO  64111
++				US
++
+ 8C-1F-64   (hex)		DAVE SRL
+ 0EF000-0EFFFF     (base 16)		DAVE SRL
+ 				VIA TALPONEDO 29/A
+ 				PORCIA  PORDENONE  330850
+ 				IT
+ 
+-8C-1F-64   (hex)		GO development GmbH
+-7BC000-7BCFFF     (base 16)		GO development GmbH
+-				Zeppelinstraße 126
+-				Esslingen am Neckar    73730
+-				DE
++8C-1F-64   (hex)		Season Electronics Ltd
++6BB000-6BBFFF     (base 16)		Season Electronics Ltd
++				600 Nest Business Park 
++				Havant  Hampshire  PO9 5TL
++				GB
++
++8C-1F-64   (hex)		Integer.pl S.A.
++D5E000-D5EFFF     (base 16)		Integer.pl S.A.
++				Wielicka 28
++				Krakow    30-552
++				PL
++
++8C-1F-64   (hex)		Abbott Diagnostics Technologies AS
++300000-300FFF     (base 16)		Abbott Diagnostics Technologies AS
++				P. O.  Box 6863 Rodeløkka
++				Oslo    0504
++				NO
++
++8C-1F-64   (hex)		Suzhou Leamore Optronics Co., Ltd.
++662000-662FFF     (base 16)		Suzhou Leamore Optronics Co., Ltd.
++				Block 12-301, NO 99 Jinji Lake Road, Suzhou Industrial Park, Suzhou
++				Suzhou  Jiangsu   215000
++				CN
++
++8C-1F-64   (hex)		Breas Medical AB
++98F000-98FFFF     (base 16)		Breas Medical AB
++				Företagsvägen 1
++				Mölnlycke    SE-435 33
++				SE
+ 
+ 70-B3-D5   (hex)		System West dba ICS Electronics
+ E06000-E06FFF     (base 16)		System West dba ICS Electronics
+@@ -17534,10 +17573,10 @@ CD2000-CD2FFF     (base 16)		TRUMPF Huttinger GmbH + Co. KG,
+ 				Göttingen    37075
+ 				DE
+ 
+-8C-1F-64   (hex)		dinosys
+-5CB000-5CBFFF     (base 16)		dinosys
+-				501,35,Gwangnaruro 6-gil,
+-				Seoul  Seoul  133-832
++8C-1F-64   (hex)		WonATech Co., Ltd.
++890000-890FFF     (base 16)		WonATech Co., Ltd.
++				7, Neunganmal 1-gil
++				Seocho-gu  Seoul  06801
+ 				KR
+ 
+ 8C-1F-64   (hex)		HIROSAWA ELECTRIC Co.,Ltd.
+@@ -17546,12 +17585,24 @@ CD2000-CD2FFF     (base 16)		TRUMPF Huttinger GmbH + Co. KG,
+ 				Otaku  Tokyo  1440034
+ 				JP
+ 
+-8C-1F-64   (hex)		WonATech Co., Ltd.
+-890000-890FFF     (base 16)		WonATech Co., Ltd.
+-				7, Neunganmal 1-gil
+-				Seocho-gu  Seoul  06801
++8C-1F-64   (hex)		dinosys
++5CB000-5CBFFF     (base 16)		dinosys
++				501,35,Gwangnaruro 6-gil,
++				Seoul  Seoul  133-832
+ 				KR
+ 
++8C-1F-64   (hex)		Agramkow A/S
++8D5000-8D5FFF     (base 16)		Agramkow A/S
++				Augustenborg Landevej 19
++				Sønderborg    6400
++				DK
++
++8C-1F-64   (hex)		Gogo BA 
++092000-092FFF     (base 16)		Gogo BA 
++				105 Edgeview Drive
++				Broomfield  CO  80021
++				US
++
+ 70-B3-D5   (hex)		YUYAMA MFG Co.,Ltd
+ BBB000-BBBFFF     (base 16)		YUYAMA MFG Co.,Ltd
+ 				3-3-1
+@@ -23516,6 +23567,12 @@ CAF000-CAFFFF     (base 16)		BRS Sistemas Eletrônicos
+ 				Porto Alegre  RS  91380-000
+ 				BR
+ 
++8C-1F-64   (hex)		DORLET SAU
++1BD000-1BDFFF     (base 16)		DORLET SAU
++				Albert Eistein 34
++				Alava  SPAIN  01510
++				ES
++
+ 70-B3-D5   (hex)		DISMUNTEL SAL
+ 92C000-92CFFF     (base 16)		DISMUNTEL SAL
+ 				Pol ind cotes
+@@ -29251,3 +29308,9 @@ DFE000-DFEFFF     (base 16)		Nuvation Energy
+ 				651 North Broad StreetSuite 206
+ 				Middletown  DE  19709
+ 				US
++
++8C-1F-64   (hex)		Belden India Private Limited
++54A000-54AFFF     (base 16)		Belden India Private Limited
++				Plot No. D-228, Chakan MIDC Phase 2, 
++				Village Bhamboli, Taluka:Khed  Pune, Maharashtra  410 507
++				IN
+diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids
+index dddb2b639a..ba1be0bbc1 100644
+--- a/hwdb.d/pci.ids
++++ b/hwdb.d/pci.ids
+@@ -1,8 +1,8 @@
+ #
+ #	List of PCI ID's
+ #
+-#	Version: 2022.05.09
+-#	Date:    2022-05-09 03:15:02
++#	Version: 2022.05.18
++#	Date:    2022-05-18 03:15:02
+ #
+ #	Maintained by Albert Pool, Martin Mares, and other volunteers from
+ #	the PCI ID Project at https://pci-ids.ucw.cz/.
+@@ -1054,15 +1054,17 @@
+ 	131c  Kaveri [Radeon R7 Graphics]
+ 	131d  Kaveri [Radeon R6 Graphics]
+ 	13e9  Ariel
+-	13fe  Cyan Skillfish
++	13fe  Cyan Skillfish [BC-250]
+ 	1478  Navi 10 XL Upstream Port of PCI Express Switch
+ 	1479  Navi 10 XL Downstream Port of PCI Express Switch
++	1506  Mendocino
+ 	154c  Kryptos [Radeon RX 350]
+ 		1462 7c28  MS-7C28 Motherboard
+ 	154e  Garfield
+ 	1551  Arlene
+ 	1552  Pooky
+ 	1561  Anubis
++	15bf  Phoenix
+ 	15d8  Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series]
+ 		103c 8615  Pavilion Laptop 15-cw1xxx
+ 		17aa 3181  ThinkCentre M75n IoT
+@@ -1092,6 +1094,7 @@
+ 	1640  Rembrandt Radeon High Definition Audio Controller
+ 	164c  Lucienne
+ 	164d  Rembrandt
++	164f  Phoenix
+ 	1681  Rembrandt [Radeon 680M]
+ 	1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
+ 		103c 168b  ProBook 4535s
+@@ -3754,6 +3757,7 @@
+ 	7310  Navi 10 [Radeon Pro W5700X]
+ 	7312  Navi 10 [Radeon Pro W5700]
+ 	7314  Navi 10 USB
++	731e  TDC-150
+ 	731f  Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
+ 		1002 0b36  Reference RX 5700 XT
+ 		1458 2313  Radeon RX 5700 XT Gaming OC
+@@ -3765,16 +3769,18 @@
+ 	7341  Navi 14 [Radeon Pro W5500]
+ 	7347  Navi 14 [Radeon Pro W5500M]
+ 	734f  Navi 14 [Radeon Pro W5300M]
+-	7360  Navi 12 [Radeon Pro 5600M / V520]
++	7360  Navi 12 [Radeon Pro 5600M/V520/BC-160]
+ 	7362  Navi 12 [Radeon Pro V520]
+ 	7388  Arcturus GL-XL
+ 	738c  Arcturus GL-XL [Instinct MI100]
+ 	738e  Arcturus GL-XL [Instinct MI100]
++	73a1  Navi 21 [Radeon Pro V620]
+ 	73a2  Navi 21 Pro-XTA [Radeon Pro W6900X]
+ 	73a3  Navi 21 GL-XL [Radeon PRO W6800]
+ 	73a4  Navi 21 USB
+ 	73a5  Navi 21 [Radeon RX 6950 XT]
+ 	73ab  Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo]
++	73ae  Navi 21 [Radeon Pro V620 MxGPU]
+ 	73af  Navi 21 [Radeon RX 6900 XT]
+ 		148c 2414  Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate]
+ 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+@@ -3784,6 +3790,7 @@
+ 		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
+ 	73c3  Navi 22
+ 	73c4  Navi 22 USB
++	73ce  Navi22-XL SRIOV MxGPU
+ 	73df  Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M]
+ 	73e0  Navi 23
+ 	73e1  Navi 23 WKS-XM [Radeon PRO W6600M]
+@@ -3797,6 +3804,8 @@
+ 	740f  Aldebaran
+ 	7421  Navi 24 [Radeon PRO W6500M]
+ 	7422  Navi 24 [Radeon PRO W6400]
++	7423  Navi 24 [Radeon PRO W6300/W6300M]
++	7424  Navi 24 [Radeon RX 6300]
+ 	743f  Navi 24 [Radeon RX 6400 / 6500 XT]
+ 		1da2 e457  PULSE AMD Radeon RX 6500 XT
+ 	7833  RS350 Host Bridge
+@@ -4851,6 +4860,7 @@
+ 	1481  Starship/Matisse IOMMU
+ 	1482  Starship/Matisse PCIe Dummy Host Bridge
+ 	1483  Starship/Matisse GPP Bridge
++		01de fff9  Gimlet Baseboard
+ 	1484  Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
+ 	1485  Starship/Matisse Reserved SPP
+ 	1486  Starship/Matisse Cryptographic Coprocessor PSPCPP
+@@ -5509,6 +5519,7 @@
+ 		1028 1f24  PERC S300 Controller
+ # NV-RAM Adapter used in Dell DR appliances
+ 	0073  NV-RAM Adapter
++	1028  PCIe Bridge riser
+ 1029  Siemens Nixdorf IS
+ 102a  LSI Logic
+ 	0000  HYDRA
+@@ -13010,13 +13021,31 @@
+ 	3fc4  RME Digi9652 (Hammerfall)
+ 	3fc5  RME Hammerfall DSP
+ 	3fc6  RME Hammerfall DSP MADI
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	5000  Alveo U200 XDMA Platform
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	5004  Alveo U250 XDMA Platform
+ 	5005  Alveo U250
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	500c  Alveo U280 XDMA Platform
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	5020  Alveo U50 XMDA Platform
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	505c  Alveo U55C
+ 	7038  FPGA Card XC7VX690T
+ 		17aa 402f  FPGA XC7VX690T-3FFG1157E
+ 	8019  Memory controller
+ 		1eec 0201  VSEC10232X Dual-port 100Gb/s Etherent PCIe
+ 	8380  Ellips ProfiXpress Profibus Master
+ 	8381  Ellips Santos Frame Grabber
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	d000  Alveo U200 Golden Image
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	d004  Alveo U250 Golden Image
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	d00c  Alveo U280 Golden Image
++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html
++	d020  Alveo U50 Golden Image
+ 	d154  Copley Controls CAN card (PCI-CAN-02)
+ # SED is assigned Xilinx PCI device IDs ebf0 through ebff
+ 	ebf0  SED Systems Modulator/Demodulator
+@@ -18774,7 +18803,7 @@
+ 	6089  T62100-6089 Unified Wire Ethernet Controller
+ 	608a  T62100-608a Unified Wire Ethernet Controller
+ 	6092  T62100-KR Unified Wire Ethernet Controller
+-		01de fff9  Gimlet T6
++		01de fff9  Gimlet Baseboard
+ 	6401  T6225-CR Unified Wire Ethernet Controller
+ 	6402  T6225-SO-CR Unified Wire Ethernet Controller
+ 	6403  T6425-CR Unified Wire Ethernet Controller
+@@ -18800,7 +18829,7 @@
+ 	6489  T62100-6089 Unified Wire Ethernet Controller
+ 	648a  T62100-608a Unified Wire Ethernet Controller
+ 	6492  T62100-KR Unified Wire Ethernet Controller
+-		01de fff9  Gimlet T6
++		01de fff9  Gimlet Baseboard
+ 	6501  T6225-CR Unified Wire Storage Controller
+ 	6502  T6225-SO-CR Unified Wire Storage Controller
+ 	6503  T6425-CR Unified Wire Storage Controller
+@@ -23378,6 +23407,8 @@
+ 		13c2 3016  TT-budget S2-4200 Twin
+ 		4254 0552  S952 v3
+ 1ae0  Google, Inc.
++# NVMe drive in GCP
++	001f  NVMe device
+ 	0042  Compute Engine Virtual Ethernet [gVNIC]
+ 	abcd  Airbrush Combined Paintbox IPU/Oscar Edge TPU [Pixel Neural Core]
+ 1ae3  SANBlaze Technology, Inc.
+@@ -23619,6 +23650,7 @@
+ 		1028 2113  BOSS-N1 Modular
+ 		1028 2151  BOSS-N1 Modular ET
+ 		1028 2196  ROR-N100
++		1b4b 2241  Santa Cruz NVMe Host Adapter
+ 		1d49 0306  ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit
+ 		1d49 0307  ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
+ 	9120  88SE9120 SATA 6Gb/s Controller
+@@ -24324,6 +24356,7 @@
+ 	1000  HL-2000 AI Training Accelerator [Gaudi]
+ # PCIe accelerator card for Deep Learning training tasks with secured firmware
+ 	1010  HL-2000 AI Training Accelerator [Gaudi secured]
++1da8  Corigine, Inc.
+ 1dad  Fungible
+ 1db2  ATP ELECTRONICS INC
+ 1db7  Phytium Technology Co., Ltd.
+@@ -24834,6 +24867,7 @@
+ 		1f3f 00a1  Dual Port 100GE SDI5.0
+ 	9032  SDI5.1
+ 		1f3f 00a1  Dual Port 100GE SDI5.1
++1f40  Netac Technology Co.,Ltd
+ 1faa  Hexaflake (Shanghai) Information Technology Co., Ltd.
+ 1fab  Unifabrix Ltd.
+ 	0000  Nexus Alpha IVPU
+@@ -28042,6 +28076,7 @@
+ 		8086 000a  Ethernet Network Adapter X710-T4L for OCP 3.0
+ 		8086 000b  Ethernet Network Adapter X710-T2L for OCP 3.0
+ 		8086 000c  Ethernet Network Adapter X710-T2L for OCP 3.0
++		8086 000d  Ethernet 10G 2P X710-T2L-t OCP
+ 		8086 000f  Ethernet Network Adapter X710-T2L for OCP 3.0
+ 		8086 4009  Ethernet Network Adapter X710-T2L
+ 		8086 4012  Ethernet Network Adapter X710-T4L for OCP 3.0
+@@ -31531,8 +31566,14 @@
+ 	31a2  Celeron/Pentium Silver Processor Integrated Sensor Solution
+ 	31a8  Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
+ 		1849 31a8  Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
+-	31ac  Celeron/Pentium Silver Processor Serial IO I2C Host Controller
+-	31ae  Celeron/Pentium Silver Processor Serial IO I2C Host Controller
++	31ac  Celeron/Pentium Silver Processor I2C 0
++	31ae  Celeron/Pentium Silver Processor I2C 1
++	31b0  Celeron/Pentium Silver Processor I2C 2
++	31b2  Celeron/Pentium Silver Processor I2C 3
++	31b4  Celeron/Pentium Silver Processor I2C 4
++	31b6  Celeron/Pentium Silver Processor I2C 5
++	31b8  Celeron/Pentium Silver Processor I2C 6
++	31ba  Celeron/Pentium Silver Processor I2C 7
+ 	31bc  Celeron/Pentium Silver Processor Serial IO UART Host Controller
+ 	31be  Celeron/Pentium Silver Processor Serial IO UART Host Controller
+ 	31c0  Celeron/Pentium Silver Processor Serial IO UART Host Controller
+@@ -33012,6 +33053,7 @@
+ 	8817  Platform Controller Hub EG20T I2C Controller
+ 	8818  Platform Controller Hub EG20T Controller Area Network (CAN) Controller
+ 	8819  Platform Controller Hub EG20T IEEE 1588 Hardware Assist
++	8a03  Processor Power and Thermal Controller
+ 	8a0d  Ice Lake Thunderbolt 3 NHI #1
+ 	8a12  Ice Lake-LP Processor Host Bridge/DRAM Registers
+ 	8a13  Ice Lake Thunderbolt 3 USB Controller
+diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids
+index 7f41fd0b07..07c927c993 100644
+--- a/hwdb.d/usb.ids
++++ b/hwdb.d/usb.ids
+@@ -9,8 +9,8 @@
+ #	The latest version can be obtained from
+ #		http://www.linux-usb.org/usb.ids
+ #
+-# Version: 2022.05.09
+-# Date:    2022-05-09 20:34:10
++# Version: 2022.05.20
++# Date:    2022-05-20 20:34:10
+ #
+ 
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -17301,7 +17301,7 @@
+ 	a001  Bandit Action Camera Batt-Stick
+ 1391  IdealTEK, Inc.
+ 	1000  URTC-1000
+-1395  Sennheiser Communications
++1395  DSEA A/S
+ 	0025  Headset [PC 8]
+ 	0026  SC230
+ 	0027  SC260
+@@ -17343,7 +17343,7 @@
+ 	0065  MB 660
+ 	0066  SP 20 D UC
+ 	0067  SP 20 D MS
+-	006b  SC5x5 MS
++	006b  SC6x5
+ 	0072  Headset
+ 	3556  USB Headset
+ 1397  BEHRINGER International GmbH
diff --git a/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch b/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch
new file mode 100644
index 0000000..8ea0ad9
--- /dev/null
+++ b/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch
@@ -0,0 +1,30 @@
+From 45ba681f5f1a27f0b0b87bf961bce014fe73e056 Mon Sep 17 00:00:00 2001
+From: Pablo Ceballos <pceballos@google.com>
+Date: Thu, 26 May 2022 22:23:35 +0000
+Subject: [PATCH] hwdb: Add Google Meet speakermic
+
+It has the same issue as the Google Hangouts Meet speakermic but a
+different VID/PID.
+
+(cherry picked from commit 1a2134fb51ab1e84c213f2a309dab25da3a5369d)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 2e4f6f4293..7204e4ea2a 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -515,8 +515,9 @@ evdev:input:b0003v0458p0708*
+ # Google
+ ###########################################################
+ 
+-# Google Hangouts Meet speakermic
++# Google Hangouts Meet speakermic and Google Meet speakermic
+ evdev:input:b0003v18D1p8001*
++evdev:input:b0003v18D1p8007*
+  KEYBOARD_KEY_b002f=reserved                            # Disable micmute key
+ 
+ ###########################################################
diff --git a/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch b/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch
new file mode 100644
index 0000000..50576aa
--- /dev/null
+++ b/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch
@@ -0,0 +1,31 @@
+From 3e7648919309c1dfc677a1d383ddba0937fa14a9 Mon Sep 17 00:00:00 2001
+From: Maccraft123 <maccraft123mc@gmail.com>
+Date: Thu, 2 Jun 2022 20:05:22 +0200
+Subject: [PATCH] hwdb: Add accel orientation quirk for the Aya Neo Next
+
+(cherry picked from commit cc9e3a55d3d3558c309b1ebbde0f2cc26d69ee54)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 104fe05187..3de4616f7f 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -170,6 +170,14 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svn*ASUSTeK*:*pn*TP412UA:*
+ sensor:modalias:acpi:SMO8500*:dmi:*:svnStandard:pnWCBT1011::*
+  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+ 
++#########################################
++# AYANEO
++#########################################
++
++# AYANEO NEXT
++sensor:modalias:acpi:BMI0160*:dmi:*:svnAYANEO:pn*NEXT*:*
++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
++
+ #########################################
+ # Chuwi
+ #########################################
diff --git a/SOURCES/0325-hwdb-Add-HP-Dev-One.patch b/SOURCES/0325-hwdb-Add-HP-Dev-One.patch
new file mode 100644
index 0000000..d14411e
--- /dev/null
+++ b/SOURCES/0325-hwdb-Add-HP-Dev-One.patch
@@ -0,0 +1,31 @@
+From b6eda5abff85cb5764900d1da944096ece4b657c Mon Sep 17 00:00:00 2001
+From: Jeremy Soller <jackpot51@gmail.com>
+Date: Wed, 8 Jun 2022 07:59:46 -0600
+Subject: [PATCH] hwdb: Add HP Dev One
+
+This enables the microphone mute and programmable hotkey for the HP Dev
+One.
+
+(cherry picked from commit 295e0291bff52a12d4ce7d7481c4da464002fbb6)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 7204e4ea2a..51c631929e 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -764,6 +764,11 @@ evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPSt
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMEN*:pvr*
+  KEYBOARD_KEY_a1=!calc
+ 
++# HP Dev One
++evdev:atkbd:dmi:*:rvnHP:rn8A78:*
++ KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button
++ KEYBOARD_KEY_f9=prog1                                  # Fn+F12; Programmable hotkey
++
+ ##########################################################
+ # Huawei
+ ##########################################################
diff --git a/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch b/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch
new file mode 100644
index 0000000..c7c5f5c
--- /dev/null
+++ b/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch
@@ -0,0 +1,27 @@
+From 82d43b95791c5303f6e83f9de496aa377cb56702 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <sho@stratum0.net>
+Date: Mon, 13 Jun 2022 16:40:18 +0200
+Subject: [PATCH] hwdb: analyzers: remove generic "STM Device in DFU Mode"
+
+The USB ID v0483pDF11 is used by the ROM code in many STMicroelectronics
+devices (for firmware download) and not just signal analyzers.
+
+(cherry picked from commit 5d049ff9204b9aad48c62c296def4daa4b53005e)
+
+Related: #2087778
+---
+ hwdb.d/70-analyzers.hwdb | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb
+index 899ece3a01..0a1911507a 100644
+--- a/hwdb.d/70-analyzers.hwdb
++++ b/hwdb.d/70-analyzers.hwdb
+@@ -29,7 +29,6 @@ usb:v1679p3001*
+ 
+ # Power Delivery Analyzers
+ usb:v1679p6003*
+-usb:v0483pDF11*
+  ID_SIGNAL_ANALYZER=1
+ 
+ ###########################################################
diff --git a/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch b/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch
new file mode 100644
index 0000000..daace34
--- /dev/null
+++ b/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch
@@ -0,0 +1,27 @@
+From cdaf92f134f358ad681678162a4bbf50e4a6477a Mon Sep 17 00:00:00 2001
+From: Akihiko Odaki <akihiko.odaki@gmail.com>
+Date: Sat, 11 Jun 2022 07:58:52 +0900
+Subject: [PATCH] hwdb: Add Lenovo ThinkPad C13 Yoga
+
+(cherry picked from commit c3b8113af061eaf696fec46a1a9f38600d588f32)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 3de4616f7f..971fac84d5 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -416,6 +416,10 @@ sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:*
+ sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:*
+  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+ 
++# Lenovo ThinkPad C13 Yoga
++sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnMorphius*:*
++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
++
+ #########################################
+ # GP-electronic
+ #########################################
diff --git a/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch b/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch
new file mode 100644
index 0000000..77f71eb
--- /dev/null
+++ b/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch
@@ -0,0 +1,24 @@
+From 5278a0144c6824f430d74a60d67f61a921d464e7 Mon Sep 17 00:00:00 2001
+From: Michal Stanke <michal@stanke.cz>
+Date: Mon, 11 Jul 2022 14:11:12 +0200
+Subject: [PATCH] Fix automatic screen rotation for Asus Transformer T100TAM
+
+(cherry picked from commit 81706277965be18afd819f0e458baa6bf49fdc2e)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 971fac84d5..b1a83e8561 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -132,6 +132,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT300CHI:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:*
++sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAM:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
+  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
diff --git a/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch b/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch
new file mode 100644
index 0000000..735cb92
--- /dev/null
+++ b/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch
@@ -0,0 +1,29 @@
+From 8e0965646e6e00945d866c1131a261f1c4cf4fca Mon Sep 17 00:00:00 2001
+From: Mitchell Freiderich <MrCowKing@users.noreply.github.com>
+Date: Mon, 18 Jul 2022 01:03:44 -0500
+Subject: [PATCH] hwdb: Add Acer Aspire A317-33 (#24050)
+
+Enables the power button on the Acer Aspire 3 A317-33
+
+(cherry picked from commit 0216462f0836596fb0b2bf7b819bfd1d5b45b951)
+
+Related: #2087778
+---
+ hwdb.d/60-keyboard.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
+index 51c631929e..095bb34cd8 100644
+--- a/hwdb.d/60-keyboard.hwdb
++++ b/hwdb.d/60-keyboard.hwdb
+@@ -154,6 +154,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:*
+  KEYBOARD_KEY_e0=!pageup
+ 
++# Acer Aspire 3 A317-33
++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspireA317-33:*
++ KEYBOARD_KEY_55=power
++
+ # Acer Aspire One AO532h
+ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO532h:*
+  KEYBOARD_KEY_84=bluetooth
diff --git a/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch b/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch
new file mode 100644
index 0000000..7706be7
--- /dev/null
+++ b/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch
@@ -0,0 +1,28 @@
+From c4ca5a1a08e052cb4c5be621a9128d3fe1bb8111 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joaqu=C3=ADn=20Ignacio=20Aramend=C3=ADa?=
+ <samsagax@gmail.com>
+Date: Sat, 30 Jul 2022 16:56:04 -0300
+Subject: [PATCH] Add ACCEL_MOUNT_MATRIX for OXP Mini
+
+(cherry picked from commit e18569cc7271ba8b2b2be90cbb285980915cf4a2)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index b1a83e8561..fc688ef4d3 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -767,6 +767,10 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svnONE-NETBOOKTECHNOLOGYCO*:pnOne-Mix3Pro:*
+ sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvr5.12:bd07/17/2019:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnDefaultstring:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:*
+  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+ 
++# One-Netbook OneXPlayer Mini (and maybe others)
++sensor:modalias:acpi:BMI0160*:dmi:*:rnONEXPLAYER:rvrV01:*
++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
++
+ #########################################
+ # Peaq
+ #########################################
diff --git a/SOURCES/0331-Added-DERE-DBook-D10-24173.patch b/SOURCES/0331-Added-DERE-DBook-D10-24173.patch
new file mode 100644
index 0000000..917f8e3
--- /dev/null
+++ b/SOURCES/0331-Added-DERE-DBook-D10-24173.patch
@@ -0,0 +1,33 @@
+From 8a7803d8c57ad39d05541ce6e6c0460eeae9da01 Mon Sep 17 00:00:00 2001
+From: Gio <thelookouts@hotmail.com>
+Date: Wed, 3 Aug 2022 04:26:03 -0400
+Subject: [PATCH] Added DERE DBook D10 (#24173)
+
+* Added DERE DBook D10
+
+(cherry picked from commit 2d2efed2eeebad6860e9fa4880d02286175dcffa)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index fc688ef4d3..1c3f6b62bb 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -339,6 +339,14 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnDellInc.*:pnVenue8Pro3845:*
+ sensor:modalias:acpi:INVN6500*:dmi:*svnDell*:pnVenue10Pro5055:*
+  ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
+ 
++#########################################
++# DERE
++#########################################
++
++# DBook D10
++sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInternational,LLC.:bvrJP2V1.05:bd04/27/2022:br1.5:efr1.3:svnDefaultstring:*
++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
++
+ #########################################
+ # DEXP
+ #########################################
diff --git a/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch b/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch
new file mode 100644
index 0000000..e76d47f
--- /dev/null
+++ b/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch
@@ -0,0 +1,28 @@
+From e70784afa017a3d721a2fd5202ae31b12d806069 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Tue, 9 Aug 2022 18:08:24 +0200
+Subject: [PATCH] hwdb: analyzers: Clarify the type of devices we want listed
+
+(cherry picked from commit 838d0fd3d5f890e986c631eda2a4945b0c661d19)
+
+Related: #2087778
+---
+ hwdb.d/70-analyzers.hwdb | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb
+index 0a1911507a..7f31ca3ea3 100644
+--- a/hwdb.d/70-analyzers.hwdb
++++ b/hwdb.d/70-analyzers.hwdb
+@@ -1,8 +1,9 @@
+ # This file is part of systemd.
+ #
+ # Database for signal analyzers (protocol analyzers, logic analyzers,
+-# oscilloscopes, multimeters, bench power supplies, etc.) that should
+-# be accessible to the seat owner.
++# oscilloscopes, multimeters, bench power supplies, etc.) or just
++# anything that has to do with electronics and that should be
++# accessible to the seat owner.
+ #
+ # Permitted keys:
+ #   Specify if a device is a signal analyzer
diff --git a/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch b/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch
new file mode 100644
index 0000000..41c4845
--- /dev/null
+++ b/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch
@@ -0,0 +1,38 @@
+From 056b1d368b14e9664b69499cbcba49bc04be7e52 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Thu, 21 Apr 2022 11:11:22 +0200
+Subject: [PATCH] hwdb: Add Greaseweazle "drives" to the list of analyzers
+
+They're floppy disk flux readers and writers used in digital
+preservation and can be broadly considered to be "analyzers" of magnetic
+fluxes.
+
+This will have the intended side-effect of giving access to the device
+to users at the console, obsoleting:
+https://github.com/keirf/greaseweazle/blob/master/scripts/49-greaseweazle.rules
+
+(cherry picked from commit 9ab755dce50bfb6f1f614f57fe3a8b65b570b5b9)
+
+Related: #2087778
+---
+ hwdb.d/70-analyzers.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb
+index 7f31ca3ea3..821ebcb1ca 100644
+--- a/hwdb.d/70-analyzers.hwdb
++++ b/hwdb.d/70-analyzers.hwdb
+@@ -9,6 +9,13 @@
+ #   Specify if a device is a signal analyzer
+ #   ID_SIGNAL_ANALYZER=1|0
+ 
++###########################################################
++# Greaseweazle
++###########################################################
++# Greaseweazle
++usb:v1209p4D69*
++ ID_SIGNAL_ANALYZER=1
++
+ ###########################################################
+ # Total Phase
+ ###########################################################
diff --git a/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch b/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch
new file mode 100644
index 0000000..d5073b0
--- /dev/null
+++ b/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch
@@ -0,0 +1,59 @@
+From f06a6ff8b3dba8ba48ca5bb6ebaa04a86b4c06d6 Mon Sep 17 00:00:00 2001
+From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
+Date: Wed, 10 Aug 2022 22:09:32 +0300
+Subject: [PATCH] hwdb: Apply existing accel orientation quirk to all
+ Chromebooks
+
+The cros-ec-accel and cros-ec-accel-legacy kernel modules internally
+correct for the board-specific accelerometer mounting orientations.
+Their sensor outputs are in a standard reference frame consistent across
+different boards, so the orientation matrix already added for a number
+of devices should apply to every device using cros-ec accelerometers.
+The different matrix for the 'Nocturne' board seems to be an error.
+
+Replace the existing hwdb rules for select Chromebooks with generic
+rules that apply to all Chromebooks.
+
+(cherry picked from commit 1800f7098a3e91a1d28697ef11a15e4b4193d21f)
+
+Related: #2087778
+---
+ hwdb.d/60-sensor.hwdb | 22 ++++------------------
+ 1 file changed, 4 insertions(+), 18 deletions(-)
+
+diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
+index 1c3f6b62bb..7978675943 100644
+--- a/hwdb.d/60-sensor.hwdb
++++ b/hwdb.d/60-sensor.hwdb
+@@ -406,27 +406,13 @@ sensor:modalias:acpi:KXCJ9000*:dmi:*:bvrZY-8-BI-PX4S70VTR400-X423B-005-D:*:rvnAM
+ #########################################
+ # Google Chromebooks
+ #########################################
+-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGOOGLE:*
+- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+-
+-# caroline board (Samsung Chromebook Pro) reports itself as svnGoogle
+-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGoogle:pnCaroline*:*
+- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+-
+-# Dell Inspiron Chromebook 14 2-in-1
+-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*:*
+- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+-
+-# nocturne board (Google Pixel Slate)
+-sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:*
+- ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+ 
+-# rammus board (Asus Chromebook Flip C433)
+-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:*
++# CrOS EC & kernel drivers internally correct for per-board sensor orientations,
++# but they return values in the inverse direction (Android & W3C specs vs HID).
++sensor:modalias:platform:cros-ec-accel:*
+  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+ 
+-# Lenovo ThinkPad C13 Yoga
+-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnMorphius*:*
++sensor:modalias:platform:cros-ec-accel-legacy:*
+  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+ 
+ #########################################
diff --git a/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch b/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch
new file mode 100644
index 0000000..de44419
--- /dev/null
+++ b/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch
@@ -0,0 +1,26 @@
+From b419d118455739757b1b426989964123d2e94869 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 12 Apr 2022 20:42:32 +0200
+Subject: [PATCH] shared/install: fix crash when reenable is called without
+ --root
+
+(cherry picked from commit 6e961aeb262521742a4cd92e4620de193f159f7c)
+
+Resolves: #2120222
+---
+ src/shared/install.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/install.c b/src/shared/install.c
+index d3661521a9..b8d18d1484 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -2827,7 +2827,7 @@ static int normalize_linked_files(
+                         return r;
+ 
+                 const char *p = NULL;
+-                if (i && i->path)
++                if (i && i->path && i->root)
+                         /* Use startswith here, because we know that paths are normalized, and
+                          * path_startswith() would give us a relative path, but we need an absolute path
+                          * relative to i->root.
diff --git a/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch b/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch
new file mode 100644
index 0000000..d11b642
--- /dev/null
+++ b/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch
@@ -0,0 +1,343 @@
+From f23d0328e563fa5534377297153daa098664147f Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 1 Jun 2022 10:15:06 +0200
+Subject: [PATCH] scope: allow unprivileged delegation on scopes
+
+Previously it was possible to set delegate property for scope, but you
+were not able to allow unprivileged process to manage the scope's cgroup
+hierarchy. This is useful when launching manager process that  will run
+unprivileged but is supposed to manage its own (scope) sub-hierarchy.
+
+Fixes #21683
+
+(cherry picked from commit 03860190fefce8bbea3a6f0e77919b882ade517c)
+
+Resolves: #2120604
+---
+ src/basic/unit-def.c       |   1 +
+ src/basic/unit-def.h       |   1 +
+ src/core/dbus-scope.c      |   6 ++
+ src/core/scope.c           | 130 ++++++++++++++++++++++++++++++++-----
+ src/core/scope.h           |   3 +
+ src/shared/bus-unit-util.c |   5 ++
+ test/units/testsuite-19.sh |  14 ++++
+ 7 files changed, 143 insertions(+), 17 deletions(-)
+
+diff --git a/src/basic/unit-def.c b/src/basic/unit-def.c
+index 2667e61dc4..9408141842 100644
+--- a/src/basic/unit-def.c
++++ b/src/basic/unit-def.c
+@@ -170,6 +170,7 @@ DEFINE_STRING_TABLE_LOOKUP(path_state, PathState);
+ static const char* const scope_state_table[_SCOPE_STATE_MAX] = {
+         [SCOPE_DEAD] = "dead",
+         [SCOPE_RUNNING] = "running",
++        [SCOPE_START_CHOWN] = "start-chown",
+         [SCOPE_ABANDONED] = "abandoned",
+         [SCOPE_STOP_SIGTERM] = "stop-sigterm",
+         [SCOPE_STOP_SIGKILL] = "stop-sigkill",
+diff --git a/src/basic/unit-def.h b/src/basic/unit-def.h
+index f80e554d2b..5fcd51c095 100644
+--- a/src/basic/unit-def.h
++++ b/src/basic/unit-def.h
+@@ -114,6 +114,7 @@ typedef enum PathState {
+ 
+ typedef enum ScopeState {
+         SCOPE_DEAD,
++        SCOPE_START_CHOWN,
+         SCOPE_RUNNING,
+         SCOPE_ABANDONED,
+         SCOPE_STOP_SIGTERM,
+diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
+index 109ad6f2ef..0f59622166 100644
+--- a/src/core/dbus-scope.c
++++ b/src/core/dbus-scope.c
+@@ -186,6 +186,12 @@ int bus_scope_set_property(
+                 r = bus_kill_context_set_transient_property(u, &s->kill_context, name, message, flags, error);
+                 if (r != 0)
+                         return r;
++
++                if (streq(name, "User"))
++                        return bus_set_transient_user_relaxed(u, name, &s->user, message, flags, error);
++
++                if (streq(name, "Group"))
++                        return bus_set_transient_user_relaxed(u, name, &s->group, message, flags, error);
+         }
+ 
+         return 0;
+diff --git a/src/core/scope.c b/src/core/scope.c
+index 63d3288caf..a4da45ac43 100644
+--- a/src/core/scope.c
++++ b/src/core/scope.c
+@@ -6,6 +6,7 @@
+ #include "alloc-util.h"
+ #include "dbus-scope.h"
+ #include "dbus-unit.h"
++#include "exit-status.h"
+ #include "load-dropin.h"
+ #include "log.h"
+ #include "process-util.h"
+@@ -18,9 +19,11 @@
+ #include "strv.h"
+ #include "unit-name.h"
+ #include "unit.h"
++#include "user-util.h"
+ 
+ static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = {
+         [SCOPE_DEAD] = UNIT_INACTIVE,
++        [SCOPE_START_CHOWN] = UNIT_ACTIVATING,
+         [SCOPE_RUNNING] = UNIT_ACTIVE,
+         [SCOPE_ABANDONED] = UNIT_ACTIVE,
+         [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING,
+@@ -39,6 +42,7 @@ static void scope_init(Unit *u) {
+         s->runtime_max_usec = USEC_INFINITY;
+         s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
+         u->ignore_on_isolate = true;
++        s->user = s->group = NULL;
+ }
+ 
+ static void scope_done(Unit *u) {
+@@ -50,6 +54,9 @@ static void scope_done(Unit *u) {
+         s->controller_track = sd_bus_track_unref(s->controller_track);
+ 
+         s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
++
++        s->user = mfree(s->user);
++        s->group = mfree(s->group);
+ }
+ 
+ static usec_t scope_running_timeout(Scope *s) {
+@@ -107,7 +114,7 @@ static void scope_set_state(Scope *s, ScopeState state) {
+         old_state = s->state;
+         s->state = state;
+ 
+-        if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
++        if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL, SCOPE_START_CHOWN))
+                 s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
+ 
+         if (IN_SET(state, SCOPE_DEAD, SCOPE_FAILED)) {
+@@ -353,26 +360,72 @@ fail:
+         scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
+ }
+ 
+-static int scope_start(Unit *u) {
+-        Scope *s = SCOPE(u);
++static int scope_enter_start_chown(Scope *s) {
++        Unit *u = UNIT(s);
++        pid_t pid;
+         int r;
+ 
+         assert(s);
++        assert(s->user);
+ 
+-        if (unit_has_name(u, SPECIAL_INIT_SCOPE))
+-                return -EPERM;
++        r = scope_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), u->manager->default_timeout_start_usec));
++        if (r < 0)
++                return r;
+ 
+-        if (s->state == SCOPE_FAILED)
+-                return -EPERM;
++        r = unit_fork_helper_process(u, "(sd-chown-cgroup)", &pid);
++        if (r < 0)
++                goto fail;
+ 
+-        /* We can't fulfill this right now, please try again later */
+-        if (IN_SET(s->state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
+-                return -EAGAIN;
++        if (r == 0) {
++                uid_t uid = UID_INVALID;
++                gid_t gid = GID_INVALID;
+ 
+-        assert(s->state == SCOPE_DEAD);
++                if (!isempty(s->user)) {
++                        const char *user = s->user;
+ 
+-        if (!u->transient && !MANAGER_IS_RELOADING(u->manager))
+-                return -ENOENT;
++                        r = get_user_creds(&user, &uid, &gid, NULL, NULL, 0);
++                        if (r < 0) {
++                                log_unit_error_errno(UNIT(s), r, "Failed to resolve user \"%s\": %m", user);
++                                _exit(EXIT_USER);
++                        }
++                }
++
++                if (!isempty(s->group)) {
++                        const char *group = s->group;
++
++                        r = get_group_creds(&group, &gid, 0);
++                        if (r < 0) {
++                                log_unit_error_errno(UNIT(s), r, "Failed to resolve group \"%s\": %m", group);
++                                _exit(EXIT_GROUP);
++                        }
++                }
++
++                r = cg_set_access(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, uid, gid);
++                if (r < 0) {
++                        log_unit_error_errno(UNIT(s), r, "Failed to adjust control group access: %m");
++                        _exit(EXIT_CGROUP);
++                }
++
++                _exit(EXIT_SUCCESS);
++        }
++
++        r = unit_watch_pid(UNIT(s), pid, true);
++        if (r < 0)
++                goto fail;
++
++        scope_set_state(s, SCOPE_START_CHOWN);
++
++        return 1;
++fail:
++        s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source);
++        return r;
++}
++
++static int scope_enter_running(Scope *s) {
++        Unit *u = UNIT(s);
++        int r;
++
++        assert(s);
+ 
+         (void) bus_scope_track_controller(s);
+ 
+@@ -380,9 +433,6 @@ static int scope_start(Unit *u) {
+         if (r < 0)
+                 return r;
+ 
+-        (void) unit_realize_cgroup(u);
+-        (void) unit_reset_accounting(u);
+-
+         unit_export_state_files(u);
+ 
+         r = unit_attach_pids_to_cgroup(u, u->pids, NULL);
+@@ -416,6 +466,37 @@ static int scope_start(Unit *u) {
+         return 1;
+ }
+ 
++static int scope_start(Unit *u) {
++        Scope *s = SCOPE(u);
++
++        assert(s);
++
++        if (unit_has_name(u, SPECIAL_INIT_SCOPE))
++                return -EPERM;
++
++        if (s->state == SCOPE_FAILED)
++                return -EPERM;
++
++        /* We can't fulfill this right now, please try again later */
++        if (IN_SET(s->state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
++                return -EAGAIN;
++
++        assert(s->state == SCOPE_DEAD);
++
++        if (!u->transient && !MANAGER_IS_RELOADING(u->manager))
++                return -ENOENT;
++
++        (void) unit_realize_cgroup(u);
++        (void) unit_reset_accounting(u);
++
++        /* We check only for User= option to keep behavior consistent with logic for service units,
++         * i.e. having 'Delegate=true Group=foo' w/o specifing User= has no effect. */
++        if (s->user && unit_cgroup_delegate(u))
++                return scope_enter_start_chown(s);
++
++        return scope_enter_running(s);
++}
++
+ static int scope_stop(Unit *u) {
+         Scope *s = SCOPE(u);
+ 
+@@ -547,7 +628,17 @@ static void scope_notify_cgroup_empty_event(Unit *u) {
+ }
+ 
+ static void scope_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+-        assert(u);
++        Scope *s = SCOPE(u);
++
++        assert(s);
++
++        if (s->state == SCOPE_START_CHOWN) {
++                if (!is_clean_exit(code, status, EXIT_CLEAN_COMMAND, NULL))
++                        scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
++                else
++                        scope_enter_running(s);
++                return;
++        }
+ 
+         /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to
+          * watch, under the assumption that we'll sooner or later get a SIGCHLD for them, as the original
+@@ -585,6 +676,11 @@ static int scope_dispatch_timer(sd_event_source *source, usec_t usec, void *user
+                 scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
+                 break;
+ 
++        case SCOPE_START_CHOWN:
++                log_unit_warning(UNIT(s), "User lookup timed out. Entering failed state.");
++                scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
++                break;
++
+         default:
+                 assert_not_reached();
+         }
+diff --git a/src/core/scope.h b/src/core/scope.h
+index 03a9ba4324..def1541652 100644
+--- a/src/core/scope.h
++++ b/src/core/scope.h
+@@ -34,6 +34,9 @@ struct Scope {
+         bool was_abandoned;
+ 
+         sd_event_source *timer_event_source;
++
++        char *user;
++        char *group;
+ };
+ 
+ extern const UnitVTable scope_vtable;
+diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
+index c211fe34d5..33b0b947b7 100644
+--- a/src/shared/bus-unit-util.c
++++ b/src/shared/bus-unit-util.c
+@@ -2130,6 +2130,11 @@ static int bus_append_scope_property(sd_bus_message *m, const char *field, const
+         if (streq(field, "TimeoutStopSec"))
+                 return bus_append_parse_sec_rename(m, field, eq);
+ 
++        /* Scope units don't have execution context but we still want to allow setting these two,
++         * so let's handle them separately. */
++        if (STR_IN_SET(field, "User", "Group"))
++                return bus_append_string(m, field, eq);
++
+         return 0;
+ }
+ 
+diff --git a/test/units/testsuite-19.sh b/test/units/testsuite-19.sh
+index ee4eb8431e..6ce6d3d429 100755
+--- a/test/units/testsuite-19.sh
++++ b/test/units/testsuite-19.sh
+@@ -3,6 +3,16 @@
+ set -eux
+ set -o pipefail
+ 
++test_scope_unpriv_delegation() {
++    useradd test ||:
++    trap "userdel -r test" RETURN
++
++    systemd-run --uid=test -p User=test -p Delegate=yes --slice workload.slice --unit workload0.scope --scope \
++            test -w /sys/fs/cgroup/workload.slice/workload0.scope -a \
++            -w /sys/fs/cgroup/workload.slice/workload0.scope/cgroup.procs -a \
++            -w /sys/fs/cgroup/workload.slice/workload0.scope/cgroup.subtree_control
++}
++
+ if grep -q cgroup2 /proc/filesystems ; then
+     systemd-run --wait --unit=test0.service -p "DynamicUser=1" -p "Delegate=" \
+                 test -w /sys/fs/cgroup/system.slice/test0.service/ -a \
+@@ -31,6 +41,10 @@ if grep -q cgroup2 /proc/filesystems ; then
+ 
+     # And now check again, "io" should have vanished
+     grep -qv io /sys/fs/cgroup/system.slice/cgroup.controllers
++
++    # Check that unprivileged delegation works for scopes
++    test_scope_unpriv_delegation
++
+ else
+     echo "Skipping TEST-19-DELEGATE, as the kernel doesn't actually support cgroup v2" >&2
+ fi
diff --git a/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch b/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch
new file mode 100644
index 0000000..65725c9
--- /dev/null
+++ b/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch
@@ -0,0 +1,55 @@
+From ef6d76202a28d374a96c4dff1e40c7bd4551de0c Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 24 Aug 2022 17:18:47 +0200
+Subject: [PATCH] udev/net_id: add "rhel-9.1" naming scheme
+
+RHEL-only
+
+Resolves: #2121144
+---
+ man/systemd.net-naming-scheme.xml | 6 ++++++
+ src/shared/netif-naming-scheme.c  | 1 +
+ src/shared/netif-naming-scheme.h  | 1 +
+ 3 files changed, 8 insertions(+)
+
+diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
+index 73d08b681d..23bfcead1f 100644
+--- a/man/systemd.net-naming-scheme.xml
++++ b/man/systemd.net-naming-scheme.xml
+@@ -415,6 +415,12 @@
+           </listitem>
+         </varlistentry>
+ 
++        <varlistentry>
++           <term><constant>rhel-9.1</constant></term>
++
++           <listitem><para>Same as naming scheme <constant>rhel-9.0</constant>.</para></listitem>
++        </varlistentry>
++
+       </variablelist>
+ 
+     <para>Note that <constant>latest</constant> may be used to denote the latest scheme known (to this
+diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
+index 44d011a9b7..adda731f63 100644
+--- a/src/shared/netif-naming-scheme.c
++++ b/src/shared/netif-naming-scheme.c
+@@ -24,6 +24,7 @@ static const NamingScheme naming_schemes[] = {
+         { "v249", NAMING_V249 },
+         { "v250", NAMING_V250 },
+         { "rhel-9.0", NAMING_RHEL_9_0 },
++        { "rhel-9.1", NAMING_RHEL_9_1 },
+         /* … add more schemes here, as the logic to name devices is updated … */
+ 
+         EXTRA_NET_NAMING_MAP
+diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
+index 5c86cb4545..f27c0593c3 100644
+--- a/src/shared/netif-naming-scheme.h
++++ b/src/shared/netif-naming-scheme.h
+@@ -49,6 +49,7 @@ typedef enum NamingSchemeFlags {
+         NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
+         NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF,
+         NAMING_RHEL_9_0 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT,
++        NAMING_RHEL_9_1 = NAMING_RHEL_9_0,
+ 
+         EXTRA_NET_NAMING_SCHEMES
+ 
diff --git a/SOURCES/0338-core-load-fragment-move-config_parse_sec_fix_0-to-sr.patch b/SOURCES/0338-core-load-fragment-move-config_parse_sec_fix_0-to-sr.patch
new file mode 100644
index 0000000..2ffff43
--- /dev/null
+++ b/SOURCES/0338-core-load-fragment-move-config_parse_sec_fix_0-to-sr.patch
@@ -0,0 +1,90 @@
+From 009b55d532a66704072ca0c01e8dc218d318b520 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Tue, 9 Aug 2022 11:41:04 +0200
+Subject: [PATCH] core/load-fragment: move config_parse_sec_fix_0 to src/shared
+
+(cherry picked from commit 4ee8176fe33bbcd0971c4583a0e7d1cc2a64ac06)
+
+Related: #2100464
+---
+ src/core/load-fragment.c | 31 -------------------------------
+ src/core/load-fragment.h |  1 -
+ src/shared/conf-parser.c |  1 +
+ src/shared/conf-parser.h |  1 +
+ 4 files changed, 2 insertions(+), 32 deletions(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index 0acc350389..e26581c1d5 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -2518,37 +2518,6 @@ int config_parse_service_timeout_abort(
+         return 0;
+ }
+ 
+-int config_parse_sec_fix_0(
+-                const char *unit,
+-                const char *filename,
+-                unsigned line,
+-                const char *section,
+-                unsigned section_line,
+-                const char *lvalue,
+-                int ltype,
+-                const char *rvalue,
+-                void *data,
+-                void *userdata) {
+-
+-        usec_t *usec = data;
+-        int r;
+-
+-        assert(filename);
+-        assert(lvalue);
+-        assert(rvalue);
+-        assert(usec);
+-
+-        /* This is pretty much like config_parse_sec(), except that this treats a time of 0 as infinity, for
+-         * compatibility with older versions of systemd where 0 instead of infinity was used as indicator to turn off a
+-         * timeout. */
+-
+-        r = parse_sec_fix_0(rvalue, usec);
+-        if (r < 0)
+-                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s= parameter, ignoring: %s", lvalue, rvalue);
+-
+-        return 0;
+-}
+-
+ int config_parse_user_group_compat(
+                 const char *unit,
+                 const char *filename,
+diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
+index 26b8de28f7..4c302c43ec 100644
+--- a/src/core/load-fragment.h
++++ b/src/core/load-fragment.h
+@@ -114,7 +114,6 @@ CONFIG_PARSER_PROTOTYPE(config_parse_bus_name);
+ CONFIG_PARSER_PROTOTYPE(config_parse_exec_utmp_mode);
+ CONFIG_PARSER_PROTOTYPE(config_parse_working_directory);
+ CONFIG_PARSER_PROTOTYPE(config_parse_fdname);
+-CONFIG_PARSER_PROTOTYPE(config_parse_sec_fix_0);
+ CONFIG_PARSER_PROTOTYPE(config_parse_user_group_compat);
+ CONFIG_PARSER_PROTOTYPE(config_parse_user_group_strv_compat);
+ CONFIG_PARSER_PROTOTYPE(config_parse_restrict_namespaces);
+diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
+index d19041207c..7bfed38834 100644
+--- a/src/shared/conf-parser.c
++++ b/src/shared/conf-parser.c
+@@ -1592,3 +1592,4 @@ int config_parse_in_addr_non_null(
+ 
+ DEFINE_CONFIG_PARSE(config_parse_percent, parse_percent, "Failed to parse percent value");
+ DEFINE_CONFIG_PARSE(config_parse_permyriad, parse_permyriad, "Failed to parse permyriad value");
++DEFINE_CONFIG_PARSE_PTR(config_parse_sec_fix_0, parse_sec_fix_0, usec_t, "Failed to parse time value");
+diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
+index d686665532..fbfdbdb333 100644
+--- a/src/shared/conf-parser.h
++++ b/src/shared/conf-parser.h
+@@ -157,6 +157,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_ether_addrs);
+ CONFIG_PARSER_PROTOTYPE(config_parse_in_addr_non_null);
+ CONFIG_PARSER_PROTOTYPE(config_parse_percent);
+ CONFIG_PARSER_PROTOTYPE(config_parse_permyriad);
++CONFIG_PARSER_PROTOTYPE(config_parse_sec_fix_0);
+ 
+ typedef enum Disabled {
+         DISABLED_CONFIGURATION,
diff --git a/SOURCES/0339-logind-add-option-to-stop-idle-sessions-after-specif.patch b/SOURCES/0339-logind-add-option-to-stop-idle-sessions-after-specif.patch
new file mode 100644
index 0000000..4cd8562
--- /dev/null
+++ b/SOURCES/0339-logind-add-option-to-stop-idle-sessions-after-specif.patch
@@ -0,0 +1,254 @@
+From a8980738c4ef8fba4fd8995ab69669d438ad7a9f Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 8 Aug 2022 09:13:50 +0200
+Subject: [PATCH] logind: add option to stop idle sessions after specified
+ timeout
+
+Thanks to Jan Pazdziora <jpazdziora@redhat.com> for providing a patch
+which implemeted a PoC of this feature.
+
+(cherry picked from commit 82325af3ae41bc7efb3d5cd8f56a4652fef498c2)
+
+Resolves: #2100464
+---
+ man/logind.conf.xml            | 11 ++++++
+ man/org.freedesktop.login1.xml |  6 +++
+ src/login/logind-core.c        |  2 +
+ src/login/logind-dbus.c        |  1 +
+ src/login/logind-gperf.gperf   |  1 +
+ src/login/logind-session.c     | 67 ++++++++++++++++++++++++++++++++--
+ src/login/logind-session.h     |  2 +
+ src/login/logind.conf.in       |  1 +
+ src/login/logind.h             |  2 +
+ 9 files changed, 90 insertions(+), 3 deletions(-)
+
+diff --git a/man/logind.conf.xml b/man/logind.conf.xml
+index 96fa076239..c37fd97be1 100644
+--- a/man/logind.conf.xml
++++ b/man/logind.conf.xml
+@@ -357,6 +357,17 @@
+         are excluded from the effect of this setting. Defaults to <literal>no</literal>.</para></listitem>
+       </varlistentry>
+ 
++      <varlistentry>
++        <term><varname>StopIdleSessionSec=</varname></term>
++
++        <listitem><para>Specifies a timeout in seconds, or a time span value after which
++        <filename>systemd-logind</filename> checks the idle state of all sessions. Every session that is idle for
++        longer then the timeout will be stopped. Defaults to <literal>infinity</literal>
++        (<filename>systemd-logind</filename> is not checking the idle state of sessions). For details about the syntax
++        of time spans, see
++        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
++        </para></listitem>
++      </varlistentry>
+     </variablelist>
+   </refsect1>
+ 
+diff --git a/man/org.freedesktop.login1.xml b/man/org.freedesktop.login1.xml
+index c11324ee3b..0ebcfb84ab 100644
+--- a/man/org.freedesktop.login1.xml
++++ b/man/org.freedesktop.login1.xml
+@@ -235,6 +235,8 @@ node /org/freedesktop/login1 {
+       readonly t SessionsMax = ...;
+       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+       readonly t NCurrentSessions = ...;
++      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
++      readonly t StopIdleSessionUSec = ...;
+   };
+   interface org.freedesktop.DBus.Peer { ... };
+   interface org.freedesktop.DBus.Introspectable { ... };
+@@ -242,6 +244,8 @@ node /org/freedesktop/login1 {
+ };
+     </programlisting>
+ 
++    <!--property StopIdleSessionUSec is not documented!-->
++
+     <!--Autogenerated cross-references for systemd.directives, do not edit-->
+ 
+     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.login1.Manager"/>
+@@ -460,6 +464,8 @@ node /org/freedesktop/login1 {
+ 
+     <variablelist class="dbus-property" generated="True" extra-ref="NCurrentSessions"/>
+ 
++    <variablelist class="dbus-property" generated="True" extra-ref="StopIdleSessionUSec"/>
++
+     <!--End of Autogenerated section-->
+ 
+     <refsect2>
+diff --git a/src/login/logind-core.c b/src/login/logind-core.c
+index 616c08132a..9807c85b8c 100644
+--- a/src/login/logind-core.c
++++ b/src/login/logind-core.c
+@@ -71,6 +71,8 @@ void manager_reset_config(Manager *m) {
+ 
+         m->kill_only_users = strv_free(m->kill_only_users);
+         m->kill_exclude_users = strv_free(m->kill_exclude_users);
++
++        m->stop_idle_session_usec = USEC_INFINITY;
+ }
+ 
+ int manager_parse_config_file(Manager *m) {
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 31a41bd271..c97a89c37d 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -3389,6 +3389,7 @@ static const sd_bus_vtable manager_vtable[] = {
+         SD_BUS_PROPERTY("SessionsMax", "t", NULL, offsetof(Manager, sessions_max), SD_BUS_VTABLE_PROPERTY_CONST),
+         SD_BUS_PROPERTY("NCurrentSessions", "t", property_get_hashmap_size, offsetof(Manager, sessions), 0),
+         SD_BUS_PROPERTY("UserTasksMax", "t", property_get_compat_user_tasks_max, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
++        SD_BUS_PROPERTY("StopIdleSessionUSec", "t", NULL, offsetof(Manager, stop_idle_session_usec), SD_BUS_VTABLE_PROPERTY_CONST),
+ 
+         SD_BUS_METHOD_WITH_ARGS("GetSession",
+                                 SD_BUS_ARGS("s", session_id),
+diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf
+index 867db36533..300d56542d 100644
+--- a/src/login/logind-gperf.gperf
++++ b/src/login/logind-gperf.gperf
+@@ -50,3 +50,4 @@ Login.RemoveIPC,                    config_parse_bool,                  0, offse
+ Login.InhibitorsMax,                config_parse_uint64,                0, offsetof(Manager, inhibitors_max)
+ Login.SessionsMax,                  config_parse_uint64,                0, offsetof(Manager, sessions_max)
+ Login.UserTasksMax,                 config_parse_compat_user_tasks_max, 0, 0
++Login.StopIdleSessionSec,           config_parse_sec_fix_0,             0, offsetof(Manager, stop_idle_session_usec)
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index a052596e57..a110b6f1c1 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -150,6 +150,8 @@ Session* session_free(Session *s) {
+         free(s->state_file);
+         free(s->fifo_path);
+ 
++        sd_event_source_unref(s->stop_on_idle_event_source);
++
+         return mfree(s);
+ }
+ 
+@@ -687,6 +689,55 @@ static int session_start_scope(Session *s, sd_bus_message *properties, sd_bus_er
+         return 0;
+ }
+ 
++static int session_dispatch_stop_on_idle(sd_event_source *source, uint64_t t, void *userdata) {
++        Session *s = userdata;
++        dual_timestamp ts;
++        int r, idle;
++
++        assert(s);
++
++        if (s->stopping)
++                return 0;
++
++        idle = session_get_idle_hint(s, &ts);
++        if (idle) {
++                log_debug("Session \"%s\" of user \"%s\" is idle, stopping.", s->id, s->user->user_record->user_name);
++
++                return session_stop(s, /* force */ true);
++        }
++
++        r = sd_event_source_set_time(source, usec_add(ts.monotonic, s->manager->stop_idle_session_usec));
++        if (r < 0)
++                return log_error_errno(r, "Failed to configure stop on idle session event source: %m");
++
++        r = sd_event_source_set_enabled(source, SD_EVENT_ONESHOT);
++        if (r < 0)
++                return log_error_errno(r, "Failed to enable stop on idle session event source: %m");
++
++        return 1;
++}
++
++static int session_setup_stop_on_idle_timer(Session *s) {
++        int r;
++
++        assert(s);
++
++        if (s->manager->stop_idle_session_usec == USEC_INFINITY)
++                return 0;
++
++        r = sd_event_add_time_relative(
++                        s->manager->event,
++                        &s->stop_on_idle_event_source,
++                        CLOCK_MONOTONIC,
++                        s->manager->stop_idle_session_usec,
++                        0,
++                        session_dispatch_stop_on_idle, s);
++        if (r < 0)
++                return log_error_errno(r, "Failed to add stop on idle session event source: %m");
++
++        return 0;
++}
++
+ int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error) {
+         int r;
+ 
+@@ -709,6 +760,10 @@ int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error) {
+         if (r < 0)
+                 return r;
+ 
++        r = session_setup_stop_on_idle_timer(s);
++        if (r < 0)
++                return r;
++
+         log_struct(s->class == SESSION_BACKGROUND ? LOG_DEBUG : LOG_INFO,
+                    "MESSAGE_ID=" SD_MESSAGE_SESSION_START_STR,
+                    "SESSION_ID=%s", s->id,
+@@ -949,7 +1004,7 @@ static int get_process_ctty_atime(pid_t pid, usec_t *atime) {
+ }
+ 
+ int session_get_idle_hint(Session *s, dual_timestamp *t) {
+-        usec_t atime = 0;
++        usec_t atime = 0, dtime = 0;
+         int r;
+ 
+         assert(s);
+@@ -986,10 +1041,16 @@ found_atime:
+         if (t)
+                 dual_timestamp_from_realtime(t, atime);
+ 
+-        if (s->manager->idle_action_usec <= 0)
++        if (s->manager->idle_action_usec > 0 && s->manager->stop_idle_session_usec != USEC_INFINITY)
++                dtime = MIN(s->manager->idle_action_usec, s->manager->stop_idle_session_usec);
++        else if (s->manager->idle_action_usec > 0)
++                dtime = s->manager->idle_action_usec;
++        else if (s->manager->stop_idle_session_usec != USEC_INFINITY)
++                dtime = s->manager->stop_idle_session_usec;
++        else
+                 return false;
+ 
+-        return usec_add(atime, s->manager->idle_action_usec) <= now(CLOCK_REALTIME);
++        return usec_add(atime, dtime) <= now(CLOCK_REALTIME);
+ }
+ 
+ int session_set_idle_hint(Session *s, bool b) {
+diff --git a/src/login/logind-session.h b/src/login/logind-session.h
+index 6b6ac2d573..4c28607986 100644
+--- a/src/login/logind-session.h
++++ b/src/login/logind-session.h
+@@ -115,6 +115,8 @@ struct Session {
+         Hashmap *devices;
+         sd_bus_track *track;
+ 
++        sd_event_source *stop_on_idle_event_source;
++
+         LIST_FIELDS(Session, sessions_by_user);
+         LIST_FIELDS(Session, sessions_by_seat);
+ 
+diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in
+index 79d685b3de..fcdbad58c7 100644
+--- a/src/login/logind.conf.in
++++ b/src/login/logind.conf.in
+@@ -43,3 +43,4 @@
+ #RemoveIPC=no
+ #InhibitorsMax=8192
+ #SessionsMax=8192
++#StopIdleSessionSec=infinity
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 730c14a46a..e5c68a74cb 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -101,6 +101,8 @@ struct Manager {
+         usec_t idle_action_not_before_usec;
+         HandleAction idle_action;
+ 
++        usec_t stop_idle_session_usec;
++
+         HandleAction handle_power_key;
+         HandleAction handle_power_key_long_press;
+         HandleAction handle_reboot_key;
diff --git a/SOURCES/0340-tree-wide-fix-typo.patch b/SOURCES/0340-tree-wide-fix-typo.patch
new file mode 100644
index 0000000..dc3e862
--- /dev/null
+++ b/SOURCES/0340-tree-wide-fix-typo.patch
@@ -0,0 +1,25 @@
+From 6ce73e569dc989cc09ea2dda73fc74a29d8f568f Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Wed, 15 Jun 2022 14:50:34 +0900
+Subject: [PATCH] tree-wide: fix typo
+
+(cherry picked from commit 172cbcdc8b61feffa07b332a871ec33b3215ad59)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 05d2a6c4c3..21cb01c16f 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -228,7 +228,7 @@ test_session_tear_down() {
+ check_session() {
+     loginctl
+     if [[ $(loginctl --no-legend | grep -c "logind-test-user") != 1 ]]; then
+-        echo "no session or multile sessions for logind-test-user." >&2
++        echo "no session or multiple sessions for logind-test-user." >&2
+         return 1
+     fi
+ 
diff --git a/SOURCES/0341-test-several-cleanups-for-TEST-35-LOGIN.patch b/SOURCES/0341-test-several-cleanups-for-TEST-35-LOGIN.patch
new file mode 100644
index 0000000..7e1b5fe
--- /dev/null
+++ b/SOURCES/0341-test-several-cleanups-for-TEST-35-LOGIN.patch
@@ -0,0 +1,456 @@
+From 8eda88f8c46d053137cf6cf52280b9988c3c996b Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Thu, 7 Jul 2022 10:10:05 +0900
+Subject: [PATCH] test: several cleanups for TEST-35-LOGIN
+
+- use test_append_files() to install additional commands
+- drop use of expect
+- include assert.sh and use assertions at several places
+- use timeout command at several places
+- always use logind-test-user
+- etc
+
+(cherry picked from commit 63663a0f0f0e1dcd6036cecf013de3f1de87cd99)
+
+Related: #2100464
+---
+ test/TEST-35-LOGIN/test.sh |   6 +-
+ test/test-functions        |   2 -
+ test/units/testsuite-35.sh | 228 ++++++++++++++++++-------------------
+ 3 files changed, 116 insertions(+), 120 deletions(-)
+
+diff --git a/test/TEST-35-LOGIN/test.sh b/test/TEST-35-LOGIN/test.sh
+index 9762410fa3..add862c962 100755
+--- a/test/TEST-35-LOGIN/test.sh
++++ b/test/TEST-35-LOGIN/test.sh
+@@ -2,9 +2,13 @@
+ # SPDX-License-Identifier: LGPL-2.1-or-later
+ set -e
+ 
+-TEST_DESCRIPTION="LOGIN"
++TEST_DESCRIPTION="Tests for systemd-logind"
+ 
+ # shellcheck source=test/test-functions
+ . "${TEST_BASE_DIR:?}/test-functions"
+ 
++test_append_files() {
++    image_install -o evemu-device evemu-event crond crontab
++}
++
+ do_test "$@"
+diff --git a/test/test-functions b/test/test-functions
+index b0f3b28def..8ea2f97b71 100644
+--- a/test/test-functions
++++ b/test/test-functions
+@@ -1670,8 +1670,6 @@ install_basic_tools() {
+     image_install -o sushell
+     # in Debian ldconfig is just a shell script wrapper around ldconfig.real
+     image_install -o ldconfig.real
+-    # for TEST-35-LOGIN
+-    image_install -o evemu-device evemu-event
+ }
+ 
+ install_debug_tools() {
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 21cb01c16f..86787e7a02 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -3,6 +3,24 @@
+ set -eux
+ set -o pipefail
+ 
++# shellcheck source=test/units/assert.sh
++. "$(dirname "$0")"/assert.sh
++
++cleanup_test_user() (
++    set +ex
++
++    pkill -u "$(id -u logind-test-user)"
++    sleep 1
++    pkill -KILL -u "$(id -u logind-test-user)"
++    userdel -r logind-test-user
++)
++
++setup_test_user() {
++    mkdir -p /var/spool/cron /var/spool/mail
++    useradd -m -s /bin/bash logind-test-user
++    trap cleanup_test_user EXIT
++}
++
+ test_enable_debug() {
+     mkdir -p /run/systemd/system/systemd-logind.service.d
+     cat >/run/systemd/system/systemd-logind.service.d/debug.conf <<EOF
+@@ -10,6 +28,7 @@ test_enable_debug() {
+ Environment=SYSTEMD_LOG_LEVEL=debug
+ EOF
+     systemctl daemon-reload
++    systemctl stop systemd-logind.service
+ }
+ 
+ test_properties() {
+@@ -21,11 +40,7 @@ KillUserProcesses=no
+ EOF
+ 
+     systemctl restart systemd-logind.service
+-    r=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)
+-    if [[ "$r" != "b false" ]]; then
+-        echo "Unexpected KillUserProcesses property '$r', expected='b false'" >&2
+-        exit 1
+-    fi
++    assert_eq "$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)" "b false"
+ 
+     cat >/run/systemd/logind.conf.d/kill-user-processes.conf <<EOF
+ [Login]
+@@ -33,46 +48,46 @@ KillUserProcesses=yes
+ EOF
+ 
+     systemctl restart systemd-logind.service
+-    r=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)
+-    if [[ "$r" != "b true" ]]; then
+-        echo "Unexpected KillUserProcesses property '$r', expected='b true'" >&2
+-        exit 1
+-    fi
++    assert_eq "$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses)" "b true"
+ 
+     rm -rf /run/systemd/logind.conf.d
+ }
+ 
+ test_started() {
++    local pid
++
+     systemctl restart systemd-logind.service
+ 
+     # should start at boot, not with D-BUS activation
+-    LOGINDPID=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++    pid=$(systemctl show systemd-logind.service -p ExecMainPID --value)
+ 
+     # loginctl should succeed
+-    loginctl --no-pager
++    loginctl
++
++    # logind should still be running
++    assert_eq "$(systemctl show systemd-logind.service -p ExecMainPID --value)" "$pid"
+ }
+ 
+-# args: <timeout>
+ wait_suspend() {
+-    timeout="$1"
+-    while [[ $timeout -gt 0 && ! -e /run/suspend.flag ]]; do
+-        sleep 1
+-        timeout=$((timeout - 1))
+-    done
+-    if [[ ! -e /run/suspend.flag ]]; then
+-        echo "closing lid did not cause suspend" >&2
+-        exit 1
+-    fi
++    timeout "${1?}" bash -c "while [[ ! -e /run/suspend.flag ]]; do sleep 1; done"
+     rm /run/suspend.flag
+ }
+ 
+-test_suspend_tear_down() {
+-    set +e
++teardown_suspend() (
++    set +eux
+ 
+-    kill "$KILL_PID"
+-}
++    pkill evemu-device
++
++    rm -rf /run/systemd/system/systemd-suspend.service.d
++    systemctl daemon-reload
++
++    rm -f /run/udev/rules.d/70-logindtest-lid.rules
++    udevadm control --reload
++)
+ 
+ test_suspend_on_lid() {
++    local pid input_name lid_dev
++
+     if systemd-detect-virt --quiet --container; then
+         echo "Skipping suspend test in container"
+         return
+@@ -90,8 +105,10 @@ test_suspend_on_lid() {
+         return
+     fi
+ 
+-    KILL_PID=
+-    trap test_suspend_tear_down RETURN
++    trap teardown_suspend RETURN
++
++    # save pid
++    pid=$(systemctl show systemd-logind.service -p ExecMainPID --value)
+ 
+     # create fake suspend
+     mkdir -p /run/systemd/system/systemd-suspend.service.d
+@@ -147,129 +164,127 @@ B: 15 00 00 00 00 00 00 00 00
+ EOF
+ 
+     evemu-device /run/lidswitch.evemu &
+-    KILL_PID="$!"
+ 
+-    for ((i = 0; i < 20; i++)); do
+-        if (( i != 0 )); then sleep .5; fi
+-
+-        INPUT_NAME=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :)
+-        if [[ -n "$INPUT_NAME" ]]; then break; fi
+-    done
+-    if [[ -z "$INPUT_NAME" ]]; then
++    timeout 20 bash -c 'while ! grep "^Fake Lid Switch" /sys/class/input/*/device/name; do sleep .5; done'
++    input_name=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :)
++    if [[ -z "$input_name" ]]; then
+         echo "cannot find fake lid switch." >&2
+         exit 1
+     fi
+-    INPUT_NAME=${INPUT_NAME%/device/name}
+-    LID_DEV=/dev/${INPUT_NAME#/sys/class/}
+-    udevadm info --wait-for-initialization=10s "$LID_DEV"
++    input_name=${input_name%/device/name}
++    lid_dev=/dev/${input_name#/sys/class/}
++    udevadm info --wait-for-initialization=10s "$lid_dev"
+     udevadm settle
+ 
+     # close lid
+-    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1
++    evemu-event "$lid_dev" --sync --type 5 --code 0 --value 1
+     # need to wait for 30s suspend inhibition after boot
+     wait_suspend 31
+     # open lid again
+-    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0
++    evemu-event "$lid_dev" --sync --type 5 --code 0 --value 0
+ 
+     # waiting for 30s inhibition time between suspends
+     sleep 30
+ 
+     # now closing lid should cause instant suspend
+-    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1
++    evemu-event "$lid_dev" --sync --type 5 --code 0 --value 1
+     wait_suspend 2
+-    evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0
++    evemu-event "$lid_dev" --sync --type 5 --code 0 --value 0
+ 
+-    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
+-    if [[ "$P" != "$LOGINDPID" ]]; then
+-        echo "logind crashed" >&2
+-        exit 1
+-    fi
++    assert_eq "$(systemctl show systemd-logind.service -p ExecMainPID --value)" "$pid"
+ }
+ 
+ test_shutdown() {
++    local pid
++
++    # save pid
++    pid=$(systemctl show systemd-logind.service -p ExecMainPID --value)
++
+     # scheduled shutdown with wall message
+     shutdown 2>&1
+     sleep 5
+     shutdown -c || :
+     # logind should still be running
+-    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
+-    if [[ "$P" != "$LOGINDPID" ]]; then
+-        echo "logind crashed" >&2
+-        exit 1
+-    fi
++    assert_eq "$(systemctl show systemd-logind.service -p ExecMainPID --value)" "$pid"
+ 
+     # scheduled shutdown without wall message
+     shutdown --no-wall 2>&1
+     sleep 5
+     shutdown -c --no-wall || true
+-    P=$(systemctl show systemd-logind.service -p ExecMainPID --value)
+-    if [[ "$P" != "$LOGINDPID" ]]; then
+-        echo "logind crashed" >&2
+-        exit 1
+-    fi
++    assert_eq "$(systemctl show systemd-logind.service -p ExecMainPID --value)" "$pid"
+ }
+ 
+-test_session_tear_down() {
+-    set +e
+-
+-    rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
+-    udevadm control --reload
++teardown_session() (
++    set +ex
+ 
+     systemctl stop getty@tty2.service
+     rm -rf /run/systemd/system/getty@tty2.service.d
+     systemctl daemon-reload
+ 
+-    pkill -u logind-test-user
+-    userdel logind-test-user
++    pkill -u "$(id -u logind-test-user)"
++    sleep 1
++    pkill -KILL -u "$(id -u logind-test-user)"
+ 
++    rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
++    udevadm control --reload
+     rmmod scsi_debug
+-}
++)
++
++check_session() (
++    set +ex
++
++    local seat session leader_pid
+ 
+-check_session() {
+-    loginctl
+     if [[ $(loginctl --no-legend | grep -c "logind-test-user") != 1 ]]; then
+         echo "no session or multiple sessions for logind-test-user." >&2
+         return 1
+     fi
+ 
+-    SEAT=$(loginctl --no-legend | grep 'logind-test-user *seat' | awk '{ print $4 }')
+-    if [[ -z "$SEAT" ]]; then
++    seat=$(loginctl --no-legend | grep 'logind-test-user *seat' | awk '{ print $4 }')
++    if [[ -z "$seat" ]]; then
+         echo "no seat found for user logind-test-user" >&2
+         return 1
+     fi
+ 
+-    SESSION=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')
+-    if [[ -z "$SESSION" ]]; then
++    session=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')
++    if [[ -z "$session" ]]; then
+         echo "no session found for user logind-test-user" >&2
+         return 1
+     fi
+ 
+-    loginctl session-status "$SESSION"
+-    loginctl session-status "$SESSION" | grep -q "Unit: session-${SESSION}\.scope"
+-    LEADER_PID=$(loginctl session-status "$SESSION" | grep "Leader:" | awk '{ print $2 }')
+-    if [[ -z "$LEADER_PID" ]]; then
+-        echo "cannot found leader process for session $SESSION" >&2
++    if ! loginctl session-status "$session" | grep -q "Unit: session-${session}\.scope"; then
++        echo "cannot find scope unit for session $session" >&2
++        return 1
++    fi
++
++    leader_pid=$(loginctl session-status "$session" | grep "Leader:" | awk '{ print $2 }')
++    if [[ -z "$leader_pid" ]]; then
++        echo "cannot found leader process for session $session" >&2
+         return 1
+     fi
+ 
+     # cgroup v1: "1:name=systemd:/user.slice/..."; unified hierarchy: "0::/user.slice"
+-    if ! grep -q -E '(name=systemd|^0:):.*session.*scope' /proc/"$LEADER_PID"/cgroup; then
+-        echo "FAIL: process $LEADER_PID is not in the session cgroup" >&2
++    if ! grep -q -E '(name=systemd|^0:):.*session.*scope' /proc/"$leader_pid"/cgroup; then
++        echo "FAIL: process $leader_pid is not in the session cgroup" >&2
+         cat /proc/self/cgroup
+         return 1
+     fi
+-}
++)
+ 
+ test_session() {
++    local dev
++
+     if systemd-detect-virt --quiet --container; then
+-        echo " * Skipping ACL tests in container"
++        echo "Skipping ACL tests in container"
+         return
+     fi
+ 
+-    trap test_session_tear_down RETURN
++    if [[ ! -c /dev/tty2 ]]; then
++        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
++        return
++    fi
+ 
+-    # add user
+-    useradd -s /bin/bash logind-test-user
++    trap teardown_session RETURN
+ 
+     # login with the test user to start a session
+     mkdir -p /run/systemd/system/getty@tty2.service.d
+@@ -280,20 +295,14 @@ ExecStart=
+ ExecStart=-/sbin/agetty --autologin logind-test-user --noclear %I $TERM
+ EOF
+     systemctl daemon-reload
+-    systemctl start getty@tty2.service
++    systemctl restart getty@tty2.service
+ 
+     # check session
+-    ret=1
+     for ((i = 0; i < 30; i++)); do
+-        if (( i != 0)); then sleep 1; fi
+-        if check_session; then
+-            ret=0
+-            break
+-        fi
++        (( i != 0 )) && sleep 1
++        check_session && break
+     done
+-    if [[ "$ret" == "1" ]]; then
+-        exit 1
+-    fi
++    check_session
+ 
+     # scsi_debug should not be loaded yet
+     if [[ -d /sys/bus/pseudo/drivers/scsi_debug ]]; then
+@@ -312,12 +321,8 @@ EOF
+     # coldplug: logind started with existing device
+     systemctl stop systemd-logind.service
+     modprobe scsi_debug
+-    for ((i = 0; i < 30; i++)); do
+-        if (( i != 0)); then sleep 1; fi
+-        if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
+-            break
+-        fi
+-    done
++    timeout 30 bash -c 'while ! ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null; do sleep 1; done'
++    dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null)
+     if [[ ! -b "$dev" ]]; then
+         echo "cannot find suitable scsi block device" >&2
+         exit 1
+@@ -326,25 +331,17 @@ EOF
+     udevadm info "$dev"
+ 
+     # trigger logind and activate session
+-    loginctl activate "$SESSION"
++    loginctl activate "$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')"
+ 
+     # check ACL
+     sleep 1
+-    if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then
+-        echo "$dev has no ACL for user logind-test-user" >&2
+-        getfacl -p "$dev" >&2
+-        exit 1
+-    fi
++    assert_in "user:logind-test-user:rw-" "$(getfacl -p "$dev")"
+ 
+     # hotplug: new device appears while logind is running
+     rmmod scsi_debug
+     modprobe scsi_debug
+-    for ((i = 0; i < 30; i++)); do
+-        if (( i != 0)); then sleep 1; fi
+-        if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then
+-            break
+-        fi
+-    done
++    timeout 30 bash -c 'while ! ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null; do sleep 1; done'
++    dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null)
+     if [[ ! -b "$dev" ]]; then
+         echo "cannot find suitable scsi block device" >&2
+         exit 1
+@@ -353,15 +350,12 @@ EOF
+ 
+     # check ACL
+     sleep 1
+-    if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then
+-        echo "$dev has no ACL for user logind-test-user" >&2
+-        getfacl -p "$dev" >&2
+-        exit 1
+-    fi
++    assert_in "user:logind-test-user:rw-" "$(getfacl -p "$dev")"
+ }
+ 
+ : >/failed
+ 
++setup_test_user
+ test_enable_debug
+ test_properties
+ test_started
diff --git a/SOURCES/0342-test-start-test-user-session-before-idle-action-sett.patch b/SOURCES/0342-test-start-test-user-session-before-idle-action-sett.patch
new file mode 100644
index 0000000..3dadc2e
--- /dev/null
+++ b/SOURCES/0342-test-start-test-user-session-before-idle-action-sett.patch
@@ -0,0 +1,104 @@
+From 2ac026ce61d73f76e33a31fdb29c73ec40a05dfc Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 8 Jul 2022 20:22:40 +0900
+Subject: [PATCH] test: start test user session before idle action setting is
+ changed
+
+Otherwise, idle action may be triggered before starting the test user
+session.
+
+This also introduce create_session() and cleanup_session() helper
+functions.
+
+Fixes #23952.
+
+(cherry picked from commit 9d9fd4ad0a66eea9635081e8ef765e29865d22bf)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 44 ++++++++++++++++++++++++--------------
+ 1 file changed, 28 insertions(+), 16 deletions(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 86787e7a02..9c37fc36d0 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -214,7 +214,7 @@ test_shutdown() {
+     assert_eq "$(systemctl show systemd-logind.service -p ExecMainPID --value)" "$pid"
+ }
+ 
+-teardown_session() (
++cleanup_session() (
+     set +ex
+ 
+     systemctl stop getty@tty2.service
+@@ -224,6 +224,12 @@ teardown_session() (
+     pkill -u "$(id -u logind-test-user)"
+     sleep 1
+     pkill -KILL -u "$(id -u logind-test-user)"
++)
++
++teardown_session() (
++    set +ex
++
++    cleanup_session
+ 
+     rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
+     udevadm control --reload
+@@ -271,21 +277,7 @@ check_session() (
+     fi
+ )
+ 
+-test_session() {
+-    local dev
+-
+-    if systemd-detect-virt --quiet --container; then
+-        echo "Skipping ACL tests in container"
+-        return
+-    fi
+-
+-    if [[ ! -c /dev/tty2 ]]; then
+-        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
+-        return
+-    fi
+-
+-    trap teardown_session RETURN
+-
++create_session() {
+     # login with the test user to start a session
+     mkdir -p /run/systemd/system/getty@tty2.service.d
+     cat >/run/systemd/system/getty@tty2.service.d/override.conf <<EOF
+@@ -295,6 +287,7 @@ ExecStart=
+ ExecStart=-/sbin/agetty --autologin logind-test-user --noclear %I $TERM
+ EOF
+     systemctl daemon-reload
++
+     systemctl restart getty@tty2.service
+ 
+     # check session
+@@ -303,6 +296,25 @@ EOF
+         check_session && break
+     done
+     check_session
++    assert_eq "$(loginctl --no-legend | awk '$3=="logind-test-user" { print $5 }')" "tty2"
++}
++
++test_session() {
++    local dev
++
++    if systemd-detect-virt --quiet --container; then
++        echo "Skipping ACL tests in container"
++        return
++    fi
++
++    if [[ ! -c /dev/tty2 ]]; then
++        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
++        return
++    fi
++
++    trap teardown_session RETURN
++
++    create_session
+ 
+     # scsi_debug should not be loaded yet
+     if [[ -d /sys/bus/pseudo/drivers/scsi_debug ]]; then
diff --git a/SOURCES/0343-test-ensure-cleanup-functions-return-success.patch b/SOURCES/0343-test-ensure-cleanup-functions-return-success.patch
new file mode 100644
index 0000000..8dda2da
--- /dev/null
+++ b/SOURCES/0343-test-ensure-cleanup-functions-return-success.patch
@@ -0,0 +1,67 @@
+From c2f28b1ce0383e6366846a5993f59a7a4c3ccc11 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Wed, 13 Jul 2022 11:29:20 +0200
+Subject: [PATCH] test: ensure cleanup functions return success
+
+Otherwise the return value of the last command is propagated, which may
+cause spurious test failures. E.g., pkill returns 1 if no process
+matched, which may be a problem in cleanup session:
+
+cleanup_session() {
+...
+
+    pkill -u "$(id -u logind-test-user)"
+    sleep 1
+    pkill -KILL -u "$(id -u logind-test-user)"
+}
+
+If there are no remaining processes when the final pkill runs, it will
+return 1 and therefore cleanup_session will return 1 as well.
+
+(cherry picked from commit bd681a7eb04fd6d1fb9631e277bef93ceb06b321)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 9c37fc36d0..ad14d8a73c 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -13,6 +13,8 @@ cleanup_test_user() (
+     sleep 1
+     pkill -KILL -u "$(id -u logind-test-user)"
+     userdel -r logind-test-user
++
++    return 0
+ )
+ 
+ setup_test_user() {
+@@ -83,6 +85,8 @@ teardown_suspend() (
+ 
+     rm -f /run/udev/rules.d/70-logindtest-lid.rules
+     udevadm control --reload
++
++    return 0
+ )
+ 
+ test_suspend_on_lid() {
+@@ -224,6 +228,8 @@ cleanup_session() (
+     pkill -u "$(id -u logind-test-user)"
+     sleep 1
+     pkill -KILL -u "$(id -u logind-test-user)"
++
++    return 0
+ )
+ 
+ teardown_session() (
+@@ -234,6 +240,8 @@ teardown_session() (
+     rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
+     udevadm control --reload
+     rmmod scsi_debug
++
++    return 0
+ )
+ 
+ check_session() (
diff --git a/SOURCES/0344-test-add-test-for-org.freedesktop.login1.Session-Set.patch b/SOURCES/0344-test-add-test-for-org.freedesktop.login1.Session-Set.patch
new file mode 100644
index 0000000..f5b5af5
--- /dev/null
+++ b/SOURCES/0344-test-add-test-for-org.freedesktop.login1.Session-Set.patch
@@ -0,0 +1,138 @@
+From 24e6f79352a94e6c0d13aefe355c5c316274103d Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Mon, 27 Jun 2022 08:37:22 +0200
+Subject: [PATCH] test: add test for org.freedesktop.login1.Session SetType
+
+(cherry picked from commit 9ac0855b614b068e699092be7ec8cb39559ff88f)
+
+Related: #2100464
+---
+ src/login/meson.build               |  3 ++
+ src/login/test-session-properties.c | 71 +++++++++++++++++++++++++++++
+ test/units/testsuite-35.sh          | 16 +++++++
+ 3 files changed, 90 insertions(+)
+ create mode 100644 src/login/test-session-properties.c
+
+diff --git a/src/login/meson.build b/src/login/meson.build
+index 92f491665c..8ee364144c 100644
+--- a/src/login/meson.build
++++ b/src/login/meson.build
+@@ -110,4 +110,7 @@ tests += [
+          [liblogind_core,
+           libshared],
+          [threads]],
++
++        [files('test-session-properties.c'),
++         [], [], [], '', 'manual'],
+ ]
+diff --git a/src/login/test-session-properties.c b/src/login/test-session-properties.c
+new file mode 100644
+index 0000000000..8406147a2c
+--- /dev/null
++++ b/src/login/test-session-properties.c
+@@ -0,0 +1,71 @@
++/* SPDX-License-Identifier: LGPL-2.1-or-later */
++
++/* Usage:
++ * ./test-session-properties <SESSION-OBJECT-PATH>
++ * e.g.,
++ * ./test-session-properties /org/freedesktop/login1/session/_32
++ */
++
++#include "alloc-util.h"
++#include "bus-common-errors.h"
++#include "bus-locator.h"
++#include "string-util.h"
++#include "tests.h"
++
++static BusLocator session;
++
++/* Tests org.freedesktop.logind.Session SetType */
++TEST(set_type) {
++        _cleanup_(sd_bus_flush_close_unrefp) sd_bus* bus = NULL;
++        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
++        const char* types[] = {"tty", "x11", "wayland", "mir", "web"};
++        _cleanup_free_ char *type = NULL, *type2 = NULL;
++
++        assert_se(sd_bus_open_system(&bus) >= 0);
++
++        /* Default type is set */
++        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
++        assert_se(streq(type, "tty"));
++
++        /* Type can only be set by the session controller (which we're not ATM) */
++        assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "x11") < 0);
++        assert_se(sd_bus_error_has_name(&error, BUS_ERROR_NOT_IN_CONTROL));
++
++        assert_se(bus_call_method(bus, &session, "TakeControl", NULL, NULL, "b", true) >= 0);
++
++        /* All defined session types can be set */
++        for (size_t i = 0; i < ELEMENTSOF(types); i++) {
++                type = mfree(type);
++                assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", types[i]) >= 0);
++                assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
++                assert_se(streq(type, types[i]));
++        }
++
++        /* An unknown type is rejected */
++        sd_bus_error_free(&error);
++        assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "hello") < 0);
++        assert_se(sd_bus_error_has_name(&error, SD_BUS_ERROR_INVALID_ARGS));
++        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type2) >= 0);
++
++        /* Type is reset to the original value when we release control of the session */
++        assert_se(!streq(type, "tty"));
++        assert_se(bus_call_method(bus, &session, "ReleaseControl", NULL, NULL, "") >= 0);
++        type = mfree(type);
++        assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0);
++        assert_se(streq(type, "tty"));
++}
++
++static int intro(void) {
++        if (saved_argc <= 1)
++                return EXIT_FAILURE;
++
++        session = (BusLocator) {
++                .destination = "org.freedesktop.login1",
++                .path = saved_argv[1],
++                .interface = "org.freedesktop.login1.Session",
++        };
++
++        return EXIT_SUCCESS;
++}
++
++DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index ad14d8a73c..4fb2944e2d 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -373,6 +373,21 @@ EOF
+     assert_in "user:logind-test-user:rw-" "$(getfacl -p "$dev")"
+ }
+ 
++test_session_properties() {
++    local s
++
++    if [[ ! -c /dev/tty2 ]]; then
++        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
++        return
++    fi
++
++    trap cleanup_session RETURN
++    create_session
++
++    s=$(loginctl list-sessions --no-legend | awk '$3 == "logind-test-user" { print $1 }')
++    /usr/lib/systemd/tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}"
++}
++
+ : >/failed
+ 
+ setup_test_user
+@@ -382,6 +397,7 @@ test_started
+ test_suspend_on_lid
+ test_shutdown
+ test_session
++test_session_properties
+ 
+ touch /testok
+ rm /failed
diff --git a/SOURCES/0345-test-add-a-simple-test-for-list-users.patch b/SOURCES/0345-test-add-a-simple-test-for-list-users.patch
new file mode 100644
index 0000000..35c4a21
--- /dev/null
+++ b/SOURCES/0345-test-add-a-simple-test-for-list-users.patch
@@ -0,0 +1,57 @@
+From 10d03dd6ea51b99488dcfa5e85c85fbddc86a243 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Sun, 17 Jul 2022 15:35:22 +0200
+Subject: [PATCH] test: add a simple test for list-users
+
+(cherry picked from commit 6083f7a604267d02a648c76edd3e0cb7b83b4620)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 4fb2944e2d..28022b03cf 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -225,6 +225,8 @@ cleanup_session() (
+     rm -rf /run/systemd/system/getty@tty2.service.d
+     systemctl daemon-reload
+ 
++    loginctl disable-linger logind-test-user
++
+     pkill -u "$(id -u logind-test-user)"
+     sleep 1
+     pkill -KILL -u "$(id -u logind-test-user)"
+@@ -388,6 +390,23 @@ test_session_properties() {
+     /usr/lib/systemd/tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}"
+ }
+ 
++test_list_users() {
++    if [[ ! -c /dev/tty2 ]]; then
++        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
++        return
++    fi
++
++    trap cleanup_session RETURN
++    create_session
++
++    assert_eq "$(loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $1 }')" "$(id -ru logind-test-user)"
++    assert_eq "$(loginctl  show-user --property Linger --value logind-test-user)" no
++
++    loginctl enable-linger logind-test-user
++
++    assert_eq "$(loginctl  show-user --property Linger --value logind-test-user)" yes
++}
++
+ : >/failed
+ 
+ setup_test_user
+@@ -398,6 +417,7 @@ test_suspend_on_lid
+ test_shutdown
+ test_session
+ test_session_properties
++test_list_users
+ 
+ touch /testok
+ rm /failed
diff --git a/SOURCES/0346-test-merge-grep-awk-calls.patch b/SOURCES/0346-test-merge-grep-awk-calls.patch
new file mode 100644
index 0000000..32ed5b7
--- /dev/null
+++ b/SOURCES/0346-test-merge-grep-awk-calls.patch
@@ -0,0 +1,43 @@
+From b13ef318b4f02ad21f0235d22da4e22cb9745cc3 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Sun, 17 Jul 2022 15:41:38 +0200
+Subject: [PATCH] test: merge grep | awk calls
+
+(cherry picked from commit 283db37a20900b549508b2bf6d9db898c9a0ca67)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 28022b03cf..d9eccee84f 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -262,7 +262,7 @@ check_session() (
+         return 1
+     fi
+ 
+-    session=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')
++    session=$(loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }')
+     if [[ -z "$session" ]]; then
+         echo "no session found for user logind-test-user" >&2
+         return 1
+@@ -273,7 +273,7 @@ check_session() (
+         return 1
+     fi
+ 
+-    leader_pid=$(loginctl session-status "$session" | grep "Leader:" | awk '{ print $2 }')
++    leader_pid=$(loginctl session-status "$session" | awk '$1 == "Leader:" { print $2 }')
+     if [[ -z "$leader_pid" ]]; then
+         echo "cannot found leader process for session $session" >&2
+         return 1
+@@ -353,7 +353,7 @@ EOF
+     udevadm info "$dev"
+ 
+     # trigger logind and activate session
+-    loginctl activate "$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')"
++    loginctl activate "$(loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }')"
+ 
+     # check ACL
+     sleep 1
diff --git a/SOURCES/0347-test-wait-for-user-service-or-slice-to-be-finished.patch b/SOURCES/0347-test-wait-for-user-service-or-slice-to-be-finished.patch
new file mode 100644
index 0000000..ddad53e
--- /dev/null
+++ b/SOURCES/0347-test-wait-for-user-service-or-slice-to-be-finished.patch
@@ -0,0 +1,56 @@
+From 1fe172a67c2bbbedfd08d6ec5a28386f197962f9 Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Fri, 22 Jul 2022 15:45:24 +0900
+Subject: [PATCH] test: wait for user service or slice to be finished
+
+Hopefully fixes #24040.
+
+(cherry picked from commit 8015e2587045f8a58a15d4551c76521a4a3ff50c)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index d9eccee84f..d55ad6103e 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -221,15 +221,32 @@ test_shutdown() {
+ cleanup_session() (
+     set +ex
+ 
+-    systemctl stop getty@tty2.service
+-    rm -rf /run/systemd/system/getty@tty2.service.d
+-    systemctl daemon-reload
++    local uid
++
++    uid=$(id -u logind-test-user)
+ 
+     loginctl disable-linger logind-test-user
+ 
+-    pkill -u "$(id -u logind-test-user)"
++    systemctl stop getty@tty2.service
++
++    pkill -u "$uid"
+     sleep 1
+-    pkill -KILL -u "$(id -u logind-test-user)"
++    pkill -KILL -u "$uid"
++
++    if ! timeout 30 bash -c "while systemctl is-active --quiet user@${uid}.service; do sleep 1; done"; then
++        echo "WARNING: user@${uid}.service is still active, ignoring."
++    fi
++
++    if ! timeout 30 bash -c "while systemctl is-active --quiet user-runtime-dir@${uid}.service; do sleep 1; done"; then
++        echo "WARNING: user-runtime-dir@${uid}.service is still active, ignoring."
++    fi
++
++    if ! timeout 30 bash -c "while systemctl is-active --quiet user-${uid}.slice; do sleep 1; done"; then
++        echo "WARNING: user-${uid}.slice is still active, ignoring."
++    fi
++
++    rm -rf /run/systemd/system/getty@tty2.service.d
++    systemctl daemon-reload
+ 
+     return 0
+ )
diff --git a/SOURCES/0348-test-terminate-session-and-user-on-cleanup.patch b/SOURCES/0348-test-terminate-session-and-user-on-cleanup.patch
new file mode 100644
index 0000000..3454818
--- /dev/null
+++ b/SOURCES/0348-test-terminate-session-and-user-on-cleanup.patch
@@ -0,0 +1,43 @@
+From a39c796e6ef6bcce655404b4aecc29603ebd4c3c Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 31 Jul 2022 00:11:59 +0900
+Subject: [PATCH] test: terminate session and user on cleanup
+
+(cherry picked from commit fe9d58b25a8b8b1029dcdfbae89fac59fb429707)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index d55ad6103e..b6b1639668 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -221,7 +221,7 @@ test_shutdown() {
+ cleanup_session() (
+     set +ex
+ 
+-    local uid
++    local uid s
+ 
+     uid=$(id -u logind-test-user)
+ 
+@@ -229,6 +229,17 @@ cleanup_session() (
+ 
+     systemctl stop getty@tty2.service
+ 
++    for s in $(loginctl --no-legend list-sessions | awk '$3 == "logind-test-user" { print $1 }'); do
++        echo "INFO: stopping session $s"
++        loginctl terminate-session "$s"
++    done
++
++    loginctl terminate-user logind-test-user
++
++    if ! timeout 30 bash -c "while loginctl --no-legend | grep -q logind-test-user; do sleep 1; done"; then
++        echo "WARNING: session for logind-test-user still active, ignoring."
++    fi
++
+     pkill -u "$uid"
+     sleep 1
+     pkill -KILL -u "$uid"
diff --git a/SOURCES/0349-test-do-not-restart-getty-tty2-automatically.patch b/SOURCES/0349-test-do-not-restart-getty-tty2-automatically.patch
new file mode 100644
index 0000000..361ad91
--- /dev/null
+++ b/SOURCES/0349-test-do-not-restart-getty-tty2-automatically.patch
@@ -0,0 +1,24 @@
+From 76771540ffa4656e66e6ee64d1f23a08d7f2d1ae Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun, 31 Jul 2022 00:12:48 +0900
+Subject: [PATCH] test: do not restart getty@tty2 automatically
+
+(cherry picked from commit 54d5c126d30dc0bc4c88d776af2b59e240844d58)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index b6b1639668..8bd93ce92c 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -323,6 +323,7 @@ create_session() {
+ Type=simple
+ ExecStart=
+ ExecStart=-/sbin/agetty --autologin logind-test-user --noclear %I $TERM
++Restart=no
+ EOF
+     systemctl daemon-reload
+ 
diff --git a/SOURCES/0350-tests-add-test-for-StopIdleSessionSec-option.patch b/SOURCES/0350-tests-add-test-for-StopIdleSessionSec-option.patch
new file mode 100644
index 0000000..46ed36c
--- /dev/null
+++ b/SOURCES/0350-tests-add-test-for-StopIdleSessionSec-option.patch
@@ -0,0 +1,67 @@
+From d18194ace1b40a39e6503f46cda768b26d403948 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 8 Aug 2022 11:39:52 +0200
+Subject: [PATCH] tests: add test for StopIdleSessionSec= option
+
+(cherry picked from commit 5aa633db228ed3de263500d99d40b5d5e2c9695a)
+
+Related: #2100464
+---
+ test/units/testsuite-35.sh | 37 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
+index 8bd93ce92c..964adecbf2 100755
+--- a/test/units/testsuite-35.sh
++++ b/test/units/testsuite-35.sh
+@@ -436,6 +436,42 @@ test_list_users() {
+     assert_eq "$(loginctl  show-user --property Linger --value logind-test-user)" yes
+ }
+ 
++
++teardown_stop_idle_session() (
++    set +eux
++
++    rm -f /run/systemd/logind.conf.d/stop-idle-session.conf
++    systemctl restart systemd-logind.service
++
++    cleanup_session
++)
++
++test_stop_idle_session() {
++    local id ts
++
++    if [[ ! -c /dev/tty2 ]]; then
++        echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
++        return
++    fi
++
++    create_session
++    trap teardown_stop_idle_session RETURN
++
++    id="$(loginctl --no-legend | awk '$3 == "logind-test-user" { print $1; }')"
++    ts="$(date '+%H:%M:%S')"
++
++    mkdir -p /run/systemd/logind.conf.d
++    cat >/run/systemd/logind.conf.d/stop-idle-session.conf <<EOF
++[Login]
++StopIdleSessionSec=2s
++EOF
++    systemctl restart systemd-logind.service
++    sleep 5
++
++    assert_eq "$(journalctl -b -u systemd-logind.service --since="$ts" --grep "Session \"$id\" of user \"logind-test-user\" is idle, stopping." | wc -l)" 1
++    assert_eq "$(loginctl --no-legend | grep -c "logind-test-user")" 0
++}
++
+ : >/failed
+ 
+ setup_test_user
+@@ -447,6 +483,7 @@ test_shutdown
+ test_session
+ test_session_properties
+ test_list_users
++test_stop_idle_session
+ 
+ touch /testok
+ rm /failed
diff --git a/SOURCES/0351-logind-schedule-idle-check-full-interval-from-now-if.patch b/SOURCES/0351-logind-schedule-idle-check-full-interval-from-now-if.patch
new file mode 100644
index 0000000..6c6a97b
--- /dev/null
+++ b/SOURCES/0351-logind-schedule-idle-check-full-interval-from-now-if.patch
@@ -0,0 +1,29 @@
+From 4147bdd9212ece576be2f481dff41daf58788f04 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Fri, 9 Sep 2022 13:38:58 +0200
+Subject: [PATCH] logind: schedule idle check full interval from now if we
+ couldn't figure out atime timestamp
+
+(cherry picked from commit ab7ae746c6eed3074aa7edc6ae9ecfbac157e0da)
+
+Related: #2100464
+---
+ src/login/logind-session.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/login/logind-session.c b/src/login/logind-session.c
+index a110b6f1c1..1d6aa80913 100644
+--- a/src/login/logind-session.c
++++ b/src/login/logind-session.c
+@@ -706,7 +706,10 @@ static int session_dispatch_stop_on_idle(sd_event_source *source, uint64_t t, vo
+                 return session_stop(s, /* force */ true);
+         }
+ 
+-        r = sd_event_source_set_time(source, usec_add(ts.monotonic, s->manager->stop_idle_session_usec));
++        r = sd_event_source_set_time(
++                        source,
++                        usec_add(dual_timestamp_is_set(&ts) ? ts.monotonic : now(CLOCK_MONOTONIC),
++                                 s->manager->stop_idle_session_usec));
+         if (r < 0)
+                 return log_error_errno(r, "Failed to configure stop on idle session event source: %m");
+ 
diff --git a/SOURCES/systemd-user b/SOURCES/systemd-user
index 2725df9..8607d4f 100644
--- a/SOURCES/systemd-user
+++ b/SOURCES/systemd-user
@@ -2,6 +2,7 @@
 #
 # Used by systemd --user instances.
 
+account  sufficient pam_unix.so no_pass_expiry
 account  include system-auth
 
 session  required pam_selinux.so close
diff --git a/SPECS/systemd.spec b/SPECS/systemd.spec
index 631742e..9b0fefb 100644
--- a/SPECS/systemd.spec
+++ b/SPECS/systemd.spec
@@ -21,7 +21,7 @@
 Name:           systemd
 Url:            https://www.freedesktop.org/wiki/Software/systemd
 Version:        250
-Release:        6%{?dist}.1
+Release:        12%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        System and Service Manager
@@ -111,32 +111,324 @@ Patch0030: 0030-Net-naming-scheme-for-RHEL-9.0.patch
 Patch0031: 0031-core-decrease-log-level-of-messages-about-use-of-Kil.patch
 Patch0032: 0032-ci-replace-apt-key-with-signed-by.patch
 Patch0033: 0033-ci-fix-clang-13-installation.patch
-Patch0034: 0034-Revert-kernel-install-also-remove-modules.builtin.al.patch
-Patch0035: 0035-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
-Patch0036: 0036-kernel-install-50-depmod-port-to-bin-sh.patch
-Patch0037: 0037-kernel-install-90-loaderentry-port-to-bin-sh.patch
-Patch0038: 0038-kernel-install-fix-shellcheck.patch
-Patch0039: 0039-kernel-install-port-to-bin-sh.patch
-Patch0040: 0040-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
-Patch0041: 0041-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
-Patch0042: 0042-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
-Patch0043: 0043-kernel-install-also-remove-modules.builtin.alias.bin.patch
-Patch0044: 0044-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
-Patch0045: 0045-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
-Patch0046: 0046-kernel-install-prefix-errors-with-Error-exit-immedia.patch
-Patch0047: 0047-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
-Patch0048: 0048-kernel-install-add-missing-log-line.patch
-Patch0049: 0049-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
-Patch0050: 0050-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
-Patch0051: 0051-kernel-install-only-generate-systemd.boot_id-in-kern.patch
-Patch0052: 0052-kernel-install-search-harder-for-kernel-image-initrd.patch
-Patch0053: 0053-kernel-install-add-new-inspect-verb-showing-paths-an.patch
-Patch0054: 0054-bus-Use-OrderedSet-for-introspection.patch
-Patch0055: 0055-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
-Patch0056: 0056-shutdown-get-only-active-md-arrays.patch
-Patch0057: 0057-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
-Patch0058: 0058-ci-limit-which-env-variables-we-pass-through-sudo.patch
-Patch0059: 0059-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
+Patch0034: 0034-test-check-systemd-RPM-macros.patch
+Patch0035: 0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch
+Patch0036: 0036-tests-add-repart-tests-for-block-devices-with-1024-2.patch
+Patch0037: 0037-test-accept-both-unpadded-and-padded-partition-sizes.patch
+Patch0038: 0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch
+Patch0039: 0039-test-accept-GC-ed-units-in-newer-LVM.patch
+Patch0040: 0040-shared-Add-more-dlopen-tests.patch
+Patch0041: 0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch
+Patch0042: 0042-time-util-introduce-TIMESTAMP_UNIX.patch
+Patch0043: 0043-systemctl-man-update-docs-for-timestamp.patch
+Patch0044: 0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch
+Patch0045: 0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch
+Patch0046: 0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch
+Patch0047: 0047-repart-fix-sector-size-handling.patch
+Patch0048: 0048-mkdir-allow-to-create-directory-whose-path-contains-.patch
+Patch0049: 0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch
+Patch0050: 0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch
+Patch0051: 0051-meson-move-efi-summary-section-to-src-boot-efi.patch
+Patch0052: 0052-meson-report-SBAT-settings.patch
+Patch0053: 0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch
+Patch0054: 0054-meson-Remove-efi-cc-option.patch
+Patch0055: 0055-meson-Get-objcopy-location-from-compiler.patch
+Patch0056: 0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch
+Patch0057: 0057-meson-Use-files-for-tests.patch
+Patch0058: 0058-tests-add-fuzz-bcd.patch
+Patch0059: 0059-meson-Use-files-for-fuzzers.patch
+Patch0060: 0060-meson-Add-check-argument-to-remaining-run_command-ca.patch
+Patch0061: 0061-meson-Use-echo-to-list-files.patch
+Patch0062: 0062-test-add-a-test-for-mkdir_p.patch
+Patch0063: 0063-util-another-set-of-CVE-2021-4034-assert-s.patch
+Patch0064: 0064-basic-update-CIFS-magic.patch
+Patch0065: 0065-shared-be-extra-paranoid-and-check-if-argc-0.patch
+Patch0066: 0066-core-check-if-argc-0-and-argv-0-is-set.patch
+Patch0067: 0067-core-check-argc-argv-uncoditionally.patch
+Patch0068: 0068-test-temporary-workaround-for-21819.patch
+Patch0069: 0069-test-don-t-leak-local-variable-to-outer-scopes.patch
+Patch0070: 0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch
+Patch0071: 0071-man-clarify-Environmentfile-format.patch
+Patch0072: 0072-test-load-fragment-add-a-basic-test-for-config_parse.patch
+Patch0073: 0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch
+Patch0074: 0074-test-env-file-add-tests-for-quoting-in-env-files.patch
+Patch0075: 0075-core-shorten-long-unit-names-that-are-based-on-paths.patch
+Patch0076: 0076-tests-add-test-case-for-long-unit-names.patch
+Patch0077: 0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch
+Patch0078: 0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch
+Patch0079: 0079-Revert-kernel-install-also-remove-modules.builtin.al.patch
+Patch0080: 0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch
+Patch0081: 0081-kernel-install-50-depmod-port-to-bin-sh.patch
+Patch0082: 0082-kernel-install-90-loaderentry-port-to-bin-sh.patch
+Patch0083: 0083-kernel-install-fix-shellcheck.patch
+Patch0084: 0084-kernel-install-port-to-bin-sh.patch
+Patch0085: 0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch
+Patch0086: 0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch
+Patch0087: 0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch
+Patch0088: 0088-kernel-install-also-remove-modules.builtin.alias.bin.patch
+Patch0089: 0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch
+Patch0090: 0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch
+Patch0091: 0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch
+Patch0092: 0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch
+Patch0093: 0093-kernel-install-add-missing-log-line.patch
+Patch0094: 0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch
+Patch0095: 0095-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch
+Patch0096: 0096-kernel-install-only-generate-systemd.boot_id-in-kern.patch
+Patch0097: 0097-kernel-install-search-harder-for-kernel-image-initrd.patch
+Patch0098: 0098-kernel-install-add-new-inspect-verb-showing-paths-an.patch
+Patch0099: 0099-ci-Mergify-configuration-update.patch
+Patch0100: 0100-ci-Mergify-fix-copy-paste-bug.patch
+Patch0101: 0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch
+Patch0102: 0102-fuzz-no-longer-skip-empty-files.patch
+Patch0103: 0103-networkctl-open-the-bus-just-once.patch
+Patch0104: 0104-json-align-table.patch
+Patch0105: 0105-fuzz-json-optionally-allow-logging-and-output.patch
+Patch0106: 0106-shared-json-reduce-scope-of-variables.patch
+Patch0107: 0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch
+Patch0108: 0108-shared-json-wrap-long-comments.patch
+Patch0109: 0109-shared-json-fix-memory-leak-on-failed-normalization.patch
+Patch0110: 0110-shared-json-add-helper-to-ref-first-unref-second.patch
+Patch0111: 0111-basic-alloc-util-remove-unnecessary-parens.patch
+Patch0112: 0112-fuzz-json-also-try-self-merge-operations.patch
+Patch0113: 0113-shared-json-fix-another-memleak-in-normalization.patch
+Patch0114: 0114-shared-json-fix-memleak-in-sort.patch
+Patch0115: 0115-execute-fix-resource-leak.patch
+Patch0116: 0116-tests-ignore-dbus-broker-launcher.patch
+Patch0117: 0117-core-timer-fix-memleak.patch
+Patch0118: 0118-timedatectl-fix-a-memory-leak.patch
+Patch0119: 0119-test-fix-file-descriptor-leak-in-test-psi-util.patch
+Patch0120: 0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch
+Patch0121: 0121-test-fix-file-descriptor-leak-in-test-fs-util.patch
+Patch0122: 0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch
+Patch0123: 0123-test-fix-file-descriptor-leak-in-test-catalog.patch
+Patch0124: 0124-test-make-masking-of-supplementary-services-configur.patch
+Patch0125: 0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch
+Patch0126: 0126-test-skip-TEST-21-DFUZZER-without-ASan.patch
+Patch0127: 0127-core-annotate-Reexecute-as-NoReply.patch
+Patch0128: 0128-test-always-force-a-new-image-for-dfuzzer.patch
+Patch0129: 0129-test-make-dfuzzer-less-verbose.patch
+Patch0130: 0130-test-drop-the-at_exit-coredump-check.patch
+Patch0131: 0131-test-make-the-shutdown-routine-a-bit-more-robust.patch
+Patch0132: 0132-tree-wide-drop-manually-crafted-message-for-missing-.patch
+Patch0133: 0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch
+Patch0134: 0134-test-don-t-test-buses-we-don-t-ship.patch
+Patch0135: 0135-shutdown-get-only-active-md-arrays.patch
+Patch0136: 0136-bus-Use-OrderedSet-for-introspection.patch
+Patch0137: 0137-logind-session-dbus-allow-to-set-display-name-via-db.patch
+Patch0138: 0138-ci-limit-which-env-variables-we-pass-through-sudo.patch
+Patch0139: 0139-ci-Mergify-Add-ci-waived-logic.patch
+Patch0140: 0140-json-use-unsigned-for-refernce-counter.patch
+Patch0141: 0141-macro-check-over-flow-in-reference-counter.patch
+Patch0142: 0142-sd-bus-fix-reference-counter-to-be-incremented.patch
+Patch0143: 0143-sd-bus-introduce-ref-unref-function-for-track_item.patch
+Patch0144: 0144-sd-bus-do-not-read-unused-value.patch
+Patch0145: 0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch
+Patch0146: 0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch
+Patch0147: 0147-test-shorten-code-a-bit.patch
+Patch0148: 0148-test-add-several-tests-for-track-item.patch
+Patch0149: 0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch
+Patch0150: 0150-core-unit-fix-use-after-free.patch
+Patch0151: 0151-core-timer-fix-potential-use-after-free.patch
+Patch0152: 0152-core-command-argument-can-be-longer-than-PATH_MAX.patch
+Patch0153: 0153-shared-install-consistently-use-lp-as-the-name-for-t.patch
+Patch0154: 0154-shared-specifier-treat-NULL-the-same-as.patch
+Patch0155: 0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch
+Patch0156: 0156-shared-install-printf-drop-now-unused-install_path_p.patch
+Patch0157: 0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch
+Patch0158: 0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch
+Patch0159: 0159-basic-stat-util-add-null_or_empty_path_with_root.patch
+Patch0160: 0160-shared-install-reuse-the-standard-symlink-verificati.patch
+Patch0161: 0161-shared-install-add-a-bit-more-quoting.patch
+Patch0162: 0162-test-add-test-for-systemctl-link-enable.patch
+Patch0163: 0163-tests-add-helper-for-creating-tempfiles-with-content.patch
+Patch0164: 0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch
+Patch0165: 0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch
+Patch0166: 0166-test-os-util-add-basic-tests-for-os-release-parsing.patch
+Patch0167: 0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch
+Patch0168: 0168-man-os-release-add-a-note-about-repeating-entries.patch
+Patch0169: 0169-shared-specifier-clarify-and-add-test-for-missing-da.patch
+Patch0170: 0170-shared-specifier-provide-proper-error-messages-when-.patch
+Patch0171: 0171-shared-install-provide-proper-error-messages-when-in.patch
+Patch0172: 0172-shared-install-move-scope-into-InstallContext.patch
+Patch0173: 0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch
+Patch0174: 0174-shared-install-simplify-unit_file_dump_changes.patch
+Patch0175: 0175-shared-install-propagate-errors-about-invalid-aliase.patch
+Patch0176: 0176-shared-install-return-failure-when-enablement-fails-.patch
+Patch0177: 0177-systemctl-fix-silent-failure-when-root-is-not-found.patch
+Patch0178: 0178-shared-install-also-check-for-self-aliases-during-in.patch
+Patch0179: 0179-docs-Correct-WantedBy-regarding-template-units.patch
+Patch0180: 0180-man-fix-invalid-description-of-template-handling-in-.patch
+Patch0181: 0181-shared-install-drop-unnecessary-casts.patch
+Patch0182: 0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch
+Patch0183: 0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch
+Patch0184: 0184-install-when-linking-a-file-create-the-link-first-or.patch
+Patch0185: 0185-shared-install-split-unit_file_-disable-enable-so-_r.patch
+Patch0186: 0186-shared-install-fix-reenable-on-linked-unit-files.patch
+Patch0187: 0187-test-systemctl-enable-extend-the-test-for-repeated-W.patch
+Patch0188: 0188-shared-install-when-we-fail-to-chase-a-symlink-show-.patch
+Patch0189: 0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch
+Patch0190: 0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch
+Patch0191: 0191-shared-install-skip-unnecessary-chasing-of-symlinks-.patch
+Patch0192: 0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch
+Patch0193: 0193-shared-install-create-relative-symlinks-for-enableme.patch
+Patch0194: 0194-shared-install-when-looking-for-symlinks-in-.wants-..patch
+Patch0195: 0195-shared-install-stop-passing-duplicate-root-argument-.patch
+Patch0196: 0196-basic-unit-file-reverse-negative-conditional.patch
+Patch0197: 0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch
+Patch0198: 0198-shared-install-fix-handling-of-a-linked-unit-file.patch
+Patch0199: 0199-test-systemctl-enable-make-shellcheck-happy.patch
+Patch0200: 0200-shared-install-when-creating-symlinks-accept-differe.patch
+Patch0201: 0201-test-systemctl-enable-use-magic-syntax-to-allow-inve.patch
+Patch0202: 0202-test-systemctl-enable-also-use-freshly-built-systemd.patch
+Patch0203: 0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch
+Patch0204: 0204-Rename-UnitFileScope-to-LookupScope.patch
+Patch0205: 0205-core-handle-lookup-paths-being-symlinks.patch
+Patch0206: 0206-shared-install-use-correct-cleanup-function.patch
+Patch0207: 0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch
+Patch0208: 0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch
+Patch0209: 0209-test-drop-redundant-IMAGE_NAME.patch
+Patch0210: 0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch
+Patch0211: 0211-test-introduce-assert_not_in-helper-function.patch
+Patch0212: 0212-test-drop-unnecessary-no-pager-option.patch
+Patch0213: 0213-test-support-debian-ubuntu-specific-timezone-config-.patch
+Patch0214: 0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch
+Patch0215: 0215-locale-util-fix-memleak-on-failure.patch
+Patch0216: 0216-locale-util-check-if-enumerated-locales-are-valid.patch
+Patch0217: 0217-locale-util-align-locale-entries.patch
+Patch0218: 0218-core-inline-an-iterator-variable.patch
+Patch0219: 0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch
+Patch0220: 0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch
+Patch0221: 0221-test-add-one-more-path-to-search-keymaps.patch
+Patch0222: 0222-test-introduce-inst_recursive-helper-function.patch
+Patch0223: 0223-hmac-sha256-move-size-define-to-sha256.h.patch
+Patch0224: 0224-tpm2-support-policies-with-PIN.patch
+Patch0225: 0225-cryptenroll-add-support-for-TPM2-pin.patch
+Patch0226: 0226-cryptsetup-add-support-for-TPM2-pin.patch
+Patch0227: 0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch
+Patch0228: 0228-cryptenroll-add-TPM2-PIN-documentation.patch
+Patch0229: 0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch
+Patch0230: 0230-cryptenroll-add-tests-for-TPM2-unlocking.patch
+Patch0231: 0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch
+Patch0232: 0232-test-install-libxkbcommon-and-x11-keymaps.patch
+Patch0233: 0233-test-install-C.UTF-8-and-English-locales.patch
+Patch0234: 0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch
+Patch0235: 0235-unit-check-for-mount-rate-limiting-before-checking-a.patch
+Patch0236: 0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch
+Patch0237: 0237-test-insert-space-in-for-loop.patch
+Patch0238: 0238-test-move-do-at-the-end-of-line.patch
+Patch0239: 0239-test-use-trap-RETURN.patch
+Patch0240: 0240-test-ignore-the-error-about-our-own-libraries-missin.patch
+Patch0241: 0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch
+Patch0242: 0242-test-set-ASAN_RT_PATH-along-with-LD_PRELOAD-to-the-A.patch
+Patch0243: 0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch
+Patch0244: 0244-test-don-t-wrap-binaries-built-with-ASan.patch
+Patch0245: 0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch
+Patch0246: 0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch
+Patch0247: 0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch
+Patch0248: 0248-test-don-t-flush-debug-logs-to-the-console.patch
+Patch0249: 0249-test-fix-a-couple-of-issues-found-by-shellcheck.patch
+Patch0250: 0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch
+Patch0251: 0251-test-run-the-custom-check-hooks-before-common-checks.patch
+Patch0252: 0252-test-check-journal-directly-instead-of-capturing-con.patch
+Patch0253: 0253-test-use-saved-process-PID-instead-of.patch
+Patch0254: 0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch
+Patch0255: 0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch
+Patch0256: 0256-test-disable-test_ntp-on-RHEL.patch
+Patch0257: 0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch
+Patch0258: 0258-test-add-a-simple-test-for-daemon-reexec.patch
+Patch0259: 0259-test-install-usr-libexec-vi-as-well.patch
+Patch0260: 0260-test-resize-the-terminal-automagically-with-INTERACT.patch
+Patch0261: 0261-test-create-an-ASan-wrapper-for-getent-and-su.patch
+Patch0262: 0262-test-mark-partition-bootable.patch
+Patch0263: 0263-test-bump-the-data-partition-size-if-we-don-t-strip-.patch
+Patch0264: 0264-test-use-PBKDF2-with-capped-iterations-instead-of-Ar.patch
+Patch0265: 0265-locale-drop-unnecessary-allocation.patch
+Patch0266: 0266-Revert-shared-install-create-relative-symlinks-for-e.patch
+Patch0267: 0267-glyph-util-add-new-glyphs-for-up-down-arrows.patch
+Patch0268: 0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch
+Patch0269: 0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch
+Patch0270: 0270-core-allow-to-set-default-timeout-for-devices.patch
+Patch0271: 0271-man-document-DefaultDeviceTimeoutSec.patch
+Patch0272: 0272-man-update-dbus-docs.patch
+Patch0273: 0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch
+Patch0274: 0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch
+Patch0275: 0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch
+Patch0276: 0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch
+Patch0277: 0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch
+Patch0278: 0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch
+Patch0279: 0279-test-frequency-in-mouse-DPI-is-optional.patch
+Patch0280: 0280-hwdb-add-two-Elecom-trackballs.patch
+Patch0281: 0281-hwdb-add-new-database-file-for-PDA-devices.patch
+Patch0282: 0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch
+Patch0283: 0283-hwdb-add-HP-calculators.patch
+Patch0284: 0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch
+Patch0285: 0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch
+Patch0286: 0286-hwdb-add-CST-Laser-Trackball-22583.patch
+Patch0287: 0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch
+Patch0288: 0288-Add-support-for-NEC-VersaPro-VG-S.patch
+Patch0289: 0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch
+Patch0290: 0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch
+Patch0291: 0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch
+Patch0292: 0292-Add-HP-Elitebook-2760p-support-22766.patch
+Patch0293: 0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch
+Patch0294: 0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch
+Patch0295: 0295-hwdb-update-for-v251.patch
+Patch0296: 0296-hwdb-update-autosuspend-entries.patch
+Patch0297: 0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch
+Patch0298: 0298-hwdb-Update-60-keyboard.hwdb-23074.patch
+Patch0299: 0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch
+Patch0300: 0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch
+Patch0301: 0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch
+Patch0302: 0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch
+Patch0303: 0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch
+Patch0304: 0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch
+Patch0305: 0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch
+Patch0306: 0306-hwbd-run-update-hwdb-for-v251-rc2.patch
+Patch0307: 0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch
+Patch0308: 0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch
+Patch0309: 0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch
+Patch0310: 0310-fix-typo.patch
+Patch0311: 0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch
+Patch0312: 0312-hwdb-run-update-hwdb.patch
+Patch0313: 0313-hwdb-add-rammus-accelerometer-support.patch
+Patch0314: 0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch
+Patch0315: 0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch
+Patch0316: 0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch
+Patch0317: 0317-hwdb-run-update-hwdb-for-v251-rc3.patch
+Patch0318: 0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch
+Patch0319: 0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch
+Patch0320: 0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch
+Patch0321: 0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch
+Patch0322: 0322-hwdb-update-via-ninja-C-build-update-hwdb.patch
+Patch0323: 0323-hwdb-Add-Google-Meet-speakermic.patch
+Patch0324: 0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch
+Patch0325: 0325-hwdb-Add-HP-Dev-One.patch
+Patch0326: 0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch
+Patch0327: 0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch
+Patch0328: 0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch
+Patch0329: 0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch
+Patch0330: 0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch
+Patch0331: 0331-Added-DERE-DBook-D10-24173.patch
+Patch0332: 0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch
+Patch0333: 0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch
+Patch0334: 0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch
+Patch0335: 0335-shared-install-fix-crash-when-reenable-is-called-wit.patch
+Patch0336: 0336-scope-allow-unprivileged-delegation-on-scopes.patch
+Patch0337: 0337-udev-net_id-add-rhel-9.1-naming-scheme.patch
+Patch0338: 0338-core-load-fragment-move-config_parse_sec_fix_0-to-sr.patch
+Patch0339: 0339-logind-add-option-to-stop-idle-sessions-after-specif.patch
+Patch0340: 0340-tree-wide-fix-typo.patch
+Patch0341: 0341-test-several-cleanups-for-TEST-35-LOGIN.patch
+Patch0342: 0342-test-start-test-user-session-before-idle-action-sett.patch
+Patch0343: 0343-test-ensure-cleanup-functions-return-success.patch
+Patch0344: 0344-test-add-test-for-org.freedesktop.login1.Session-Set.patch
+Patch0345: 0345-test-add-a-simple-test-for-list-users.patch
+Patch0346: 0346-test-merge-grep-awk-calls.patch
+Patch0347: 0347-test-wait-for-user-service-or-slice-to-be-finished.patch
+Patch0348: 0348-test-terminate-session-and-user-on-cleanup.patch
+Patch0349: 0349-test-do-not-restart-getty-tty2-automatically.patch
+Patch0350: 0350-tests-add-test-for-StopIdleSessionSec-option.patch
+Patch0351: 0351-logind-schedule-idle-check-full-interval-from-now-if.patch
 
 # Downstream-only patches (9000–9999)
 
@@ -918,16 +1210,105 @@ getent passwd systemd-oom &>/dev/null || useradd -r -l -g systemd-oom -d / -s /s
 %files standalone-sysusers -f .file-list-standalone-sysusers
 
 %changelog
-* Wed Jul 20 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-6.1
-- shutdown: get only active md arrays. (#2087677)
-- test: lvm 2.03.15 dropped the static autoactivation (#2087677)
-- ci: limit which env variables we pass through `sudo` (#2087677)
-- shared: Fix memory leak in bus_append_execute_property() (#2087677)
-
-* Thu Apr 07 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-6
-- udev/net_id: avoid slot based names only for single function devices (#2070097)
-
-* Fri Mar 25 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-5
+* Fri Sep 23 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-12
+- core/load-fragment: move config_parse_sec_fix_0 to src/shared (#2100464)
+- logind: add option to stop idle sessions after specified timeout (#2100464)
+- tree-wide: fix typo (#2100464)
+- test: several cleanups for TEST-35-LOGIN (#2100464)
+- test: start test user session before idle action setting is changed (#2100464)
+- test: ensure cleanup functions return success (#2100464)
+- test: add test for org.freedesktop.login1.Session SetType (#2100464)
+- test: add a simple test for list-users (#2100464)
+- test: merge grep | awk calls (#2100464)
+- test: wait for user service or slice to be finished (#2100464)
+- test: terminate session and user on cleanup (#2100464)
+- test: do not restart getty@tty2 automatically (#2100464)
+- tests: add test for StopIdleSessionSec= option (#2100464)
+- logind: schedule idle check full interval from now if we couldn't figure out atime timestamp (#2100464)
+
+* Thu Aug 25 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-11
+- scope: allow unprivileged delegation on scopes (#2120604)
+- udev/net_id: add "rhel-9.1" naming scheme (#2121144)
+
+* Mon Aug 22 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-10
+- shared/install: fix crash when reenable is called without --root (#2120222)
+
+* Thu Aug 18 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-9
+- Revert "shared/install: create relative symlinks for enablement and aliasing" (#2118668)
+- glyph-util: add new glyphs for up/down arrows (#2118297)
+- tree-wide: allow ASCII fallback for → in logs (#2118297)
+- tree-wide: allow ASCII fallback for … in logs (#2118297)
+- core: allow to set default timeout for devices (#2116681)
+- man: document DefaultDeviceTimeoutSec= (#2116681)
+- man: update dbus docs (#2116681)
+- hwdb: 60-keyboard: Fix volume-button mapping on Asus TF103C (#2087778)
+- hwdb: CH Pro Pedals not classified correctly due to no buttons (#2087778)
+- hwdb: Add accel orientation quirk for the GPD Pocket 3 (#2087778)
+- hostname: Allow overriding the chassis type from hwdb (#2087778)
+- hwdb: Add Microsoft Surface Pro 1 chassis quirk (#2087778)
+- hwdb: treat logitech craft keyboard as a keyboard (#2087778)
+- test: frequency in mouse DPI is optional (#2087778)
+- hwdb: add two Elecom trackballs (#2087778)
+- hwdb: add new database file for PDA devices (#2087778)
+- hwdb: add support for Surface Laptop 2 & 3 (#22303) (#2087778)
+- hwdb: add HP calculators (#2087778)
+- hwbd: 60-sensor.hwdb: Add Pipo W2Pro (#2087778)
+- hwdb: 60-keyboard: Support the buttons on CZC P10T tablet (#2087778)
+- hwdb: add CST Laser Trackball (#22583) (#2087778)
+- hwdb: Force release calculator key on all HP OMEN laptops (#2087778)
+- Add support for NEC VersaPro VG-S (#2087778)
+- Fix mic mute on Acer TravelMate B311-31 (#22677) (#2087778)
+- Add AV production controllers to hwdb and add uaccess (#2087778)
+- hwdb: Add AV production access to Elgado Stream Deck devices (#2087778)
+- Add HP Elitebook 2760p support (#22766) (#2087778)
+- hwdb: Add mic mute key mapping for HP Elite x360 (#2087778)
+- hwdb: fix parser to work with newer pyparsing (#2087778)
+- hwdb: update for v251 (#2087778)
+- hwdb: update autosuspend entries (#2087778)
+- hwdb: drop boilerplate about match patterns being unstable (#2087778)
+- hwdb: Update 60-keyboard.hwdb (#23074) (#2087778)
+- hwdb: 60-keyboard: Add Acer Aspire One AO532h keymappings (#2087778)
+- hwdb 60-keyboard Add HP/Compaq KBR0133 (#2087778)
+- hwdb: add resolutions for the Vaio FE14 touchpad (#23136) (#2087778)
+- hwdb: Remap micmute to f20 for ASUS WMI hotkeys (#2087778)
+- hwdb: Fix rotation for HP Pro Tablet 408 G1 (#2087778)
+- hwdb: add keyboard mapping for HP ProBook 11G2 (#2087778)
+- hwdb: make sure "ninja update-hwdb" works on f35 (#2087778)
+- hwbd: run "update-hwdb" for v251-rc2 (#2087778)
+- hwdb: run "ninja update-hwdb-autosuspend" for v251-rc2 (#2087778)
+- Fix orientation detection for Asus Transformer T100TAF, copied T100TA rule (#2087778)
+- Fix orientation detection for HP Pavilion X2 10-k010nr (#2087778)
+- fix typo (#2087778)
+- Adding a description of the keyboard shortcut Fn+F12 for the HP EliteBook 845 G7 device. (#23253) (#2087778)
+- hwdb: run "update-hwdb" (#2087778)
+- hwdb: add rammus accelerometer support (#2087778)
+- Add support to set autosuspend delay via hwdb (#2087778)
+- Set autosuspend delay for Fibocom LG850-GL (#2087778)
+- Add HUION Inspiroy H420X to hwdb (#2087778)
+- hwdb: run 'update-hwdb' for v251-rc3 (#2087778)
+- hwdb: add touchpad parameters for Lenovo T15g Gen1 (#23373) (#2087778)
+-  hwdb: Add accel orientation for the I15-TG (#2087778)
+- hwdb: fix accelerometer mount matrix for Aquarius NS483 (#2087778)
+- hwdb: Add Google Hangouts Meet speakermic (#2087778)
+- hwdb: update via ninja -C build update-hwdb (#2087778)
+- hwdb: Add Google Meet speakermic (#2087778)
+- hwdb: Add accel orientation quirk for the Aya Neo Next (#2087778)
+- hwdb: Add HP Dev One (#2087778)
+- hwdb: analyzers: remove generic "STM Device in DFU Mode" (#2087778)
+- hwdb: Add Lenovo ThinkPad C13 Yoga (#2087778)
+- Fix automatic screen rotation for Asus Transformer T100TAM (#2087778)
+- hwdb: Add Acer Aspire A317-33 (#24050) (#2087778)
+- Add ACCEL_MOUNT_MATRIX for OXP Mini (#2087778)
+- Added DERE DBook D10 (#24173) (#2087778)
+- hwdb: analyzers: Clarify the type of devices we want listed (#2087778)
+- hwdb: Add Greaseweazle "drives" to the list of analyzers (#2087778)
+- hwdb: Apply existing accel orientation quirk to all Chromebooks (#2087778)
+
+* Wed Jul 20 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-8
+- core: shorten long unit names that are based on paths and append path hash at the end (#2083493)
+- tests: add test case for long unit names (#2083493)
+- tests: reflect that we can now handle devices with very long sysfs paths (#2083493)
+- test: extend the "hashed" unit names coverage a bit (#2083493)
 - Revert "kernel-install: also remove modules.builtin.alias.bin" (#2065061)
 - Revert "kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT" (#2065061)
 - kernel-install: 50-depmod: port to /bin/sh (#2065061)
@@ -948,7 +1329,216 @@ getent passwd systemd-oom &>/dev/null || useradd -r -l -g systemd-oom -d / -s /s
 - kernel-install: only generate systemd.boot_id= in kernel command line if used for naming the boot loader spec files/dirs (#2065061)
 - kernel-install: search harder for kernel image/initrd drop-in dir (#2065061)
 - kernel-install: add new "inspect" verb, showing paths and parameters we discovered (#2065061)
-- bus: Use OrderedSet for introspection (#2066325)
+- ci(Mergify): configuration update (#2087652)
+- ci(Mergify): fix copy&paste bug (#2087652)
+- shared: Fix memory leak in bus_append_execute_property() (#2087652)
+- fuzz: no longer skip empty files (#2087652)
+- networkctl: open the bus just once (#2087652)
+- json: align table (#2087652)
+- fuzz-json: optionally allow logging and output (#2087652)
+- shared/json: reduce scope of variables (#2087652)
+- fuzz-json: also do sorting and normalizing and other easy calls (#2087652)
+- shared/json: wrap long comments (#2087652)
+- shared/json: fix memory leak on failed normalization (#2087652)
+- shared/json: add helper to ref first, unref second (#2087652)
+- basic/alloc-util: remove unnecessary parens (#2087652)
+- fuzz-json: also try self-merge operations (#2087652)
+- shared/json: fix another memleak in normalization (#2087652)
+- shared/json: fix memleak in sort (#2087652)
+- execute: fix resource leak (#2087652)
+- tests: ignore dbus-broker-launcher (#2087652)
+- core/timer: fix memleak (#2087652)
+- timedatectl: fix a memory leak (#2087652)
+- test: fix file descriptor leak in test-psi-util (#2087652)
+- test: fix file descriptor leak in test-tmpfiles.c (#2087652)
+- test: fix file descriptor leak in test-fs-util (#2087652)
+- test: fix file descriptor leak in test-oomd-util (#2087652)
+- test: fix file descriptor leak in test-catalog (#2087652)
+- test: make masking of supplementary services configurable (#2087652)
+- test: fuzz our dbus interfaces with dfuzzer (#2087652)
+- test: skip TEST-21-DFUZZER without ASan (#2087652)
+- core: annotate Reexecute() as NoReply (#2087652)
+- test: always force a new image for dfuzzer (#2087652)
+- test: make dfuzzer less verbose (#2087652)
+- test: drop the at_exit() coredump check (#2087652)
+- test: make the shutdown routine a bit more "robust" (#2087652)
+- tree-wide: drop manually-crafted message for missing variables (#2087652)
+- test: allow overriding $QEMU_MEM when running w/ ASan (#2087652)
+- test: don't test buses we don't ship (#2087652)
+- shutdown: get only active md arrays. (#2047682)
+- bus: Use OrderedSet for introspection (#2068131)
+- logind-session-dbus: allow to set display name via dbus (#2100340)
+- ci: limit which env variables we pass through `sudo` (#2087652)
+- ci(Mergify): Add `ci-waived` logic (#2087652)
+- json: use unsigned for refernce counter (#2087652)
+- macro: check over flow in reference counter (#2087652)
+- sd-bus: fix reference counter to be incremented (#2087652)
+- sd-bus: introduce ref/unref function for track_item (#2087652)
+- sd-bus: do not read unused value (#2087652)
+- sd-bus: do not return negative errno when unknown name is specified (#2087652)
+- sd-bus: use hashmap_contains() and drop unnecessary cast (#2087652)
+- test: shorten code a bit (#2087652)
+- test: add several tests for track item (#2087652)
+- core/slice: make slice_freezer_action() return 0 if freezing state is unchanged (#2087652)
+- core/unit: fix use-after-free (#2087652)
+- core/timer: fix potential use-after-free (#2087652)
+- core: command argument can be longer than PATH_MAX (#2073994)
+- shared/install: consistently use 'lp' as the name for the LookupPaths instance (#2082131)
+- shared/specifier: treat NULL the same as "" (#2082131)
+- shared/install: do not print aliases longer than UNIT_NAME_MAX (#2082131)
+- shared/install-printf: drop now-unused install_path_printf() (#2082131)
+- strv: declare iterator of FOREACH_STRING() in the loop (#2082131)
+- basic/unit-file: split out the subroutine for symlink verification (#2082131)
+- basic/stat-util: add null_or_empty_path_with_root() (#2082131)
+- shared/install: reuse the standard symlink verification subroutine (#2082131)
+- shared/install: add a bit more quoting (#2082131)
+- test: add test for systemctl link & enable (#2082131)
+- tests: add helper for creating tempfiles with content (#2082131)
+- man: clarify the descriptions of aliases and linked unit files (#2082131)
+- basic: add new variable $SYSTEMD_OS_RELEASE to override location of os-release (#2082131)
+- test-os-util: add basic tests for os-release parsing (#2082131)
+- basic/env-file: make load-env-file deduplicate entries with the same key (#2082131)
+- man/os-release: add a note about repeating entries (#2082131)
+- shared/specifier: clarify and add test for missing data (#2082131)
+- shared/specifier: provide proper error messages when specifiers fail to read files (#2082131)
+- shared/install: provide proper error messages when invalid specifiers are used (#2082131)
+- shared/install: move scope into InstallContext (#2082131)
+- shared/specifier: fix %u/%U/%g/%G when called as unprivileged user (#2082131)
+- shared/install: simplify unit_file_dump_changes() (#2082131)
+- shared/install: propagate errors about invalid aliases and such too (#2082131)
+- shared/install: return failure when enablement fails, but process as much as possible (#2082131)
+- systemctl: fix silent failure when --root is not found (#2082131)
+- shared/install: also check for self-aliases during installation and ignore them (#2082131)
+- docs: Correct WantedBy= regarding template units (#2082131)
+- man: fix invalid description of template handling in WantedBy= (#2082131)
+- shared/install: drop unnecessary casts (#2082131)
+- strv: make iterator in STRV_FOREACH() declaread in the loop (#2082131)
+- core: ExecContext::restrict_filesystems is set of string (#2082131)
+- install: when linking a file, create the link first or abort (#2082131)
+- shared/install: split unit_file_{disable,enable}() so _reenable doesn't do setup twice (#2082131)
+- shared/install: fix reenable on linked unit files (#2082131)
+- test-systemctl-enable: extend the test for repeated WantedBy/RequiredBy (#2082131)
+- shared/install: when we fail to chase a symlink, show some logs (#2082131)
+- shared/install: do not try to resolve symlinks outside of root directory (#2082131)
+- test-systemctl-enable: enhance the test for unit file linking (#2082131)
+- shared/install: skip unnecessary chasing of symlinks in disable (#2082131)
+- shared/install: also remove symlinks like .wants/foo@one.service → ../foo@one.service (#2082131)
+- shared/install: create relative symlinks for enablement and aliasing (#2082131)
+- shared/install: when looking for symlinks in .wants/.requires, ignore symlink target (#2082131)
+- shared/install: stop passing duplicate root argument to install_name_printf() (#2082131)
+- basic/unit-file: reverse negative conditional (#2082131)
+- shared/install: split UNIT_FILE_SYMLINK into two states (#2082131)
+- shared/install: fix handling of a linked unit file (#2082131)
+- test-systemctl-enable: make shellcheck happy (#2082131)
+- shared/install: when creating symlinks, accept different but equivalent symlinks (#2082131)
+- test-systemctl-enable: use magic syntax to allow inverted tests (#2082131)
+- test-systemctl-enable: also use freshly-built systemd-id128 (#2082131)
+- test-systemctl-enable: disable the test for %a for now (#2082131)
+- Rename UnitFileScope to LookupScope (#2082131)
+- core: handle lookup paths being symlinks (#2082131)
+- shared/install: use correct cleanup function (#2082131)
+- udev/net_id: avoid slot based names only for single function devices (#2073003)
+- test: import logind test from debian/ubuntu test suite (#2087652)
+- test: drop redundant IMAGE_NAME= (#2087652)
+- test: import timedated test from debian/ubuntu test suite (#2087652)
+- test: introduce assert_not_in() helper function (#2087652)
+- test: drop unnecessary --no-pager option (#2087652)
+- test: support debian/ubuntu specific timezone config file (#2087652)
+- test: import hostnamed tests from debian/ubuntu test suite (#2087652)
+- locale-util: fix memleak on failure (#2087652)
+- locale-util: check if enumerated locales are valid (#2087652)
+- locale-util: align locale entries (#2087652)
+- core: inline an iterator variable (#2087652)
+- locale-setup: merge locale handling in PID1 and localed (#2087652)
+- locale: rename keymap-util.[ch] -> localed-util.[ch] (#2087652)
+- test: add one more path to search keymaps (#2087652)
+- test: introduce inst_recursive() helper function (#2087652)
+- hmac/sha256: move size define to sha256.h (#2087652)
+- tpm2: support policies with PIN (#2087652)
+- cryptenroll: add support for TPM2 pin (#2087652)
+- cryptsetup: add support for TPM2 pin (#2087652)
+- cryptsetup: add libcryptsetup TPM2 PIN support (#2087652)
+- cryptenroll: add TPM2 PIN documentation (#2087652)
+- cryptsetup: add manual TPM2 PIN configuration (#2087652)
+- cryptenroll: add tests for TPM2 unlocking (#2087652)
+- env-util: replace unsetenv_erase() by new getenv_steal_erase() helper (#2087652)
+- test: install libxkbcommon and x11 keymaps (#2087652)
+- test: install C.UTF-8 and English locales (#2087652)
+- test: import localed tests from debian/ubuntu test suite (#2087652)
+- unit: check for mount rate limiting before checking active state (#2087652)
+- tests: make sure we delay running mount start jobs when /p/s/mountinfo is rate limited (#2087652)
+- test: insert space in for loop (#2087652)
+- test: move "do" at the end of line (#2087652)
+- test: use trap RETURN (#2087652)
+- test: ignore the error about our own libraries missing during image creation (#2087652)
+- test: wrap binaries using systemd DSOs when running w/ ASan (#2087652)
+- test: set $ASAN_RT_PATH along with $LD_PRELOAD to the ASan runtime DSO (#2087652)
+- test: drop all LD_PRELOAD-related ASan workarounds (#2087652)
+- test: don't wrap binaries built with ASan (#2087652)
+- test: send stdout/stderr of testsuite units to journal & console (#2087652)
+- test: make the busy loop in TEST-02 less verbose (#2087652)
+- test: always wrap useradd/userdel when running w/ ASan (#2087652)
+- test: don't flush debug logs to the console (#2087652)
+- test: fix a couple of issues found by shellcheck (#2087652)
+- test: pass the initdir to check_result_{qemu,nspawn} hooks (#2087652)
+- test: run the custom check hooks before common checks (#2087652)
+- test: check journal directly instead of capturing console output (#2087652)
+- test: use saved process PID instead of %% (#2087652)
+- test: account for ADDR_NO_RANDOMIZE if it's set (#2087652)
+- fuzz-bcd: silence warning about always-true comparison (#2087652)
+- test: disable test_ntp on RHEL (#2087652)
+- core: do not filter out systemd.unit= and run-level specifier from kernel command line (#2087652)
+- test: add a simple test for daemon-reexec (#2087652)
+- test: install /usr/libexec/vi as well (#2087652)
+- test: resize the terminal automagically with INTERACTIVE_DEBUG=yes (#2087652)
+- test: create an ASan wrapper for `getent` and `su` (#2087652)
+- test: mark partition bootable (#2087652)
+- test: bump the data partition size if we don't strip binaries (#2087652)
+- test: use PBKDF2 with capped iterations instead of Argon2 (#2087652)
+- locale: drop unnecessary allocation (#2087652)
+
+* Wed Apr 20 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-7
+- test: check systemd RPM macros (#2017035)
+- test: do not assume x86-64 arch in TEST-58-REPART (#2017035)
+- tests: add repart tests for block devices with 1024, 2048, 4096 byte sector sizes (#2017035)
+- test: accept both unpadded and padded partition sizes (#2017035)
+- test: lvm 2.03.15 dropped the static autoactivation (#2017035)
+- test: accept GC'ed units in newer LVM (#2017035)
+- shared: Add more dlopen() tests (#2017035)
+- systemctl: Show how long a service ran for after it exited in status output (#2017035)
+- time-util: introduce TIMESTAMP_UNIX (#2017035)
+- systemctl,man: update docs for `--timestamp=` (#2017035)
+- systemctl: make `--timestamp=` affect the `show` verb as well (#2017035)
+- tests: allow running all the services with SYSTEMD_LOG_LEVEL (#2017035)
+- coredump: raise the coredump save size on 64bit systems to 32G (and lower it to 1G on 32bit systems) (#2017035)
+- repart: fix sector size handling (#2017035)
+- mkdir: allow to create directory whose path contains symlink (#2017035)
+- mkdir: CHASE_NONEXISTENT cannot used in chase_symlinks_and_stat() (#2017035)
+- meson: move efi file lists closer to where they are used (#2017035)
+- meson: move efi summary() section to src/boot/efi (#2017035)
+- meson: report SBAT settings (#2017035)
+- boot: Build BCD parser only on arches supported by Windows (#2017035)
+- meson: Remove efi-cc option (#2017035)
+- meson: Get objcopy location from compiler (#2017035)
+- meson: Use files() for source lists for boot and fundamental (#2017035)
+- meson: Use files() for tests (#2017035)
+- tests: add fuzz-bcd (#2017035)
+- meson: Use files() for fuzzers (#2017035)
+- meson: Add check argument to remaining run_command() calls (#2017035)
+- meson: Use echo to list files (#2017035)
+- test: add a test for mkdir_p() (#2017035)
+- util: another set of CVE-2021-4034 assert()s (#2017035)
+- basic: update CIFS magic (#2017035)
+- shared: be extra paranoid and check if argc > 0 (#2017035)
+- core: check if argc > 0 and argv[0] is set (#2017035)
+- core: check argc/argv uncoditionally (#2017035)
+- test: temporary workaround for #21819 (#2017035)
+- test: don't leak local variable to outer scopes (#2017035)
+- tree-wide: don't use strjoina() on getenv() values (#2017035)
+- man: clarify Environmentfile format (#2017035)
+- test-load-fragment: add a basic test for config_parse_unit_env_file() (#2017035)
+- core/execute: use _cleanup_ in exec_context_load_environment() (#2017035)
+- test-env-file: add tests for quoting in env files (#2017035)
 
 * Wed Feb 23 2022 systemd maintenance team <systemd-maint@redhat.com> - 250-4
 - udev/net-setup-link: change the default MACAddressPolicy to "none" (#2009237)