[systemd/f20] Backport fixes, documentation, and hwdb changes
Zbigniew Jędrzejewski-Szmek
zbyszek at fedoraproject.org
Wed Jan 15 00:53:12 UTC 2014
commit b12ff759bdbdbd6eebd8183de03c0530423bcbfb
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date: Tue Jan 14 19:52:39 2014 -0500
Backport fixes, documentation, and hwdb changes
Patches which were backed out because of the freeze, are now
reapplied.
...-a-start-job-for-all-units-specified-with.patch | 46 +
...-device-ignore-SYSTEMD_WANTS-in-user-mode.patch | 3 -
...Fix-memory-leak-in-stdout-journal-streams.patch | 23 +
0143-man-document-is-enabled-output.patch | 92 +
...-hostnamed-avoid-using-NULL-in-error-path.patch | 32 +
...use-correct-who-enum-values-with-KillUnit.patch | 31 +
...emd-add-a-start-job-for-all-units-specifi.patch | 49 +
...-segfault-if-swap-activity-happens-when-p.patch | 87 +
0148-kernel-install-add-h-help.patch | 69 +
0149-kernel-install-fix-help-output.patch | 25 +
...-wording-and-comma-usage-in-systemd.journ.patch | 67 +
...l-entries-from-kbd-model-map-whose-kbd-la.patch | 84 +
...name-of-Tajik-kbd-layout-in-kbd-model-map.patch | 22 +
...-database-of-Bluetooth-company-identifier.patch | 35 +
...-is-journaled-for-short-lived-or-oneshot-.patch | 33 +
...udev-hwdb-use-libudev-not-systemd-logging.patch | 62 +
0156-core-manager-remove-infinite-loop.patch | 25 +
...util-check-for-overflow-in-greedy_realloc.patch | 34 +
0158-journald-use-a-bit-more-cleanup-magic.patch | 35 +
...rnald-malloc-less-when-streaming-messages.patch | 110 +
0160-activate-clean-up-inherited-descriptors.patch | 77 +
...-in-more-detail-how-SYSTEMD_READY-influen.patch | 95 +
...t-run-readahead-done-timers-in-containers.patch | 36 +
...-replace-mktemp-with-mkstemp-to-avoid-war.patch | 37 +
...-pipe-journalctl-help-output-into-a-pager.patch | 45 +
...plain-and-continue-if-machine-has-same-id.patch | 63 +
0166-man-beef-up-ExecStart-description.patch | 150 +
...advice-to-avoid-setting-the-same-var-more.patch | 53 +
...-add-the-plain-option-to-the-help-message.patch | 23 +
0169-Fix-a-few-resource-leaks-in-error-paths.patch | 67 +
...-few-signed-unsigned-format-string-issues.patch | 81 +
...rder-to-increase-the-send-recv-buffers-of.patch | 60 +
...o-set-SO_SNDBUF-when-spawning-a-service-w.patch | 32 +
0173-journal-file-protect-against-alloca-0.patch | 23 +
0174-man-describe-journalctl-show-cursor.patch | 42 +
...ix-against-theoretical-undefined-behavior.patch | 39 +
...wngrade-warning-message-when-dev-kmsg-doe.patch | 24 +
...e.c-remove-redundant-assignment-of-variab.patch | 24 +
...-stop-a-running-user-manager-from-garbage.patch | 33 +
...ices-received-from-udev-are-always-initia.patch | 157 +
...eopen-dev-console-each-time-we-call-log_o.patch | 49 +
...-log-to-dev-console-and-got-disconnected-.patch | 42 +
...en-showing-device-tree-of-seats-with-no-d.patch | 23 +
...-explicit-about-option-arguments-that-tak.patch | 52 +
...-for-refereed-article-on-Forward-Secure-S.patch | 59 +
...zsh-completion-fix-several-issues-in-help.patch | 132 +
0186-keymap-Refactor-Acer-tables.patch | 145 +
...uce-send-timeout-to-something-more-sensib.patch | 49 +
0188-DEFAULT_PATH_SPLIT_USR-macro.patch | 43 +
...-generator-Do-not-try-to-fsck-non-devices.patch | 28 +
0190-logind-remove-dead-variable.patch | 37 +
0191-hwdb-update.patch | 4917 ++++++++++++++++++++
0192-delta-replace-readdir_r-with-readdir.patch | 31 +
0193-delta-fix-delta-for-drop-ins.patch | 375 ++
...efix-is-specified-only-show-overrides-the.patch | 251 +
...or-and-friends-add-a-newline-after-each-l.patch | 1520 ++++++
0196-man-units-tmpfiles.d-5-cleanup.patch | 401 ++
...ntroduce-the-concept-of-unsafe-operations.patch | 281 ++
...onfig-fix-useless-check-for-swapfile-type.patch | 43 +
...make-sure-b-foobar-cannot-be-misunderstoo.patch | 178 +
0200-man-resolve-word-omissions.patch | 725 +++
0201-man-improvements-to-comma-placement.patch | 507 ++
0202-man-grammar-and-wording-improvements.patch | 79 +
0203-man-document-fail-nofail-auto-noauto.patch | 130 +
...-description-of-is-enabled-returned-value.patch | 22 +
0205-man-fix-Type-reference.patch | 23 +
0206-man-fix-Type-reference-v2.patch | 37 +
...-database-of-Bluetooth-company-identifier.patch | 38 +
...-man-add-a-note-about-propagating-signals.patch | 61 +
...-man-include-autoconf-snippet-in-daemon-7.patch | 41 +
...emd-python-fix-setting-of-exception-codes.patch | 325 ++
...temd-python-fix-listen_fds-under-Python-2.patch | 22 +
...on-some-more-subtle-points-in-systemd.soc.patch | 120 +
0213-tmpfiles-rename-unsafe-to-boot.patch | 119 +
...g-Dereference-pointer-before-check-for-NU.patch | 47 +
0215-sleep-config-fix-double-free.patch | 99 +
0216-rules-drivers-do-not-reset-RUN-list.patch | 33 +
...ager-print-info-about-interesting-signals.patch | 45 +
...e-check-if-mainpid-matches-only-if-it-is-.patch | 26 +
0219-man-typo-fix.patch | 22 +
...ap-remove-if-else-with-the-same-data-path.patch | 29 +
0221-hwdb-update.patch | 769 +++
...ournal-Add-missing-byte-order-conversions.patch | 58 +
...wdb-change-key-mappings-for-Samsung-90X3A.patch | 39 +
0224-hwdb-add-Samsung-700G.patch | 22 +
...b-remove-duplicate-entry-for-Samsung-700Z.patch | 28 +
0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch | 22 +
...gnize-different-Toshiba-Satellite-capital.patch | 26 +
0228-sleep.c-fix-typo.patch | 22 +
...nsure-that-d_type-will-be-set-on-every-fs.patch | 22 +
...n-t-allow-label_fix-to-print-ENOENT-when-.patch | 33 +
...-which-variables-will-be-expanded-in-Exec.patch | 86 +
...pport-for-Toshiba-Satellite-P75-A7200-key.patch | 28 +
...-access-to-munmapped-memory-in-sd_journal.patch | 321 ++
...t-auto-generator-skip-nonexistent-devices.patch | 32 +
...nerator-use-EBADSLT-code-when-unable-to-d.patch | 38 +
...o-not-free-space-when-disk-space-runs-low.patch | 265 ++
0237-man-add-busctl-1.patch | 239 +
kernel-install-grubby.patch | 11 +-
systemd.spec | 147 +-
100 files changed, 15507 insertions(+), 32 deletions(-)
---
diff --git a/0140-systemd-add-a-start-job-for-all-units-specified-with.patch b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch
new file mode 100644
index 0000000..269ab55
--- /dev/null
+++ b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch
@@ -0,0 +1,46 @@
+From 043a559ff3732439fc61872a6320ee0a05dd088f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 5 Dec 2013 00:41:12 -0500
+Subject: [PATCH] systemd: add a start job for all units specified with
+ SYSTEMD_WANTS=
+
+---
+ src/core/device.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index 5397bd6..610fe88 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -281,7 +281,8 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+ size_t l;
+
+ FOREACH_WORD_QUOTED(w, l, wants, state) {
+- char *e, *n;
++ _cleanup_free_ char *e, *n = NULL;
++ Unit *other;
+
+ e = strndup(w, l);
+ if (!e) {
+@@ -293,12 +294,19 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+ r = -ENOMEM;
+ goto fail;
+ }
+- free(e);
+
+ r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
+- free(n);
+ if (r < 0)
+ goto fail;
++
++ other = manager_get_unit(u->manager, n);
++ if (!other || !unit_can_start(other))
++ continue;
++
++ r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
++ if (r < 0)
++ log_warning("Failed to add job %s/%s, ignoring: %s.",
++ other->id, job_type_to_string(JOB_START), strerror(-r));
+ }
+ }
+ }
diff --git a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
index b28dbfd..de66012 100644
--- a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+++ b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
@@ -23,6 +23,3 @@ index 610fe88..e02c207 100644
char *state, *w;
size_t l;
---
-1.8.4.2
-
diff --git a/0142-Fix-memory-leak-in-stdout-journal-streams.patch b/0142-Fix-memory-leak-in-stdout-journal-streams.patch
new file mode 100644
index 0000000..7f86517
--- /dev/null
+++ b/0142-Fix-memory-leak-in-stdout-journal-streams.patch
@@ -0,0 +1,23 @@
+From 371ce08fb9814a39ca2f984d6040aaf0f6c172e8 Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan at archlinux.org>
+Date: Sun, 8 Dec 2013 14:33:45 -0600
+Subject: [PATCH] Fix memory leak in stdout journal streams
+
+Just as 'identifier' is strdup-ed and freed, we need to do the same for
+unit_id.
+---
+ src/journal/journald-stream.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 9c4efec..4080622 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -339,6 +339,7 @@ void stdout_stream_free(StdoutStream *s) {
+ #endif
+
+ free(s->identifier);
++ free(s->unit_id);
+ free(s);
+ }
+
diff --git a/0143-man-document-is-enabled-output.patch b/0143-man-document-is-enabled-output.patch
new file mode 100644
index 0000000..2f4fdd8
--- /dev/null
+++ b/0143-man-document-is-enabled-output.patch
@@ -0,0 +1,92 @@
+From 77e9da01ad6383aab4d50a00b705ec96f16cb55e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 8 Dec 2013 18:56:16 -0500
+Subject: [PATCH] man: document 'is-enabled' output
+
+https://bugzilla.redhat.com/show_bug.cgi?id=953077
+---
+ man/systemctl.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 59 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 166282c..b4bc15d 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -437,7 +437,7 @@ systemctl start foo
+
+ <listitem>
+ <para>When used with <command>enable</command>,
+- <command>disable</command>, <command>is-enabled</command>
++ <command>disable</command>,
+ (and related commands), make changes only temporarily, so
+ that they are lost on the next reboot. This will have the
+ effect that changes are not made in subdirectories of
+@@ -885,10 +885,64 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+
+ <listitem>
+ <para>Checks whether any of the specified unit files are
+- enabled (as with <command>enable</command>). Returns an exit
+- code of 0 if at least one is enabled, non-zero
+- otherwise. Prints the current enable status. To suppress
+- this output, use <option>--quiet</option>.</para>
++ enabled (as with <command>enable</command>). Returns an
++ exit code of 0 if at least one is enabled, non-zero
++ otherwise. Prints the current enable status (see table).
++ To suppress this output, use <option>--quiet</option>.
++ </para>
++
++ <table>
++ <title>
++ <command>is-enabled</command> output
++ </title>
++
++ <tgroup cols='3'>
++ <thead>
++ <row>
++ <entry>Printed string</entry>
++ <entry>Meaning</entry>
++ <entry>Return value</entry>
++ </row>
++ </thead>
++ <tbody>
++ <row>
++ <entry><literal>enabled</literal></entry>
++ <entry morerows='1'>Enabled through a symlink in <filename>.wants</filename> directory (permanently or just in <filename>/run</filename>)</entry>
++ <entry morerows='1'>0</entry>
++ </row>
++ <row>
++ <entry><literal>enabled-runtime</literal></entry>
++ </row>
++ <row>
++ <entry><literal>linked</literal></entry>
++ <entry morerows='1'>Made available through a symlink to the unit file (permanently or just in <filename>/run</filename>)</entry>
++ <entry morerows='1'>1</entry>
++ </row>
++ <row>
++ <entry><literal>linked-runtime</literal></entry>
++ </row>
++ <row>
++ <entry><literal>masked</literal></entry>
++ <entry morerows='1'>Disabled entirely (permanently or just in <filename>/run</filename>)</entry>
++ <entry morerows='1'>1</entry>
++ </row>
++ <row>
++ <entry><literal>masked-runtime</literal></entry>
++ </row>
++ <row>
++ <entry><literal>static</literal></entry>
++ <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
++ <entry>1</entry>
++ </row>
++ <row>
++ <entry><literal>disabled</literal></entry>
++ <entry>Unit is not enabled</entry>
++ <entry>1</entry>
++ </row>
++ </tbody>
++ </tgroup>
++ </table>
++
+ </listitem>
+ </varlistentry>
+
diff --git a/0144-hostnamed-avoid-using-NULL-in-error-path.patch b/0144-hostnamed-avoid-using-NULL-in-error-path.patch
new file mode 100644
index 0000000..8d62943
--- /dev/null
+++ b/0144-hostnamed-avoid-using-NULL-in-error-path.patch
@@ -0,0 +1,32 @@
+From d4ae9b53caa77d17528d36610ad70dd2eb1bb54c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 6 Jan 2014 12:16:55 +0000
+Subject: [PATCH] hostnamed: avoid using NULL in error path
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047335
+---
+ src/hostname/hostnamed.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index 6a43aeb..0c24b65 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -637,7 +637,7 @@ static int connect_bus(DBusConnection **_bus) {
+ if (!bus) {
+ log_error("Failed to get system D-Bus connection: %s", bus_error_message(&error));
+ r = -ECONNREFUSED;
+- goto fail;
++ goto fail2;
+ }
+
+ dbus_connection_set_exit_on_disconnect(bus, FALSE);
+@@ -669,7 +669,7 @@ static int connect_bus(DBusConnection **_bus) {
+ fail:
+ dbus_connection_close(bus);
+ dbus_connection_unref(bus);
+-
++fail2:
+ dbus_error_free(&error);
+
+ return r;
diff --git a/0145-logind-use-correct-who-enum-values-with-KillUnit.patch b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch
new file mode 100644
index 0000000..0c1d66a
--- /dev/null
+++ b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch
@@ -0,0 +1,31 @@
+From 524147c1ef991edf4432aac51c880b363b4402df Mon Sep 17 00:00:00 2001
+From: Marius Vollmer <mvollmer at redhat.com>
+Date: Thu, 31 Oct 2013 15:55:07 +0200
+Subject: [PATCH] logind: use correct "who" enum values with KillUnit.
+
+---
+ src/login/logind-dbus.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index bb85c7d..583d62e 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -2799,7 +2799,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo
+ assert(manager);
+ assert(unit);
+
+- w = who == KILL_LEADER ? "process" : "cgroup";
++ w = who == KILL_LEADER ? "control" : "all";
+ assert_cc(sizeof(signo) == sizeof(int32_t));
+
+ r = bus_method_call_with_reply(
+@@ -2815,7 +2815,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo
+ DBUS_TYPE_INT32, &signo,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+- log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
++ log_error("Failed to kill unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
diff --git a/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
new file mode 100644
index 0000000..bb465d9
--- /dev/null
+++ b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
@@ -0,0 +1,49 @@
+From 106c98f6b08d3b9254b419b09bc4ceed1963d7aa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 14 Jan 2014 17:31:00 -0500
+Subject: [PATCH] Revert "systemd: add a start job for all units specified with
+ SYSTEMD_WANTS="
+
+This reverts commit 043a559ff3732439fc61872a6320ee0a05dd088f.
+
+This was a mistake, and was reverted upstream.
+---
+ src/core/device.c | 14 +++-----------
+ 1 file changed, 3 insertions(+), 11 deletions(-)
+
+diff --git a/src/core/device.c b/src/core/device.c
+index e02c207..f79c206 100644
+--- a/src/core/device.c
++++ b/src/core/device.c
+@@ -282,8 +282,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+ size_t l;
+
+ FOREACH_WORD_QUOTED(w, l, wants, state) {
+- _cleanup_free_ char *e, *n = NULL;
+- Unit *other;
++ char *e, *n;
+
+ e = strndup(w, l);
+ if (!e) {
+@@ -295,19 +294,12 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
+ r = -ENOMEM;
+ goto fail;
+ }
++ free(e);
+
+ r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
++ free(n);
+ if (r < 0)
+ goto fail;
+-
+- other = manager_get_unit(u->manager, n);
+- if (!other || !unit_can_start(other))
+- continue;
+-
+- r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
+- if (r < 0)
+- log_warning("Failed to add job %s/%s, ignoring: %s.",
+- other->id, job_type_to_string(JOB_START), strerror(-r));
+ }
+ }
+ }
diff --git a/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
new file mode 100644
index 0000000..dd7a6a3
--- /dev/null
+++ b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
@@ -0,0 +1,87 @@
+From 85a77eea8d7114675602a33d2e067fd7c4ad0624 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 12 Jan 2014 11:38:56 -0500
+Subject: [PATCH] core: do not segfault if swap activity happens when
+ /proc/swaps is not open
+
+In https://bugzilla.redhat.com/show_bug.cgi?id=969795 systemd crashes
+in swap_dispatch_reload called from manager_loop becuase m->proc_swaps
+is NULL. It can legitimately be NULL if something went wrong when
+initially enumerating swap devices when starting the manager. This
+is probably a sign of significant trouble, but let's do our best
+to recover.
+---
+ src/core/swap.c | 45 +++++++++++++++++++++++++++++----------------
+ 1 file changed, 29 insertions(+), 16 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index 147f710..f295b65 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -1068,14 +1068,40 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) {
+ return r;
+ }
+
++static int open_proc_swaps(Manager *m) {
++ if (!m->proc_swaps) {
++ struct epoll_event ev = {
++ .events = EPOLLPRI,
++ .data.ptr = &m->swap_watch,
++ };
++
++ m->proc_swaps = fopen("/proc/swaps", "re");
++ if (!m->proc_swaps)
++ return (errno == ENOENT) ? 0 : -errno;
++
++ m->swap_watch.type = WATCH_SWAP;
++ m->swap_watch.fd = fileno(m->proc_swaps);
++
++ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
++ return -errno;
++ }
++
++ return 0;
++}
++
+ int swap_dispatch_reload(Manager *m) {
+ /* This function should go as soon as the kernel properly notifies us */
++ int r;
+
+ if (_likely_(!m->request_reload))
+ return 0;
+
+ m->request_reload = false;
+
++ r = open_proc_swaps(m);
++ if (r < 0)
++ return r;
++
+ return swap_fd_event(m, EPOLLPRI);
+ }
+
+@@ -1225,22 +1251,9 @@ static int swap_enumerate(Manager *m) {
+ int r;
+ assert(m);
+
+- if (!m->proc_swaps) {
+- struct epoll_event ev = {
+- .events = EPOLLPRI,
+- .data.ptr = &m->swap_watch,
+- };
+-
+- m->proc_swaps = fopen("/proc/swaps", "re");
+- if (!m->proc_swaps)
+- return (errno == ENOENT) ? 0 : -errno;
+-
+- m->swap_watch.type = WATCH_SWAP;
+- m->swap_watch.fd = fileno(m->proc_swaps);
+-
+- if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0)
+- return -errno;
+- }
++ r = open_proc_swaps(m);
++ if (r < 0)
++ return r;
+
+ r = swap_load_proc_swaps(m, false);
+ if (r < 0)
diff --git a/0148-kernel-install-add-h-help.patch b/0148-kernel-install-add-h-help.patch
new file mode 100644
index 0000000..fae104a
--- /dev/null
+++ b/0148-kernel-install-add-h-help.patch
@@ -0,0 +1,69 @@
+From cb5fd30c9ca64024335129d393c15a9586433ca2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 8 Dec 2013 07:46:46 -0500
+Subject: [PATCH] kernel-install: add -h/--help
+
+---
+ src/kernel-install/kernel-install | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
+index 9d3e75d..f5ff362 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -21,9 +21,9 @@
+
+ usage()
+ {
+- echo "Usage:" >&2
+- echo " $0 add <kernel-version> <kernel-image>" >&2
+- echo " $0 remove <kernel-version> <kernel-image>" >&2
++ echo "Usage:"
++ echo " $0 add KERNEL-VERSION KERNEL-IMAGE"
++ echo " $0 remove KERNEL-VERSION KERNEL-IMAGE"
+ }
+
+ dropindirs_sort()
+@@ -54,6 +54,13 @@ dropindirs_sort()
+
+ export LC_COLLATE=C
+
++for i in "$@"; do
++ if [ "$i" == "--help" -o "$i" == "-h" ]; then
++ usage
++ exit 0
++ fi
++done
++
+ if [[ "${0##*/}" == 'installkernel' ]]; then
+ COMMAND='add'
+ else
+@@ -75,7 +82,7 @@ if ! [[ $MACHINE_ID ]]; then
+ fi
+
+ if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
+- usage
++ echo "Not enough arguments" >&2
+ exit 1
+ fi
+
+@@ -90,8 +97,8 @@ readarray -t PLUGINS < <(
+
+ case $COMMAND in
+ add)
+- if [[ ! $KERNEL_IMAGE ]]; then
+- usage
++ if [[ ! "$KERNEL_IMAGE" ]]; then
++ echo "Command 'add' requires an argument" >&2
+ exit 1
+ fi
+
+@@ -121,7 +128,7 @@ case $COMMAND in
+ ;;
+
+ *)
+- usage
++ echo "Unknown command '$COMMAND'" >&2
+ exit 1
+ ;;
+ esac
diff --git a/0149-kernel-install-fix-help-output.patch b/0149-kernel-install-fix-help-output.patch
new file mode 100644
index 0000000..2ed9d61
--- /dev/null
+++ b/0149-kernel-install-fix-help-output.patch
@@ -0,0 +1,25 @@
+From 245b830c77bfbac0346bd1df3fa5d6b81d77014a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <seblu at seblu.net>
+Date: Thu, 5 Dec 2013 02:55:05 +0100
+Subject: [PATCH] kernel-install: fix help output
+
+Kernel install doesn't need the second argument on his command line when
+removing.
+This is correctly documented in the man page.
+---
+ 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 f5ff362..3ae1d77 100644
+--- a/src/kernel-install/kernel-install
++++ b/src/kernel-install/kernel-install
+@@ -23,7 +23,7 @@ usage()
+ {
+ echo "Usage:"
+ echo " $0 add KERNEL-VERSION KERNEL-IMAGE"
+- echo " $0 remove KERNEL-VERSION KERNEL-IMAGE"
++ echo " $0 remove KERNEL-VERSION"
+ }
+
+ dropindirs_sort()
diff --git a/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
new file mode 100644
index 0000000..69eb561
--- /dev/null
+++ b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
@@ -0,0 +1,67 @@
+From 07e7e0378c3f2b73e56e886f7a4b59068dbbbc55 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 10 Dec 2013 00:10:03 -0500
+Subject: [PATCH] man: improve wording and comma usage in
+ systemd.journal-fields(7)
+
+Improve wording under "Description" and "_KERNEL_DEVICE="
+---
+ man/systemd.journal-fields.xml | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml
+index 8a15598..bb89ed5 100644
+--- a/man/systemd.journal-fields.xml
++++ b/man/systemd.journal-fields.xml
+@@ -51,14 +51,14 @@
+ <title>Description</title>
+
+ <para>Entries in the journal resemble an environment
+- block in their syntax, however with fields that can
++ block in their syntax but with fields that can
+ include binary data. Primarily, fields are formatted
+ UTF-8 text strings, and binary formatting is used only
+ where formatting as UTF-8 text strings makes little
+ sense. New fields may freely be defined by
+ applications, but a few fields have special
+ meaning. All fields with special meanings are
+- optional. In some cases fields may appear more than
++ optional. In some cases, fields may appear more than
+ once per entry.</para>
+ </refsect1>
+
+@@ -176,7 +176,7 @@
+ <term><varname>_UID=</varname></term>
+ <term><varname>_GID=</varname></term>
+ <listitem>
+- <para>The process, user and
++ <para>The process, user, and
+ group ID of the process the
+ journal entry originates from
+ formatted as a decimal
+@@ -190,7 +190,7 @@
+ <term><varname>_CMDLINE=</varname></term>
+ <listitem>
+ <para>The name, the executable
+- path and the command line of
++ path, and the command line of
+ the process the journal entry
+ originates from.</para>
+ </listitem>
+@@ -389,12 +389,12 @@
+ the major and minor of the
+ device node, separated by <literal>:</literal>
+ and prefixed by <literal>b</literal>. Similar
+- for character devices, but
++ for character devices but
+ prefixed by <literal>c</literal>. For network
+- devices the interface index,
++ devices, this is the interface index
+ prefixed by <literal>n</literal>. For all other
+- devices <literal>+</literal> followed by the
+- subsystem name, followed by
++ devices, this is the subsystem name
++ prefixed by <literal>+</literal>, followed by
+ <literal>:</literal>, followed by the kernel
+ device name.</para>
+ </listitem>
diff --git a/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
new file mode 100644
index 0000000..6dceeae
--- /dev/null
+++ b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
@@ -0,0 +1,84 @@
+From 26dcf06766bc1fc533d301831838e9e302315134 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam at redhat.com>
+Date: Mon, 9 Dec 2013 21:58:34 -0800
+Subject: [PATCH] drop several entries from kbd-model-map whose kbd layouts do
+ not exist
+
+kbd-model-map was generated from system-config-keyboard's keyboard_models.py.
+Several of the kbd layouts referred in that file do not exist and, so far as I
+can tell, never did. I believe these entries existed simply to provide the xkb
+configuration information for those layouts, and there never were matching kbd
+entries; the kbd names were entirely notional, to satisfy the need for some
+entry or other in that field.
+
+For systemd, the only function of kbd-model-map is to 'match' kbd and xkb
+configurations, so it does not make any sense to maintain entries for cases
+where only one or the other exists in this context.
+---
+ src/locale/kbd-model-map | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 1fe9bca..78c7887 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -4,22 +4,18 @@ sg ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp
+ nl nl pc105 - terminate:ctrl_alt_bksp
+ mk-utf mk,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ trq tr pc105 - terminate:ctrl_alt_bksp
+-guj in,us pc105 guj terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ uk gb pc105 - terminate:ctrl_alt_bksp
+ is-latin1 is pc105 - terminate:ctrl_alt_bksp
+ de de pc105 - terminate:ctrl_alt_bksp
+-gur gur,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ la-latin1 latam pc105 - terminate:ctrl_alt_bksp
+ us us pc105+inet - terminate:ctrl_alt_bksp
+ ko kr pc105 - terminate:ctrl_alt_bksp
+ ro-std ro pc105 std terminate:ctrl_alt_bksp
+ de-latin1 de pc105 - terminate:ctrl_alt_bksp
+-tml-inscript in,us pc105 tam terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ slovene si pc105 - terminate:ctrl_alt_bksp
+ hu101 hu pc105 qwerty terminate:ctrl_alt_bksp
+ jp106 jp jp106 - terminate:ctrl_alt_bksp
+ croat hr pc105 - terminate:ctrl_alt_bksp
+-ben-probhat in,us pc105 ben_probhat terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fi-latin1 fi pc105 - terminate:ctrl_alt_bksp
+ it2 it pc105 - terminate:ctrl_alt_bksp
+ hu hu pc105 - terminate:ctrl_alt_bksp
+@@ -29,7 +25,6 @@ fr_CH ch pc105 fr terminate:ctrl_alt_bksp
+ dk-latin1 dk pc105 - terminate:ctrl_alt_bksp
+ fr fr pc105 - terminate:ctrl_alt_bksp
+ it it pc105 - terminate:ctrl_alt_bksp
+-tml-uni in,us pc105 tam_TAB terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ ua-utf ua,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin1 fr pc105 - terminate:ctrl_alt_bksp
+ sg-latin1 ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp
+@@ -39,16 +34,12 @@ fr-pc fr pc105 - terminate:ctrl_alt_bksp
+ bg_pho-utf8 bg,us pc105 ,phonetic terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ it-ibm it pc105 - terminate:ctrl_alt_bksp
+ cz-us-qwertz cz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-digits ara,us pc105 digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ br-abnt2 br abnt2 - terminate:ctrl_alt_bksp
+ ro ro pc105 - terminate:ctrl_alt_bksp
+ us-acentos us pc105 intl terminate:ctrl_alt_bksp
+ pt-latin1 pt pc105 - terminate:ctrl_alt_bksp
+ ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp
+ tj tj pc105 - terminate:ctrl_alt_bksp
+-ar-qwerty ara,us pc105 qwerty terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-azerty-digits ara,us pc105 azerty_digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ben in,us pc105 ben terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp
+ no no pc105 - terminate:ctrl_alt_bksp
+ bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+@@ -60,11 +51,8 @@ pl2 pl pc105 - terminate:ctrl_alt_bksp
+ es es pc105 - terminate:ctrl_alt_bksp
+ ro-cedilla ro pc105 cedilla terminate:ctrl_alt_bksp
+ ie ie pc105 - terminate:ctrl_alt_bksp
+-ar-azerty ara,us pc105 azerty terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+-ar-qwerty-digits ara,us pc105 qwerty_digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ et ee pc105 - terminate:ctrl_alt_bksp
+ sk-qwerty sk pc105 - terminate:ctrl_alt_bksp,qwerty
+-dev dev,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ fr-latin9 fr pc105 latin9 terminate:ctrl_alt_bksp
+ fr_CH-latin1 ch pc105 fr terminate:ctrl_alt_bksp
+ cf ca pc105 - terminate:ctrl_alt_bksp
diff --git a/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
new file mode 100644
index 0000000..b64a443
--- /dev/null
+++ b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
@@ -0,0 +1,22 @@
+From bc0cbe40cbfde7e8194f6f4b9b17e7102efa35c7 Mon Sep 17 00:00:00 2001
+From: Adam Williamson <awilliam at redhat.com>
+Date: Mon, 9 Dec 2013 22:02:25 -0800
+Subject: [PATCH] correct name of Tajik kbd layout in kbd-model-map
+
+---
+ src/locale/kbd-model-map | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index 78c7887..322c0a9 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -39,7 +39,7 @@ ro ro pc105 - terminate:ctrl_alt_bksp
+ us-acentos us pc105 intl terminate:ctrl_alt_bksp
+ pt-latin1 pt pc105 - terminate:ctrl_alt_bksp
+ ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp
+-tj tj pc105 - terminate:ctrl_alt_bksp
++tj_alt-UTF8 tj pc105 - terminate:ctrl_alt_bksp
+ de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp
+ no no pc105 - terminate:ctrl_alt_bksp
+ bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
diff --git a/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..15b0ddc
--- /dev/null
+++ b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,35 @@
+From 4ee475e4786ac69b74a75fd668f0bb8e07bdde2d Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Tue, 10 Dec 2013 03:17:39 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index dcc25bb..6f8301f 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -821,3 +821,21 @@ bluetooth:v010F*
+
+ bluetooth:v0110*
+ ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd.
++
++bluetooth:v0111*
++ ID_VENDOR_FROM_DATABASE=Steelseries ApS
++
++bluetooth:v0112*
++ ID_VENDOR_FROM_DATABASE=vyzybl Inc.
++
++bluetooth:v0113*
++ ID_VENDOR_FROM_DATABASE=Openbrain Technologies, Co., Ltd.
++
++bluetooth:v0114*
++ ID_VENDOR_FROM_DATABASE=Xensr
++
++bluetooth:v0115*
++ ID_VENDOR_FROM_DATABASE=e.solutions
++
++bluetooth:v0116*
++ ID_VENDOR_FROM_DATABASE=1OAK Technologies
diff --git a/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
new file mode 100644
index 0000000..9c35091
--- /dev/null
+++ b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
@@ -0,0 +1,33 @@
+From d8b3047ccb52c2b55683f2fe12f0674f63d746cb Mon Sep 17 00:00:00 2001
+From: Dan McGee <dan at archlinux.org>
+Date: Sun, 8 Dec 2013 13:27:05 -0600
+Subject: [PATCH] Ensure unit is journaled for short-lived or oneshot processes
+
+In the time it takes to process incoming log messages, the process we
+are logging details for may exit. This means the cgroup data is no
+longer available from '/proc'. Unfortunately, the way the code was
+structured before, we never log _SYSTEMD_UNIT if we don't have this
+cgroup information.
+
+Add an else if case that allows the passed in unit_id to be logged even
+if we couldn't capture cgroup information. This ensures a command like
+`journalctl -u run-XXX` will return all log messages from a oneshot
+process.
+---
+ src/journal/journald-server.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index a0a8e9c..1fcb3d5 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -626,6 +626,9 @@ static void dispatch_message_real(
+ }
+
+ free(c);
++ } else if (unit_id) {
++ x = strappenda("_SYSTEMD_UNIT=", unit_id);
++ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ #ifdef HAVE_SELINUX
diff --git a/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
new file mode 100644
index 0000000..e4f88c0
--- /dev/null
+++ b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
@@ -0,0 +1,62 @@
+From 4c5b792c88c81d0595a1273804d2cd405140f81d Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 10 Dec 2013 16:36:45 +0100
+Subject: [PATCH] libudev: hwdb - use libudev not systemd logging
+
+---
+ src/libudev/libudev-hwdb.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
+index de1cb83..ba43b9f 100644
+--- a/src/libudev/libudev-hwdb.c
++++ b/src/libudev/libudev-hwdb.c
+@@ -277,38 +277,38 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
+
+ hwdb->f = fopen("/etc/udev/hwdb.bin", "re");
+ if (!hwdb->f) {
+- log_debug("error reading /etc/udev/hwdb.bin: %m");
++ udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m");
+ udev_hwdb_unref(hwdb);
+ return NULL;
+ }
+
+ if (fstat(fileno(hwdb->f), &hwdb->st) < 0 ||
+ (size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) {
+- log_debug("error reading /etc/udev/hwdb.bin: %m");
++ udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m");
+ udev_hwdb_unref(hwdb);
+ return NULL;
+ }
+
+ hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0);
+ if (hwdb->map == MAP_FAILED) {
+- log_debug("error mapping /etc/udev/hwdb.bin: %m");
++ udev_dbg(udev, "error mapping /etc/udev/hwdb.bin: %m");
+ udev_hwdb_unref(hwdb);
+ return NULL;
+ }
+
+ if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 ||
+ (size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) {
+- log_debug("error recognizing the format of /etc/udev/hwdb.bin");
++ udev_dbg(udev, "error recognizing the format of /etc/udev/hwdb.bin");
+ udev_hwdb_unref(hwdb);
+ return NULL;
+ }
+
+- log_debug("=== trie on-disk ===\n");
+- log_debug("tool version: %"PRIu64, le64toh(hwdb->head->tool_version));
+- log_debug("file size: %8llu bytes\n", (unsigned long long) hwdb->st.st_size);
+- log_debug("header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
+- log_debug("strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
+- log_debug("nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
++ udev_dbg(udev, "=== trie on-disk ===\n");
++ udev_dbg(udev, "tool version: %"PRIu64, le64toh(hwdb->head->tool_version));
++ udev_dbg(udev, "file size: %8llu bytes\n", (unsigned long long) hwdb->st.st_size);
++ udev_dbg(udev, "header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
++ udev_dbg(udev, "strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
++ udev_dbg(udev, "nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
+ return hwdb;
+ }
+
diff --git a/0156-core-manager-remove-infinite-loop.patch b/0156-core-manager-remove-infinite-loop.patch
new file mode 100644
index 0000000..53e8f4c
--- /dev/null
+++ b/0156-core-manager-remove-infinite-loop.patch
@@ -0,0 +1,25 @@
+From 906a89f8e60c9a39610afd7edbc41f79a3c711e7 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Tue, 10 Dec 2013 09:28:26 -0800
+Subject: [PATCH] core/manager: remove infinite loop
+
+---
+ src/core/manager.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 944c196..a34a3c6 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -2285,10 +2285,8 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+ }
+
+ finish:
+- if (ferror(f)) {
++ if (ferror(f))
+ r = -EIO;
+- goto finish;
+- }
+
+ assert(m->n_reloading > 0);
+ m->n_reloading --;
diff --git a/0157-util-check-for-overflow-in-greedy_realloc.patch b/0157-util-check-for-overflow-in-greedy_realloc.patch
new file mode 100644
index 0000000..9cdcc40
--- /dev/null
+++ b/0157-util-check-for-overflow-in-greedy_realloc.patch
@@ -0,0 +1,34 @@
+From b7b1af75b9f76f3bff35369b0c1666890c586144 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 10 Dec 2013 18:53:03 +0000
+Subject: [PATCH] util: check for overflow in greedy_realloc()
+
+Conflicts:
+ src/shared/util.c
+---
+ src/shared/util.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 1510c5e..02bae90 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -5832,10 +5832,18 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) {
+ size_t a;
+ void *q;
+
++ assert(p);
++ assert(allocated);
++
+ if (*allocated >= need)
+ return *p;
+
+ a = MAX(64u, need * 2);
++
++ /* check for overflows */
++ if (a < need)
++ return NULL;
++
+ q = realloc(*p, a);
+ if (!q)
+ return NULL;
diff --git a/0158-journald-use-a-bit-more-cleanup-magic.patch b/0158-journald-use-a-bit-more-cleanup-magic.patch
new file mode 100644
index 0000000..2338479
--- /dev/null
+++ b/0158-journald-use-a-bit-more-cleanup-magic.patch
@@ -0,0 +1,35 @@
+From ce69ab385535d23bec04018941b0cda19d2d4855 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 10 Dec 2013 19:51:47 +0000
+Subject: [PATCH] journald: use a bit more cleanup magic!
+
+---
+ src/journal/journald-stream.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 4080622..771a2bd 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -75,7 +75,7 @@ struct StdoutStream {
+
+ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ struct iovec iovec[N_IOVEC_META_FIELDS + 5];
+- char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
++ _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
+ unsigned n = 0;
+ int priority;
+ char *label = NULL;
+@@ -128,12 +128,6 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ #endif
+
+ server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0);
+-
+- free(message);
+- free(syslog_priority);
+- free(syslog_facility);
+- free(syslog_identifier);
+-
+ return 0;
+ }
+
diff --git a/0159-journald-malloc-less-when-streaming-messages.patch b/0159-journald-malloc-less-when-streaming-messages.patch
new file mode 100644
index 0000000..362b36d
--- /dev/null
+++ b/0159-journald-malloc-less-when-streaming-messages.patch
@@ -0,0 +1,110 @@
+From feaaf9358a0bd619ef77dca732aa08e21f5c1a56 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 10 Dec 2013 06:17:01 -0500
+Subject: [PATCH] journald: malloc less when streaming messages
+
+---
+ src/journal/journald-stream.c | 23 ++++++++++++-----------
+ src/journal/journald-syslog.c | 4 ++--
+ src/journal/journald-syslog.h | 2 +-
+ 3 files changed, 15 insertions(+), 14 deletions(-)
+
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 771a2bd..aae381b 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -75,9 +75,11 @@ struct StdoutStream {
+
+ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ struct iovec iovec[N_IOVEC_META_FIELDS + 5];
+- _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL;
+- unsigned n = 0;
+ int priority;
++ char syslog_priority[] = "PRIORITY=\0";
++ char syslog_facility[sizeof("SYSLOG_FACILITY=") + DECIMAL_STR_MAX(priority)];
++ _cleanup_free_ char *message = NULL, *syslog_identifier = NULL;
++ unsigned n = 0;
+ char *label = NULL;
+ size_t label_len = 0;
+
+@@ -90,7 +92,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+ priority = s->priority;
+
+ if (s->level_prefix)
+- syslog_parse_priority((char**) &p, &priority, false);
++ syslog_parse_priority(&p, &priority, false);
+
+ if (s->forward_to_syslog || s->server->forward_to_syslog)
+ server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
+@@ -103,12 +105,13 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
+
+ IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=stdout");
+
+- if (asprintf(&syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK) >= 0)
+- IOVEC_SET_STRING(iovec[n++], syslog_priority);
++ syslog_priority[strlen("PRIORITY=")] = '0' + LOG_PRI(priority);
++ IOVEC_SET_STRING(iovec[n++], syslog_priority);
+
+- if (priority & LOG_FACMASK)
+- if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0)
+- IOVEC_SET_STRING(iovec[n++], syslog_facility);
++ if (priority & LOG_FACMASK) {
++ snprintf(syslog_facility, sizeof(syslog_facility), "SYSLOG_FACILITY=%i", LOG_FAC(priority));
++ IOVEC_SET_STRING(iovec[n++], syslog_facility);
++ }
+
+ if (s->identifier) {
+ syslog_identifier = strappend("SYSLOG_IDENTIFIER=", s->identifier);
+@@ -408,7 +411,7 @@ fail:
+
+ int server_open_stdout_socket(Server *s) {
+ int r;
+- struct epoll_event ev;
++ struct epoll_event ev = { .events = EPOLLIN };
+
+ assert(s);
+
+@@ -441,8 +444,6 @@ int server_open_stdout_socket(Server *s) {
+ } else
+ fd_nonblock(s->stdout_fd, 1);
+
+- zero(ev);
+- ev.events = EPOLLIN;
+ ev.data.fd = s->stdout_fd;
+ if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, s->stdout_fd, &ev) < 0) {
+ log_error("Failed to add stdout server fd to epoll object: %m");
+diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
+index c2770a5..5d9b665 100644
+--- a/src/journal/journald-syslog.c
++++ b/src/journal/journald-syslog.c
+@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
+ return e;
+ }
+
+-void syslog_parse_priority(char **p, int *priority, bool with_facility) {
++void syslog_parse_priority(const char **p, int *priority, bool with_facility) {
+ int a = 0, b = 0, c = 0;
+ int k;
+
+@@ -365,7 +365,7 @@ void server_process_syslog_message(
+ assert(buf);
+
+ orig = buf;
+- syslog_parse_priority((char**) &buf, &priority, true);
++ syslog_parse_priority(&buf, &priority, true);
+
+ if (s->forward_to_syslog)
+ forward_syslog_raw(s, priority, orig, ucred, tv);
+diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h
+index 8ccdb77..057ea79 100644
+--- a/src/journal/journald-syslog.h
++++ b/src/journal/journald-syslog.h
+@@ -25,7 +25,7 @@
+
+ int syslog_fixup_facility(int priority) _const_;
+
+-void syslog_parse_priority(char **p, int *priority, bool with_facility);
++void syslog_parse_priority(const char **p, int *priority, bool with_facility);
+ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid);
+
+ void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
diff --git a/0160-activate-clean-up-inherited-descriptors.patch b/0160-activate-clean-up-inherited-descriptors.patch
new file mode 100644
index 0000000..8776646
--- /dev/null
+++ b/0160-activate-clean-up-inherited-descriptors.patch
@@ -0,0 +1,77 @@
+From 9b618fb2369046434ced28fe1420d8d5c75cd46e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 10 Dec 2013 21:52:11 -0500
+Subject: [PATCH] activate: clean up inherited descriptors
+
+> [simon at troela server]$ /usr/lib/systemd/systemd-activate -l 9000 main.js
+> Assertion 'fd == 3 + count' failed at src/activate/activate.c:115,
+> function open_sockets(). Aborting.
+> Aborted (core dumped)
+
+> after a bit debuging i found the problem:
+> slim appears to leak an fd into all of its children:
+> stat /proc/14004/fd/3 (14004 is the pid a random process in my session)
+> File: '/proc/14004/fd/3' -> '/var/log/slim.log'
+
+systemd-activate should be robust against the shell (or anything else) leaking
+descriptors. Now everything except stdin/stdout/stderr and received sockets
+will be closed.
+---
+ src/activate/activate.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/activate/activate.c b/src/activate/activate.c
+index a9461bc..6aa8b9f 100644
+--- a/src/activate/activate.c
++++ b/src/activate/activate.c
+@@ -137,6 +137,17 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ count ++;
+ }
+
++ /* Close logging and all other descriptors */
++ if (arg_listen) {
++ int except[3 + n];
++
++ for (fd = 0; fd < SD_LISTEN_FDS_START + n; fd++)
++ except[fd] = fd;
++
++ log_close();
++ close_all_fds(except, 3 + n);
++ }
++
+ /** Note: we leak some fd's on error here. I doesn't matter
+ * much, since the program will exit immediately anyway, but
+ * would be a pain to fix.
+@@ -147,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
+
+ fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
+ if (fd < 0) {
++ log_open();
+ log_error("Failed to open '%s': %s", *address, strerror(-fd));
+ return fd;
+ }
+@@ -154,6 +166,9 @@ static int open_sockets(int *epoll_fd, bool accept) {
+ count ++;
+ }
+
++ if (arg_listen)
++ log_open();
++
+ *epoll_fd = epoll_create1(EPOLL_CLOEXEC);
+ if (*epoll_fd < 0) {
+ log_error("Failed to create epoll object: %m");
+@@ -298,10 +313,10 @@ static void sigchld_hdl(int sig, siginfo_t *t, void *data) {
+
+ static int install_chld_handler(void) {
+ int r;
+- struct sigaction act;
+- zero(act);
+- act.sa_flags = SA_SIGINFO;
+- act.sa_sigaction = sigchld_hdl;
++ struct sigaction act = {
++ .sa_flags = SA_SIGINFO,
++ .sa_sigaction = sigchld_hdl,
++ };
+
+ r = sigaction(SIGCHLD, &act, 0);
+ if (r < 0)
diff --git a/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
new file mode 100644
index 0000000..297de17
--- /dev/null
+++ b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
@@ -0,0 +1,95 @@
+From bb9c2f82137bb6d1a352341eb81ed2a0ac96d4cb Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 11 Dec 2013 18:38:51 +0100
+Subject: [PATCH] man: explain in more detail how SYSTEMD_READY= influences
+ SYSTEMD_WANTS= in udev rules
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1026860
+---
+ man/systemd.device.xml | 45 +++++++++++++++++++++++++++++++--------------
+ 1 file changed, 31 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 96ebe89..002b647 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -70,12 +70,15 @@
+ since no device-specific options may be
+ configured.</para>
+
+- <para>systemd will automatically create dynamic device
+- units for all kernel devices that are marked with the
+- "systemd" udev tag (by default all block and network
+- devices, and a few others). This may be used to define
+- dependencies between devices and other
+- units.</para>
++ <para>systemd will dynamically create device units for
++ all kernel devices that are marked with the "systemd"
++ udev tag (by default all block and network devices,
++ and a few others). This may be used to define
++ dependencies between devices and other units. To tag a
++ udev device use <literal>TAG+="systemd"</literal> in
++ the udev rules file, see
++ <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
++ for details.</para>
+
+ <para>Device units are named after the
+ <filename>/sys</filename> and
+@@ -93,7 +96,7 @@
+
+ <para>The settings of device units may either be
+ configured via unit files, or directly from the udev
+- database (which is recommended). The following udev
++ database (which is recommended). The following udev device
+ properties are understood by systemd:</para>
+
+ <variablelist class='udev-directives'>
+@@ -101,16 +104,26 @@
+ <term><varname>SYSTEMD_WANTS=</varname></term>
+ <listitem><para>Adds dependencies of
+ type <varname>Wants</varname> from
+- this unit to all listed units. This
++ the device unit to all listed units. This
+ may be used to activate arbitrary
+- units, when a specific device becomes
++ units when a specific device becomes
+ available. Note that this and the
+ other tags are not taken into account
+ unless the device is tagged with the
+ <literal>systemd</literal> string in
+ the udev database, because otherwise
+ the device is not exposed as systemd
+- unit.</para></listitem>
++ unit (see above). Note that systemd
++ will only act on
++ <varname>Wants</varname> dependencies
++ when a device first becomes active, it
++ will not act on them if they are added
++ to devices that are already
++ active. Use
++ <varname>SYSTEMD_READY=</varname> (see
++ below) to influence on which udev
++ event to trigger the device
++ dependencies.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -135,10 +148,14 @@
+ device disappears from the udev
+ tree. This option is useful to support
+ devices that initially show up in an
+- uninitialized state in the tree, and for
+- which a changed event is generated the
+- moment they are fully set
+- up.</para></listitem>
++ uninitialized state in the tree, and
++ for which a <literal>changed</literal>
++ event is generated the moment they are
++ fully set up. Note that
++ <varname>SYSTEMD_WANTS=</varname> (see
++ above) is not acted on as long as
++ <varname>SYSTEMD_READY=0</varname> is
++ set for a device.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0162-units-don-t-run-readahead-done-timers-in-containers.patch b/0162-units-don-t-run-readahead-done-timers-in-containers.patch
new file mode 100644
index 0000000..ac5f405
--- /dev/null
+++ b/0162-units-don-t-run-readahead-done-timers-in-containers.patch
@@ -0,0 +1,36 @@
+From 3fa582ff9d4bea413a7a0e301b7dbca6b33382b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 11 Dec 2013 23:31:34 +0100
+Subject: [PATCH] units: don't run readahead done timers in containers
+
+We don't run the collector in the container either, hence we don't need
+to stop it either.
+---
+ units/systemd-readahead-done.service.in | 1 +
+ units/systemd-readahead-done.timer | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/units/systemd-readahead-done.service.in b/units/systemd-readahead-done.service.in
+index c3b2ac5..e0d9579 100644
+--- a/units/systemd-readahead-done.service.in
++++ b/units/systemd-readahead-done.service.in
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+
+ [Service]
+ Type=oneshot
+diff --git a/units/systemd-readahead-done.timer b/units/systemd-readahead-done.timer
+index 41bfb2b..a9f6278 100644
+--- a/units/systemd-readahead-done.timer
++++ b/units/systemd-readahead-done.timer
+@@ -12,6 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=default.target
+ Before=shutdown.target
++ConditionVirtualization=no
+
+ [Timer]
+ OnActiveSec=30s
diff --git a/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
new file mode 100644
index 0000000..db7b9d7
--- /dev/null
+++ b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
@@ -0,0 +1,37 @@
+From 622dfd7a6553cc27b6f75653481dd8808f717c49 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Thu, 12 Dec 2013 00:06:30 +0100
+Subject: [PATCH] test-fileio: replace mktemp with mkstemp to avoid warnings
+
+This is a fairly useless thing to do but it makes the compilers
+and analyzers shut up about the use of mktemp.
+---
+ src/test/test-fileio.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
+index 06f3e28..b005f3b 100644
+--- a/src/test/test-fileio.c
++++ b/src/test/test-fileio.c
+@@ -41,7 +41,9 @@ static void test_parse_env_file(void) {
+ char **i;
+ unsigned k;
+
+- assert_se(mktemp(p));
++ fd = mkstemp(p);
++ assert_se(fd >= 0);
++ close(fd);
+
+ fd = mkostemp(t, O_CLOEXEC);
+ assert_se(fd >= 0);
+@@ -152,7 +154,9 @@ static void test_parse_multiline_env_file(void) {
+ _cleanup_strv_free_ char **a = NULL, **b = NULL;
+ char **i;
+
+- assert_se(mktemp(p));
++ fd = mkstemp(p);
++ assert_se(fd >= 0);
++ close(fd);
+
+ fd = mkostemp(t, O_CLOEXEC);
+ assert_se(fd >= 0);
diff --git a/0164-journal-pipe-journalctl-help-output-into-a-pager.patch b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch
new file mode 100644
index 0000000..8e0c0ca
--- /dev/null
+++ b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch
@@ -0,0 +1,45 @@
+From 59f2f4cfd399275c3da061212fc25636ee72367f Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz at opendz.org>
+Date: Thu, 12 Dec 2013 00:22:48 +0100
+Subject: [PATCH] journal: pipe journalctl help output into a pager
+
+journalctl help output might run off the screen, so be consistent
+as other systemd tools do and pipe it into a pager.
+---
+ src/journal/journalctl.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index a5c4779..71e28b0 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -114,8 +114,18 @@ typedef struct boot_id_t {
+ uint64_t last;
+ } boot_id_t;
+
++static void pager_open_if_enabled(void) {
++
++ if (arg_no_pager)
++ return;
++
++ pager_open(arg_pager_end);
++}
++
+ static int help(void) {
+
++ pager_open_if_enabled();
++
+ printf("%s [OPTIONS...] [MATCHES...]\n\n"
+ "Query the journal.\n\n"
+ "Flags:\n"
+@@ -1635,8 +1645,8 @@ int main(int argc, char *argv[]) {
+ return EXIT_FAILURE;
+ }
+
+- if (!arg_no_pager && !arg_follow)
+- pager_open(arg_pager_end);
++ if (!arg_follow)
++ pager_open_if_enabled();
+
+ if (!arg_quiet) {
+ usec_t start, end;
diff --git a/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
new file mode 100644
index 0000000..7597fe9
--- /dev/null
+++ b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
@@ -0,0 +1,63 @@
+From bedb539662380d6a120db1e8dbb63b55d2ecac2c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 11 Dec 2013 22:00:33 -0500
+Subject: [PATCH] nspawn: complain and continue if machine has same id
+
+If --link-journal=host or --link-journal=guest is used, this totally
+cannot work and we exit with an error. If however --link-journal=auto
+or --link-journal=no is used, just display a warning.
+
+Having the same machine id can happen if booting from the same
+filesystem as the host. Since other things mostly function correctly,
+let's allow that.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=68369
+---
+ src/nspawn/nspawn.c | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 7346253..618f9c3 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -811,14 +811,11 @@ static int setup_hostname(void) {
+ }
+
+ static int setup_journal(const char *directory) {
+- sd_id128_t machine_id;
++ sd_id128_t machine_id, this_id;
+ _cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL;
+ char *id;
+ int r;
+
+- if (arg_link_journal == LINK_NO)
+- return 0;
+-
+ p = strappend(directory, "/etc/machine-id");
+ if (!p)
+ return log_oom();
+@@ -842,6 +839,24 @@ static int setup_journal(const char *directory) {
+ return r;
+ }
+
++ r = sd_id128_get_machine(&this_id);
++ if (r < 0) {
++ log_error("Failed to retrieve machine ID: %s", strerror(-r));
++ return r;
++ }
++
++ if (sd_id128_equal(machine_id, this_id)) {
++ log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
++ "Host and machine ids are equal (%s): refusing to link journals", id);
++ if (arg_link_journal == LINK_AUTO)
++ return 0;
++ return
++ -EEXIST;
++ }
++
++ if (arg_link_journal == LINK_NO)
++ return 0;
++
+ free(p);
+ p = strappend("/var/log/journal/", id);
+ q = strjoin(directory, "/var/log/journal/", id, NULL);
diff --git a/0166-man-beef-up-ExecStart-description.patch b/0166-man-beef-up-ExecStart-description.patch
new file mode 100644
index 0000000..6c1fb82
--- /dev/null
+++ b/0166-man-beef-up-ExecStart-description.patch
@@ -0,0 +1,150 @@
+From a6ba849c002fc991a290d2792573a9145f02aaf6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 17:21:55 -0500
+Subject: [PATCH] man: beef up ExecStart description
+
+We have lots of questions from people who assume that shell syntax works
+here, so let's be very explicit what is allowed and what is not. A few
+examples should also help.
+
+http://bugs.debian.org/732156
+---
+ man/systemd.service.xml | 97 ++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 80 insertions(+), 17 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 3f31c11..ca297ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -305,9 +305,10 @@
+ <term><varname>ExecStart=</varname></term>
+ <listitem><para>Commands with their
+ arguments that are executed when this
+- service is started. The first
+- argument must be an absolute path
+- name.</para>
++ service is started. For each of the
++ specified commands, the first argument
++ must be an absolute and literal path
++ to an executable.</para>
+
+ <para>When <varname>Type</varname> is
+ not <option>oneshot</option>, only one
+@@ -332,6 +333,35 @@
+ prior assignments of this option will
+ have no effect.</para>
+
++ <para>Each command line is split on
++ whitespace, with the first item being
++ the command to execute, and the
++ subsequent items being the arguments.
++ Double quotes ("...") and single
++ quotes ('...') may be used, in which
++ case everything until the next
++ matching quote becomes part of the
++ same argument. Quotes themselves are
++ removed after parsing. In addition, a
++ trailing backslash
++ (<literal>\</literal>) may be used to
++ merge lines. This syntax is intended
++ to be very similar to shell syntax,
++ but only the meta-characters and
++ expansions described in the following
++ paragraphs are understood.
++ Specifically, redirection using
++ <literal><</literal>,
++ <literal><<</literal>,
++ <literal>></literal>, and
++ <literal>>></literal>, pipes
++ using <literal>|</literal>, and
++ running programs in the background
++ using <literal>&</literal>
++ and <emphasis>other elements of shell
++ syntax are not supported</emphasis>.
++ </para>
++
+ <para>If more than one command is
+ specified, the commands are invoked
+ one by one sequentially in the order
+@@ -350,10 +380,11 @@
+ <para>The command line accepts
+ <literal>%</literal> specifiers as
+ described in
+- <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
+- that the first argument of the command
+- line (i.e. the program to execute) may
+- not include specifiers.</para>
++ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++ Note that the first argument of the
++ command line (i.e. the program to
++ execute) may not include
++ specifiers.</para>
+
+ <para>Basic environment variable
+ substitution is supported. Use
+@@ -372,9 +403,7 @@
+ more arguments. To pass literal dollar sign
+ use <literal>$$</literal>. Note that the first
+ argument (i.e. the program to execute)
+- may not be a variable, since it must
+- be a literal and absolute path
+- name.</para>
++ may not be a variable.</para>
+
+ <para>Optionally, if the absolute file
+ name is prefixed with
+@@ -402,13 +431,47 @@
+ <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+ </programlisting>
+
+- <para>For services run by a user
+- instance of systemd the special
+- environment variable
+- <varname>$MANAGERPID</varname> is set
+- to the PID of the systemd
+- instance.</para>
+- </listitem>
++ <para>Only select environment variables
++ are set for executed commands. See
++ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++ </para>
++
++ <para>Example:</para>
++ <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
++ </programlisting>
++ <para>This will execute
++ <command>/bin/echo</command> two
++ times, each time with one argument,
++ <literal>one</literal> and
++ <literal>two two</literal>,
++ respectively. Since two commands are
++ specified
++ <varname>Type=oneshot</varname> must
++ be used.</para>
++
++ <para>Example:</para>
++ <programlisting>ExecStart=/bin/echo / >/dev/null & \; \
++/bin/ls
++ </programlisting>
++ <para>This will execute
++ <command>/bin/echo</command> with five
++ arguments: <literal>/</literal>,
++ <literal>>/dev/null</literal>,
++ <literal>&</literal>,
++ <literal>;</literal>, and
++ <literal>/bin/ls</literal>.</para>
++
++ <para>Example:</para>
++ <programlisting>Environment="ONE=one" 'TWO=two two'
++ExecStart=/bin/echo $ONE $TWO ${TWO}
++ </programlisting>
++ <para>This will execute
++ <command>/bin/echo</command> with four
++ arguments: <literal>one</literal>,
++ <literal>two</literal>,
++ <literal>two</literal>, and
++ <literal>two two</literal>.</para>
++ </listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
new file mode 100644
index 0000000..b1943b1
--- /dev/null
+++ b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
@@ -0,0 +1,53 @@
+From 7c6c28dca3b75b7d0c2d067752ed917b113d90d2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 17:30:25 -0500
+Subject: [PATCH] man: remove advice to avoid setting the same var more than
+ once
+
+So far the compatibility with .desktop settings hasn't been imporant
+at all, and we do not want people to write convoluted unit
+files.
+---
+ man/systemd.service.xml | 6 +-----
+ man/systemd.unit.xml | 11 +++++++++++
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index ca297ba..8f9137c 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -321,11 +321,7 @@
+ (these semicolons must be passed as
+ separate words). Alternatively, this
+ directive may be specified more than
+- once with the same effect. However,
+- the latter syntax is not recommended
+- for compatibility with parsers
+- suitable for XDG
+- <filename>.desktop</filename> files.
++ once with the same effect.
+ Lone semicolons may be escaped as
+ <literal>\;</literal>. If the empty
+ string is assigned to this option, the
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 029392c..77127ff 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -120,6 +120,17 @@
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+
++ <para>Various settings are allowed to be specified
++ more than once, in which case the interpretation
++ depends on the setting. Often, multiple settings form
++ a list, and setting to an empty value "resets", which
++ means that previous assignments are ignored. When this
++ is allowed, it is mentioned in the description of the
++ setting. Note that using multiple assignments to the
++ same value makes the unit file incompatible with
++ parsers for the XDG <filename>.desktop</filename> file
++ format.</para>
++
+ <para>Unit files are loaded from a set of paths
+ determined during compilation, described in the next section.
+ </para>
diff --git a/0168-systemctl-add-the-plain-option-to-the-help-message.patch b/0168-systemctl-add-the-plain-option-to-the-help-message.patch
new file mode 100644
index 0000000..ec04f72
--- /dev/null
+++ b/0168-systemctl-add-the-plain-option-to-the-help-message.patch
@@ -0,0 +1,23 @@
+From c818ae0c9288afac78a1761de3bd65007448558a Mon Sep 17 00:00:00 2001
+From: Djalal Harouni <tixxdz at opendz.org>
+Date: Sun, 15 Dec 2013 00:05:38 +0100
+Subject: [PATCH] systemctl: add the --plain option to the help message
+
+---
+ src/systemctl/systemctl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index db584b2..bc9808a 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -4748,7 +4748,8 @@ static int systemctl_help(void) {
+ " --root=PATH Enable unit files in the specified root directory\n"
+ " -n --lines=INTEGER Number of journal entries to show\n"
+ " -o --output=STRING Change journal output mode (short, short-monotonic,\n"
+- " verbose, export, json, json-pretty, json-sse, cat)\n\n"
++ " verbose, export, json, json-pretty, json-sse, cat)\n"
++ " --plain Print unit dependencies as a list instead of a tree\n\n"
+ "Unit Commands:\n"
+ " list-units List loaded units\n"
+ " list-sockets List loaded sockets ordered by address\n"
diff --git a/0169-Fix-a-few-resource-leaks-in-error-paths.patch b/0169-Fix-a-few-resource-leaks-in-error-paths.patch
new file mode 100644
index 0000000..fc01bb9
--- /dev/null
+++ b/0169-Fix-a-few-resource-leaks-in-error-paths.patch
@@ -0,0 +1,67 @@
+From 010d6c4909ed75c247ff91a555c7942f9c2ce1c5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 15 Dec 2013 16:25:04 -0500
+Subject: [PATCH] Fix a few resource leaks in error paths
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+
+Conflicts:
+ src/libsystemd-bus/bus-objects.c
+ src/udev/net/link-config.c
+---
+ src/sleep/sleep.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index a56ab89..f96987f 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -57,15 +57,14 @@ static int write_mode(char **modes) {
+ return r;
+ }
+
+-static int write_state(FILE *f0, char **states) {
+- FILE _cleanup_fclose_ *f = f0;
++static int write_state(FILE **f, char **states) {
+ char **state;
+ int r = 0;
+
+ STRV_FOREACH(state, states) {
+ int k;
+
+- k = write_string_to_file(f, *state);
++ k = write_string_to_file(*f, *state);
+ if (k == 0)
+ return 0;
+ log_debug("Failed to write '%s' to /sys/power/state: %s",
+@@ -73,9 +72,9 @@ static int write_state(FILE *f0, char **states) {
+ if (r == 0)
+ r = k;
+
+- fclose(f);
+- f = fopen("/sys/power/state", "we");
+- if (!f) {
++ fclose(*f);
++ *f = fopen("/sys/power/state", "we");
++ if (!*f) {
+ log_error("Failed to open /sys/power/state: %m");
+ return -errno;
+ }
+@@ -87,7 +86,7 @@ static int write_state(FILE *f0, char **states) {
+ static int execute(char **modes, char **states) {
+ char* arguments[4];
+ int r;
+- FILE *f;
++ _cleanup_fclose_ FILE *f = NULL;
+ const char* note = strappenda("SLEEP=", arg_verb);
+
+ /* This file is opened first, so that if we hit an error,
+@@ -115,7 +114,7 @@ static int execute(char **modes, char **states) {
+ note,
+ NULL);
+
+- r = write_state(f, states);
++ r = write_state(&f, states);
+ if (r < 0)
+ return r;
+
diff --git a/0170-Fix-a-few-signed-unsigned-format-string-issues.patch b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch
new file mode 100644
index 0000000..085e455
--- /dev/null
+++ b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch
@@ -0,0 +1,81 @@
+From dca7710c31218a2292c8e3987d1e906b27bed4e9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 15 Dec 2013 16:26:27 -0500
+Subject: [PATCH] Fix a few signed/unsigned format string issues
+
+Since numbers involved are all small, behaviour was correct already.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043304
+---
+ src/shared/time-util.c | 2 +-
+ src/udev/udev-builtin-net_id.c | 21 +++++++--------------
+ 2 files changed, 8 insertions(+), 15 deletions(-)
+
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index 81d4ede..d31401b 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -382,7 +382,7 @@ void dual_timestamp_deserialize(const char *value, dual_timestamp *t) {
+ assert(value);
+ assert(t);
+
+- if (sscanf(value, "%lli %llu", &a, &b) != 2)
++ if (sscanf(value, "%llu %llu", &a, &b) != 2)
+ log_debug("Failed to parse finish timestamp value %s", value);
+ else {
+ t->realtime = a;
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 9ae8f08..9bc1946 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -166,23 +166,17 @@ out:
+
+ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+ struct udev *udev = udev_device_get_udev(names->pcidev);
+- unsigned int domain;
+- unsigned int bus;
+- unsigned int slot;
+- unsigned int func;
+- unsigned int dev_id = 0;
++ unsigned domain, bus, slot, func, dev_id = 0;
+ size_t l;
+ char *s;
+ const char *attr;
+ struct udev_device *pci = NULL;
+- char slots[256];
+- DIR *dir;
++ char slots[256], str[256];
++ _cleanup_closedir_ DIR *dir = NULL;
+ struct dirent *dent;
+- char str[256];
+- int hotplug_slot = 0;
+- int err = 0;
++ int hotplug_slot = 0, err = 0;
+
+- if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%d", &domain, &bus, &slot, &func) != 4)
++ if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4)
+ return -ENOENT;
+
+ /* kernel provided multi-device index */
+@@ -239,7 +233,6 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
+ if (hotplug_slot > 0)
+ break;
+ }
+- closedir(dir);
+
+ if (hotplug_slot > 0) {
+ s = names->pci_slot;
+@@ -341,11 +334,11 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) {
+ return -ENOENT;
+
+ /* bus num:core num */
+- if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*d:%d", &core) != 1)
++ if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*u:%u", &core) != 1)
+ return -EINVAL;
+ /* suppress the common core == 0 */
+ if (core > 0)
+- snprintf(names->bcma_core, sizeof(names->bcma_core), "b%d", core);
++ snprintf(names->bcma_core, sizeof(names->bcma_core), "b%u", core);
+
+ names->type = NET_BCMA;
+ return 0;
diff --git a/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
new file mode 100644
index 0000000..361253f
--- /dev/null
+++ b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
@@ -0,0 +1,60 @@
+From 4a0ab3a8fd59d38dabb9a7096939d8d8e8adc62f Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 16 Dec 2013 17:04:36 +0100
+Subject: [PATCH] util: try harder to increase the send/recv buffers of sockets
+
+If we have the priviliges we will try SO_SNDBUFFORCE/SO_RCVBUFFORCE and
+only fall back to SO_SNDBUF/SO_RCVBUF if that fails.
+---
+ src/shared/util.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 02bae90..8824b9b 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -4928,15 +4928,15 @@ int fd_inc_sndbuf(int fd, size_t n) {
+ socklen_t l = sizeof(value);
+
+ r = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, &l);
+- if (r >= 0 &&
+- l == sizeof(value) &&
+- (size_t) value >= n*2)
++ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+ return 0;
+
++ /* If we have the privileges we will ignore the kernel limit. */
++
+ value = (int) n;
+- r = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value));
+- if (r < 0)
+- return -errno;
++ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
++ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
++ return -errno;
+
+ return 1;
+ }
+@@ -4946,16 +4946,15 @@ int fd_inc_rcvbuf(int fd, size_t n) {
+ socklen_t l = sizeof(value);
+
+ r = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, &l);
+- if (r >= 0 &&
+- l == sizeof(value) &&
+- (size_t) value >= n*2)
++ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+ return 0;
+
+- value = (int) n;
+- r = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value));
+- if (r < 0)
+- return -errno;
++ /* If we have the privileges we will ignore the kernel limit. */
+
++ value = (int) n;
++ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
++ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
++ return -errno;
+ return 1;
+ }
+
diff --git a/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
new file mode 100644
index 0000000..82de044
--- /dev/null
+++ b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
@@ -0,0 +1,32 @@
+From 8d872d28194f58da2311ca88072084458dc2eb15 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 16 Dec 2013 20:00:09 +0100
+Subject: [PATCH] execute: also set SO_SNDBUF when spawning a service with
+ stdout/stderr connected to journald
+
+---
+ src/core/execute.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/core/execute.c b/src/core/execute.c
+index 58be72a..9b85379 100644
+--- a/src/core/execute.c
++++ b/src/core/execute.c
+@@ -75,6 +75,8 @@
+ /* This assumes there is a 'tty' group */
+ #define TTY_MODE 0620
+
++#define SNDBUF_SIZE (8*1024*1024)
++
+ static int shift_fds(int fds[], unsigned n_fds) {
+ int start, restart_from;
+
+@@ -232,6 +234,8 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons
+ return -errno;
+ }
+
++ fd_inc_sndbuf(fd, SNDBUF_SIZE);
++
+ dprintf(fd,
+ "%s\n"
+ "%s\n"
diff --git a/0173-journal-file-protect-against-alloca-0.patch b/0173-journal-file-protect-against-alloca-0.patch
new file mode 100644
index 0000000..953373e
--- /dev/null
+++ b/0173-journal-file-protect-against-alloca-0.patch
@@ -0,0 +1,23 @@
+From a25fd0d4bd3cf652e55c24e7dc873fe530fa111a Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Mon, 16 Dec 2013 23:35:30 +0100
+Subject: [PATCH] journal-file: protect against alloca(0)
+
+---
+ src/journal/journal-file.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 090cf97..8ea258b 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -2737,7 +2737,8 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
+ ts.realtime = le64toh(o->entry.realtime);
+
+ n = journal_file_entry_n_items(o);
+- items = alloca(sizeof(EntryItem) * n);
++ /* alloca() can't take 0, hence let's allocate at least one */
++ items = alloca(sizeof(EntryItem) * MAX(1u, n));
+
+ for (i = 0; i < n; i++) {
+ uint64_t l, h;
diff --git a/0174-man-describe-journalctl-show-cursor.patch b/0174-man-describe-journalctl-show-cursor.patch
new file mode 100644
index 0000000..e36e5b6
--- /dev/null
+++ b/0174-man-describe-journalctl-show-cursor.patch
@@ -0,0 +1,42 @@
+From 2d46a006393fe823e119a14794a931bd9bc25f74 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 16 Dec 2013 23:40:00 -0500
+Subject: [PATCH] man: describe journalctl --show-cursor
+
+---
+ man/journalctl.xml | 22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index c0cc96d..d936933 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -576,11 +576,23 @@
+ <varlistentry>
+ <term><option>--after-cursor=</option></term>
+
+- <listitem><para>Start showing entries from the
+- location in the journal
+- <emphasis>after</emphasis> the location
+- specified by the this cursor.
+- </para></listitem>
++ <listitem><para>Start showing entries
++ from the location in the journal
++ <emphasis>after</emphasis> the
++ location specified by the this cursor.
++ The cursor is shown when the
++ <option>--show-cursor</option> option
++ is used.</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--show-cursor</option></term>
++
++ <listitem><para>The cursor is shown after the last
++ entry after two dashes:</para>
++ <programlisting>-- cursor: s=0639...</programlisting>
++ <para>The format of this the cursor is private
++ and subject ot change.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0175-journal-fix-against-theoretical-undefined-behavior.patch b/0175-journal-fix-against-theoretical-undefined-behavior.patch
new file mode 100644
index 0000000..d2825e4
--- /dev/null
+++ b/0175-journal-fix-against-theoretical-undefined-behavior.patch
@@ -0,0 +1,39 @@
+From 9e32b8f531a1e15f85cce97bea931c43a9db7798 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Mon, 16 Dec 2013 15:41:00 -0800
+Subject: [PATCH] journal: fix against (theoretical) undefined behavior
+
+While all the libc implementations I know return NULL when memchr's size
+parameter is 0, without accessing any memory, passing NULL to memchr is
+still invalid:
+
+C11 7.24.1p2: Where an argument declared as "size_t n" specifies the length
+of the array for a function, n can have the value zero on a call to that
+function. Unless explicitly stated otherwise in the description of a
+particular function in this subclause, pointer arguments on such a call
+shall still have valid values, as described in 7.1.4. On such a call, a
+function that locates a character finds no occurrence, a function that
+compares two character sequences returns zero, and a function that copies
+characters copies zero characters.
+
+see http://llvm.org/bugs/show_bug.cgi?id=18247
+---
+ src/journal/journal-file.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 8ea258b..71ef092 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1010,7 +1010,10 @@ static int journal_file_append_data(
+ if (r < 0)
+ return r;
+
+- eq = memchr(data, '=', size);
++ if (!data)
++ eq = NULL;
++ else
++ eq = memchr(data, '=', size);
+ if (eq && eq > data) {
+ uint64_t fp;
+ Object *fo;
diff --git a/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
new file mode 100644
index 0000000..6936e38
--- /dev/null
+++ b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
@@ -0,0 +1,24 @@
+From 602fa0f30e4770b1f45e005a7ed9417065b0d640 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 17 Dec 2013 19:56:06 +0100
+Subject: [PATCH] journald: downgrade warning message when /dev/kmsg does not
+ exist
+
+---
+ src/journal/journald-kmsg.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
+index 21649d0..9895808 100644
+--- a/src/journal/journald-kmsg.c
++++ b/src/journal/journald-kmsg.c
+@@ -382,7 +382,8 @@ int server_open_dev_kmsg(Server *s) {
+
+ s->dev_kmsg_fd = open("/dev/kmsg", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+ if (s->dev_kmsg_fd < 0) {
+- log_warning("Failed to open /dev/kmsg, ignoring: %m");
++ log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
++ "Failed to open /dev/kmsg, ignoring: %m");
+ return 0;
+ }
+
diff --git a/0177-journal-file.c-remove-redundant-assignment-of-variab.patch b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch
new file mode 100644
index 0000000..e5baa81
--- /dev/null
+++ b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch
@@ -0,0 +1,24 @@
+From 029cd4a129832bcc750206deb05695da350efe77 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Tue, 17 Dec 2013 20:15:45 +0100
+Subject: [PATCH] journal-file.c: remove redundant assignment of variable
+
+we also do 'last_index = (uint64_t) -1;' at the end of the while
+loop so there is no reason to also do it here.
+---
+ src/journal/journal-file.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 71ef092..5ef6a2a 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1628,8 +1628,6 @@ static int generic_array_bisect(
+ else
+ left = y + 1;
+ }
+-
+- last_index = (uint64_t) -1;
+ }
+
+ for (;;) {
diff --git a/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
new file mode 100644
index 0000000..4523e80
--- /dev/null
+++ b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
@@ -0,0 +1,33 @@
+From 0fa446efab8593abc726a7c2438549098db4cc70 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas at archlinux.org>
+Date: Sun, 15 Dec 2013 12:06:37 +0100
+Subject: [PATCH] login: Don't stop a running user manager from
+ garbage-collecting the user.
+
+With the current logic, a user will never be garbage-collected, since its
+manager will always be around. Change the logic such that a user is
+garbage-collected when it has no sessions and linger is disabled.
+
+Conflicts:
+ src/login/logind-user.c
+---
+ src/login/logind-user.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index adbe638..e2fce5c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -629,12 +629,6 @@ int user_check_gc(User *u, bool drop_not_started) {
+ if (u->slice_job || u->service_job)
+ return 1;
+
+- if (u->slice && manager_unit_is_active(u->manager, u->slice) != 0)
+- return 1;
+-
+- if (u->service && manager_unit_is_active(u->manager, u->service) != 0)
+- return 1;
+-
+ return 0;
+ }
+
diff --git a/0179-libudev-devices-received-from-udev-are-always-initia.patch b/0179-libudev-devices-received-from-udev-are-always-initia.patch
new file mode 100644
index 0000000..492bb25
--- /dev/null
+++ b/0179-libudev-devices-received-from-udev-are-always-initia.patch
@@ -0,0 +1,157 @@
+From 0e075f4d98a653cc0b468fc786fcd869075a75e1 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Wed, 18 Dec 2013 16:49:19 +0100
+Subject: [PATCH] libudev: devices received from udev are always initialized
+
+Conflicts:
+ TODO
+---
+ src/libudev/libudev-device.c | 2 ++
+ src/libudev/libudev-monitor.c | 62 +++++++++++++++++++++----------------------
+ 2 files changed, 33 insertions(+), 31 deletions(-)
+
+diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
+index 161181a..b6c4e24 100644
+--- a/src/libudev/libudev-device.c
++++ b/src/libudev/libudev-device.c
+@@ -536,6 +536,8 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
+ udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile);
+ return -1;
+ }
++
++ /* devices with a database entry are initialized */
+ udev_device->is_initialized = true;
+
+ while (fgets(line, sizeof(line), f)) {
+diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c
+index 0212792..ff89e14 100644
+--- a/src/libudev/libudev-monitor.c
++++ b/src/libudev/libudev-monitor.c
+@@ -324,9 +324,6 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
+ int err = 0;
+ const int on = 1;
+
+- if (udev_monitor->snl.nl.nl_family == 0)
+- return -EINVAL;
+-
+ udev_monitor_filter_update(udev_monitor);
+
+ if (!udev_monitor->bound) {
+@@ -524,7 +521,6 @@ _public_ struct udev_device *udev_monitor_receive_device(struct udev_monitor *ud
+ char buf[8192];
+ ssize_t buflen;
+ ssize_t bufpos;
+- struct udev_monitor_netlink_header *nlh;
+
+ retry:
+ if (udev_monitor == NULL)
+@@ -536,11 +532,8 @@ retry:
+ smsg.msg_iovlen = 1;
+ smsg.msg_control = cred_msg;
+ smsg.msg_controllen = sizeof(cred_msg);
+-
+- if (udev_monitor->snl.nl.nl_family != 0) {
+- smsg.msg_name = &snl;
+- smsg.msg_namelen = sizeof(snl);
+- }
++ smsg.msg_name = &snl;
++ smsg.msg_namelen = sizeof(snl);
+
+ buflen = recvmsg(udev_monitor->sock, &smsg, 0);
+ if (buflen < 0) {
+@@ -554,20 +547,18 @@ retry:
+ return NULL;
+ }
+
+- if (udev_monitor->snl.nl.nl_family != 0) {
+- if (snl.nl.nl_groups == 0) {
+- /* unicast message, check if we trust the sender */
+- if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
+- snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
+- udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n");
+- return NULL;
+- }
+- } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
+- if (snl.nl.nl_pid > 0) {
+- udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
+- snl.nl.nl_pid);
+- return NULL;
+- }
++ if (snl.nl.nl_groups == 0) {
++ /* unicast message, check if we trust the sender */
++ if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
++ snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
++ udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n");
++ return NULL;
++ }
++ } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
++ if (snl.nl.nl_pid > 0) {
++ udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
++ snl.nl.nl_pid);
++ return NULL;
+ }
+ }
+
+@@ -583,35 +574,47 @@ retry:
+ return NULL;
+ }
+
++ udev_device = udev_device_new(udev_monitor->udev);
++ if (udev_device == NULL)
++ return NULL;
++
+ if (memcmp(buf, "libudev", 8) == 0) {
++ struct udev_monitor_netlink_header *nlh;
++
+ /* udev message needs proper version magic */
+ nlh = (struct udev_monitor_netlink_header *) buf;
+ if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) {
+ udev_err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n",
+- nlh->magic, htonl(UDEV_MONITOR_MAGIC));
++ nlh->magic, htonl(UDEV_MONITOR_MAGIC));
++ udev_device_unref(udev_device);
+ return NULL;
+ }
+- if (nlh->properties_off+32 > (size_t)buflen)
++ if (nlh->properties_off+32 > (size_t)buflen) {
++ udev_device_unref(udev_device);
+ return NULL;
++ }
++
+ bufpos = nlh->properties_off;
++
++ /* devices received from udev are always initialized */
++ udev_device_set_is_initialized(udev_device);
+ } else {
+ /* kernel message with header */
+ bufpos = strlen(buf) + 1;
+ if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) {
+ udev_dbg(udev_monitor->udev, "invalid message length\n");
++ udev_device_unref(udev_device);
+ return NULL;
+ }
+
+ /* check message header */
+ if (strstr(buf, "@/") == NULL) {
+ udev_dbg(udev_monitor->udev, "unrecognized message header\n");
++ udev_device_unref(udev_device);
+ return NULL;
+ }
+ }
+
+- udev_device = udev_device_new(udev_monitor->udev);
+- if (udev_device == NULL)
+- return NULL;
+ udev_device_set_info_loaded(udev_device);
+
+ while (bufpos < buflen) {
+@@ -664,9 +667,6 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
+ struct udev_list_entry *list_entry;
+ uint64_t tag_bloom_bits;
+
+- if (udev_monitor->snl.nl.nl_family == 0)
+- return -EINVAL;
+-
+ blen = udev_device_get_properties_monitor_buf(udev_device, &buf);
+ if (blen < 32)
+ return -EINVAL;
diff --git a/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
new file mode 100644
index 0000000..ea04f74
--- /dev/null
+++ b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
@@ -0,0 +1,49 @@
+From df5013c79d99848730abe4585dd93f77409a95c0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 05:07:34 +0100
+Subject: [PATCH] log: don't reopen /dev/console each time we call log_open()
+
+Instead, force reopen it only if we really really have to.
+---
+ src/core/main.c | 1 +
+ src/core/shutdown.c | 1 +
+ src/shared/log.c | 2 --
+ 3 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 58c3a9e..935762f 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1347,6 +1347,7 @@ int main(int argc, char *argv[]) {
+ /* Running inside a container, as PID 1 */
+ arg_running_as = SYSTEMD_SYSTEM;
+ log_set_target(LOG_TARGET_CONSOLE);
++ log_close_console(); /* force reopen of /dev/console */
+ log_open();
+
+ /* For the later on, see above... */
+diff --git a/src/core/shutdown.c b/src/core/shutdown.c
+index ea02b60..5e0f3ce 100644
+--- a/src/core/shutdown.c
++++ b/src/core/shutdown.c
+@@ -155,6 +155,7 @@ int main(int argc, char *argv[]) {
+
+ log_parse_environment();
+ log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */
++ log_close_console(); /* force reopen of /dev/console */
+ log_open();
+
+ umask(0022);
+diff --git a/src/shared/log.c b/src/shared/log.c
+index 8f4995a..bd918fb 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -272,8 +272,6 @@ int log_open(void) {
+ log_close_journal();
+ log_close_syslog();
+
+- /* Get the real /dev/console if we are PID=1, hence reopen */
+- log_close_console();
+ return log_open_console();
+ }
+
diff --git a/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
new file mode 100644
index 0000000..643807f
--- /dev/null
+++ b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
@@ -0,0 +1,42 @@
+From 21804157ff0e60508fd128310505381f7b3ec2b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 16:49:15 +0100
+Subject: [PATCH] log: when we log to /dev/console and got disconnected (maybe
+ due to vhangup) reconnect
+
+---
+ src/shared/log.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/log.c b/src/shared/log.c
+index bd918fb..de770ca 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -335,8 +335,25 @@ static int write_to_console(
+ IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF);
+ IOVEC_SET_STRING(iovec[n++], "\n");
+
+- if (writev(console_fd, iovec, n) < 0)
+- return -errno;
++ if (writev(console_fd, iovec, n) < 0) {
++
++ if (errno == EIO && getpid() == 1) {
++
++ /* If somebody tried to kick us from our
++ * console tty (via vhangup() or suchlike),
++ * try to reconnect */
++
++ log_close_console();
++ log_open_console();
++
++ if (console_fd < 0)
++ return 0;
++
++ if (writev(console_fd, iovec, n) < 0)
++ return -errno;
++ } else
++ return -errno;
++ }
+
+ return 1;
+ }
diff --git a/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
new file mode 100644
index 0000000..68ec5ce
--- /dev/null
+++ b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
@@ -0,0 +1,23 @@
+From d34a6029e4a59c75d9826e0aa57e548a86b08bba Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 18 Dec 2013 17:16:33 +0100
+Subject: [PATCH] loginctl: when showing device tree of seats with no devices
+ show something useful
+
+---
+ src/login/sysfs-show.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index f7d11dd..cb12ebf 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -181,6 +181,8 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) {
+ first = udev_enumerate_get_list_entry(e);
+ if (first)
+ show_sysfs_one(udev, seat, &first, "/", prefix, n_columns);
++ else
++ printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), "(none)");
+
+ return r;
+ }
diff --git a/0183-man-be-more-explicit-about-option-arguments-that-tak.patch b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch
new file mode 100644
index 0000000..f930ed0
--- /dev/null
+++ b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch
@@ -0,0 +1,52 @@
+From 6bd96f28f8d67cb5cb77057e60badb4550ae35f3 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 18:48:43 -0500
+Subject: [PATCH] man: be more explicit about option arguments that take
+ 128-bit IDs in journalctl(1)
+
+It may not be immediately obvious to the reader what "ID128" is, so replace the
+example option argument "ID128" with "128-bit-ID".
+---
+ man/journalctl.xml | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index d936933..dced90f 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -725,7 +725,7 @@
+
+ <varlistentry>
+ <term><option>--list-catalog
+- <optional><replaceable>ID128...</replaceable></optional>
++ <optional><replaceable>128-bit-ID...</replaceable></optional>
+ </option></term>
+
+ <listitem><para>List the contents of
+@@ -734,7 +734,7 @@
+ description strings.</para>
+
+ <para>If any
+- <replaceable>ID128</replaceable>s are
++ <replaceable>128-bit-ID</replaceable>s are
+ specified, only those entries are shown.
+ </para>
+ </listitem>
+@@ -742,7 +742,7 @@
+
+ <varlistentry>
+ <term><option>--dump-catalog
+- <optional><replaceable>ID128...</replaceable></optional>
++ <optional><replaceable>128-bit-ID...</replaceable></optional>
+ </option></term>
+
+ <listitem><para>Show the contents of
+@@ -753,7 +753,7 @@
+ files.</para>
+
+ <para>If any
+- <replaceable>ID128</replaceable>s are
++ <replaceable>128-bit-ID</replaceable>s are
+ specified, only those entries are shown.
+ </para>
+ </listitem>
diff --git a/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
new file mode 100644
index 0000000..9e08719
--- /dev/null
+++ b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
@@ -0,0 +1,59 @@
+From 1f3128aec84ea40d54423386384ad28a789cb381 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 19:40:02 -0500
+Subject: [PATCH] man: add DOI for refereed article on Forward Secure Sealing
+ to journald.conf(5)
+
+In journalctl(1), be more explicit about the reference to "Seal=" in
+journald.conf(5) and what information can be found there.
+---
+ man/journalctl.xml | 8 ++++++--
+ man/journald.conf.xml | 10 +++++-----
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index dced90f..d75c758 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -781,10 +781,14 @@
+ sealing key is stored in the journal
+ data directory and shall remain on the
+ host. The verification key should be
+- stored externally. Also see the
++ stored externally. Refer to the
+ <option>Seal=</option> option in
+ <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+- for details.</para></listitem>
++ for information on Forward Secure
++ Sealing and for a link to a refereed
++ scholarly paper detailing the
++ cryptographic theory it is based on.
++ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 7aa2e78..8e642a3 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -130,15 +130,15 @@
+ by
+ <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+ <option>--setup-keys</option>
+- command), forward secure sealing (FSS)
++ command), Forward Secure Sealing (FSS)
+ for all persistent journal files is
+ enabled. FSS is based on <ulink
+ url="https://eprint.iacr.org/2013/397">Seekable
+ Sequential Key Generators</ulink> by
+- G. A. Marson and B. Poettering and
+- may be used to protect journal files
+- from unnoticed
+- alteration.</para></listitem>
++ G. A. Marson and B. Poettering
++ (doi:10.1007/978-3-642-40203-6_7)
++ and may be used to protect journal files
++ from unnoticed alteration.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
new file mode 100644
index 0000000..4a8b38f
--- /dev/null
+++ b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
@@ -0,0 +1,132 @@
+From 643f82598b69d3b3002294a456a459cceb075cd3 Mon Sep 17 00:00:00 2001
+From: "Jason St. John" <jstjohn at purdue.edu>
+Date: Tue, 17 Dec 2013 21:36:27 -0500
+Subject: [PATCH] journalctl,zsh-completion: fix several issues in --help
+ message text
+
+-- fix grammar and reword some descriptions for clarity
+-- add a useful description of what --follow does
+-- fix the description for --after-cursor
+-- properly introduce the FSS acronym for "Forward Secure Sealing" in
+both sections
+-- clarify the --disk-usage command
+
+[zj: perform similar changes to zsh completions]
+
+squash! journalctl: fix several issues in --help message text
+
+Conflicts:
+ src/journal/journalctl.c
+---
+ shell-completion/zsh/_journalctl | 14 +++++++-------
+ src/journal/journalctl.c | 34 +++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl
+index 29ff3e3..8c3dbb0 100644
+--- a/shell-completion/zsh/_journalctl
++++ b/shell-completion/zsh/_journalctl
+@@ -71,14 +71,14 @@ _arguments -s \
+ {-m,--merge}'[Show entries from all available journals]' \
+ {-b+,--boot=}'[Show data only from the specified boot or offset]:boot id or offset:_journal_boots' \
+ '--list-boots[List boots ordered by time]' \
+- {-k,--dmesg}'[Show only kernel messages, Implies -b]' \
++ {-k,--dmesg}'[Show only kernel messages from the current boot]' \
+ {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
+ '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \
+ {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
+- {-c+,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
+- '--after-cursor=[Start showing entries from the location in the journal after the cursor]:cursors:_journal_fields __CURSORS' \
+- '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+- '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++ {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journal_fields __CURSORS' \
++ '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journal_fields __CURSORS' \
++ '--since=[Start showing entries on or newer than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
++ '--until=[Stop showing entries on or older than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+ {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
+ '--system[Show system and kernel messages]' \
+ '--user[Show messages from user services]' \
+@@ -91,8 +91,8 @@ _arguments -s \
+ '--list-catalog[List messages in catalog]' \
+ '--dump-catalog[Dump messages in catalog]' \
+ '--update-catalog[Update binary catalog database]' \
+- '--setup-keys[Generate new FSS key pair]' \
+- '--force[Force recreation of FSS keys]' \
++ '--setup-keys[Generate a new FSS key pair]' \
++ '--force[Force recreation of the FSS keys]' \
+ '--interval=[Time interval for changing the FSS sealing key]:time interval' \
+ '--verify[Verify journal file consistency]' \
+ '--verify-key=[Specify FSS verification key]:FSS key' \
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 71e28b0..1d66792 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -130,30 +130,30 @@ static int help(void) {
+ "Query the journal.\n\n"
+ "Flags:\n"
+ " --system Show only the system journal\n"
+- " --user Show only the user journal for current user\n"
+- " --since=DATE Start showing entries newer or of the specified date\n"
+- " --until=DATE Stop showing entries older or of the specified date\n"
+- " -c --cursor=CURSOR Start showing entries from specified cursor\n"
+- " --after-cursor=CURSOR Start showing entries from specified cursor\n"
++ " --user Show only the user journal for the current user\n"
++ " --since=DATE Start showing entries on or newer than the specified date\n"
++ " --until=DATE Stop showing entries on or older than the specified date\n"
++ " -c --cursor=CURSOR Start showing entries from the specified cursor\n"
++ " --after-cursor=CURSOR Start showing entries from after the specified cursor\n"
+ " --show-cursor Print the cursor after all the entries\n"
+- " -b --boot[=ID] Show data only from ID or current boot if unspecified\n"
++ " -b --boot[=ID] Show data only from ID or, if unspecified, the current boot\n"
+ " --list-boots Show terse information about recorded boots\n"
+- " -k --dmesg Show kernel message log from current boot\n"
++ " -k --dmesg Show kernel message log from the current boot\n"
+ " -u --unit=UNIT Show data only from the specified unit\n"
+ " --user-unit=UNIT Show data only from the specified user session unit\n"
+ " -p --priority=RANGE Show only messages within the specified priority range\n"
+ " -e --pager-end Immediately jump to end of the journal in the pager\n"
+- " -f --follow Follow journal\n"
++ " -f --follow Follow the journal\n"
+ " -n --lines[=INTEGER] Number of journal entries to show\n"
+ " --no-tail Show all lines, even in follow mode\n"
+ " -r --reverse Show the newest entries first\n"
+ " -o --output=STRING Change journal output mode (short, short-iso,\n"
+- " short-precise, short-monotonic, verbose,\n"
+- " export, json, json-pretty, json-sse, cat)\n"
++ " short-precise, short-monotonic, verbose,\n"
++ " export, json, json-pretty, json-sse, cat)\n"
+ " -x --catalog Add message explanations where available\n"
+ " -l --full Do not ellipsize fields\n"
+ " -a --all Show all fields, including long and unprintable\n"
+- " -q --quiet Don't show privilege warning\n"
++ " -q --quiet Do not show privilege warning\n"
+ " --no-pager Do not pipe output into a pager\n"
+ " -m --merge Show entries from all available journals\n"
+ " -D --directory=PATH Show journal files from directory\n"
+@@ -162,20 +162,20 @@ static int help(void) {
+ #ifdef HAVE_GCRYPT
+ " --interval=TIME Time interval for changing the FSS sealing key\n"
+ " --verify-key=KEY Specify FSS verification key\n"
+- " --force Force overriding new FSS key pair with --setup-keys\n"
++ " --force Force overriding of the FSS key pair with --setup-keys\n"
+ #endif
+ "\nCommands:\n"
+- " -h --help Show this help\n"
++ " -h --help Show this help text\n"
+ " --version Show package version\n"
+- " --new-id128 Generate a new 128 Bit ID\n"
++ " --new-id128 Generate a new 128-bit ID\n"
+ " --header Show journal header information\n"
+- " --disk-usage Show total disk usage\n"
+- " -F --field=FIELD List all values a certain field takes\n"
++ " --disk-usage Show total disk usage of all journal files\n"
++ " -F --field=FIELD List all values that a specified field takes\n"
+ " --list-catalog Show message IDs of all entries in the message catalog\n"
+ " --dump-catalog Show entries in the message catalog\n"
+ " --update-catalog Update the message catalog database\n"
+ #ifdef HAVE_GCRYPT
+- " --setup-keys Generate new FSS key pair\n"
++ " --setup-keys Generate a new FSS key pair\n"
+ " --verify Verify journal file consistency\n"
+ #endif
+ , program_invocation_short_name);
diff --git a/0186-keymap-Refactor-Acer-tables.patch b/0186-keymap-Refactor-Acer-tables.patch
new file mode 100644
index 0000000..424f2b1
--- /dev/null
+++ b/0186-keymap-Refactor-Acer-tables.patch
@@ -0,0 +1,145 @@
+From 7bf8a20c2f52a3684deef37098f7a73a873da93c Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Thu, 19 Dec 2013 08:33:32 +0100
+Subject: [PATCH] keymap: Refactor Acer tables
+
+Move common keys into generic Acer table, and factorize the model specific
+exceptions.
+---
+ hwdb/60-keyboard.hwdb | 101 ++++++++++++++++++--------------------------------
+ 1 file changed, 36 insertions(+), 65 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d4d948d..ab9e569 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -46,52 +46,7 @@
+ # Acer
+ ##########################################
+
+-# Acer platform kernel driver
+-keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
+- KEYBOARD_KEY_82=f21
+-
+-# Aspire 5720
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
+- KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed
+- KEYBOARD_KEY_92=media # Acer arcade
+- KEYBOARD_KEY_d4=bluetooth # Bluetooth on
+- KEYBOARD_KEY_d9=bluetooth # Bluetooth off
+- KEYBOARD_KEY_f4=prog3 # e-key
+-
+-# Aspire 5920g
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
+- KEYBOARD_KEY_8a=media
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_a6=setup
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off
+-
+-# Aspire 6920
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
+- KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off
+- KEYBOARD_KEY_92=media
+- KEYBOARD_KEY_9e=back
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+-
+-# Aspire 8930
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+- KEYBOARD_KEY_ca=prog3 # key 'HOLD' on CineDash Media Console
+- KEYBOARD_KEY_83=rewind
+- KEYBOARD_KEY_89=fastforward
+- KEYBOARD_KEY_92=media # key 'ARCADE' on CineDash Media Console
+- KEYBOARD_KEY_9e=back
+-
+-# Travelmate C300
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
+- KEYBOARD_KEY_67=f24 # FIXME: rotate screen
+- KEYBOARD_KEY_68=up
+- KEYBOARD_KEY_69=down
+- KEYBOARD_KEY_6b=fn
+- KEYBOARD_KEY_6c=screenlock # FIXME: lock tablet device/buttons
+-
+-#
++# common keys
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+@@ -99,6 +54,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+ KEYBOARD_KEY_a6=setup # Fn+F2 Acer eSettings
+ KEYBOARD_KEY_a7=battery # Fn+F3 Power Management
+ KEYBOARD_KEY_a9=switchvideomode # Fn+F5
++ KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_b3=euro
+ KEYBOARD_KEY_b4=dollar
+ KEYBOARD_KEY_ce=brightnessup # Fn+Right
+@@ -118,33 +74,48 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+ KEYBOARD_KEY_f8=fn
+ KEYBOARD_KEY_f9=prog1 # Launch NTI shadow
+
+-#
++# Acer platform kernel driver
++keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
++ KEYBOARD_KEY_82=f21 # Touchpad toggle
++
++# Aspire models
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:pvr*
++ KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed
++ KEYBOARD_KEY_d9=bluetooth # Bluetooth off
++ KEYBOARD_KEY_92=media # Acer arcade
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
++ KEYBOARD_KEY_f4=prog3 # e-key
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
++ KEYBOARD_KEY_8a=media
++ KEYBOARD_KEY_a6=setup
++
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
++ KEYBOARD_KEY_ca=prog3 # key 'HOLD' on CineDash Media Console
++ KEYBOARD_KEY_83=rewind
++ KEYBOARD_KEY_89=fastforward
++ KEYBOARD_KEY_9e=back
++
++# Travelmate C300
++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
++ KEYBOARD_KEY_67=f24 # FIXME: rotate screen
++ KEYBOARD_KEY_68=up
++ KEYBOARD_KEY_69=down
++ KEYBOARD_KEY_6b=fn
++ KEYBOARD_KEY_6c=screenlock # FIXME: lock tablet device/buttons
++
++# on some models this isn't brightnessup
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5220*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5610*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5620*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5720*:pvr*
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6292*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*8471*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*7720*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1810T*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO751h:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO531h:*
+- KEYBOARD_KEY_d9=bluetooth
+-
+-#
+-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+- KEYBOARD_KEY_b2=www
+- KEYBOARD_KEY_ee=screenlock
+-
+-#
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6593:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1640:*
+- KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_ee=screenlock
+
+ ###########################################################
diff --git a/0187-logging-reduce-send-timeout-to-something-more-sensib.patch b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch
new file mode 100644
index 0000000..4c7c234
--- /dev/null
+++ b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch
@@ -0,0 +1,49 @@
+From f1a638c065df3432bb69cc664b5425b96de13325 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 14 Dec 2013 11:54:26 -0500
+Subject: [PATCH] logging: reduce send timeout to something more sensible
+
+For a user, the timeout of 1 min per message seems equivalent to a hang.
+If journald cannot process a message from PID1 for 10 ms then something
+is significantly wrong. It's better to lose the message and continue.
+---
+ src/shared/log.c | 5 ++++-
+ src/shared/time-util.c | 7 +++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/log.c b/src/shared/log.c
+index de770ca..2267764 100644
+--- a/src/shared/log.c
++++ b/src/shared/log.c
+@@ -126,7 +126,10 @@ static int create_log_socket(int type) {
+ /* We need a blocking fd here since we'd otherwise lose
+ messages way too early. However, let's not hang forever in the
+ unlikely case of a deadlock. */
+- timeval_store(&tv, 1*USEC_PER_MINUTE);
++ if (getpid() == 1)
++ timeval_store(&tv, 10 * USEC_PER_MSEC);
++ else
++ timeval_store(&tv, 10 * USEC_PER_SEC);
+ setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
+
+ return fd;
+diff --git a/src/shared/time-util.c b/src/shared/time-util.c
+index d31401b..505b280 100644
+--- a/src/shared/time-util.c
++++ b/src/shared/time-util.c
+@@ -141,12 +141,11 @@ struct timeval *timeval_store(struct timeval *tv, usec_t u) {
+ if (u == (usec_t) -1) {
+ tv->tv_sec = (time_t) -1;
+ tv->tv_usec = (suseconds_t) -1;
+- return tv;
++ } else {
++ tv->tv_sec = (time_t) (u / USEC_PER_SEC);
++ tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC);
+ }
+
+- tv->tv_sec = (time_t) (u / USEC_PER_SEC);
+- tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC);
+-
+ return tv;
+ }
+
diff --git a/0188-DEFAULT_PATH_SPLIT_USR-macro.patch b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch
new file mode 100644
index 0000000..60d290f
--- /dev/null
+++ b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch
@@ -0,0 +1,43 @@
+From e02f70c30b2ad98e5547faebd1304d5273eb0fe6 Mon Sep 17 00:00:00 2001
+From: Shawn Landden <shawn at churchofgit.com>
+Date: Fri, 20 Dec 2013 15:35:38 -0800
+Subject: [PATCH] DEFAULT_PATH_SPLIT_USR macro
+
+---
+ src/nspawn/nspawn.c | 2 +-
+ src/shared/path-util.h | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 618f9c3..cafc306 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -1227,7 +1227,7 @@ int main(int argc, char *argv[]) {
+ gid_t gid = (gid_t) -1;
+ unsigned n_env = 2;
+ const char *envp[] = {
+- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
++ "PATH=" DEFAULT_PATH_SPLIT_USR,
+ "container=systemd-nspawn", /* LXC sets container=lxc, so follow the scheme here */
+ NULL, /* TERM */
+ NULL, /* HOME */
+diff --git a/src/shared/path-util.h b/src/shared/path-util.h
+index 0a42de7..1e58e1b 100644
+--- a/src/shared/path-util.h
++++ b/src/shared/path-util.h
+@@ -25,10 +25,13 @@
+
+ #include "macro.h"
+
++#define DEFAULT_PATH_NORMAL "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
++#define DEFAULT_PATH_SPLIT_USR DEFAULT_PATH_NORMAL ":/sbin:/bin"
++
+ #ifdef HAVE_SPLIT_USR
+-# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
++# define DEFAULT_PATH DEFAULT_PATH_SPLIT_USR
+ #else
+-# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
++# define DEFAULT_PATH DEFAULT_PATH_NORMAL
+ #endif
+
+ bool is_path(const char *p) _pure_;
diff --git a/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
new file mode 100644
index 0000000..7bb4534
--- /dev/null
+++ b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
@@ -0,0 +1,28 @@
+From 67ab7e43a7c5623af367193817f5b562d635b0aa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas at archlinux.org>
+Date: Sat, 21 Dec 2013 11:22:37 +0100
+Subject: [PATCH] fstab-generator: Do not try to fsck non-devices
+
+This fixes a regression introduced in 64e70e4 where the mount fails
+when fstab is misconfigured with fs_passno > 0 on a virtual file
+system like nfs, and the type is specified as "auto".
+---
+ src/fstab-generator/fstab-generator.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index 4137796..8c4c61c 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -153,6 +153,11 @@ static int add_fsck(FILE *f, const char *what, const char *where, const char *ty
+ if (passno == 0)
+ return 0;
+
++ if (!is_device_path(what)) {
++ log_warning("Checking was requested for \"%s\", but it is not a device.", what);
++ return 0;
++ }
++
+ if (type && !streq(type, "auto")) {
+ int r;
+ const char *checker;
diff --git a/0190-logind-remove-dead-variable.patch b/0190-logind-remove-dead-variable.patch
new file mode 100644
index 0000000..59b0a63
--- /dev/null
+++ b/0190-logind-remove-dead-variable.patch
@@ -0,0 +1,37 @@
+From 45e44dd49cafc1befdc1fb6d948071520335964a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 19 Dec 2013 14:16:46 -0500
+Subject: [PATCH] logind: remove dead variable
+
+Noticed-by: Jan Alexander Steffens <jan.steffens at gmail.com>
+---
+ src/login/logind-user.c | 3 ---
+ src/login/logind-user.h | 1 -
+ 2 files changed, 4 deletions(-)
+
+diff --git a/src/login/logind-user.c b/src/login/logind-user.c
+index e2fce5c..b87311c 100644
+--- a/src/login/logind-user.c
++++ b/src/login/logind-user.c
+@@ -648,9 +648,6 @@ UserState user_get_state(User *u) {
+
+ assert(u);
+
+- if (u->closing)
+- return USER_CLOSING;
+-
+ if (u->slice_job || u->service_job)
+ return USER_OPENING;
+
+diff --git a/src/login/logind-user.h b/src/login/logind-user.h
+index b9171d3..a36f456 100644
+--- a/src/login/logind-user.h
++++ b/src/login/logind-user.h
+@@ -61,7 +61,6 @@ struct User {
+
+ bool in_gc_queue:1;
+ bool started:1;
+- bool closing:1;
+
+ LIST_HEAD(Session, sessions);
+ LIST_FIELDS(User, gc_queue);
diff --git a/0191-hwdb-update.patch b/0191-hwdb-update.patch
new file mode 100644
index 0000000..7359702
--- /dev/null
+++ b/0191-hwdb-update.patch
@@ -0,0 +1,4917 @@
+From 59f89c783a3dd29bc024be457dfd7ad664d55358 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Sun, 22 Dec 2013 11:32:11 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+ hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb | 1174 ++++++++++++++++++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb | 689 ++++++++++++++++++++++--
+ hwdb/20-usb-vendor-model.hwdb | 112 +++-
+ 3 files changed, 1922 insertions(+), 53 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 5067167..92b96ae 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13411,6 +13411,222 @@ OUI:40D855198*
+ OUI:40D855199*
+ ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH
+
++OUI:40D85519A*
++ ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA
++
++OUI:40D85519B*
++ ID_OUI_FROM_DATABASE=Northern Star Technologies
++
++OUI:40D85519C*
++ ID_OUI_FROM_DATABASE=Parris Service Corporation
++
++OUI:40D85519D*
++ ID_OUI_FROM_DATABASE=EMAC, Inc.
++
++OUI:40D85519E*
++ ID_OUI_FROM_DATABASE=Thirdwayv Inc.
++
++OUI:40D85519F*
++ ID_OUI_FROM_DATABASE=Patria Aviation Oy
++
++OUI:40D8551A0*
++ ID_OUI_FROM_DATABASE=Futaba Corporation
++
++OUI:40D8551A1*
++ ID_OUI_FROM_DATABASE=KRONOTECH SRL
++
++OUI:40D8551A2*
++ ID_OUI_FROM_DATABASE=HIPODROMO DE AGUA CALIENTE, S.A. DE C.V.
++
++OUI:40D8551A3*
++ ID_OUI_FROM_DATABASE=Noritake Itron Corporation
++
++OUI:40D8551A4*
++ ID_OUI_FROM_DATABASE=cibite AG
++
++OUI:40D8551A5*
++ ID_OUI_FROM_DATABASE=DemoPad
++
++OUI:40D8551A6*
++ ID_OUI_FROM_DATABASE=RB-LINK Wireless
++
++OUI:40D8551A7*
++ ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic CO., LTD
++
++OUI:40D8551A8*
++ ID_OUI_FROM_DATABASE=Multiobrabotka
++
++OUI:40D8551A9*
++ ID_OUI_FROM_DATABASE=Lubino s.r.o.
++
++OUI:40D8551AA*
++ ID_OUI_FROM_DATABASE=Broachlink Technology Co.,Limited
++
++OUI:40D8551AB*
++ ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited
++
++OUI:40D8551AC*
++ ID_OUI_FROM_DATABASE=ELAN SYSTEMS
++
++OUI:40D8551AD*
++ ID_OUI_FROM_DATABASE=WICHER DIGITAL TECHNIK
++
++OUI:40D8551AE*
++ ID_OUI_FROM_DATABASE=Autonomous Solutions, Inc
++
++OUI:40D8551AF*
++ ID_OUI_FROM_DATABASE=Vigitron Inc.
++
++OUI:40D8551B0*
++ ID_OUI_FROM_DATABASE=Shin-ei Electronic Measuring Co.,Ltd.
++
++OUI:40D8551B1*
++ ID_OUI_FROM_DATABASE=Logos 01 S.r.l.
++
++OUI:40D8551B2*
++ ID_OUI_FROM_DATABASE=AGE A. Gilg Elektronik
++
++OUI:40D8551B3*
++ ID_OUI_FROM_DATABASE=BETTINI SRL
++
++OUI:40D8551B4*
++ ID_OUI_FROM_DATABASE=Inforce Computing Inc.
++
++OUI:40D8551B5*
++ ID_OUI_FROM_DATABASE=A+EC Klein Ingenieurbuero
++
++OUI:40D8551B6*
++ ID_OUI_FROM_DATABASE=Magic Systems
++
++OUI:40D8551B7*
++ ID_OUI_FROM_DATABASE=TEWS Elektronik GmbH & Co. KG
++
++OUI:40D8551B8*
++ ID_OUI_FROM_DATABASE=Orion Systems, Inc
++
++OUI:40D8551B9*
++ ID_OUI_FROM_DATABASE=Beking Industrieele automatisering
++
++OUI:40D8551BA*
++ ID_OUI_FROM_DATABASE=Creative Lighting And Sound Systems Pty Ltd
++
++OUI:40D8551BB*
++ ID_OUI_FROM_DATABASE=Micromega Dynamics SA
++
++OUI:40D8551BC*
++ ID_OUI_FROM_DATABASE=KbDevice,Inc.
++
++OUI:40D8551BD*
++ ID_OUI_FROM_DATABASE=HORIBA ABX
++
++OUI:40D8551BE*
++ ID_OUI_FROM_DATABASE=PEEK TRAFFIC
++
++OUI:40D8551BF*
++ ID_OUI_FROM_DATABASE=shanghai mingding information tech co.Ltd
++
++OUI:40D8551C0*
++ ID_OUI_FROM_DATABASE=NPB Automation AB
++
++OUI:40D8551C1*
++ ID_OUI_FROM_DATABASE=Triamec Motion AG
++
++OUI:40D8551C2*
++ ID_OUI_FROM_DATABASE=Digital Display Systems
++
++OUI:40D8551C3*
++ ID_OUI_FROM_DATABASE=Cornfed Systems LLC
++
++OUI:40D8551C4*
++ ID_OUI_FROM_DATABASE=QED Advanced Systems Limited
++
++OUI:40D8551C6*
++ ID_OUI_FROM_DATABASE=Device Solutions Ltd
++
++OUI:40D8551C7*
++ ID_OUI_FROM_DATABASE=Wexiödisk AB
++
++OUI:40D8551C8*
++ ID_OUI_FROM_DATABASE=Sensata Technologies
++
++OUI:40D8551C9*
++ ID_OUI_FROM_DATABASE=Andy-L Ltd.
++
++OUI:40D8551CA*
++ ID_OUI_FROM_DATABASE=Rigel Engineering
++
++OUI:40D8551CB*
++ ID_OUI_FROM_DATABASE=MG S.r.l.
++
++OUI:40D8551CD*
++ ID_OUI_FROM_DATABASE=YXLON International A/S
++
++OUI:40D8551CE*
++ ID_OUI_FROM_DATABASE=Peter Huber
++
++OUI:40D8551CF*
++ ID_OUI_FROM_DATABASE=Omnik New Energy Co., Ltd
++
++OUI:40D8551D0*
++ ID_OUI_FROM_DATABASE=Webeasy BV
++
++OUI:40D8551D1*
++ ID_OUI_FROM_DATABASE=Founder Broadband Network Service Co.,Ltd.
++
++OUI:40D8551D2*
++ ID_OUI_FROM_DATABASE=InventLab s.c.
++
++OUI:40D8551D3*
++ ID_OUI_FROM_DATABASE=Kaluga Teletypes Manufacturing Plant
++
++OUI:40D8551D4*
++ ID_OUI_FROM_DATABASE=Prisma Engineering srl
++
++OUI:40D8551D5*
++ ID_OUI_FROM_DATABASE=FST21 Ltd.
++
++OUI:40D8551D6*
++ ID_OUI_FROM_DATABASE=EMS Computers Pty Ltd
++
++OUI:40D8551D7*
++ ID_OUI_FROM_DATABASE=Wheatstone Corporation
++
++OUI:40D8551D8*
++ ID_OUI_FROM_DATABASE=Owl Computing Technologies, Inc.
++
++OUI:40D8551D9*
++ ID_OUI_FROM_DATABASE=Commercial Wireless Systems International LLC.
++
++OUI:40D8551DA*
++ ID_OUI_FROM_DATABASE=Energy Technology and Control Ltd.
++
++OUI:40D8551DB*
++ ID_OUI_FROM_DATABASE=NIPPON TECHNO LAB.,INC,
++
++OUI:40D8551DC*
++ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
++
++OUI:40D8551DD*
++ ID_OUI_FROM_DATABASE=BaOpt Benelux bv
++
++OUI:40D8551DE*
++ ID_OUI_FROM_DATABASE=Vidisys GmbH
++
++OUI:40D8551DF*
++ ID_OUI_FROM_DATABASE=Chengdu Meihuan Technology Co.,Ltd
++
++OUI:40D8551E0*
++ ID_OUI_FROM_DATABASE=Embedded Technology Corporation
++
++OUI:40D8551E1*
++ ID_OUI_FROM_DATABASE=AD QUALITE
++
++OUI:40D8551E2*
++ ID_OUI_FROM_DATABASE=ELNEC s.r.o.
++
++OUI:40D8551E3*
++ ID_OUI_FROM_DATABASE=Mega Electronics Ltd
++
+ OUI:000000*
+ ID_OUI_FROM_DATABASE=XEROX CORPORATION
+
+@@ -13664,7 +13880,7 @@ OUI:000053*
+ ID_OUI_FROM_DATABASE=COMPUCORP
+
+ OUI:000054*
+- ID_OUI_FROM_DATABASE=MODICON, INC.
++ ID_OUI_FROM_DATABASE=Schnieder Electric
+
+ OUI:000055*
+ ID_OUI_FROM_DATABASE=COMMISSARIAT A L`ENERGIE ATOM.
+@@ -13694,7 +13910,7 @@ OUI:00005D*
+ ID_OUI_FROM_DATABASE=CS TELECOM
+
+ OUI:00005E*
+- ID_OUI_FROM_DATABASE=USC INFORMATION SCIENCES INST
++ ID_OUI_FROM_DATABASE=ICANN, IANA Department
+
+ OUI:00005F*
+ ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC IND., LTD.
+@@ -17957,7 +18173,7 @@ OUI:0005ED*
+ ID_OUI_FROM_DATABASE=Technikum Joanneum GmbH
+
+ OUI:0005EE*
+- ID_OUI_FROM_DATABASE=BEWATOR Group
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+
+ OUI:0005EF*
+ ID_OUI_FROM_DATABASE=ADOIR Digital Technology
+@@ -19412,7 +19628,7 @@ OUI:0007D2*
+ ID_OUI_FROM_DATABASE=Logopak Systeme GmbH & Co. KG
+
+ OUI:0007D3*
+- ID_OUI_FROM_DATABASE=Stork Prints B.V.
++ ID_OUI_FROM_DATABASE=SPGPrints B.V.
+
+ OUI:0007D4*
+ ID_OUI_FROM_DATABASE=Zhejiang Yutong Network Communication Co Ltd.
+@@ -19613,7 +19829,7 @@ OUI:000815*
+ ID_OUI_FROM_DATABASE=CATS Co., Ltd.
+
+ OUI:000816*
+- ID_OUI_FROM_DATABASE=Bluetags A/S
++ ID_OUI_FROM_DATABASE=Bluelon ApS
+
+ OUI:000817*
+ ID_OUI_FROM_DATABASE=EmergeCore Networks LLC
+@@ -29819,7 +30035,7 @@ OUI:001587*
+ ID_OUI_FROM_DATABASE=Takenaka Seisakusho Co.,Ltd
+
+ OUI:001588*
+- ID_OUI_FROM_DATABASE=Balda Solution Malaysia Sdn Bhd
++ ID_OUI_FROM_DATABASE=Salutica Allied Solutions Sdn Bhd
+
+ OUI:001589*
+ ID_OUI_FROM_DATABASE=D-MAX Technology Co.,Ltd
+@@ -33935,7 +34151,7 @@ OUI:001AE7*
+ ID_OUI_FROM_DATABASE=Aztek Networks, Inc.
+
+ OUI:001AE8*
+- ID_OUI_FROM_DATABASE=Siemens Enterprise Communications GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Unify GmbH and Co KG
+
+ OUI:001AE9*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+@@ -36926,7 +37142,7 @@ OUI:001ECC*
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
+
+ OUI:001ECD*
+- ID_OUI_FROM_DATABASE=2Wire, Inc.
++ ID_OUI_FROM_DATABASE=KYLAND Technology Co. LTD
+
+ OUI:001ECE*
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
+@@ -40337,7 +40553,7 @@ OUI:002340*
+ ID_OUI_FROM_DATABASE=MiX Telematics
+
+ OUI:002341*
+- ID_OUI_FROM_DATABASE=Siemens AG, Infrastructure & Cities Sector, Building Technologies Division
++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
+
+ OUI:002342*
+ ID_OUI_FROM_DATABASE=Coffee Equipment Company
+@@ -42200,7 +42416,7 @@ OUI:0025B8*
+ ID_OUI_FROM_DATABASE=Agile Communications, Inc.
+
+ OUI:0025B9*
+- ID_OUI_FROM_DATABASE=Agilink Systems Corp.
++ ID_OUI_FROM_DATABASE=Cypress Solutions Inc
+
+ OUI:0025BA*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
+@@ -44405,7 +44621,7 @@ OUI:004065*
+ ID_OUI_FROM_DATABASE=GTE SPACENET
+
+ OUI:004066*
+- ID_OUI_FROM_DATABASE=HITACHI CABLE, LTD.
++ ID_OUI_FROM_DATABASE=Hitachi Metals, Ltd.
+
+ OUI:004067*
+ ID_OUI_FROM_DATABASE=OMNIBYTE CORPORATION
+@@ -46100,7 +46316,7 @@ OUI:0060A3*
+ ID_OUI_FROM_DATABASE=CONTINUUM TECHNOLOGY CORP.
+
+ OUI:0060A4*
+- ID_OUI_FROM_DATABASE=GRINAKER SYSTEM TECHNOLOGIES
++ ID_OUI_FROM_DATABASE=GEW Technologies (PTY)Ltd
+
+ OUI:0060A5*
+ ID_OUI_FROM_DATABASE=PERFORMANCE TELECOM CORP.
+@@ -46904,7 +47120,7 @@ OUI:0080A1*
+ ID_OUI_FROM_DATABASE=MICROTEST, INC.
+
+ OUI:0080A2*
+- ID_OUI_FROM_DATABASE=Tattile SRL
++ ID_OUI_FROM_DATABASE=CREATIVE ELECTRONIC SYSTEMS
+
+ OUI:0080A3*
+ ID_OUI_FROM_DATABASE=Lantronix
+@@ -47188,6 +47404,9 @@ OUI:0080FF*
+ OUI:008865*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:008B43*
++ ID_OUI_FROM_DATABASE=RFTECH
++
+ OUI:008C10*
+ ID_OUI_FROM_DATABASE=Black Box Corp.
+
+@@ -47980,6 +48199,9 @@ OUI:0091D6*
+ OUI:0091FA*
+ ID_OUI_FROM_DATABASE=Synapse Product Development
+
++OUI:0092FA*
++ ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD
++
+ OUI:009363*
+ ID_OUI_FROM_DATABASE=Uni-Link Technology Co., Ltd.
+
+@@ -51340,6 +51562,9 @@ OUI:00E8AB*
+ OUI:00EB2D*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
++OUI:00EEBD*
++ ID_OUI_FROM_DATABASE=HTC Corporation
++
+ OUI:00F051*
+ ID_OUI_FROM_DATABASE=KWB Gmbh
+
+@@ -51481,6 +51706,9 @@ OUI:044BFF*
+ OUI:044CEF*
+ ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
+
++OUI:044E06*
++ ID_OUI_FROM_DATABASE=Ericsson AB
++
+ OUI:044F8B*
+ ID_OUI_FROM_DATABASE=Adapteva, Inc.
+
+@@ -51628,6 +51856,9 @@ OUI:04DAD2*
+ OUI:04DB56*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
++OUI:04DB8A*
++ ID_OUI_FROM_DATABASE=Suntech International Ltd.
++
+ OUI:04DD4C*
+ ID_OUI_FROM_DATABASE=Velocytech
+
+@@ -51664,6 +51895,9 @@ OUI:04EE91*
+ OUI:04F021*
+ ID_OUI_FROM_DATABASE=Compex Systems Pte Ltd
+
++OUI:04F13E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:04F17D*
+ ID_OUI_FROM_DATABASE=Tarana Wireless
+
+@@ -52117,6 +52351,12 @@ OUI:08008F*
+ OUI:080090*
+ ID_OUI_FROM_DATABASE=SONOMA SYSTEMS
+
++OUI:080371*
++ ID_OUI_FROM_DATABASE=KRG CORPORATE
++
++OUI:0805CD*
++ ID_OUI_FROM_DATABASE=DongGuang EnMai Electronic Product Co.Ltd.
++
+ OUI:0808C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
+@@ -52204,12 +52444,21 @@ OUI:083E0C*
+ OUI:083E8E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+
++OUI:083F3E*
++ ID_OUI_FROM_DATABASE=WSH GmbH
++
++OUI:083F76*
++ ID_OUI_FROM_DATABASE=Intellian Technologies, Inc.
++
+ OUI:084027*
+ ID_OUI_FROM_DATABASE=Gridstore Inc.
+
+ OUI:08482C*
+ ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
+
++OUI:084929*
++ ID_OUI_FROM_DATABASE=CYBATI
++
+ OUI:084E1C*
+ ID_OUI_FROM_DATABASE=H2A Systems, LLC
+
+@@ -52222,6 +52471,9 @@ OUI:08512E*
+ OUI:085240*
+ ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+
++OUI:085700*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:085AE0*
+ ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd.
+
+@@ -52240,6 +52492,9 @@ OUI:0868D0*
+ OUI:0868EA*
+ ID_OUI_FROM_DATABASE=EITO ELECTRONICS CO., LTD.
+
++OUI:086DF2*
++ ID_OUI_FROM_DATABASE=Shenzhen MIMOWAVE Technology Co.,Ltd
++
+ OUI:087045*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -52450,6 +52705,9 @@ OUI:0C3956*
+ OUI:0C3C65*
+ ID_OUI_FROM_DATABASE=Dome Imaging Inc
+
++OUI:0C3E9F*
++ ID_OUI_FROM_DATABASE=Apple, Inc
++
+ OUI:0C469D*
+ ID_OUI_FROM_DATABASE=MS Sedco
+
+@@ -52462,6 +52720,9 @@ OUI:0C4C39*
+ OUI:0C4DE9*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:0C4F5A*
++ ID_OUI_FROM_DATABASE=ASA-RT s.r.l.
++
+ OUI:0C51F7*
+ ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
+
+@@ -52597,6 +52858,9 @@ OUI:0CC0C0*
+ OUI:0CC3A7*
+ ID_OUI_FROM_DATABASE=Meritec
+
++OUI:0CC47A*
++ ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
++
+ OUI:0CC47E*
+ ID_OUI_FROM_DATABASE=EUCAST Co., Ltd.
+
+@@ -52657,6 +52921,9 @@ OUI:0CDDEF*
+ OUI:0CDFA4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:0CE0E4*
++ ID_OUI_FROM_DATABASE=Plantronics, Inc
++
+ OUI:0CE5D3*
+ ID_OUI_FROM_DATABASE=DH electronics GmbH
+
+@@ -52765,6 +53032,9 @@ OUI:101F74*
+ OUI:102279*
+ ID_OUI_FROM_DATABASE=ZeroDesktop, Inc.
+
++OUI:1027BE*
++ ID_OUI_FROM_DATABASE=TVIP
++
+ OUI:102831*
+ ID_OUI_FROM_DATABASE=Morion Inc.
+
+@@ -52954,6 +53224,12 @@ OUI:10D542*
+ OUI:10DDB1*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:10DDF4*
++ ID_OUI_FROM_DATABASE=Maxway Electronics CO.,LTD
++
++OUI:10DEE4*
++ ID_OUI_FROM_DATABASE=automationNEXT GmbH
++
+ OUI:10E2D5*
+ ID_OUI_FROM_DATABASE=Qi Hardware Inc.
+
+@@ -53155,6 +53431,12 @@ OUI:14B1C8*
+ OUI:14B73D*
+ ID_OUI_FROM_DATABASE=ARCHEAN Technologies
+
++OUI:14B968*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
++OUI:14C089*
++ ID_OUI_FROM_DATABASE=DUNE HD LTD
++
+ OUI:14C21D*
+ ID_OUI_FROM_DATABASE=Sabtech Industries
+
+@@ -53275,6 +53557,9 @@ OUI:182012*
+ OUI:182032*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:1820A6*
++ ID_OUI_FROM_DATABASE=Sage Co., Ltd.
++
+ OUI:182666*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -53386,6 +53671,9 @@ OUI:1880CE*
+ OUI:1880F5*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+
++OUI:188331*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:188410*
+ ID_OUI_FROM_DATABASE=CoreTrust Inc.
+
+@@ -53401,6 +53689,9 @@ OUI:188796*
+ OUI:188857*
+ ID_OUI_FROM_DATABASE=Beijing Jinhong Xi-Dian Information Technology Corp.
+
++OUI:1889DF*
++ ID_OUI_FROM_DATABASE=CerebrEX Inc.
++
+ OUI:188ED5*
+ ID_OUI_FROM_DATABASE=TP Vision Belgium N.V. - innovation site Brugge
+
+@@ -53491,6 +53782,9 @@ OUI:18E288*
+ OUI:18E2C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
++OUI:18E728*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:18E7F4*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -53521,6 +53815,9 @@ OUI:18FC9F*
+ OUI:18FE34*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
++OUI:18FF2E*
++ ID_OUI_FROM_DATABASE=Shenzhen Rui Ying Da Technology Co., Ltd
++
+ OUI:1C0656*
+ ID_OUI_FROM_DATABASE=IDY Corporation
+
+@@ -53551,6 +53848,9 @@ OUI:1C184A*
+ OUI:1C19DE*
+ ID_OUI_FROM_DATABASE=eyevis GmbH
+
++OUI:1C1B68*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:1C1D67*
+ ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+
+@@ -53707,6 +54007,9 @@ OUI:1CA770*
+ OUI:1CAA07*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:1CAB01*
++ ID_OUI_FROM_DATABASE=Innovolt
++
+ OUI:1CABA7*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -53770,6 +54073,9 @@ OUI:1CE62B*
+ OUI:1CE6C7*
+ ID_OUI_FROM_DATABASE=Cisco
+
++OUI:1CEEE8*
++ ID_OUI_FROM_DATABASE=Ilshin Elecom
++
+ OUI:1CF061*
+ ID_OUI_FROM_DATABASE=SCAPS GmbH
+
+@@ -53779,6 +54085,9 @@ OUI:1CF5E7*
+ OUI:1CFA68*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
++OUI:1CFCBB*
++ ID_OUI_FROM_DATABASE=Realfiction ApS
++
+ OUI:1CFEA7*
+ ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+
+@@ -53794,12 +54103,21 @@ OUI:200505*
+ OUI:2005E8*
+ ID_OUI_FROM_DATABASE=OOO InProMedia
+
++OUI:2008ED*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:200A5E*
+ ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing co.,LTD
+
+ OUI:200BC7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
++OUI:200CC8*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
++OUI:200E95*
++ ID_OUI_FROM_DATABASE=IEC – TC9 WG43
++
+ OUI:20107A*
+ ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+
+@@ -53917,6 +54235,9 @@ OUI:207D74*
+ OUI:20858C*
+ ID_OUI_FROM_DATABASE=Assa
+
++OUI:2087AC*
++ ID_OUI_FROM_DATABASE=AES motomation
++
+ OUI:208984*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+
+@@ -54022,6 +54343,9 @@ OUI:20E564*
+ OUI:20E791*
+ ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
+
++OUI:20EAC7*
++ ID_OUI_FROM_DATABASE=SHENZHEN RIOPINE ELECTRONICS CO., LTD
++
+ OUI:20EEC6*
+ ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd
+
+@@ -54070,6 +54394,9 @@ OUI:241064*
+ OUI:241125*
+ ID_OUI_FROM_DATABASE=Hutek Co., Ltd.
+
++OUI:241148*
++ ID_OUI_FROM_DATABASE=Entropix, LLC
++
+ OUI:2411D0*
+ ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd.
+
+@@ -54085,6 +54412,9 @@ OUI:241F2C*
+ OUI:2421AB*
+ ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications
+
++OUI:242642*
++ ID_OUI_FROM_DATABASE=SHARP Corporation.
++
+ OUI:242FFA*
+ ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions
+
+@@ -54328,6 +54658,9 @@ OUI:281878*
+ OUI:2818FD*
+ ID_OUI_FROM_DATABASE=Aditya Infotech Ltd.
+
++OUI:282246*
++ ID_OUI_FROM_DATABASE=Beijing Sinoix Communication Co., LTD
++
+ OUI:2826A6*
+ ID_OUI_FROM_DATABASE=PBR electronics GmbH
+
+@@ -54397,6 +54730,12 @@ OUI:286046*
+ OUI:286094*
+ ID_OUI_FROM_DATABASE=CAPELEC
+
++OUI:286336*
++ ID_OUI_FROM_DATABASE=Siemens AG - Industrial Automation - EWA
++
++OUI:28656B*
++ ID_OUI_FROM_DATABASE=Keystone Microtech Corporation
++
+ OUI:286AB8*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -54451,6 +54790,9 @@ OUI:28987B*
+ OUI:289A4B*
+ ID_OUI_FROM_DATABASE=SteelSeries ApS
+
++OUI:289AFA*
++ ID_OUI_FROM_DATABASE=TCT Mobile Limited
++
+ OUI:289EDF*
+ ID_OUI_FROM_DATABASE=Danfoss Turbocor Compressors, Inc
+
+@@ -54487,6 +54829,9 @@ OUI:28BA18*
+ OUI:28BAB5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:28BB59*
++ ID_OUI_FROM_DATABASE=RNET Technologies, Inc.
++
+ OUI:28BE9B*
+ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+
+@@ -54502,6 +54847,9 @@ OUI:28C68E*
+ OUI:28C718*
+ ID_OUI_FROM_DATABASE=Altierre
+
++OUI:28C825*
++ ID_OUI_FROM_DATABASE=DellKing Industrial Co., Ltd
++
+ OUI:28C914*
+ ID_OUI_FROM_DATABASE=Taimag Corporation
+
+@@ -54547,6 +54895,9 @@ OUI:28D997*
+ OUI:28DB81*
+ ID_OUI_FROM_DATABASE=Shanghai Guao Electronic Technology Co., Ltd
+
++OUI:28DEF6*
++ ID_OUI_FROM_DATABASE=bioMerieux Inc.
++
+ OUI:28E02C*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -54598,6 +54949,9 @@ OUI:2C00F7*
+ OUI:2C0623*
+ ID_OUI_FROM_DATABASE=Win Leader Inc.
+
++OUI:2C073C*
++ ID_OUI_FROM_DATABASE=DEVLINE LIMITED
++
+ OUI:2C10C1*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
+@@ -54655,6 +55009,9 @@ OUI:2C3A28*
+ OUI:2C3BFD*
+ ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd.
+
++OUI:2C3ECF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:2C3F38*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -54673,6 +55030,9 @@ OUI:2C441B*
+ OUI:2C44FD*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
++OUI:2C534A*
++ ID_OUI_FROM_DATABASE=Shenzhen Winyao Electronic Limited
++
+ OUI:2C542D*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -54748,6 +55108,9 @@ OUI:2C922C*
+ OUI:2C9464*
+ ID_OUI_FROM_DATABASE=Cincoze Co., Ltd.
+
++OUI:2C957F*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:2C9717*
+ ID_OUI_FROM_DATABASE=I.C.Y. B.V.
+
+@@ -55009,6 +55372,9 @@ OUI:3092F6*
+ OUI:309BAD*
+ ID_OUI_FROM_DATABASE=BBK Electronics Corp., Ltd.,
+
++OUI:30A8DB*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:30AABD*
+ ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd
+
+@@ -55024,6 +55390,12 @@ OUI:30B216*
+ OUI:30B3A2*
+ ID_OUI_FROM_DATABASE=Shenzhen Heguang Measurement & Control Technology Co.,Ltd
+
++OUI:30B5C2*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
++OUI:30C750*
++ ID_OUI_FROM_DATABASE=MIC Technology Group
++
+ OUI:30C82A*
+ ID_OUI_FROM_DATABASE=Wi-Next s.r.l.
+
+@@ -55060,6 +55432,9 @@ OUI:30F31D*
+ OUI:30F33A*
+ ID_OUI_FROM_DATABASE=+plugg srl
+
++OUI:30F42F*
++ ID_OUI_FROM_DATABASE=ESP
++
+ OUI:30F70D*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
+@@ -55087,6 +55462,9 @@ OUI:3413E8*
+ OUI:34159E*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:3417EB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
+ OUI:341A4C*
+ ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD.
+
+@@ -55117,6 +55495,9 @@ OUI:343111*
+ OUI:3440B5*
+ ID_OUI_FROM_DATABASE=IBM
+
++OUI:34466F*
++ ID_OUI_FROM_DATABASE=HiTEM Engineering
++
+ OUI:344B3D*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
+@@ -55126,6 +55507,9 @@ OUI:344B50*
+ OUI:344F3F*
+ ID_OUI_FROM_DATABASE=IO-Power Technology Co., Ltd.
+
++OUI:344F5C*
++ ID_OUI_FROM_DATABASE=R&M AG
++
+ OUI:344F69*
+ ID_OUI_FROM_DATABASE=EKINOPS SAS
+
+@@ -55318,6 +55702,12 @@ OUI:34D7B4*
+ OUI:34DBFD*
+ ID_OUI_FROM_DATABASE=Cisco
+
++OUI:34DE1A*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
++OUI:34DE34*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:34DF2A*
+ ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited
+
+@@ -55456,6 +55846,9 @@ OUI:386793*
+ OUI:386BBB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
++OUI:386C9B*
++ ID_OUI_FROM_DATABASE=Ivy Biomedical
++
+ OUI:386E21*
+ ID_OUI_FROM_DATABASE=Wasion Group Ltd.
+
+@@ -55576,9 +55969,15 @@ OUI:38ECE4*
+ OUI:38EE9D*
+ ID_OUI_FROM_DATABASE=Anedo Ltd.
+
++OUI:38F098*
++ ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems
++
+ OUI:38F597*
+ ID_OUI_FROM_DATABASE=home2net GmbH
+
++OUI:38F708*
++ ID_OUI_FROM_DATABASE=National Resource Management, Inc.
++
+ OUI:38F8B7*
+ ID_OUI_FROM_DATABASE=V2COM PARTICIPACOES S.A.
+
+@@ -55603,9 +56002,15 @@ OUI:3C0771*
+ OUI:3C081E*
+ ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd
+
++OUI:3C08F6*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:3C096D*
+ ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+
++OUI:3C0C48*
++ ID_OUI_FROM_DATABASE=Servergy, Inc.
++
+ OUI:3C0E23*
+ ID_OUI_FROM_DATABASE=Cisco
+
+@@ -55639,6 +56044,9 @@ OUI:3C1A79*
+ OUI:3C1CBE*
+ ID_OUI_FROM_DATABASE=JADAK LLC
+
++OUI:3C25D7*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:3C26D5*
+ ID_OUI_FROM_DATABASE=Sotera Wireless
+
+@@ -55744,6 +56152,9 @@ OUI:3C83B5*
+ OUI:3C86A8*
+ ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
+
++OUI:3C89A6*
++ ID_OUI_FROM_DATABASE=KAPELSE
++
+ OUI:3C8AB0*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+@@ -55837,6 +56248,9 @@ OUI:3CD92B*
+ OUI:3CDF1E*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:3CDFBD*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:3CE072*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -55870,6 +56284,9 @@ OUI:3CF748*
+ OUI:3CFB96*
+ ID_OUI_FROM_DATABASE=Emcraft Systems LLC
+
++OUI:400107*
++ ID_OUI_FROM_DATABASE=Arista Corp
++
+ OUI:4001C6*
+ ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+
+@@ -55948,6 +56365,9 @@ OUI:40406B*
+ OUI:404A03*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+
++OUI:404A18*
++ ID_OUI_FROM_DATABASE=Addrek Smart Solutions
++
+ OUI:404D8E*
+ ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+
+@@ -56011,6 +56431,9 @@ OUI:407074*
+ OUI:407496*
+ ID_OUI_FROM_DATABASE=aFUN TECHNOLOGY INC.
+
++OUI:407875*
++ ID_OUI_FROM_DATABASE=IMBEL - Industria de Material Belico do Brasil
++
+ OUI:407A80*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
+@@ -56059,6 +56482,9 @@ OUI:40A6A4*
+ OUI:40A6D9*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:40A8F0*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:40AC8D*
+ ID_OUI_FROM_DATABASE=Data Management, Inc.
+
+@@ -56164,6 +56590,9 @@ OUI:4403A7*
+ OUI:440CFD*
+ ID_OUI_FROM_DATABASE=NetMan Co., Ltd.
+
++OUI:4411C2*
++ ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH
++
+ OUI:441319*
+ ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD.
+
+@@ -56182,6 +56611,9 @@ OUI:4423AA*
+ OUI:4425BB*
+ ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
+
++OUI:442938*
++ ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd.
++
+ OUI:442A60*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -56230,6 +56662,9 @@ OUI:443D21*
+ OUI:443EB2*
+ ID_OUI_FROM_DATABASE=DEOTRON Co., LTD.
+
++OUI:444891*
++ ID_OUI_FROM_DATABASE=HDMI Licensing, LLC
++
+ OUI:444A65*
+ ID_OUI_FROM_DATABASE=Silverflare Ltd.
+
+@@ -56287,6 +56722,9 @@ OUI:446D57*
+ OUI:44700B*
+ ID_OUI_FROM_DATABASE=IFFU
+
++OUI:447098*
++ ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
++
+ OUI:447BC4*
+ ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd
+
+@@ -56296,6 +56734,9 @@ OUI:447C7F*
+ OUI:447DA5*
+ ID_OUI_FROM_DATABASE=VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD
+
++OUI:447E76*
++ ID_OUI_FROM_DATABASE=Trek Technology (S) Pte Ltd
++
+ OUI:447E95*
+ ID_OUI_FROM_DATABASE=Alpha and Omega, Inc
+
+@@ -56365,6 +56806,9 @@ OUI:44C15C*
+ OUI:44C233*
+ ID_OUI_FROM_DATABASE=Guangzhou Comet Technology Development Co.Ltd
+
++OUI:44C306*
++ ID_OUI_FROM_DATABASE=SIFROM Inc.
++
+ OUI:44C39B*
+ ID_OUI_FROM_DATABASE=OOO RUBEZH NPO
+
+@@ -56443,6 +56887,9 @@ OUI:4813F3*
+ OUI:48174C*
+ ID_OUI_FROM_DATABASE=MicroPower technologies
+
++OUI:481842*
++ ID_OUI_FROM_DATABASE=Shanghai Winaas Co. Equipment Co. Ltd.
++
+ OUI:481BD2*
+ ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
+
+@@ -56458,6 +56905,9 @@ OUI:4833DD*
+ OUI:48343D*
+ ID_OUI_FROM_DATABASE=IEP GmbH
+
++OUI:483D32*
++ ID_OUI_FROM_DATABASE=Syscor Controls & Automation
++
+ OUI:484487*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
+@@ -56476,6 +56926,9 @@ OUI:485261*
+ OUI:485A3F*
+ ID_OUI_FROM_DATABASE=WISOL
+
++OUI:485AB6*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:485B39*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
+@@ -56500,6 +56953,9 @@ OUI:486FD2*
+ OUI:487119*
+ ID_OUI_FROM_DATABASE=SGB GROUP LTD.
+
++OUI:48746E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:488E42*
+ ID_OUI_FROM_DATABASE=DIGALOG GmbH
+
+@@ -56530,6 +56986,9 @@ OUI:48AA5D*
+ OUI:48B253*
+ ID_OUI_FROM_DATABASE=Marketaxess Corporation
+
++OUI:48B5A7*
++ ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd.
++
+ OUI:48B8DE*
+ ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD.
+
+@@ -56554,6 +57013,9 @@ OUI:48C8B6*
+ OUI:48CB6E*
+ ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
+
++OUI:48D0CF*
++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
++
+ OUI:48D224*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
+@@ -56584,6 +57046,12 @@ OUI:48EB30*
+ OUI:48ED80*
+ ID_OUI_FROM_DATABASE=daesung eltec
+
++OUI:48EE07*
++ ID_OUI_FROM_DATABASE=Silver Palm Technologies LLC
++
++OUI:48EE86*
++ ID_OUI_FROM_DATABASE=UTStarcom (China) Co.,Ltd
++
+ OUI:48F230*
+ ID_OUI_FROM_DATABASE=Ubizcore Co.,LTD
+
+@@ -56605,6 +57073,9 @@ OUI:48F925*
+ OUI:48FCB8*
+ ID_OUI_FROM_DATABASE=Woodstream Corporation
+
++OUI:48FEEA*
++ ID_OUI_FROM_DATABASE=HOMA B.V.
++
+ OUI:4C0082*
+ ID_OUI_FROM_DATABASE=Cisco
+
+@@ -56626,6 +57097,9 @@ OUI:4C09B4*
+ OUI:4C0B3A*
+ ID_OUI_FROM_DATABASE=TCT Mobile Limited
+
++OUI:4C0DEE*
++ ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
++
+ OUI:4C0F6E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+@@ -56746,6 +57220,9 @@ OUI:4C7897*
+ OUI:4C79BA*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
++OUI:4C7F62*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:4C804F*
+ ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp
+
+@@ -56755,6 +57232,9 @@ OUI:4C8093*
+ OUI:4C82CF*
+ ID_OUI_FROM_DATABASE=Echostar Technologies
+
++OUI:4C8B30*
++ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
++
+ OUI:4C8B55*
+ ID_OUI_FROM_DATABASE=Grupo Digicon
+
+@@ -56779,6 +57259,9 @@ OUI:4C9E80*
+ OUI:4C9EE4*
+ ID_OUI_FROM_DATABASE=Hanyang Navicom Co.,Ltd.
+
++OUI:4CA56D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:4CA74B*
+ ID_OUI_FROM_DATABASE=Alcatel Lucent
+
+@@ -56833,6 +57316,9 @@ OUI:4CCC34*
+ OUI:4CD637*
+ ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
+
++OUI:4CD7B6*
++ ID_OUI_FROM_DATABASE=Helmer Scientific
++
+ OUI:4CD9C4*
+ ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd
+
+@@ -56854,6 +57340,9 @@ OUI:4CEDDE*
+ OUI:4CF02E*
+ ID_OUI_FROM_DATABASE=Vifa Denmark A/S
+
++OUI:4CF45B*
++ ID_OUI_FROM_DATABASE=Blue Clover Devices
++
+ OUI:4CF737*
+ ID_OUI_FROM_DATABASE=SamJi Electronics Co., Ltd
+
+@@ -56884,6 +57373,9 @@ OUI:5017FF*
+ OUI:501AC5*
+ ID_OUI_FROM_DATABASE=Microsoft
+
++OUI:501CBF*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:50206B*
+ ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions
+
+@@ -56950,6 +57442,9 @@ OUI:504F94*
+ OUI:505663*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
++OUI:5056A8*
++ ID_OUI_FROM_DATABASE=Jolla Ltd
++
+ OUI:5057A8*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -56959,6 +57454,9 @@ OUI:505AC6*
+ OUI:506028*
+ ID_OUI_FROM_DATABASE=Xirrus Inc.
+
++OUI:506184*
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
+ OUI:5061D6*
+ ID_OUI_FROM_DATABASE=Indu-Sol GmbH
+
+@@ -57025,6 +57523,9 @@ OUI:509871*
+ OUI:509F27*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
++OUI:50A054*
++ ID_OUI_FROM_DATABASE=Actineon
++
+ OUI:50A0BF*
+ ID_OUI_FROM_DATABASE=Alba Fiber Systems Inc.
+
+@@ -57046,6 +57547,9 @@ OUI:50ABBF*
+ OUI:50AF73*
+ ID_OUI_FROM_DATABASE=Shenzhen Bitland Information Technology Co., Ltd.
+
++OUI:50B695*
++ ID_OUI_FROM_DATABASE=Micropoint Biotechnologies,Inc.
++
+ OUI:50B7C3*
+ ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+
+@@ -57163,6 +57667,9 @@ OUI:5422F8*
+ OUI:542696*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:54271E*
++ ID_OUI_FROM_DATABASE=AzureWave Technonloies, Inc.
++
+ OUI:542A9C*
+ ID_OUI_FROM_DATABASE=LSY Defense, LLC.
+
+@@ -57175,6 +57682,9 @@ OUI:542F89*
+ OUI:543131*
+ ID_OUI_FROM_DATABASE=Raster Vision Ltd
+
++OUI:543530*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:5435DF*
+ ID_OUI_FROM_DATABASE=Symeo GmbH
+
+@@ -57214,6 +57724,9 @@ OUI:545FA9*
+ OUI:5461EA*
+ ID_OUI_FROM_DATABASE=Zaplox AB
+
++OUI:54724F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:547398*
+ ID_OUI_FROM_DATABASE=Toyo Electronics Corporation
+
+@@ -57274,6 +57787,9 @@ OUI:549D85*
+ OUI:54A04F*
+ ID_OUI_FROM_DATABASE=t-mac Technologies Ltd
+
++OUI:54A31B*
++ ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD
++
+ OUI:54A51B*
+ ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+
+@@ -57286,6 +57802,9 @@ OUI:54A619*
+ OUI:54A9D4*
+ ID_OUI_FROM_DATABASE=Minibar Systems
+
++OUI:54AE27*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:54B620*
+ ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd.
+
+@@ -57295,9 +57814,15 @@ OUI:54BEF7*
+ OUI:54CDA7*
+ ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd
+
++OUI:54CDEE*
++ ID_OUI_FROM_DATABASE=ShenZhen Apexis Electronic Co.,Ltd
++
+ OUI:54D0ED*
+ ID_OUI_FROM_DATABASE=AXIM Communications
+
++OUI:54D163*
++ ID_OUI_FROM_DATABASE=MAX-TECH,INC
++
+ OUI:54D1B0*
+ ID_OUI_FROM_DATABASE=Universal Laser Systems, Inc
+
+@@ -57310,6 +57835,9 @@ OUI:54DF63*
+ OUI:54E032*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
++OUI:54E2E0*
++ ID_OUI_FROM_DATABASE=Pace plc
++
+ OUI:54E3B0*
+ ID_OUI_FROM_DATABASE=JVL Industri Elektronik
+
+@@ -57337,6 +57865,9 @@ OUI:54FB58*
+ OUI:54FDBF*
+ ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH
+
++OUI:580528*
++ ID_OUI_FROM_DATABASE=LABRIS NETWORKS
++
+ OUI:580556*
+ ID_OUI_FROM_DATABASE=Elettronica GF S.r.L.
+
+@@ -57346,6 +57877,9 @@ OUI:5808FA*
+ OUI:5809E5*
+ ID_OUI_FROM_DATABASE=Kivic Inc.
+
++OUI:580A20*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:581243*
+ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+
+@@ -57394,6 +57928,9 @@ OUI:5846E1*
+ OUI:5848C0*
+ ID_OUI_FROM_DATABASE=COFLEC
+
++OUI:58493B*
++ ID_OUI_FROM_DATABASE=Palo Alto Networks
++
+ OUI:5849BA*
+ ID_OUI_FROM_DATABASE=Chitai Electronic Corp.
+
+@@ -57406,6 +57943,9 @@ OUI:584CEE*
+ OUI:585076*
+ ID_OUI_FROM_DATABASE=Linear Equipamentos Eletronicos SA
+
++OUI:5850AB*
++ ID_OUI_FROM_DATABASE=TLS Corporation
++
+ OUI:5850E6*
+ ID_OUI_FROM_DATABASE=Best Buy Corporation
+
+@@ -57493,6 +58033,9 @@ OUI:589835*
+ OUI:58986F*
+ ID_OUI_FROM_DATABASE=Revolution Display
+
++OUI:589CFC*
++ ID_OUI_FROM_DATABASE=FreeBSD Foundation
++
+ OUI:58A2B5*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
+@@ -57628,6 +58171,9 @@ OUI:5C22C4*
+ OUI:5C2479*
+ ID_OUI_FROM_DATABASE=Baltech AG
+
++OUI:5C254C*
++ ID_OUI_FROM_DATABASE=Avire Global Pte Ltd
++
+ OUI:5C260A*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
+@@ -57757,6 +58303,9 @@ OUI:5CBD9E*
+ OUI:5CC213*
+ ID_OUI_FROM_DATABASE=Fr. Sauter AG
+
++OUI:5CC5D4*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:5CC6D0*
+ ID_OUI_FROM_DATABASE=Skyworth Digital technology(shenzhen)co.ltd.
+
+@@ -57808,6 +58357,9 @@ OUI:5CE286*
+ OUI:5CE2F4*
+ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+
++OUI:5CE7BF*
++ ID_OUI_FROM_DATABASE=New Singularity International Technical Development Co.,Ltd
++
+ OUI:5CE8EB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
+@@ -57826,6 +58378,9 @@ OUI:5CF370*
+ OUI:5CF3FC*
+ ID_OUI_FROM_DATABASE=IBM Corp
+
++OUI:5CF50D*
++ ID_OUI_FROM_DATABASE=Institute of microelectronic applications
++
+ OUI:5CF6DC*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+
+@@ -57847,6 +58402,9 @@ OUI:5CFFFF*
+ OUI:6002B4*
+ ID_OUI_FROM_DATABASE=Wistron NeWeb Corp.
+
++OUI:600308*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:600347*
+ ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd.
+
+@@ -57874,6 +58432,9 @@ OUI:601D0F*
+ OUI:601E02*
+ ID_OUI_FROM_DATABASE=EltexAlatau
+
++OUI:602103*
++ ID_OUI_FROM_DATABASE=STCUBE.INC
++
+ OUI:6021C0*
+ ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+
+@@ -58117,12 +58678,18 @@ OUI:60FB42*
+ OUI:60FE1E*
+ ID_OUI_FROM_DATABASE=China Palms Telecom.Ltd
+
++OUI:60FE20*
++ ID_OUI_FROM_DATABASE=2 Wire
++
+ OUI:60FEC5*
+ ID_OUI_FROM_DATABASE=Apple
+
+ OUI:60FEF9*
+ ID_OUI_FROM_DATABASE=Thomas & Betts
+
++OUI:60FFDD*
++ ID_OUI_FROM_DATABASE=C.E. ELECTRONICS, INC
++
+ OUI:6400F1*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -58228,6 +58795,9 @@ OUI:645563*
+ OUI:64557F*
+ ID_OUI_FROM_DATABASE=NSFOCUS Information Technology Co., Ltd.
+
++OUI:6455B1*
++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
++
+ OUI:645601*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
+@@ -58363,6 +58933,9 @@ OUI:64AE88*
+ OUI:64B310*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:64B370*
++ ID_OUI_FROM_DATABASE=PowerComm Solutons LLC
++
+ OUI:64B64A*
+ ID_OUI_FROM_DATABASE=ViVOtech, Inc.
+
+@@ -58435,12 +59008,18 @@ OUI:64E682*
+ OUI:64E84F*
+ ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
+
++OUI:64E892*
++ ID_OUI_FROM_DATABASE=Morio Denki Co., Ltd.
++
+ OUI:64E8E6*
+ ID_OUI_FROM_DATABASE=global moisture management system
+
+ OUI:64E950*
+ ID_OUI_FROM_DATABASE=Cisco
+
++OUI:64EB8C*
++ ID_OUI_FROM_DATABASE=Seiko Epson Corporation
++
+ OUI:64ED57*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+@@ -58570,6 +59149,9 @@ OUI:687251*
+ OUI:68764F*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
++OUI:687848*
++ ID_OUI_FROM_DATABASE=Westunitis Co., Ltd.
++
+ OUI:68784C*
+ ID_OUI_FROM_DATABASE=Nortel Networks
+
+@@ -58594,6 +59176,9 @@ OUI:688470*
+ OUI:688540*
+ ID_OUI_FROM_DATABASE=IGI Mobile, Inc.
+
++OUI:68856A*
++ ID_OUI_FROM_DATABASE=OuterLink Corporation
++
+ OUI:6886A7*
+ ID_OUI_FROM_DATABASE=Cisco
+
+@@ -58684,6 +59269,9 @@ OUI:68CE4E*
+ OUI:68D1FD*
+ ID_OUI_FROM_DATABASE=Shenzhen Trimax Technology Co.,Ltd
+
++OUI:68D247*
++ ID_OUI_FROM_DATABASE=Portalis LC
++
+ OUI:68D925*
+ ID_OUI_FROM_DATABASE=ProSys Development Services
+
+@@ -58732,6 +59320,9 @@ OUI:68FCB3*
+ OUI:6C0460*
+ ID_OUI_FROM_DATABASE=RBH Access Technologies Inc.
+
++OUI:6C09D6*
++ ID_OUI_FROM_DATABASE=Digiquest Electronics LTD
++
+ OUI:6C0E0D*
+ ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
+
+@@ -58816,12 +59407,18 @@ OUI:6C5D63*
+ OUI:6C5E7A*
+ ID_OUI_FROM_DATABASE=Ubiquitous Internet Telecom Co., Ltd
+
++OUI:6C5F1C*
++ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
++
+ OUI:6C6126*
+ ID_OUI_FROM_DATABASE=Rinicom Holdings
+
+ OUI:6C626D*
+ ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD
+
++OUI:6C641A*
++ ID_OUI_FROM_DATABASE=Penguin Computing
++
+ OUI:6C6F18*
+ ID_OUI_FROM_DATABASE=Stereotaxis, Inc.
+
+@@ -58864,6 +59461,9 @@ OUI:6C92BF*
+ OUI:6C98EB*
+ ID_OUI_FROM_DATABASE=Xyne GmbH
+
++OUI:6C9989*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:6C9AC9*
+ ID_OUI_FROM_DATABASE=Valentine Research, Inc.
+
+@@ -59023,6 +59623,9 @@ OUI:702559*
+ OUI:702B1D*
+ ID_OUI_FROM_DATABASE=E-Domus International Limited
+
++OUI:702C1F*
++ ID_OUI_FROM_DATABASE=Wisol
++
+ OUI:702F4B*
+ ID_OUI_FROM_DATABASE=PolyVision Inc.
+
+@@ -59071,6 +59674,9 @@ OUI:704AE4*
+ OUI:704CED*
+ ID_OUI_FROM_DATABASE=TMRG, Inc.
+
++OUI:704E01*
++ ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD.
++
+ OUI:7052C5*
+ ID_OUI_FROM_DATABASE=Avaya, Inc.
+
+@@ -59389,9 +59995,15 @@ OUI:746630*
+ OUI:746A89*
+ ID_OUI_FROM_DATABASE=Rezolt Corporation
+
++OUI:746A8F*
++ ID_OUI_FROM_DATABASE=VS Vision Systems GmbH
++
+ OUI:746B82*
+ ID_OUI_FROM_DATABASE=MOVEK
+
++OUI:746F3D*
++ ID_OUI_FROM_DATABASE=Contec GmbH
++
+ OUI:7472F2*
+ ID_OUI_FROM_DATABASE=Chipsip Technology Co., Ltd.
+
+@@ -59413,6 +60025,9 @@ OUI:747E2D*
+ OUI:74867A*
+ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+
++OUI:74882A*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:74888B*
+ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+
+@@ -59422,6 +60037,9 @@ OUI:748E08*
+ OUI:748EF8*
+ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+
++OUI:748F1B*
++ ID_OUI_FROM_DATABASE=MasterImage 3D
++
+ OUI:749050*
+ ID_OUI_FROM_DATABASE=Renesas Electronics Corporation
+
+@@ -59437,6 +60055,9 @@ OUI:74943D*
+ OUI:749975*
+ ID_OUI_FROM_DATABASE=IBM Corporation
+
++OUI:749C52*
++ ID_OUI_FROM_DATABASE=Huizhou Desay SV Automotive Co., Ltd.
++
+ OUI:749DDC*
+ ID_OUI_FROM_DATABASE=2Wire
+
+@@ -59467,6 +60088,9 @@ OUI:74BE08*
+ OUI:74BFA1*
+ ID_OUI_FROM_DATABASE=HYUNTECK
+
++OUI:74C621*
++ ID_OUI_FROM_DATABASE=Zhejiang Hite Renewable Energy Co.,LTD
++
+ OUI:74C99A*
+ ID_OUI_FROM_DATABASE=Ericsson AB
+
+@@ -59605,6 +60229,9 @@ OUI:78303B*
+ OUI:7830E1*
+ ID_OUI_FROM_DATABASE=UltraClenz, LLC
+
++OUI:7831C1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:78324F*
+ ID_OUI_FROM_DATABASE=Millennium Group, Inc.
+
+@@ -59614,6 +60241,9 @@ OUI:783CE3*
+ OUI:783D5B*
+ ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A.
+
++OUI:783E53*
++ ID_OUI_FROM_DATABASE=BSkyB Ltd
++
+ OUI:783F15*
+ ID_OUI_FROM_DATABASE=EasySYNC Ltd.
+
+@@ -59638,6 +60268,9 @@ OUI:78491D*
+ OUI:784B08*
+ ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd
+
++OUI:784B87*
++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd.
++
+ OUI:78510C*
+ ID_OUI_FROM_DATABASE=LiveU Ltd.
+
+@@ -59674,6 +60307,9 @@ OUI:78617C*
+ OUI:7866AE*
+ ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc.
+
++OUI:786A89*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:786C1C*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -59737,6 +60373,9 @@ OUI:78A2A0*
+ OUI:78A3E4*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:78A504*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:78A5DD*
+ ID_OUI_FROM_DATABASE=Shenzhen Smarteye Digital Electronics Co., Ltd
+
+@@ -59830,6 +60469,9 @@ OUI:78D5B5*
+ OUI:78D6F0*
+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
+
++OUI:78D752*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:78D99F*
+ ID_OUI_FROM_DATABASE=NuCom HK Ltd.
+
+@@ -59887,6 +60529,9 @@ OUI:78FE3D*
+ OUI:78FE41*
+ ID_OUI_FROM_DATABASE=Socus networks
+
++OUI:78FEE2*
++ ID_OUI_FROM_DATABASE=Shanghai Diveo Technology Co., Ltd
++
+ OUI:78FF57*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+@@ -59929,6 +60574,9 @@ OUI:7C1476*
+ OUI:7C160D*
+ ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+
++OUI:7C1A03*
++ ID_OUI_FROM_DATABASE=8Locations Co., Ltd.
++
+ OUI:7C1AFC*
+ ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
+
+@@ -60058,6 +60706,9 @@ OUI:7C822D*
+ OUI:7C8306*
+ ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as
+
++OUI:7C8D91*
++ ID_OUI_FROM_DATABASE=Shanghai Hongzhuo Information Technology co.,LTD
++
+ OUI:7C8EE4*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+@@ -60172,6 +60823,9 @@ OUI:7CDD90*
+ OUI:7CE044*
+ ID_OUI_FROM_DATABASE=NEON Inc
+
++OUI:7CE1FF*
++ ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc.
++
+ OUI:7CE56B*
+ ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd.
+
+@@ -60214,6 +60868,9 @@ OUI:80000B*
+ OUI:800010*
+ ID_OUI_FROM_DATABASE=ATT BELL LABORATORIES
+
++OUI:80006E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8005DF*
+ ID_OUI_FROM_DATABASE=Montage Technology Group Limited
+
+@@ -60307,9 +60964,15 @@ OUI:805719*
+ OUI:8058C5*
+ ID_OUI_FROM_DATABASE=NovaTec Kommunikationstechnik GmbH
+
++OUI:8059FD*
++ ID_OUI_FROM_DATABASE=Noviga
++
+ OUI:806007*
+ ID_OUI_FROM_DATABASE=RIM
+
++OUI:80618F*
++ ID_OUI_FROM_DATABASE=Shenzhen sangfei consumer communications co.,ltd
++
+ OUI:806459*
+ ID_OUI_FROM_DATABASE=Nimbus Inc.
+
+@@ -60448,6 +61111,9 @@ OUI:80D733*
+ OUI:80DB31*
+ ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
+
++OUI:80EA96*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:80EE73*
+ ID_OUI_FROM_DATABASE=Shuttle Inc.
+
+@@ -60481,6 +61147,9 @@ OUI:840F45*
+ OUI:841715*
+ ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd.
+
++OUI:841766*
++ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd
++
+ OUI:841888*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+@@ -60502,9 +61171,15 @@ OUI:84248D*
+ OUI:84253F*
+ ID_OUI_FROM_DATABASE=Silex Technology, Inc
+
++OUI:8425A4*
++ ID_OUI_FROM_DATABASE=Tariox Limited
++
+ OUI:8425DB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:842615*
++ ID_OUI_FROM_DATABASE=ADB Broadband Italia
++
+ OUI:84262B*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
+@@ -60586,6 +61261,9 @@ OUI:846AED*
+ OUI:846EB1*
+ ID_OUI_FROM_DATABASE=Park Assist LLC
+
++OUI:847207*
++ ID_OUI_FROM_DATABASE=I&C Technology
++
+ OUI:84742A*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+@@ -60610,12 +61288,18 @@ OUI:848336*
+ OUI:848371*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
++OUI:848433*
++ ID_OUI_FROM_DATABASE=Paradox Engineering SA
++
+ OUI:848506*
+ ID_OUI_FROM_DATABASE=Apple
+
+ OUI:848D84*
+ ID_OUI_FROM_DATABASE=Rajant Corporation
+
++OUI:848E0C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:848E96*
+ ID_OUI_FROM_DATABASE=Embertec Pty Ltd
+
+@@ -60838,6 +61522,9 @@ OUI:888717*
+ OUI:8887DD*
+ ID_OUI_FROM_DATABASE=DarbeeVision Inc.
+
++OUI:888914*
++ ID_OUI_FROM_DATABASE=All Components Incorporated
++
+ OUI:888964*
+ ID_OUI_FROM_DATABASE=GSI Electronics Inc.
+
+@@ -60853,6 +61540,9 @@ OUI:889166*
+ OUI:8891DD*
+ ID_OUI_FROM_DATABASE=Racktivity
+
++OUI:889471*
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
++
+ OUI:8894F9*
+ ID_OUI_FROM_DATABASE=Gemicom Technology, Inc.
+
+@@ -60883,6 +61573,9 @@ OUI:88A3CC*
+ OUI:88A5BD*
+ ID_OUI_FROM_DATABASE=QPCOM INC.
+
++OUI:88A73C*
++ ID_OUI_FROM_DATABASE=Ragentek Technology Group
++
+ OUI:88ACC1*
+ ID_OUI_FROM_DATABASE=Generiton Co., Ltd.
+
+@@ -60916,6 +61609,9 @@ OUI:88CB87*
+ OUI:88D7BC*
+ ID_OUI_FROM_DATABASE=DEP Company
+
++OUI:88D962*
++ ID_OUI_FROM_DATABASE=Canopus Systems US LLC
++
+ OUI:88DC96*
+ ID_OUI_FROM_DATABASE=SENAO Networks, Inc.
+
+@@ -60928,12 +61624,18 @@ OUI:88E0A0*
+ OUI:88E0F3*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
++OUI:88E3AB*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:88E712*
+ ID_OUI_FROM_DATABASE=Whirlpool Corporation
+
+ OUI:88E7A6*
+ ID_OUI_FROM_DATABASE=iKnowledge Integration Corp.
+
++OUI:88E8F8*
++ ID_OUI_FROM_DATABASE=YONG TAI ELECTRONIC (DONGGUAN) LTD.
++
+ OUI:88E917*
+ ID_OUI_FROM_DATABASE=Tamaggo
+
+@@ -60949,6 +61651,9 @@ OUI:88F488*
+ OUI:88F490*
+ ID_OUI_FROM_DATABASE=Jetmobile Pte Ltd
+
++OUI:88F7C7*
++ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
++
+ OUI:88FD15*
+ ID_OUI_FROM_DATABASE=LINEEYE CO., LTD
+
+@@ -60994,6 +61699,9 @@ OUI:8C271D*
+ OUI:8C278A*
+ ID_OUI_FROM_DATABASE=Vocollect Inc
+
++OUI:8C2937*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C2DAA*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -61012,6 +61720,9 @@ OUI:8C3C07*
+ OUI:8C3C4A*
+ ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC.
+
++OUI:8C41F2*
++ ID_OUI_FROM_DATABASE=RDA Technologies Ltd.
++
+ OUI:8C4435*
+ ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd.
+
+@@ -61099,6 +61810,9 @@ OUI:8C7716*
+ OUI:8C7B9D*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:8C7C92*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:8C7CB5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+@@ -61153,6 +61867,9 @@ OUI:8CB82C*
+ OUI:8CB864*
+ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+
++OUI:8CBEBE*
++ ID_OUI_FROM_DATABASE=Xiaomi Technology Co.,Ltd
++
+ OUI:8CC121*
+ ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
+
+@@ -61285,6 +62002,9 @@ OUI:902B34*
+ OUI:902E87*
+ ID_OUI_FROM_DATABASE=LabJack
+
++OUI:9031CD*
++ ID_OUI_FROM_DATABASE=Onyx Healthcare Inc.
++
+ OUI:90342B*
+ ID_OUI_FROM_DATABASE=Gatekeeper Systems, Inc.
+
+@@ -61324,6 +62044,9 @@ OUI:9049FA*
+ OUI:904CE5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
++OUI:904E2B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:90507B*
+ ID_OUI_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG
+
+@@ -61426,6 +62149,9 @@ OUI:9092B4*
+ OUI:9094E4*
+ ID_OUI_FROM_DATABASE=D-Link International
+
++OUI:909864*
++ ID_OUI_FROM_DATABASE=Impex-Sat GmbH&Co KG
++
+ OUI:909916*
+ ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC
+
+@@ -61501,6 +62227,12 @@ OUI:90D92C*
+ OUI:90DA4E*
+ ID_OUI_FROM_DATABASE=AVANU
+
++OUI:90DB46*
++ ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD
++
++OUI:90DFB7*
++ ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH
++
+ OUI:90E0F0*
+ ID_OUI_FROM_DATABASE=Harman International
+
+@@ -61513,6 +62245,12 @@ OUI:90E6BA*
+ OUI:90EA60*
+ ID_OUI_FROM_DATABASE=SPI Lasers Ltd
+
++OUI:90F1AA*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
++
++OUI:90F1B0*
++ ID_OUI_FROM_DATABASE=Hangzhou Anheng Info&Tech CO.,LTD
++
+ OUI:90F278*
+ ID_OUI_FROM_DATABASE=Radius Gateway
+
+@@ -61624,6 +62362,9 @@ OUI:945047*
+ OUI:945103*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
++OUI:9451BF*
++ ID_OUI_FROM_DATABASE=Hyundai ESG
++
+ OUI:94592D*
+ ID_OUI_FROM_DATABASE=EKE Building Technology Systems Ltd
+
+@@ -61681,6 +62422,9 @@ OUI:949BFD*
+ OUI:949C55*
+ ID_OUI_FROM_DATABASE=Alta Data Technologies
+
++OUI:949F3F*
++ ID_OUI_FROM_DATABASE=Optek Digital Technology company limited
++
+ OUI:949FB4*
+ ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd
+
+@@ -61711,6 +62455,9 @@ OUI:94BA56*
+ OUI:94BF1E*
+ ID_OUI_FROM_DATABASE=eflow Inc. / Smart Device Planning and Development Division
+
++OUI:94C014*
++ ID_OUI_FROM_DATABASE=Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek
++
+ OUI:94C150*
+ ID_OUI_FROM_DATABASE=2Wire Inc
+
+@@ -61939,6 +62686,9 @@ OUI:9873C4*
+ OUI:9876B6*
+ ID_OUI_FROM_DATABASE=Adafruit
+
++OUI:987770*
++ ID_OUI_FROM_DATABASE=Pep Digital Technology (Guangzhou) Co., Ltd
++
+ OUI:988217*
+ ID_OUI_FROM_DATABASE=Disruptive Ltd
+
+@@ -61990,6 +62740,9 @@ OUI:98BC57*
+ OUI:98BC99*
+ ID_OUI_FROM_DATABASE=Edeltech Co.,Ltd.
+
++OUI:98C0EB*
++ ID_OUI_FROM_DATABASE=Global Regency Ltd
++
+ OUI:98C845*
+ ID_OUI_FROM_DATABASE=PacketAccess
+
+@@ -62026,6 +62779,9 @@ OUI:98E79A*
+ OUI:98EC65*
+ ID_OUI_FROM_DATABASE=Cosesy ApS
+
++OUI:98F0AB*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:98F537*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+@@ -62113,6 +62869,9 @@ OUI:9C31B6*
+ OUI:9C3AAF*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:9C3EAA*
++ ID_OUI_FROM_DATABASE=EnvyLogic Co.,Ltd.
++
+ OUI:9C417C*
+ ID_OUI_FROM_DATABASE=Hame Technology Co., Limited
+
+@@ -62179,6 +62938,12 @@ OUI:9C611D*
+ OUI:9C645E*
+ ID_OUI_FROM_DATABASE=Harman Consumer Group
+
++OUI:9C65B0*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
++OUI:9C65F9*
++ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
++
+ OUI:9C6650*
+ ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch
+
+@@ -62203,6 +62968,9 @@ OUI:9C807D*
+ OUI:9C80DF*
+ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+
++OUI:9C86DA*
++ ID_OUI_FROM_DATABASE=Phoenix Geophysics Ltd.
++
+ OUI:9C8888*
+ ID_OUI_FROM_DATABASE=Simac Techniek NV
+
+@@ -62272,6 +63040,9 @@ OUI:9CB793*
+ OUI:9CBB98*
+ ID_OUI_FROM_DATABASE=Shen Zhen RND Electronic Co.,LTD
+
++OUI:9CBD9D*
++ ID_OUI_FROM_DATABASE=SkyDisk, Inc.
++
+ OUI:9CC077*
+ ID_OUI_FROM_DATABASE=PrintCounts, LLC
+
+@@ -62332,6 +63103,9 @@ OUI:9CF8DB*
+ OUI:9CF938*
+ ID_OUI_FROM_DATABASE=AREVA NP GmbH
+
++OUI:9CFBF1*
++ ID_OUI_FROM_DATABASE=MESOMATIC GmbH & Co.KG
++
+ OUI:9CFFBE*
+ ID_OUI_FROM_DATABASE=OTSL Inc.
+
+@@ -62449,6 +63223,9 @@ OUI:A05DE7*
+ OUI:A05E6B*
+ ID_OUI_FROM_DATABASE=MELPER Co., Ltd.
+
++OUI:A06518*
++ ID_OUI_FROM_DATABASE=VNPT TECHNOLOGY
++
+ OUI:A067BE*
+ ID_OUI_FROM_DATABASE=Sicon s.r.l.
+
+@@ -62479,6 +63256,9 @@ OUI:A073FC*
+ OUI:A07591*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:A07771*
++ ID_OUI_FROM_DATABASE=Vialis BV
++
+ OUI:A078BA*
+ ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+
+@@ -62500,6 +63280,9 @@ OUI:A08869*
+ OUI:A088B4*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
++OUI:A089E4*
++ ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
++
+ OUI:A08A87*
+ ID_OUI_FROM_DATABASE=HuiZhou KaiYue Electronic Co.,Ltd
+
+@@ -62599,6 +63382,9 @@ OUI:A0E25A*
+ OUI:A0E295*
+ ID_OUI_FROM_DATABASE=DAT System Co.,Ltd
+
++OUI:A0E453*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:A0E534*
+ ID_OUI_FROM_DATABASE=Stratec Biomedical AG
+
+@@ -62635,6 +63421,9 @@ OUI:A0F419*
+ OUI:A0F450*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
++OUI:A0F459*
++ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
++
+ OUI:A0FE91*
+ ID_OUI_FROM_DATABASE=AVAT Automation GmbH
+
+@@ -62740,6 +63529,9 @@ OUI:A45D36*
+ OUI:A46706*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:A46CC1*
++ ID_OUI_FROM_DATABASE=LTi REEnergy GmbH
++
+ OUI:A46E79*
+ ID_OUI_FROM_DATABASE=DFT System Co.Ltd
+
+@@ -62785,6 +63577,9 @@ OUI:A49947*
+ OUI:A49981*
+ ID_OUI_FROM_DATABASE=FuJian Elite Power Tech CO.,LTD.
+
++OUI:A49A58*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A49B13*
+ ID_OUI_FROM_DATABASE=Burroughs Payment Systems, Inc.
+
+@@ -62836,6 +63631,9 @@ OUI:A4B980*
+ OUI:A4BADB*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
++OUI:A4BBAF*
++ ID_OUI_FROM_DATABASE=Lime Instruments
++
+ OUI:A4BE61*
+ ID_OUI_FROM_DATABASE=EutroVision System, Inc.
+
+@@ -62941,6 +63739,9 @@ OUI:A80180*
+ OUI:A80600*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:A80C0D*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:A8154D*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
+@@ -62959,6 +63760,9 @@ OUI:A81FAF*
+ OUI:A82066*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:A824EB*
++ ID_OUI_FROM_DATABASE=ZAO NPO Introtest
++
+ OUI:A826D9*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
+@@ -62992,6 +63796,9 @@ OUI:A854B2*
+ OUI:A8556A*
+ ID_OUI_FROM_DATABASE=Pocketnet Technology Inc.
+
++OUI:A8574E*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:A85BB0*
+ ID_OUI_FROM_DATABASE=Shenzhen Dehoo Technology Co.,Ltd
+
+@@ -63034,6 +63841,9 @@ OUI:A87B39*
+ OUI:A87E33*
+ ID_OUI_FROM_DATABASE=Nokia Danmark A/S
+
++OUI:A881F1*
++ ID_OUI_FROM_DATABASE=BMEYE B.V.
++
+ OUI:A886DD*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+@@ -63085,12 +63895,18 @@ OUI:A8B0AE*
+ OUI:A8B1D4*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:A8B9B3*
++ ID_OUI_FROM_DATABASE=ESSYS
++
+ OUI:A8BBCF*
+ ID_OUI_FROM_DATABASE=Apple
+
+ OUI:A8BD1A*
+ ID_OUI_FROM_DATABASE=Honey Bee (Hong Kong) Limited
+
++OUI:A8BD3A*
++ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
++
+ OUI:A8C222*
+ ID_OUI_FROM_DATABASE=TM-Research Inc.
+
+@@ -63157,6 +63973,9 @@ OUI:AA0004*
+ OUI:AC0142*
+ ID_OUI_FROM_DATABASE=Uriel Technologies SIA
+
++OUI:AC02CA*
++ ID_OUI_FROM_DATABASE=HI Solutions, Inc.
++
+ OUI:AC02CF*
+ ID_OUI_FROM_DATABASE=RW Tecnologia Industria e Comercio Ltda
+
+@@ -63208,6 +64027,9 @@ OUI:AC319D*
+ OUI:AC34CB*
+ ID_OUI_FROM_DATABASE=Shanhai GBCOM Communication Technology Co. Ltd
+
++OUI:AC3613*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:AC3C0B*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -63406,6 +64228,9 @@ OUI:ACCE8F*
+ OUI:ACCF23*
+ ID_OUI_FROM_DATABASE=Hi-flying electronics technology Co.,Ltd
+
++OUI:ACCF5C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:ACD180*
+ ID_OUI_FROM_DATABASE=Crexendo Business Solutions, Inc.
+
+@@ -63421,6 +64246,9 @@ OUI:ACD9D6*
+ OUI:ACDBDA*
+ ID_OUI_FROM_DATABASE=Shenzhen Geniatech Inc, Ltd
+
++OUI:ACE069*
++ ID_OUI_FROM_DATABASE=ISAAC Instruments
++
+ OUI:ACE215*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
+@@ -63493,6 +64321,9 @@ OUI:B01C91*
+ OUI:B024F3*
+ ID_OUI_FROM_DATABASE=Progeny Systems
+
++OUI:B03495*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B0358D*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
+@@ -63523,6 +64354,9 @@ OUI:B050BC*
+ OUI:B0518E*
+ ID_OUI_FROM_DATABASE=Holl technology CO.Ltd.
+
++OUI:B05706*
++ ID_OUI_FROM_DATABASE=Vallox Oy
++
+ OUI:B058C4*
+ ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc
+
+@@ -63538,6 +64372,12 @@ OUI:B06563*
+ OUI:B065BD*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:B068B6*
++ ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd
++
++OUI:B06971*
++ ID_OUI_FROM_DATABASE=DEI Sales, Inc.
++
+ OUI:B06CBF*
+ ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
+
+@@ -63568,6 +64408,9 @@ OUI:B0808C*
+ OUI:B081D8*
+ ID_OUI_FROM_DATABASE=I-sys Corp
+
++OUI:B0869E*
++ ID_OUI_FROM_DATABASE=Chloride S.r.L
++
+ OUI:B08807*
+ ID_OUI_FROM_DATABASE=Strata Worldwide
+
+@@ -63643,6 +64486,9 @@ OUI:B0BF99*
+ OUI:B0C4E7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
++OUI:B0C554*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:B0C69A*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+@@ -63673,6 +64519,9 @@ OUI:B0D2F5*
+ OUI:B0D7C5*
+ ID_OUI_FROM_DATABASE=STP KFT
+
++OUI:B0DA00*
++ ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE
++
+ OUI:B0DF3A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -63694,6 +64543,9 @@ OUI:B0E97E*
+ OUI:B0EC71*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:B0EC8F*
++ ID_OUI_FROM_DATABASE=GMX SAS
++
+ OUI:B0EE45*
+ ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc.
+
+@@ -63736,6 +64588,9 @@ OUI:B41489*
+ OUI:B41513*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
++OUI:B418D1*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B41DEF*
+ ID_OUI_FROM_DATABASE=Internet Laboratories, Inc.
+
+@@ -63754,6 +64609,9 @@ OUI:B428F1*
+ OUI:B42A39*
+ ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o.
+
++OUI:B42C92*
++ ID_OUI_FROM_DATABASE=Zhejiang Weirong Electronic Co., Ltd
++
+ OUI:B42CBE*
+ ID_OUI_FROM_DATABASE=Direct Payment Solutions Limited
+
+@@ -63787,6 +64645,9 @@ OUI:B43E3B*
+ OUI:B4417A*
+ ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd
+
++OUI:B4430D*
++ ID_OUI_FROM_DATABASE=Broadlink Pty Ltd
++
+ OUI:B44CC2*
+ ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD
+
+@@ -63847,6 +64708,9 @@ OUI:B482C5*
+ OUI:B482FE*
+ ID_OUI_FROM_DATABASE=Askey Computer Corp
+
++OUI:B48547*
++ ID_OUI_FROM_DATABASE=Amptown System Company GmbH
++
+ OUI:B48910*
+ ID_OUI_FROM_DATABASE=Coster T.E. S.P.A.
+
+@@ -63856,6 +64720,9 @@ OUI:B4944E*
+ OUI:B49842*
+ ID_OUI_FROM_DATABASE=zte corporation
+
++OUI:B4994C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:B499BA*
+ ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+
+@@ -63875,7 +64742,7 @@ OUI:B4A5A9*
+ ID_OUI_FROM_DATABASE=MODI GmbH
+
+ OUI:B4A82B*
+- ID_OUI_FROM_DATABASE=Histar
++ ID_OUI_FROM_DATABASE=Histar Digital Electronics Co., Ltd.
+
+ OUI:B4A95A*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+@@ -63895,6 +64762,9 @@ OUI:B4B362*
+ OUI:B4B52F*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
++OUI:B4B542*
++ ID_OUI_FROM_DATABASE=Hubbell Power Systems, Inc.
++
+ OUI:B4B5AF*
+ ID_OUI_FROM_DATABASE=Minsung Electronics
+
+@@ -64021,6 +64891,9 @@ OUI:B830A8*
+ OUI:B836D8*
+ ID_OUI_FROM_DATABASE=Videoswitch
+
++OUI:B83861*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:B838CA*
+ ID_OUI_FROM_DATABASE=Kyokko Tsushin System CO.,LTD
+
+@@ -64036,6 +64909,9 @@ OUI:B83E59*
+ OUI:B8415F*
+ ID_OUI_FROM_DATABASE=ASP AG
+
++OUI:B843E4*
++ ID_OUI_FROM_DATABASE=Vlatacom
++
+ OUI:B847C6*
+ ID_OUI_FROM_DATABASE=SanJet Technology Corp.
+
+@@ -64075,6 +64951,9 @@ OUI:B8653B*
+ OUI:B86B23*
+ ID_OUI_FROM_DATABASE=Toshiba
+
++OUI:B86CE8*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:B870F4*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+
+@@ -64543,6 +65422,9 @@ OUI:BCF2AF*
+ OUI:BCF5AC*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
++OUI:BCF61C*
++ ID_OUI_FROM_DATABASE=Geomodeling Wuxi Technology Co. Ltd.
++
+ OUI:BCF685*
+ ID_OUI_FROM_DATABASE=D-Link International
+
+@@ -64762,6 +65644,9 @@ OUI:C0C3B6*
+ OUI:C0C520*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
++OUI:C0C569*
++ ID_OUI_FROM_DATABASE=SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD
++
+ OUI:C0C687*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
+@@ -64798,6 +65683,9 @@ OUI:C0EAE4*
+ OUI:C0F1C4*
+ ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd.
+
++OUI:C0F79D*
++ ID_OUI_FROM_DATABASE=Powercode
++
+ OUI:C0F8DA*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+@@ -64816,18 +65704,27 @@ OUI:C401B1*
+ OUI:C40415*
+ ID_OUI_FROM_DATABASE=NETGEAR INC.,
+
++OUI:C40528*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:C40938*
+ ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd
+
+ OUI:C40ACB*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:C40E45*
++ ID_OUI_FROM_DATABASE=ACK Networks,Inc.
++
+ OUI:C40F09*
+ ID_OUI_FROM_DATABASE=Hermes electronic GmbH
+
+ OUI:C4108A*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
++OUI:C4143C*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:C416FA*
+ ID_OUI_FROM_DATABASE=Prysm Inc
+
+@@ -64858,6 +65755,9 @@ OUI:C42628*
+ OUI:C42795*
+ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+
++OUI:C4291D*
++ ID_OUI_FROM_DATABASE=KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.
++
+ OUI:C42C03*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -64900,9 +65800,15 @@ OUI:C44AD0*
+ OUI:C44B44*
+ ID_OUI_FROM_DATABASE=Omniprint Inc.
+
++OUI:C44E1F*
++ ID_OUI_FROM_DATABASE=BlueN
++
+ OUI:C44EAC*
+ ID_OUI_FROM_DATABASE=Shenzhen Shiningworth Technology Co., Ltd.
+
++OUI:C45006*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:C45444*
+ ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+
+@@ -65002,6 +65908,9 @@ OUI:C495A2*
+ OUI:C49805*
+ ID_OUI_FROM_DATABASE=Minieum Networks, Inc
+
++OUI:C4A81D*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:C4AAA1*
+ ID_OUI_FROM_DATABASE=SUMMIT DEVELOPMENT, spol.s r.o.
+
+@@ -65014,12 +65923,18 @@ OUI:C4B512*
+ OUI:C4BA99*
+ ID_OUI_FROM_DATABASE=I+ME Actia Informatik und Mikro-Elektronik GmbH
+
++OUI:C4C0AE*
++ ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
++
+ OUI:C4C19F*
+ ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
+
+ OUI:C4C755*
+ ID_OUI_FROM_DATABASE=Beijing HuaqinWorld Technology Co.,Ltd
+
++OUI:C4C919*
++ ID_OUI_FROM_DATABASE=Energy Imports Ltd
++
+ OUI:C4CAD9*
+ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+
+@@ -65050,6 +65965,9 @@ OUI:C4E7BE*
+ OUI:C4E92F*
+ ID_OUI_FROM_DATABASE=AB Sciex
+
++OUI:C4E984*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:C4EBE3*
+ ID_OUI_FROM_DATABASE=RRCN SAS
+
+@@ -65092,6 +66010,9 @@ OUI:C80E95*
+ OUI:C81479*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:C816BD*
++ ID_OUI_FROM_DATABASE=HISENSE ELECTRIC CO.,LTD.
++
+ OUI:C819F7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -65302,6 +66223,9 @@ OUI:C8D2C1*
+ OUI:C8D3A3*
+ ID_OUI_FROM_DATABASE=D-Link International
+
++OUI:C8D429*
++ ID_OUI_FROM_DATABASE=Muehlbauer AG
++
+ OUI:C8D5FE*
+ ID_OUI_FROM_DATABASE=Shenzhen Zowee Technology Co., Ltd
+
+@@ -65428,6 +66352,9 @@ OUI:CC34D7*
+ OUI:CC3540*
+ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+
++OUI:CC398C*
++ ID_OUI_FROM_DATABASE=Shiningtek
++
+ OUI:CC3A61*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+@@ -65527,6 +66454,12 @@ OUI:CC7D37*
+ OUI:CC7EE7*
+ ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
+
++OUI:CC856C*
++ ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
++
++OUI:CC89FD*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:CC8CE3*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+@@ -65539,18 +66472,27 @@ OUI:CC912B*
+ OUI:CC944A*
+ ID_OUI_FROM_DATABASE=Pfeiffer Vacuum GmbH
+
++OUI:CC95D7*
++ ID_OUI_FROM_DATABASE=VIZIO, Inc
++
+ OUI:CC96A0*
+ ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+
+ OUI:CC9E00*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
++OUI:CC9F35*
++ ID_OUI_FROM_DATABASE=Transbit Sp. z o.o.
++
+ OUI:CCA374*
+ ID_OUI_FROM_DATABASE=Guangdong Guanglian Electronic Technology Co.Ltd
+
+ OUI:CCA462*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
++OUI:CCA614*
++ ID_OUI_FROM_DATABASE=AIFA TECHNOLOGY CORP.
++
+ OUI:CCAF78*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+@@ -65650,6 +66592,9 @@ OUI:CCF954*
+ OUI:CCF9E8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:CCFA00*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:CCFB65*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
+@@ -65731,6 +66676,9 @@ OUI:D0574C*
+ OUI:D05785*
+ ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+
++OUI:D057A1*
++ ID_OUI_FROM_DATABASE=Werma Signaltechnik GmbH & Co. KG
++
+ OUI:D05875*
+ ID_OUI_FROM_DATABASE=Active Control Technology Inc.
+
+@@ -65743,6 +66691,9 @@ OUI:D05A0F*
+ OUI:D05FCE*
+ ID_OUI_FROM_DATABASE=Hitachi Data Systems
+
++OUI:D0634D*
++ ID_OUI_FROM_DATABASE=Meiko Maschinenbau GmbH & Co. KG
++
+ OUI:D063B4*
+ ID_OUI_FROM_DATABASE=SolidRun Ltd.
+
+@@ -65755,6 +66706,9 @@ OUI:D067E5*
+ OUI:D0699E*
+ ID_OUI_FROM_DATABASE=LUMINEX Lighting Control Equipment
+
++OUI:D069D0*
++ ID_OUI_FROM_DATABASE=Verto Medical Solutions, LLC
++
+ OUI:D0737F*
+ ID_OUI_FROM_DATABASE=Mini-Circuits
+
+@@ -65767,12 +66721,18 @@ OUI:D073D5*
+ OUI:D075BE*
+ ID_OUI_FROM_DATABASE=Reno A&E
+
++OUI:D07AB5*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D07DE5*
+ ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
+
+ OUI:D07E28*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
++OUI:D07E35*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D08999*
+ ID_OUI_FROM_DATABASE=APCON, Inc.
+
+@@ -65797,6 +66757,9 @@ OUI:D095C7*
+ OUI:D09B05*
+ ID_OUI_FROM_DATABASE=Emtronix
+
++OUI:D09C30*
++ ID_OUI_FROM_DATABASE=Foster Electric Company, Limited
++
+ OUI:D09D0A*
+ ID_OUI_FROM_DATABASE=LINKCOM
+
+@@ -65824,6 +66787,9 @@ OUI:D0B53D*
+ OUI:D0BB80*
+ ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd.
+
++OUI:D0BD01*
++ ID_OUI_FROM_DATABASE=DS International
++
+ OUI:D0BE2C*
+ ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
+
+@@ -65965,6 +66931,9 @@ OUI:D4206D*
+ OUI:D4223F*
+ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+
++OUI:D4224E*
++ ID_OUI_FROM_DATABASE=Alcatel Lucent
++
+ OUI:D42751*
+ ID_OUI_FROM_DATABASE=Infopia Co., Ltd
+
+@@ -65977,6 +66946,12 @@ OUI:D429EA*
+ OUI:D42C3D*
+ ID_OUI_FROM_DATABASE=Sky Light Digital Limited
+
++OUI:D42F23*
++ ID_OUI_FROM_DATABASE=Akenori PTE Ltd
++
++OUI:D4319D*
++ ID_OUI_FROM_DATABASE=Sinwatec
++
+ OUI:D43A65*
+ ID_OUI_FROM_DATABASE=IGRS Engineering Lab Ltd.
+
+@@ -66241,6 +67216,9 @@ OUI:D809C3*
+ OUI:D80DE3*
+ ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS
+
++OUI:D8150D*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:D8160A*
+ ID_OUI_FROM_DATABASE=Nippon Electro-Sensory Devices
+
+@@ -66277,6 +67255,9 @@ OUI:D82916*
+ OUI:D82986*
+ ID_OUI_FROM_DATABASE=Best Wish Technology LTD
+
++OUI:D82A15*
++ ID_OUI_FROM_DATABASE=Leitner SpA
++
+ OUI:D82A7E*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
+@@ -66325,9 +67306,15 @@ OUI:D85D4C*
+ OUI:D85D84*
+ ID_OUI_FROM_DATABASE=CAx soft GmbH
+
++OUI:D86194*
++ ID_OUI_FROM_DATABASE=Objetivos y Sevicios de Valor Añadido
++
+ OUI:D862DB*
+ ID_OUI_FROM_DATABASE=Eno Inc.
+
++OUI:D86595*
++ ID_OUI_FROM_DATABASE=Toy's Myth Inc.
++
+ OUI:D866C6*
+ ID_OUI_FROM_DATABASE=Shenzhen Daystar Technology Co.,ltd
+
+@@ -66361,6 +67348,9 @@ OUI:D87988*
+ OUI:D87CDD*
+ ID_OUI_FROM_DATABASE=SANIX INCORPORATED
+
++OUI:D881CE*
++ ID_OUI_FROM_DATABASE=AHN INC.
++
+ OUI:D88A3B*
+ ID_OUI_FROM_DATABASE=UNIT-EM
+
+@@ -66418,6 +67408,9 @@ OUI:D8B377*
+ OUI:D8B6C1*
+ ID_OUI_FROM_DATABASE=NetworkAccountant, Inc.
+
++OUI:D8B6D6*
++ ID_OUI_FROM_DATABASE=Blu Tether Limited
++
+ OUI:D8B8F6*
+ ID_OUI_FROM_DATABASE=Nantworks
+
+@@ -66466,6 +67459,12 @@ OUI:D8DA52*
+ OUI:D8DCE9*
+ ID_OUI_FROM_DATABASE=Kunshan Erlab ductless filtration system Co.,Ltd
+
++OUI:D8DD5F*
++ ID_OUI_FROM_DATABASE=BALMUDA Inc.
++
++OUI:D8DDFD*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:D8DF0D*
+ ID_OUI_FROM_DATABASE=beroNet GmbH
+
+@@ -66484,9 +67483,15 @@ OUI:D8E952*
+ OUI:D8EB97*
+ ID_OUI_FROM_DATABASE=TRENDnet, Inc.
+
++OUI:D8EE78*
++ ID_OUI_FROM_DATABASE=Moog Protokraft
++
+ OUI:D8F0F2*
+ ID_OUI_FROM_DATABASE=Zeebo Inc
+
++OUI:D8FC93*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:D8FE8F*
+ ID_OUI_FROM_DATABASE=IDFone Co., Ltd.
+
+@@ -66499,6 +67504,9 @@ OUI:DC0265*
+ OUI:DC028E*
+ ID_OUI_FROM_DATABASE=zte corporation
+
++OUI:DC052F*
++ ID_OUI_FROM_DATABASE=National Products Inc.
++
+ OUI:DC0575*
+ ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
+
+@@ -66619,6 +67627,9 @@ OUI:DC86D8*
+ OUI:DC9B1E*
+ ID_OUI_FROM_DATABASE=Intercom, Inc.
+
++OUI:DC9B9C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:DC9C52*
+ ID_OUI_FROM_DATABASE=Sapphire Technology Limited.
+
+@@ -66670,6 +67681,9 @@ OUI:DCC101*
+ OUI:DCC422*
+ ID_OUI_FROM_DATABASE=Systembase Limited
+
++OUI:DCC793*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:DCCBA8*
+ ID_OUI_FROM_DATABASE=Explora Technologies Inc
+
+@@ -66703,6 +67717,9 @@ OUI:DCDECA*
+ OUI:DCE2AC*
+ ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc.
+
++OUI:DCE578*
++ ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department
++
+ OUI:DCE71C*
+ ID_OUI_FROM_DATABASE=AUG Elektronik GmbH
+
+@@ -66781,6 +67798,9 @@ OUI:E03005*
+ OUI:E031D0*
+ ID_OUI_FROM_DATABASE=SZ Telstar CO., LTD
+
++OUI:E036E3*
++ ID_OUI_FROM_DATABASE=Stage One International Co., Ltd.
++
+ OUI:E039D7*
+ ID_OUI_FROM_DATABASE=Plexxi, Inc.
+
+@@ -66793,6 +67813,9 @@ OUI:E03E4A*
+ OUI:E03E7D*
+ ID_OUI_FROM_DATABASE=data-complex GmbH
+
++OUI:E03F49*
++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
++
+ OUI:E0469A*
+ ID_OUI_FROM_DATABASE=NETGEAR
+
+@@ -66841,6 +67864,9 @@ OUI:E0757D*
+ OUI:E07C62*
+ ID_OUI_FROM_DATABASE=Whistle Labs, Inc.
+
++OUI:E07F53*
++ ID_OUI_FROM_DATABASE=TECHBOARD SRL
++
+ OUI:E07F88*
+ ID_OUI_FROM_DATABASE=EVIDENCE Network SIA
+
+@@ -66967,6 +67993,9 @@ OUI:E0D10A*
+ OUI:E0D1E6*
+ ID_OUI_FROM_DATABASE=Aliph dba Jawbone
+
++OUI:E0D31A*
++ ID_OUI_FROM_DATABASE=EQUES Technology Co., Limited
++
+ OUI:E0D7BA*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+@@ -66979,6 +68008,9 @@ OUI:E0DADC*
+ OUI:E0DB55*
+ ID_OUI_FROM_DATABASE=Dell Inc
+
++OUI:E0DB88*
++ ID_OUI_FROM_DATABASE=Open Standard Digital-IF Interface for SATCOM Systems
++
+ OUI:E0DCA0*
+ ID_OUI_FROM_DATABASE=Siemens Electrical Apparatus Ltd., Suzhou Chengdu Branch
+
+@@ -67030,6 +68062,9 @@ OUI:E40439*
+ OUI:E4115B*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
++OUI:E4121D*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:E41289*
+ ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH
+
+@@ -67093,6 +68128,9 @@ OUI:E446BD*
+ OUI:E448C7*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
++OUI:E44C6C*
++ ID_OUI_FROM_DATABASE=Shenzhen Guo Wei Electronic Co,. Ltd.
++
+ OUI:E44E18*
+ ID_OUI_FROM_DATABASE=Gardasoft VisionLimited
+
+@@ -67144,6 +68182,9 @@ OUI:E47CF9*
+ OUI:E47D5A*
+ ID_OUI_FROM_DATABASE=Beijing Hanbang Technology Corp.
+
++OUI:E48184*
++ ID_OUI_FROM_DATABASE=Alcatel-Lucent
++
+ OUI:E481B3*
+ ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd.
+
+@@ -67267,6 +68308,9 @@ OUI:E8056D*
+ OUI:E80688*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:E8088B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:E80B13*
+ ID_OUI_FROM_DATABASE=Akib Systems Taiwan, INC
+
+@@ -67285,6 +68329,9 @@ OUI:E81132*
+ OUI:E81324*
+ ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD
+
++OUI:E817FC*
++ ID_OUI_FROM_DATABASE=NIFTY Corporation
++
+ OUI:E82877*
+ ID_OUI_FROM_DATABASE=TMY Co., Ltd.
+
+@@ -67363,6 +68410,9 @@ OUI:E85E53*
+ OUI:E8611F*
+ ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
+
++OUI:E8617E*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:E86183*
+ ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC
+
+@@ -67438,6 +68488,9 @@ OUI:E8A4C1*
+ OUI:E8ABFA*
+ ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd.
+
++OUI:E8B1FC*
++ ID_OUI_FROM_DATABASE=Intel Corporate
++
+ OUI:E8B4AE*
+ ID_OUI_FROM_DATABASE=Shenzhen C&D Electronics Co.,Ltd
+
+@@ -67519,6 +68572,9 @@ OUI:E8E776*
+ OUI:E8E875*
+ ID_OUI_FROM_DATABASE=iS5 Communications Inc.
+
++OUI:E8EA6A*
++ ID_OUI_FROM_DATABASE=StarTech.com
++
+ OUI:E8EADA*
+ ID_OUI_FROM_DATABASE=Denkovi Assembly Electroncs LTD
+
+@@ -67534,6 +68590,9 @@ OUI:E8F226*
+ OUI:E8F928*
+ ID_OUI_FROM_DATABASE=RFTECH SRL
+
++OUI:E8FC60*
++ ID_OUI_FROM_DATABASE=ELCOM Innovations Private Limited
++
+ OUI:EC0ED6*
+ ID_OUI_FROM_DATABASE=ITECH INSTRUMENTS SAS
+
+@@ -67756,6 +68815,12 @@ OUI:ECF236*
+ OUI:ECF35B*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
++OUI:ECF4BB*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
++OUI:ECF72B*
++ ID_OUI_FROM_DATABASE=HD DIGITAL TECH CO., LTD.
++
+ OUI:ECFAAA*
+ ID_OUI_FROM_DATABASE=The IMS Company
+
+@@ -67783,6 +68848,9 @@ OUI:F008F1*
+ OUI:F013C3*
+ ID_OUI_FROM_DATABASE=SHENZHEN FENDA TECHNOLOGY CO., LTD
+
++OUI:F015A0*
++ ID_OUI_FROM_DATABASE=KyungDong One Co., Ltd.
++
+ OUI:F01C13*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
+@@ -67822,12 +68890,21 @@ OUI:F02A61*
+ OUI:F02FD8*
+ ID_OUI_FROM_DATABASE=Bi2-Vision
+
++OUI:F0321A*
++ ID_OUI_FROM_DATABASE=Mita-Teknik A/S
++
+ OUI:F037A1*
+ ID_OUI_FROM_DATABASE=Huike Electronics (SHENZHEN) CO., LTD.
+
++OUI:F03A4B*
++ ID_OUI_FROM_DATABASE=Bloombase, Inc.
++
+ OUI:F03A55*
+ ID_OUI_FROM_DATABASE=Omega Elektronik AS
+
++OUI:F03FF8*
++ ID_OUI_FROM_DATABASE=R L Drake
++
+ OUI:F04335*
+ ID_OUI_FROM_DATABASE=DVN(Shanghai)Ltd.
+
+@@ -67900,12 +68977,18 @@ OUI:F07F0C*
+ OUI:F081AF*
+ ID_OUI_FROM_DATABASE=IRZ AUTOMATION TECHNOLOGIES LTD
+
++OUI:F08261*
++ ID_OUI_FROM_DATABASE=SAGEMCOM
++
+ OUI:F0842F*
+ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+
+ OUI:F084C9*
+ ID_OUI_FROM_DATABASE=zte corporation
+
++OUI:F08A28*
++ ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD
++
+ OUI:F08BFE*
+ ID_OUI_FROM_DATABASE=COSTEL.,CO.LTD
+
+@@ -67990,6 +69073,9 @@ OUI:F0DA7C*
+ OUI:F0DB30*
+ ID_OUI_FROM_DATABASE=Yottabyte
+
++OUI:F0DBF8*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0DCE2*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -68029,6 +69115,9 @@ OUI:F0F260*
+ OUI:F0F5AE*
+ ID_OUI_FROM_DATABASE=Adaptrum Inc.
+
++OUI:F0F61C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F0F644*
+ ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
+
+@@ -68089,6 +69178,9 @@ OUI:F42896*
+ OUI:F436E1*
+ ID_OUI_FROM_DATABASE=Abilis Systems SARL
+
++OUI:F437B7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:F43814*
+ ID_OUI_FROM_DATABASE=Shanghai Howell Electronic Co.,Ltd
+
+@@ -68191,6 +69283,9 @@ OUI:F48771*
+ OUI:F48E09*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
++OUI:F490CA*
++ ID_OUI_FROM_DATABASE=Tensorcom
++
+ OUI:F490EA*
+ ID_OUI_FROM_DATABASE=Deciso B.V.
+
+@@ -68221,9 +69316,15 @@ OUI:F4B164*
+ OUI:F4B381*
+ ID_OUI_FROM_DATABASE=WindowMaster A/S
+
++OUI:F4B52F*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:F4B549*
+ ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
+
++OUI:F4B6E5*
++ ID_OUI_FROM_DATABASE=TerraSem Co.,Ltd
++
+ OUI:F4B72A*
+ ID_OUI_FROM_DATABASE=TIME INTERCONNECT LTD
+
+@@ -68251,6 +69352,9 @@ OUI:F4CD90*
+ OUI:F4CE46*
+ ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+
++OUI:F4CFE2*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:F4D9FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+
+@@ -68260,6 +69364,9 @@ OUI:F4DC4D*
+ OUI:F4DCDA*
+ ID_OUI_FROM_DATABASE=Zhuhai Jiahe Communication Technology Co., limited
+
++OUI:F4DCF9*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:F4E142*
+ ID_OUI_FROM_DATABASE=Delta Elektronika BV
+
+@@ -68413,6 +69520,9 @@ OUI:F8572E*
+ OUI:F85BC9*
+ ID_OUI_FROM_DATABASE=M-Cube Spa
+
++OUI:F85C45*
++ ID_OUI_FROM_DATABASE=IC Nexus Co. Ltd.
++
+ OUI:F85F2A*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
+@@ -68494,6 +69604,9 @@ OUI:F8A45F*
+ OUI:F8A963*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+
++OUI:F8A9D0*
++ ID_OUI_FROM_DATABASE=LG Electronics
++
+ OUI:F8A9DE*
+ ID_OUI_FROM_DATABASE=PUISSANCE PLUS
+
+@@ -68566,6 +69679,9 @@ OUI:F8DC7A*
+ OUI:F8DFA8*
+ ID_OUI_FROM_DATABASE=ZTE Corporation
+
++OUI:F8E079*
++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
++
+ OUI:F8E4FB*
+ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+
+@@ -68581,6 +69697,9 @@ OUI:F8EA0A*
+ OUI:F8EDA5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
++OUI:F8F005*
++ ID_OUI_FROM_DATABASE=Newport Media Inc.
++
+ OUI:F8F014*
+ ID_OUI_FROM_DATABASE=RackWare Inc.
+
+@@ -68623,12 +69742,18 @@ OUI:FC01CD*
+ OUI:FC0647*
+ ID_OUI_FROM_DATABASE=Cortland Research, LLC
+
++OUI:FC07A0*
++ ID_OUI_FROM_DATABASE=LRE Medical GmbH
++
+ OUI:FC0877*
+ ID_OUI_FROM_DATABASE=Prentke Romich Company
+
+ OUI:FC09D8*
+ ID_OUI_FROM_DATABASE=ACTEON Group
+
++OUI:FC09F6*
++ ID_OUI_FROM_DATABASE=GUANGDONG TONZE ELECTRIC CO.,LTD
++
+ OUI:FC0A81*
+ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+
+@@ -68641,6 +69766,15 @@ OUI:FC10BD*
+ OUI:FC1186*
+ ID_OUI_FROM_DATABASE=Logic3 plc
+
++OUI:FC1349*
++ ID_OUI_FROM_DATABASE=Global Apps Corp.
++
++OUI:FC15B4*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
++OUI:FC1607*
++ ID_OUI_FROM_DATABASE=Taian Technology(Wuxi) Co.,Ltd.
++
+ OUI:FC1794*
+ ID_OUI_FROM_DATABASE=InterCreative Co., Ltd
+
+@@ -68668,6 +69802,9 @@ OUI:FC229C*
+ OUI:FC253F*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:FC27A2*
++ ID_OUI_FROM_DATABASE=TRANS ELECTRIC CO., LTD.
++
+ OUI:FC2A54*
+ ID_OUI_FROM_DATABASE=Connected Data, Inc.
+
+@@ -68761,6 +69898,9 @@ OUI:FC8E7E*
+ OUI:FC8FC4*
+ ID_OUI_FROM_DATABASE=Intelligent Technology Inc.
+
++OUI:FC923B*
++ ID_OUI_FROM_DATABASE=Nokia Corporation
++
+ OUI:FC946C*
+ ID_OUI_FROM_DATABASE=UBIVELOX
+
+@@ -68791,6 +69931,9 @@ OUI:FCAF6A*
+ OUI:FCB0C4*
+ ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
+
++OUI:FCBBA1*
++ ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
++
+ OUI:FCC23D*
+ ID_OUI_FROM_DATABASE=Atmel Corporation
+
+@@ -68851,6 +69994,9 @@ OUI:FCF528*
+ OUI:FCF8AE*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
++OUI:FCF8B7*
++ ID_OUI_FROM_DATABASE=TRONTEQ Electronic
++
+ OUI:FCFAF7*
+ ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
+
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 289f81c..6142dc8 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -917,6 +917,9 @@ pci:v00001000d0000005Bsv00001028sd00001F37*
+ pci:v00001000d0000005Bsv00001028sd00001F38*
+ ID_MODEL_FROM_DATABASE=PERC H710 Mini (for monolithics)
+
++pci:v00001000d0000005Bsv00008086sd00003510*
++ ID_MODEL_FROM_DATABASE=RMS25PB080 RAID Controller
++
+ pci:v00001000d0000005Bsv00008086sd00003513*
+ ID_MODEL_FROM_DATABASE=RMS25CB080 RAID Controller
+
+@@ -4203,7 +4206,7 @@ pci:v00001002d00006631*
+ ID_MODEL_FROM_DATABASE=Oland
+
+ pci:v00001002d00006640*
+- ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M]
++ ID_MODEL_FROM_DATABASE=Saturn XT [FirePro M6100]
+
+ pci:v00001002d00006641*
+ ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M]
+@@ -4248,7 +4251,10 @@ pci:v00001002d00006660*
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M]
+
+ pci:v00001002d00006663*
+- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M]
++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570A/8570M]
++
++pci:v00001002d00006663sv00001025sd00000846*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8570A
+
+ pci:v00001002d00006664*
+ ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series]
+@@ -4904,12 +4910,18 @@ pci:v00001002d00006758sv0000174Bsd00007670*
+ pci:v00001002d00006758sv0000174Bsd0000E181*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6670
+
++pci:v00001002d00006758sv00001787sd00002309*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6670
++
+ pci:v00001002d00006759*
+- ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570]
++ ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570/8550]
+
+ pci:v00001002d00006759sv0000103Csd00003130*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
++pci:v00001002d00006759sv00001043sd00000403*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6570
++
+ pci:v00001002d00006759sv00001462sd00002500*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+@@ -4925,6 +4937,9 @@ pci:v00001002d00006759sv00001642sd00003A67*
+ pci:v00001002d00006759sv00001682sd00003280*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
++pci:v00001002d00006759sv00001682sd00003530*
++ ID_MODEL_FROM_DATABASE=Radeon HD 8550
++
+ pci:v00001002d00006759sv0000174Bsd00007570*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
+@@ -5585,6 +5600,9 @@ pci:v00001002d00006779sv0000103Csd00002128*
+ pci:v00001002d00006779sv0000103Csd00002AEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+
++pci:v00001002d00006779sv00001462sd00002125*
++ ID_MODEL_FROM_DATABASE=Radeon HD 6450
++
+ pci:v00001002d00006779sv00001462sd00002346*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
+@@ -5813,6 +5831,15 @@ pci:v00001002d000067A1*
+ pci:v00001002d000067A2*
+ ID_MODEL_FROM_DATABASE=Hawaii GL
+
++pci:v00001002d000067A8*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067A9*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
++pci:v00001002d000067AA*
++ ID_MODEL_FROM_DATABASE=Hawaii
++
+ pci:v00001002d000067B0*
+ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X]
+
+@@ -5907,7 +5934,7 @@ pci:v00001002d00006821sv00001002sd0000031E*
+ ID_MODEL_FROM_DATABASE=FirePro SX4000
+
+ pci:v00001002d00006822*
+- ID_MODEL_FROM_DATABASE=Venus PRO
++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860]
+
+ pci:v00001002d00006823*
+ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M]
+@@ -7463,6 +7490,9 @@ pci:v00001002d000068F9sv0000103Csd00002AAE*
+ pci:v00001002d000068F9sv0000103Csd00003580*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
++pci:v00001002d000068F9sv00001043sd00000386*
++ ID_MODEL_FROM_DATABASE=Radeon HD 5450
++
+ pci:v00001002d000068F9sv00001043sd000003C2*
+ ID_MODEL_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
+
+@@ -8834,9 +8864,18 @@ pci:v00001002d00009901*
+ pci:v00001002d00009902*
+ ID_MODEL_FROM_DATABASE=Trinity HDMI Audio Controller
+
++pci:v00001002d00009902sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009903*
+ ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7640G]
+
++pci:v00001002d00009903sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
++pci:v00001002d00009903sv0000103Csd00001952*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001002d00009904*
+ ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7560D]
+
+@@ -10964,6 +11003,9 @@ pci:v00001022d00007801*
+ pci:v00001022d00007801sv0000103Csd0000168B*
+ ID_MODEL_FROM_DATABASE=ProBook 4535s Notebook
+
++pci:v00001022d00007801sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007802*
+ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
+
+@@ -10982,27 +11024,45 @@ pci:v00001022d00007806*
+ pci:v00001022d00007807*
+ ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+
++pci:v00001022d00007807sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007808*
+ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+
++pci:v00001022d00007808sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007809*
+ ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller
+
++pci:v00001022d00007809sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780B*
+ ID_MODEL_FROM_DATABASE=FCH SMBus Controller
+
++pci:v00001022d0000780Bsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780C*
+ ID_MODEL_FROM_DATABASE=FCH IDE Controller
+
+ pci:v00001022d0000780D*
+ ID_MODEL_FROM_DATABASE=FCH Azalia Controller
+
++pci:v00001022d0000780Dsv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780Dsv00001043sd00008444*
+ ID_MODEL_FROM_DATABASE=F2A85-M Series
+
+ pci:v00001022d0000780E*
+ ID_MODEL_FROM_DATABASE=FCH LPC Bridge
+
++pci:v00001022d0000780Esv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d0000780F*
+ ID_MODEL_FROM_DATABASE=FCH PCI Bridge
+
+@@ -11015,11 +11075,41 @@ pci:v00001022d00007813*
+ pci:v00001022d00007814*
+ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+
++pci:v00001022d00007814sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v00001022d00007900*
+- ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode]
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [IDE mode]
++
++pci:v00001022d00007901*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007902*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007903*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
++
++pci:v00001022d00007904*
++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode]
++
++pci:v00001022d00007906*
++ ID_MODEL_FROM_DATABASE=FCH SD Flash Controller
++
++pci:v00001022d00007908*
++ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller
+
+ pci:v00001022d0000790B*
+- ID_MODEL_FROM_DATABASE=CZ SMBus Controller
++ ID_MODEL_FROM_DATABASE=FCH SMBus Controller
++
++pci:v00001022d0000790E*
++ ID_MODEL_FROM_DATABASE=FCH LPC Bridge
++
++pci:v00001022d0000790F*
++ ID_MODEL_FROM_DATABASE=FCH PCI Bridge
++
++pci:v00001022d00007914*
++ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+
+ pci:v00001022d00009600*
+ ID_MODEL_FROM_DATABASE=RS780 Host Bridge
+@@ -23672,6 +23762,21 @@ pci:v000010DEd000005E6*
+ pci:v000010DEd000005E7*
+ ID_MODEL_FROM_DATABASE=GT200GL [Tesla C1060 / M1060]
+
++pci:v000010DEd000005E7sv000010DEsd00000595*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd0000068F*
++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor
++
++pci:v000010DEd000005E7sv000010DEsd00000697*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000714*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
++pci:v000010DEd000005E7sv000010DEsd00000743*
++ ID_MODEL_FROM_DATABASE=Tesla M1060
++
+ pci:v000010DEd000005EA*
+ ID_MODEL_FROM_DATABASE=GT200 [GeForce GTX 260]
+
+@@ -23732,6 +23837,9 @@ pci:v000010DEd00000608*
+ pci:v000010DEd00000609*
+ ID_MODEL_FROM_DATABASE=G92M [GeForce 8800M GTS]
+
++pci:v000010DEd00000609sv0000106Bsd000000A7*
++ ID_MODEL_FROM_DATABASE=GeForce 8800 GS
++
+ pci:v000010DEd0000060A*
+ ID_MODEL_FROM_DATABASE=G92M [GeForce GTX 280M]
+
+@@ -23864,6 +23972,9 @@ pci:v000010DEd0000062D*
+ pci:v000010DEd0000062E*
+ ID_MODEL_FROM_DATABASE=G94 [GeForce 9600 GT]
+
++pci:v000010DEd0000062Esv0000106Bsd00000605*
++ ID_MODEL_FROM_DATABASE=GeForce GT 130
++
+ pci:v000010DEd0000062F*
+ ID_MODEL_FROM_DATABASE=G94 [GeForce 9800 S]
+
+@@ -23921,6 +24032,9 @@ pci:v000010DEd00000648*
+ pci:v000010DEd00000649*
+ ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT]
+
++pci:v000010DEd00000649sv00001043sd0000202D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 220M
++
+ pci:v000010DEd0000064A*
+ ID_MODEL_FROM_DATABASE=G96M [GeForce 9700M GT]
+
+@@ -23942,12 +24056,21 @@ pci:v000010DEd00000651*
+ pci:v000010DEd00000652*
+ ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M]
+
++pci:v000010DEd00000652sv0000152Dsd00000850*
++ ID_MODEL_FROM_DATABASE=GeForce GT 240M LE
++
+ pci:v000010DEd00000653*
+ ID_MODEL_FROM_DATABASE=G96M [GeForce GT 120M]
+
+ pci:v000010DEd00000654*
+ ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M]
+
++pci:v000010DEd00000654sv00001043sd000014A2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
++pci:v000010DEd00000654sv00001043sd000014D2*
++ ID_MODEL_FROM_DATABASE=GeForce GT 320M
++
+ pci:v000010DEd00000655*
+ ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120]
+
+@@ -24098,6 +24221,9 @@ pci:v000010DEd000006E7*
+ pci:v000010DEd000006E8*
+ ID_MODEL_FROM_DATABASE=G98M [GeForce 9200M GS]
+
++pci:v000010DEd000006E8sv0000103Csd0000360B*
++ ID_MODEL_FROM_DATABASE=GeForce 9200M GE
++
+ pci:v000010DEd000006E9*
+ ID_MODEL_FROM_DATABASE=G98M [GeForce 9300M GS]
+
+@@ -24596,6 +24722,9 @@ pci:v000010DEd000007FEsv00001019sd0000297A*
+ pci:v000010DEd000007FEsv00001AFAsd00007150*
+ ID_MODEL_FROM_DATABASE=JW-IN7150-HD
+
++pci:v000010DEd00000840*
++ ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M]
++
+ pci:v000010DEd00000844*
+ ID_MODEL_FROM_DATABASE=C77 [GeForce 9100M G]
+
+@@ -24665,6 +24794,9 @@ pci:v000010DEd00000865*
+ pci:v000010DEd00000866*
+ ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M G]
+
++pci:v000010DEd00000866sv0000106Bsd000000B1*
++ ID_MODEL_FROM_DATABASE=GeForce 9400M
++
+ pci:v000010DEd00000867*
+ ID_MODEL_FROM_DATABASE=C79 [GeForce 9400]
+
+@@ -24746,6 +24878,9 @@ pci:v000010DEd0000087E*
+ pci:v000010DEd0000087F*
+ ID_MODEL_FROM_DATABASE=ION LE VGA
+
++pci:v000010DEd000008A0*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd000008A2*
+ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+
+@@ -24755,6 +24890,9 @@ pci:v000010DEd000008A3*
+ pci:v000010DEd000008A4*
+ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
+
++pci:v000010DEd000008A5*
++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M]
++
+ pci:v000010DEd00000A20*
+ ID_MODEL_FROM_DATABASE=GT216 [GeForce GT 220]
+
+@@ -24875,6 +25013,9 @@ pci:v000010DEd00000A73*
+ pci:v000010DEd00000A74*
+ ID_MODEL_FROM_DATABASE=GT218M [GeForce G210M]
+
++pci:v000010DEd00000A74sv00001B0Asd0000903A*
++ ID_MODEL_FROM_DATABASE=GeForce G210
++
+ pci:v000010DEd00000A75*
+ ID_MODEL_FROM_DATABASE=GT218M [GeForce 310M]
+
+@@ -24986,6 +25127,9 @@ pci:v000010DEd00000A7Asv00001462sd0000AC82*
+ pci:v000010DEd00000A7Asv00001462sd0000AE33*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
++pci:v000010DEd00000A7Asv00001642sd00003980*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv000017AAsd00003950*
+ ID_MODEL_FROM_DATABASE=GeForce 405M
+
+@@ -24995,6 +25139,9 @@ pci:v000010DEd00000A7Asv000017AAsd0000397D*
+ pci:v000010DEd00000A7Asv00001B0Asd00002091*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
++pci:v000010DEd00000A7Asv00001B0Asd000090B4*
++ ID_MODEL_FROM_DATABASE=GeForce 405
++
+ pci:v000010DEd00000A7Asv00001BFDsd00000003*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+@@ -25266,7 +25413,7 @@ pci:v000010DEd00000AD8*
+ ID_MODEL_FROM_DATABASE=MCP78S [GeForce 8200] SATA Controller (RAID mode)
+
+ pci:v000010DEd00000BE2*
+- ID_MODEL_FROM_DATABASE=High Definition Audio Controller
++ ID_MODEL_FROM_DATABASE=GT216 HDMI Audio Controller
+
+ pci:v000010DEd00000BE2sv00001043sd00008311*
+ ID_MODEL_FROM_DATABASE=ENGT220/DI/1GD3(LP)/V2
+@@ -25460,12 +25607,42 @@ pci:v000010DEd00000DE4*
+ pci:v000010DEd00000DE5*
+ ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 530]
+
++pci:v000010DEd00000DE7*
++ ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 610]
++
+ pci:v000010DEd00000DE8*
+ ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 620M]
+
+ pci:v000010DEd00000DE9*
+ ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 630M]
+
++pci:v000010DEd00000DE9sv00001025sd00000692*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000725*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000728*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072B*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd0000072E*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000753*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv00001025sd00000754*
++ ID_MODEL_FROM_DATABASE=GeForce GT 620M
++
++pci:v000010DEd00000DE9sv000017AAsd00003977*
++ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE
++
++pci:v000010DEd00000DE9sv00001B0Asd00002210*
++ ID_MODEL_FROM_DATABASE=GeForce GT 635M
++
+ pci:v000010DEd00000DEA*
+ ID_MODEL_FROM_DATABASE=GF108M [GeForce 610M]
+
+@@ -25514,6 +25691,12 @@ pci:v000010DEd00000DF3*
+ pci:v000010DEd00000DF4*
+ ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 540M]
+
++pci:v000010DEd00000DF4sv0000152Dsd00000952*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
++pci:v000010DEd00000DF4sv0000152Dsd00000953*
++ ID_MODEL_FROM_DATABASE=GeForce GT 630M
++
+ pci:v000010DEd00000DF5*
+ ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 525M]
+
+@@ -25610,6 +25793,9 @@ pci:v000010DEd00000FC6sv00001043sd00008428*
+ pci:v000010DEd00000FCD*
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M]
+
++pci:v000010DEd00000FCE*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M LE]
++
+ pci:v000010DEd00000FD1*
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M]
+
+@@ -25667,6 +25853,9 @@ pci:v000010DEd00000FE0*
+ pci:v000010DEd00000FE1*
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 730M]
+
++pci:v000010DEd00000FE2*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
++
+ pci:v000010DEd00000FE3*
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
+
+@@ -25688,6 +25877,12 @@ pci:v000010DEd00000FE7*
+ pci:v000010DEd00000FE7sv000010DEsd0000101E*
+ ID_MODEL_FROM_DATABASE=GRID K100
+
++pci:v000010DEd00000FE9*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition]
++
++pci:v000010DEd00000FEA*
++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M Mac Edition]
++
+ pci:v000010DEd00000FEF*
+ ID_MODEL_FROM_DATABASE=GK107GL [GRID K340]
+
+@@ -25739,6 +25934,15 @@ pci:v000010DEd00001003*
+ pci:v000010DEd00001004*
+ ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX 780]
+
++pci:v000010DEd00001004sv00003842sd00000784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 SC w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001784*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler]
++
++pci:v000010DEd00001004sv00003842sd00001788*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler]
++
+ pci:v000010DEd00001005*
+ ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan]
+
+@@ -25763,6 +25967,9 @@ pci:v000010DEd00001005sv00003842sd00002794*
+ pci:v000010DEd00001005sv00003842sd00002795*
+ ID_MODEL_FROM_DATABASE=GeForce GTX Titan SC Hydro Copper Signature
+
++pci:v000010DEd0000100A*
++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Ti]
++
+ pci:v000010DEd0000101F*
+ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20]
+
+@@ -25775,15 +25982,24 @@ pci:v000010DEd00001021*
+ pci:v000010DEd00001022*
+ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c]
+
++pci:v000010DEd00001023*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40m]
++
+ pci:v000010DEd00001024*
+- ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c]
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40c]
+
+ pci:v000010DEd00001026*
+ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s]
+
++pci:v000010DEd00001027*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40st]
++
+ pci:v000010DEd00001028*
+ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20m]
+
++pci:v000010DEd00001029*
++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40s]
++
+ pci:v000010DEd0000103A*
+ ID_MODEL_FROM_DATABASE=GK110GL [Quadro K6000]
+
+@@ -25832,6 +26048,12 @@ pci:v000010DEd00001057*
+ pci:v000010DEd00001058*
+ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+
++pci:v000010DEd00001058sv0000103Csd00002AED*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
++pci:v000010DEd00001058sv0000103Csd00002AF1*
++ ID_MODEL_FROM_DATABASE=GeForce 610
++
+ pci:v000010DEd00001058sv00001043sd000010AC*
+ ID_MODEL_FROM_DATABASE=GeForce GT 610M
+
+@@ -25841,6 +26063,9 @@ pci:v000010DEd00001058sv00001043sd000010BC*
+ pci:v000010DEd00001058sv00001043sd00001652*
+ ID_MODEL_FROM_DATABASE=GeForce GT 610M
+
++pci:v000010DEd00001059*
++ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
++
+ pci:v000010DEd0000105A*
+ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M]
+
+@@ -25904,6 +26129,12 @@ pci:v000010DEd00001091sv000010DEsd0000088E*
+ pci:v000010DEd00001091sv000010DEsd00000891*
+ ID_MODEL_FROM_DATABASE=Tesla X2090
+
++pci:v000010DEd00001091sv000010DEsd00000974*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
++pci:v000010DEd00001091sv000010DEsd0000098D*
++ ID_MODEL_FROM_DATABASE=Tesla X2090
++
+ pci:v000010DEd00001094*
+ ID_MODEL_FROM_DATABASE=GF110GL [Tesla M2075]
+
+@@ -25941,7 +26172,7 @@ pci:v000010DEd000010D8*
+ ID_MODEL_FROM_DATABASE=GT218 [NVS 300]
+
+ pci:v000010DEd00001140*
+- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M]
++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M]
+
+ pci:v000010DEd00001140sv00001025sd00000600*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+@@ -26081,6 +26312,9 @@ pci:v000010DEd00001140sv00001028sd00000554*
+ pci:v000010DEd00001140sv00001028sd00000557*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
++pci:v000010DEd00001140sv00001028sd00000562*
++ ID_MODEL_FROM_DATABASE=GeForce GT 625M
++
+ pci:v000010DEd00001140sv00001028sd00000565*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+@@ -26111,6 +26345,12 @@ pci:v000010DEd00001140sv00001028sd000005B3*
+ pci:v000010DEd00001140sv00001028sd000005DA*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
++pci:v000010DEd00001140sv00001028sd000005DE*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001028sd000005E0*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001028sd000005E8*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+@@ -26156,6 +26396,9 @@ pci:v000010DEd00001140sv00001043sd0000126D*
+ pci:v000010DEd00001140sv00001043sd0000131D*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
++pci:v000010DEd00001140sv00001043sd000013FD*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001043sd000014C7*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+@@ -26189,6 +26432,9 @@ pci:v000010DEd00001140sv00001043sd0000224A*
+ pci:v000010DEd00001140sv00001043sd00008595*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
++pci:v000010DEd00001140sv00001072sd0000152D*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000010CFsd000017F5*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+@@ -26291,6 +26537,9 @@ pci:v000010DEd00001140sv0000144Dsd0000C709*
+ pci:v000010DEd00001140sv0000144Dsd0000C711*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
++pci:v000010DEd00001140sv0000144Dsd0000C736*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv00001462sd000010B8*
+ ID_MODEL_FROM_DATABASE=GeForce GT 710M
+
+@@ -26303,6 +26552,9 @@ pci:v000010DEd00001140sv00001462sd0000AA33*
+ pci:v000010DEd00001140sv00001462sd0000AAA2*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
++pci:v000010DEd00001140sv00001462sd0000AAA3*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001462sd0000AE71*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+@@ -26315,15 +26567,30 @@ pci:v000010DEd00001140sv0000152Dsd00000982*
+ pci:v000010DEd00001140sv0000152Dsd00000983*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
++pci:v000010DEd00001140sv0000152Dsd00001012*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
+ pci:v000010DEd00001140sv0000152Dsd00001030*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+ pci:v000010DEd00001140sv0000152Dsd00001055*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
++pci:v000010DEd00001140sv0000152Dsd00001067*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv0000152Dsd00001072*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00002200*
+ ID_MODEL_FROM_DATABASE=NVS 5200M
+
++pci:v000010DEd00001140sv000017AAsd00002213*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv000017AAsd00002220*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv000017AAsd00003656*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+@@ -26369,6 +26636,9 @@ pci:v000010DEd00001140sv000017AAsd00003977*
+ pci:v000010DEd00001140sv000017AAsd00003983*
+ ID_MODEL_FROM_DATABASE=GeForce 610M
+
++pci:v000010DEd00001140sv000017AAsd00005001*
++ ID_MODEL_FROM_DATABASE=GeForce 610M
++
+ pci:v000010DEd00001140sv000017AAsd00005003*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+@@ -26414,18 +26684,33 @@ pci:v000010DEd00001140sv000017AAsd0000502E*
+ pci:v000010DEd00001140sv000017AAsd0000502F*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
++pci:v000010DEd00001140sv000017AAsd0000503E*
++ ID_MODEL_FROM_DATABASE=GeForce 710M
++
++pci:v000010DEd00001140sv000017AAsd0000503F*
++ ID_MODEL_FROM_DATABASE=GeForce 820M
++
+ pci:v000010DEd00001140sv00001854sd00000177*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+ pci:v000010DEd00001140sv00001854sd00000180*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
++pci:v000010DEd00001140sv00001854sd00000190*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
++pci:v000010DEd00001140sv00001854sd00000192*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001140sv00001B0Asd000020DD*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+ pci:v000010DEd00001140sv00001B0Asd000020DF*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
++pci:v000010DEd00001140sv00001B0Asd00002202*
++ ID_MODEL_FROM_DATABASE=GeForce GT 720M
++
+ pci:v000010DEd00001180*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680]
+
+@@ -26484,10 +26769,10 @@ pci:v000010DEd00001193*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM]
+
+ pci:v000010DEd0000119D*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M Mac Edition]
+
+ pci:v000010DEd0000119E*
+- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M Mac Edition]
+
+ pci:v000010DEd0000119F*
+ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
+@@ -27210,32 +27495,23 @@ pci:v000010EC*
+ ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
+
+ pci:v000010ECd00000139*
+- ID_MODEL_FROM_DATABASE=Zonet Zen3200
+-
+-pci:v000010ECd00000880*
+- ID_MODEL_FROM_DATABASE=Realtek 880 High Definition Audio
+-
+-pci:v000010ECd00000883*
+- ID_MODEL_FROM_DATABASE=Realtek 883 High Definition Audio
+-
+-pci:v000010ECd00000885*
+- ID_MODEL_FROM_DATABASE=Realtek 885 High Definition Audio
+-
+-pci:v000010ECd00000888*
+- ID_MODEL_FROM_DATABASE=Realtek 888 High Definition Audio
+-
+-pci:v000010ECd00000892*
+- ID_MODEL_FROM_DATABASE=Realtek 892 High Definition Audio
++ ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller
+
+ pci:v000010ECd00005209*
+ ID_MODEL_FROM_DATABASE=RTS5209 PCI Express Card Reader
+
++pci:v000010ECd00005227*
++ ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
++
+ pci:v000010ECd00005229*
+ ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+
+ pci:v000010ECd00005229sv00001025sd00000813*
+ ID_MODEL_FROM_DATABASE=Aspire R7-571
+
++pci:v000010ECd00005229sv0000103Csd0000194E*
++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook
++
+ pci:v000010ECd00005288*
+ ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader
+
+@@ -27449,6 +27725,9 @@ pci:v000010ECd00008168*
+ pci:v000010ECd00008168sv00001019sd00008168*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+
++pci:v000010ECd00008168sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Vostro 220
++
+ pci:v000010ECd00008168sv00001028sd000004B2*
+ ID_MODEL_FROM_DATABASE=Vostro 3350
+
+@@ -27458,6 +27737,9 @@ pci:v000010ECd00008168sv00001028sd000004DA*
+ pci:v000010ECd00008168sv0000103Csd00001611*
+ ID_MODEL_FROM_DATABASE=Pavilion DM1Z-3000
+
++pci:v000010ECd00008168sv0000103Csd00001950*
++ ID_MODEL_FROM_DATABASE=ProBook 450/455
++
+ pci:v000010ECd00008168sv00001043sd000011F5*
+ ID_MODEL_FROM_DATABASE=A6J-Q008
+
+@@ -27617,6 +27899,9 @@ pci:v000010ECd00008199sv00001462sd00006894*
+ pci:v000010ECd00008723*
+ ID_MODEL_FROM_DATABASE=RTL8723AE PCIe Wireless Network Adapter
+
++pci:v000010ECd0000B723*
++ ID_MODEL_FROM_DATABASE=RTL8723BE PCIe Wireless Network Adapter
++
+ pci:v000010ED*
+ ID_VENDOR_FROM_DATABASE=Ascii Corporation
+
+@@ -31562,6 +31847,15 @@ pci:v00001137d00000042*
+ pci:v00001137d00000042sv00001137sd00000047*
+ ID_MODEL_FROM_DATABASE=VIC P81E PCIe Management Controller
+
++pci:v00001137d00000042sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Management Controller
++
++pci:v00001137d00000042sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Management Controller
++
+ pci:v00001137d00000043*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC
+
+@@ -31580,6 +31874,12 @@ pci:v00001137d00000043sv00001137sd00000084*
+ pci:v00001137d00000043sv00001137sd00000085*
+ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC
+
++pci:v00001137d00000043sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC
++
++pci:v00001137d00000043sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC
++
+ pci:v00001137d00000044*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic
+
+@@ -31598,6 +31898,12 @@ pci:v00001137d00000044sv00001137sd00000084*
+ pci:v00001137d00000044sv00001137sd00000085*
+ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC Dynamic
+
++pci:v00001137d00000044sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC Dynamic
++
++pci:v00001137d00000044sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC Dynamic
++
+ pci:v00001137d00000045*
+ ID_MODEL_FROM_DATABASE=VIC FCoE HBA
+
+@@ -31610,18 +31916,24 @@ pci:v00001137d00000045sv00001137sd00000048*
+ pci:v00001137d00000045sv00001137sd0000004F*
+ ID_MODEL_FROM_DATABASE=VIC 1280 Mezzanine FCoE HBA
+
++pci:v00001137d00000045sv00001137sd00000084*
++ ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
++
++pci:v00001137d00000045sv00001137sd00000085*
++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CD*
++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe FCoE HBA
++
++pci:v00001137d00000045sv00001137sd000000CE*
++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe FCoE HBA
++
+ pci:v00001137d0000004E*
+ ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port
+
+ pci:v00001137d00000071*
+ ID_MODEL_FROM_DATABASE=VIC SR-IOV VF
+
+-pci:v00001137d00000084*
+- ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
+-
+-pci:v00001137d00000085*
+- ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCOE HBA
+-
+ pci:v00001137d000000CF*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC
+
+@@ -35087,6 +35399,15 @@ pci:v000011F8d00007384*
+ pci:v000011F8d00008000*
+ ID_MODEL_FROM_DATABASE=PM8000 [SPC - SAS Protocol Controller]
+
++pci:v000011F8d00008032*
++ ID_MODEL_FROM_DATABASE=ATTO Celerity FC8xEN
++
++pci:v000011F8d00008032sv0000117Csd0000003B*
++ ID_MODEL_FROM_DATABASE=Celerity FC-82EN Fibre Channel Adapter
++
++pci:v000011F8d00008032sv0000117Csd0000003C*
++ ID_MODEL_FROM_DATABASE=Celerity FC-84EN Fibre Channel Adapter
++
+ pci:v000011F9*
+ ID_VENDOR_FROM_DATABASE=I-Cube Inc
+
+@@ -42029,6 +42350,24 @@ pci:v0000144C*
+ pci:v0000144D*
+ ID_VENDOR_FROM_DATABASE=Samsung Electronics Co Ltd
+
++pci:v0000144Dd00001600*
++ ID_MODEL_FROM_DATABASE=Apple PCIe SSD
++
++pci:v0000144Dd0000A800*
++ ID_MODEL_FROM_DATABASE=XP941 PCIe SSD
++
++pci:v0000144Dd0000A820*
++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X
++
++pci:v0000144Dd0000A820sv00001028sd00001F95*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 400GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F96*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 800GB
++
++pci:v0000144Dd0000A820sv00001028sd00001F97*
++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 1600GB
++
+ pci:v0000144E*
+ ID_VENDOR_FROM_DATABASE=OLITEC
+
+@@ -42527,6 +42866,9 @@ pci:v000014C2*
+ pci:v000014C3*
+ ID_VENDOR_FROM_DATABASE=MEDIATEK Corp.
+
++pci:v000014C3d00007630*
++ ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter
++
+ pci:v000014C4*
+ ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd
+
+@@ -46334,6 +46676,9 @@ pci:v000015ADd000007B0*
+ pci:v000015ADd000007C0*
+ ID_MODEL_FROM_DATABASE=PVSCSI SCSI Controller
+
++pci:v000015ADd000007E0*
++ ID_MODEL_FROM_DATABASE=SATA AHCI controller
++
+ pci:v000015ADd00000801*
+ ID_MODEL_FROM_DATABASE=Virtual Machine Interface
+
+@@ -46623,11 +46968,17 @@ pci:v000015BCd00000103*
+ ID_MODEL_FROM_DATABASE=QX4 PCI Express quad 4-gigabit Fibre Channel controller
+
+ pci:v000015BCd00000105*
+- ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
++ ID_MODEL_FROM_DATABASE=Celerity FC-44XS/FC-42XS/FC-41XS/FC-44ES/FC-42ES/FC-41ES
+
+ pci:v000015BCd00000105sv0000117Csd00000022*
+ ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter
+
++pci:v000015BCd00000105sv0000117Csd00000025*
++ ID_MODEL_FROM_DATABASE=Celerity FC-44ES Fibre Channel Adapter
++
++pci:v000015BCd00000105sv0000117Csd00000026*
++ ID_MODEL_FROM_DATABASE=Celerity FC-42ES Fibre Channel Adapter
++
+ pci:v000015BCd00001100*
+ ID_MODEL_FROM_DATABASE=E8001-66442 PCI Express CIC
+
+@@ -48215,6 +48566,9 @@ pci:v0000170C*
+ pci:v00001719*
+ ID_VENDOR_FROM_DATABASE=EZChip Technologies
+
++pci:v00001719d00001000*
++ ID_MODEL_FROM_DATABASE=NPA Access Network Processor Family
++
+ pci:v00001725*
+ ID_VENDOR_FROM_DATABASE=Vitesse Semiconductor
+
+@@ -49040,9 +49394,15 @@ pci:v00001814d00003092*
+ pci:v00001814d00003290*
+ ID_MODEL_FROM_DATABASE=RT3290 Wireless 802.11n 1T/1R PCIe
+
++pci:v00001814d00003290sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003298*
+ ID_MODEL_FROM_DATABASE=RT3290 Bluetooth
+
++pci:v00001814d00003298sv0000103Csd000018EC*
++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter
++
+ pci:v00001814d00003592*
+ ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+
+@@ -51299,6 +51659,9 @@ pci:v00001B4Bd00009172*
+ pci:v00001B4Bd0000917A*
+ ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+
++pci:v00001B4Bd00009183*
++ ID_MODEL_FROM_DATABASE=88SS9183 PCIe SSD Controller
++
+ pci:v00001B4Bd00009192*
+ ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
+
+@@ -51455,9 +51818,27 @@ pci:v00001C1Cd00000001*
+ pci:v00001C2C*
+ ID_VENDOR_FROM_DATABASE=Fiberblaze
+
++pci:v00001C2Cd0000000A*
++ ID_MODEL_FROM_DATABASE=Capture
++
++pci:v00001C2Cd0000000F*
++ ID_MODEL_FROM_DATABASE=SmartNIC
++
++pci:v00001C2Cd000000A0*
++ ID_MODEL_FROM_DATABASE=FBC4G Capture 4x1Gb
++
++pci:v00001C2Cd000000A1*
++ ID_MODEL_FROM_DATABASE=FBC4XG Capture 4x10Gb
++
++pci:v00001C2Cd000000A2*
++ ID_MODEL_FROM_DATABASE=FBC8XG Capture 8x10Gb
++
+ pci:v00001C32*
+ ID_VENDOR_FROM_DATABASE=Highland Technology, Inc.
+
++pci:v00001C33*
++ ID_VENDOR_FROM_DATABASE=Daktronics, Inc
++
+ pci:v00001C3B*
+ ID_VENDOR_FROM_DATABASE=Accensus, LLC
+
+@@ -51503,6 +51884,9 @@ pci:v00001CE4d00000001*
+ pci:v00001CE4d00000002*
+ ID_MODEL_FROM_DATABASE=ExaNIC X2
+
++pci:v00001CF7*
++ ID_VENDOR_FROM_DATABASE=Subspace Dynamics
++
+ pci:v00001D44*
+ ID_VENDOR_FROM_DATABASE=DPT
+
+@@ -54284,6 +54668,81 @@ pci:v00008086d000008B4sv00008086sd00008270*
+ pci:v00008086d000008CF*
+ ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller
+
++pci:v00008086d0000095A*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Asv00008086sd00001010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005000*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005002*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005020*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd0000502A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005090*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005110*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005400*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00005420*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Asv00008086sd00005490*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009010*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Asv00008086sd00009410*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
++pci:v00008086d0000095Bsv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005200*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005202*
++ ID_MODEL_FROM_DATABASE=Wireless-N 7265
++
++pci:v00008086d0000095Bsv00008086sd00005210*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005290*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005302*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
++pci:v00008086d0000095Bsv00008086sd00005310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d00000960*
+ ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
+
+@@ -54299,6 +54758,9 @@ pci:v00008086d00000A04*
+ pci:v00008086d00000A06*
+ ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+
++pci:v00008086d00000A0C*
++ ID_MODEL_FROM_DATABASE=Haswell-ULT HD Audio Controller
++
+ pci:v00008086d00000A16*
+ ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller
+
+@@ -57332,6 +57794,12 @@ pci:v00008086d00001521sv00001028sd00001F62*
+ pci:v00008086d00001521sv0000103Csd000017D1*
+ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366FLR Adapter
+
++pci:v00008086d00001521sv0000103Csd00002003*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 367i Adapter
++
++pci:v00008086d00001521sv0000103Csd00002226*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 1-port 364i Adapter
++
+ pci:v00008086d00001521sv0000103Csd0000337F*
+ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361i Adapter
+
+@@ -57407,6 +57875,9 @@ pci:v00008086d00001523sv0000103Csd00001784*
+ pci:v00008086d00001523sv0000103Csd000018D1*
+ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361FLB Adapter
+
++pci:v00008086d00001523sv0000103Csd00001989*
++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 363i Adapter
++
+ pci:v00008086d00001523sv0000103Csd0000339F*
+ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366M Adapter
+
+@@ -57584,6 +58055,9 @@ pci:v00008086d00001560*
+ pci:v00008086d0000157B*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+
++pci:v00008086d0000157C*
++ ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection
++
+ pci:v00008086d000015A0*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
+
+@@ -58448,6 +58922,9 @@ pci:v00008086d00001E2Dsv00001849sd00001E2D*
+ pci:v00008086d00001E31*
+ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
+
++pci:v00008086d00001E31sv0000103Csd000017AB*
++ ID_MODEL_FROM_DATABASE=ProBook 6570b
++
+ pci:v00008086d00001E31sv00001043sd00001477*
+ ID_MODEL_FROM_DATABASE=N56VZ
+
+@@ -58748,7 +59225,7 @@ pci:v00008086d00001F3F*
+ pci:v00008086d00001F40*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+
+-pci:v00008086d00001F40sv00001028sd000010F1*
++pci:v00008086d00001F40sv00001028sd000005F1*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+
+ pci:v00008086d00001F41*
+@@ -65144,6 +65621,9 @@ pci:v00008086d00002E17*
+ pci:v00008086d00002E20*
+ ID_MODEL_FROM_DATABASE=4 Series Chipset DRAM Controller
+
++pci:v00008086d00002E20sv00001028sd00000283*
++ ID_MODEL_FROM_DATABASE=Dell Vostro 220
++
+ pci:v00008086d00002E20sv00001043sd000082D3*
+ ID_MODEL_FROM_DATABASE=P5Q Deluxe Motherboard
+
+@@ -67689,7 +68169,7 @@ pci:v00008086d00004227*
+ ID_MODEL_FROM_DATABASE=PRO/Wireless 3945ABG [Golan] Network Connection
+
+ pci:v00008086d00004227sv00008086sd00001011*
+- ID_MODEL_FROM_DATABASE=ThinkPad R60e/X60s
++ ID_MODEL_FROM_DATABASE=ThinkPad T60/R60e/X60s
+
+ pci:v00008086d00004227sv00008086sd00001014*
+ ID_MODEL_FROM_DATABASE=PRO/Wireless 3945BG Network Connection
+@@ -69155,6 +69635,111 @@ pci:v00008086d00009C65*
+ pci:v00008086d00009C66*
+ ID_MODEL_FROM_DATABASE=Lynx Point-LP SPI Controller #1
+
++pci:v00008086d00009C83*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [AHCI Mode]
++
++pci:v00008086d00009C85*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C87*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C8F*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode]
++
++pci:v00008086d00009C90*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #1
++
++pci:v00008086d00009C92*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #2
++
++pci:v00008086d00009C94*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #3
++
++pci:v00008086d00009C96*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #4
++
++pci:v00008086d00009C98*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #5
++
++pci:v00008086d00009C9A*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #6
++
++pci:v00008086d00009CA0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller
++
++pci:v00008086d00009CA2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SMBus Controller
++
++pci:v00008086d00009CA4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Thermal Management Controller
++
++pci:v00008086d00009CA6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB EHCI Controller
++
++pci:v00008086d00009CB1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB xHCI Controller
++
++pci:v00008086d00009CB5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Secure Digital IO Controller
++
++pci:v00008086d00009CB6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Smart Sound Technology Controller
++
++pci:v00008086d00009CBA*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #1
++
++pci:v00008086d00009CBB*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #2
++
++pci:v00008086d00009CBC*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP IDE-r Controller
++
++pci:v00008086d00009CBD*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP KT Controller
++
++pci:v00008086d00009CC1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC7*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CC9*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller
++
++pci:v00008086d00009CE0*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO DMA Controller
++
++pci:v00008086d00009CE1*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #0
++
++pci:v00008086d00009CE2*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #1
++
++pci:v00008086d00009CE3*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #0
++
++pci:v00008086d00009CE4*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #1
++
++pci:v00008086d00009CE5*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #0
++
++pci:v00008086d00009CE6*
++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #1
++
+ pci:v00008086d0000A000*
+ ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
+
+@@ -70691,6 +71276,24 @@ pci:v0000BDBDd0000A11E*
+ pci:v0000BDBDd0000A121*
+ ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+
+
++pci:v0000BDBDd0000A124*
++ ID_MODEL_FROM_DATABASE=Intensity Extreme
++
++pci:v0000BDBDd0000A126*
++ ID_MODEL_FROM_DATABASE=Intensity Shuttle
++
++pci:v0000BDBDd0000A127*
++ ID_MODEL_FROM_DATABASE=UltraStudio Express
++
++pci:v0000BDBDd0000A129*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Monitor
++
++pci:v0000BDBDd0000A12A*
++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Recorder
++
++pci:v0000BDBDd0000A12D*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000BDBDd0000A12E*
+ ID_MODEL_FROM_DATABASE=DeckLink 4K Extreme
+
+@@ -70700,6 +71303,9 @@ pci:v0000BDBDd0000A12F*
+ pci:v0000BDBDd0000A130*
+ ID_MODEL_FROM_DATABASE=DeckLink Mini Recorder
+
++pci:v0000BDBDd0000A132*
++ ID_MODEL_FROM_DATABASE=UltraStudio 4K
++
+ pci:v0000C001*
+ ID_VENDOR_FROM_DATABASE=TSI Telsys
+
+@@ -70860,7 +71466,7 @@ pci:v0000DCBA*
+ ID_VENDOR_FROM_DATABASE=Dynamic Engineering
+
+ pci:v0000DCBAd00000046*
+- ID_MODEL_FROM_DATABASE=PCIeAlteraCycloneIV
++ ID_MODEL_FROM_DATABASE=PCIe Altera Cyclone IV
+
+ pci:v0000DCBAd00000047*
+ ID_MODEL_FROM_DATABASE=VPX-RCB
+@@ -70868,6 +71474,15 @@ pci:v0000DCBAd00000047*
+ pci:v0000DCBAd00000048*
+ ID_MODEL_FROM_DATABASE=PMC-Biserial-III-BAE9
+
++pci:v0000DCBAd0000004E*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY5
++
++pci:v0000DCBAd0000004F*
++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY6
++
++pci:v0000DCBAd00000052*
++ ID_MODEL_FROM_DATABASE=PCIeBiSerialDb37 BA22 LVDS IO
++
+ pci:v0000DD01*
+ ID_VENDOR_FROM_DATABASE=Digital Devices GmbH
+
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index da8385e..6663820 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -53,6 +53,12 @@ usb:v017C*
+ usb:v017Cp145F*
+ ID_MODEL_FROM_DATABASE=Trust Deskset
+
++usb:v0200*
++ ID_VENDOR_FROM_DATABASE=TP-Link
++
++usb:v0200p0201*
++ ID_MODEL_FROM_DATABASE=MA180 UMTS Modem
++
+ usb:v0204*
+ ID_VENDOR_FROM_DATABASE=Chipsbank Microelectronics Co., Ltd
+
+@@ -515,6 +521,12 @@ usb:v03F0p0417*
+ usb:v03F0p0423*
+ ID_MODEL_FROM_DATABASE=HS-COMBO Cardreader
+
++usb:v03F0p042A*
++ ID_MODEL_FROM_DATABASE=LaserJet M1132 MFP
++
++usb:v03F0p0441*
++ ID_MODEL_FROM_DATABASE=HP Prime Calculator
++
+ usb:v03F0p0504*
+ ID_MODEL_FROM_DATABASE=DeskJet 885c
+
+@@ -957,7 +969,7 @@ usb:v03F0p2317*
+ ID_MODEL_FROM_DATABASE=LaserJet 4350
+
+ usb:v03F0p231D*
+- ID_MODEL_FROM_DATABASE=4 GB Flash Drive
++ ID_MODEL_FROM_DATABASE=Broadcom 2070 Bluetooth Combo
+
+ usb:v03F0p2402*
+ ID_MODEL_FROM_DATABASE=PhotoSmart 7700 series
+@@ -1214,6 +1226,9 @@ usb:v03F0p3B17*
+ usb:v03F0p3C02*
+ ID_MODEL_FROM_DATABASE=PhotoSmart 7350
+
++usb:v03F0p3C05*
++ ID_MODEL_FROM_DATABASE=Scanjet Professional 1000 Mobile Scanner
++
+ usb:v03F0p3C11*
+ ID_MODEL_FROM_DATABASE=PSC 1358
+
+@@ -2018,6 +2033,9 @@ usb:v0403p8040*
+ usb:v0403p8070*
+ ID_MODEL_FROM_DATABASE=7 Port Hub
+
++usb:v0403p8140*
++ ID_MODEL_FROM_DATABASE=Vehicle Explorer Interface
++
+ usb:v0403p8210*
+ ID_MODEL_FROM_DATABASE=MGTimer - MGCC (Vic) Timing System
+
+@@ -2036,6 +2054,12 @@ usb:v0403p8A28*
+ usb:v0403p8A98*
+ ID_MODEL_FROM_DATABASE=TIAO Multi-Protocol Adapter
+
++usb:v0403p9133*
++ ID_MODEL_FROM_DATABASE=CallerID
++
++usb:v0403p9135*
++ ID_MODEL_FROM_DATABASE=Rotary Pub alarm
++
+ usb:v0403p9E90*
+ ID_MODEL_FROM_DATABASE=Marvell OpenRD Base/Client
+
+@@ -2978,6 +3002,9 @@ usb:v040Ap6005*
+ usb:v040B*
+ ID_VENDOR_FROM_DATABASE=Weltrend Semiconductor
+
++usb:v040Bp0A68*
++ ID_MODEL_FROM_DATABASE=Func MS-3 gaming mouse [WT6573F MCU]
++
+ usb:v040Bp6510*
+ ID_MODEL_FROM_DATABASE=Weltrend Bar Code Reader
+
+@@ -3662,6 +3689,9 @@ usb:v041Ep4057*
+ usb:v041Ep4058*
+ ID_MODEL_FROM_DATABASE=Live! Cam Optia AF
+
++usb:v041Ep405F*
++ ID_MODEL_FROM_DATABASE=WebCam Vista (VF0330)
++
+ usb:v041Ep4061*
+ ID_MODEL_FROM_DATABASE=Live! Cam Notebook Pro [VF0400]
+
+@@ -5255,6 +5285,9 @@ usb:v0457p0162*
+ usb:v0457p0163*
+ ID_MODEL_FROM_DATABASE=802.11 Wireless LAN Adapter
+
++usb:v0457p0817*
++ ID_MODEL_FROM_DATABASE=SiS-184-ASUS-4352.17 touch panel
++
+ usb:v0457p5401*
+ ID_MODEL_FROM_DATABASE=Wireless Adapter RO80211GS-USB
+
+@@ -5531,6 +5564,9 @@ usb:v0458p7079*
+ usb:v0458p707F*
+ ID_MODEL_FROM_DATABASE=TVGo DVB-T03 [RTL2832]
+
++usb:v0458p7088*
++ ID_MODEL_FROM_DATABASE=WideCam 1050
++
+ usb:v0459*
+ ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc.
+
+@@ -6401,6 +6437,9 @@ usb:v045Ep0772*
+ usb:v045Ep0779*
+ ID_MODEL_FROM_DATABASE=LifeCam HD-3000
+
++usb:v045Ep0797*
++ ID_MODEL_FROM_DATABASE=Optical Mouse 200
++
+ usb:v045Ep930A*
+ ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board
+
+@@ -6624,7 +6663,7 @@ usb:v046A*
+ ID_VENDOR_FROM_DATABASE=Cherry GmbH
+
+ usb:v046Ap0001*
+- ID_MODEL_FROM_DATABASE=My3000 Keyboard
++ ID_MODEL_FROM_DATABASE=Keyboard
+
+ usb:v046Ap0003*
+ ID_MODEL_FROM_DATABASE=My3000 Hub
+@@ -8504,6 +8543,9 @@ usb:v0480pA006*
+ usb:v0480pA007*
+ ID_MODEL_FROM_DATABASE=External Disk USB 3.0
+
++usb:v0480pD010*
++ ID_MODEL_FROM_DATABASE=External Disk 3TB
++
+ usb:v0481*
+ ID_VENDOR_FROM_DATABASE=Zenith Data Systems
+
+@@ -8597,6 +8639,9 @@ usb:v0483p5001*
+ usb:v0483p5710*
+ ID_MODEL_FROM_DATABASE=Joystick in FS Mode
+
++usb:v0483p5720*
++ ID_MODEL_FROM_DATABASE=STM microSD Flash Device
++
+ usb:v0483p5721*
+ ID_MODEL_FROM_DATABASE=Hantek DDS-3X25 Arbitrary Waveform Generator
+
+@@ -8693,6 +8738,12 @@ usb:v048Dp9009*
+ usb:v048Dp9135*
+ ID_MODEL_FROM_DATABASE=Zolid Mini DVB-T Stick
+
++usb:v048Dp9503*
++ ID_MODEL_FROM_DATABASE=ITE it9503 feature-limited DVB-T transmission chip [ccHDtv]
++
++usb:v048Dp9507*
++ ID_MODEL_FROM_DATABASE=ITE it9507 full featured DVB-T transmission chip [ccHDtv]
++
+ usb:v048F*
+ ID_VENDOR_FROM_DATABASE=Eicon Tech.
+
+@@ -10937,9 +10988,21 @@ usb:v04A9p3260*
+ usb:v04A9p3264*
+ ID_MODEL_FROM_DATABASE=PowerShot A1400
+
++usb:v04A9p3265*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 130 IS / IXUS 140
++
+ usb:v04A9p3268*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS
+
++usb:v04A9p3271*
++ ID_MODEL_FROM_DATABASE=PowerShot A2500
++
++usb:v04A9p3276*
++ ID_MODEL_FROM_DATABASE=PowerShot SX170 IS
++
++usb:v04A9p327D*
++ ID_MODEL_FROM_DATABASE=Powershot ELPH 115 IS / IXUS 132
++
+ usb:v04AA*
+ ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
+
+@@ -11162,6 +11225,9 @@ usb:v04B0p0425*
+ usb:v04B0p0428*
+ ID_MODEL_FROM_DATABASE=D7000
+
++usb:v04B0p0429*
++ ID_MODEL_FROM_DATABASE=D5100
++
+ usb:v04B0p042A*
+ ID_MODEL_FROM_DATABASE=D800 (ptp)
+
+@@ -12806,6 +12872,9 @@ usb:v04D9p1503*
+ usb:v04D9p1603*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
++usb:v04D9p1702*
++ ID_MODEL_FROM_DATABASE=Keyboard LKS02
++
+ usb:v04D9p2013*
+ ID_MODEL_FROM_DATABASE=Keyboard [Das Keyboard]
+
+@@ -12821,6 +12890,9 @@ usb:v04D9p2519*
+ usb:v04D9p2832*
+ ID_MODEL_FROM_DATABASE=1channel Telephone line recorder
+
++usb:v04D9p2834*
++ ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU
++
+ usb:v04D9pA055*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
+@@ -14252,6 +14324,9 @@ usb:v04F2pB354*
+ usb:v04F3*
+ ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
+
++usb:v04F3p000A*
++ ID_MODEL_FROM_DATABASE=Touchscreen
++
+ usb:v04F3p0103*
+ ID_MODEL_FROM_DATABASE=ActiveJet K-2024 Multimedia Keyboard
+
+@@ -15302,6 +15377,12 @@ usb:v050Dp1102*
+ usb:v050Dp1103*
+ ID_MODEL_FROM_DATABASE=F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]
+
++usb:v050Dp1106*
++ ID_MODEL_FROM_DATABASE=F9L1106v1 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
++
++usb:v050Dp1109*
++ ID_MODEL_FROM_DATABASE=F9L1109v1 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU]
++
+ usb:v050Dp11F2*
+ ID_MODEL_FROM_DATABASE=ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]
+
+@@ -16514,6 +16595,9 @@ usb:v054Cp0485*
+ usb:v054Cp04CB*
+ ID_MODEL_FROM_DATABASE=WALKMAN NWZ-E354
+
++usb:v054Cp06BB*
++ ID_MODEL_FROM_DATABASE=WALKMAN NWZ-F805
++
+ usb:v054Cp1000*
+ ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver
+
+@@ -47582,6 +47666,15 @@ usb:v2101*
+ usb:v2101p0201*
+ ID_MODEL_FROM_DATABASE=SIIG 4-to-2 Printer Switch
+
++usb:v2149*
++ ID_VENDOR_FROM_DATABASE=Advanced Silicon S.A.
++
++usb:v2149p211B*
++ ID_MODEL_FROM_DATABASE=Touchscreen Controller
++
++usb:v2149p2703*
++ ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch]
++
+ usb:v2162*
+ ID_VENDOR_FROM_DATABASE=Creative (?)
+
+@@ -47636,6 +47729,21 @@ usb:v2227*
+ usb:v2227p3105*
+ ID_MODEL_FROM_DATABASE=SKYDATA SKD-U100
+
++usb:v2232*
++ ID_VENDOR_FROM_DATABASE=Silicon Motion
++
++usb:v2232p1005*
++ ID_MODEL_FROM_DATABASE=WebCam SCB-0385N
++
++usb:v2232p1028*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFL11939N
++
++usb:v2232p1029*
++ ID_MODEL_FROM_DATABASE=WebCam SC-13HDL11939N
++
++usb:v2232p1037*
++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFM12339N
++
+ usb:v2233*
+ ID_VENDOR_FROM_DATABASE=RadioShack Corporation
+
diff --git a/0192-delta-replace-readdir_r-with-readdir.patch b/0192-delta-replace-readdir_r-with-readdir.patch
new file mode 100644
index 0000000..0ebc7d7
--- /dev/null
+++ b/0192-delta-replace-readdir_r-with-readdir.patch
@@ -0,0 +1,31 @@
+From 3c0667a5ed5bc7043499f176d68f77dea6bae944 Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer at redhat.com>
+Date: Thu, 19 Dec 2013 11:16:12 +0100
+Subject: [PATCH] delta: replace readdir_r with readdir
+
+---
+ src/delta/delta.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index b3272d9..fd024fc 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -280,13 +280,13 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+
+ for (;;) {
+ struct dirent *de;
+- union dirent_storage buf;
+ int k;
+ char *p;
+
+- k = readdir_r(d, &buf.de, &de);
+- if (k != 0)
+- return -k;
++ errno = 0;
++ de = readdir(d);
++ if (!de && errno != 0)
++ return -errno;
+
+ if (!de)
+ break;
diff --git a/0193-delta-fix-delta-for-drop-ins.patch b/0193-delta-fix-delta-for-drop-ins.patch
new file mode 100644
index 0000000..94b5a5d
--- /dev/null
+++ b/0193-delta-fix-delta-for-drop-ins.patch
@@ -0,0 +1,375 @@
+From e0902bd55deee738f3d6e33b8744364ef922caa2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 22 Dec 2013 19:45:02 -0500
+Subject: [PATCH] delta: fix delta for drop-ins
+
+Also, fix highlighting, add more debug statements, make const tables
+static and global, run path_kill_slashes only at entry.
+
+Conflicts:
+ src/delta/delta.c
+---
+ src/delta/delta.c | 174 +++++++++++++++++++++++++-----------------------------
+ 1 file changed, 79 insertions(+), 95 deletions(-)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index fd024fc..e97f2e9 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -33,6 +33,34 @@
+ #include "build.h"
+ #include "strv.h"
+
++static const char prefixes[] =
++ "/etc\0"
++ "/run\0"
++ "/usr/local/lib\0"
++ "/usr/local/share\0"
++ "/usr/lib\0"
++ "/usr/share\0"
++#ifdef HAVE_SPLIT_USR
++ "/lib\0"
++#endif
++ ;
++
++static const char suffixes[] =
++ "sysctl.d\0"
++ "tmpfiles.d\0"
++ "modules-load.d\0"
++ "binfmt.d\0"
++ "systemd/system\0"
++ "systemd/user\0"
++ "systemd/system-preset\0"
++ "systemd/user-preset\0"
++ "udev/rules.d\0"
++ "modprobe.d\0";
++
++static const char have_dropins[] =
++ "systemd/system\0"
++ "systemd/user\0";
++
+ static bool arg_no_pager = false;
+ static int arg_diff = -1;
+
+@@ -48,6 +76,14 @@ static enum {
+ (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN | SHOW_EXTENDED)
+ } arg_flags = 0;
+
++static void pager_open_if_enabled(void) {
++
++ if (arg_no_pager)
++ return;
++
++ pager_open(false);
++}
++
+ static int equivalent(const char *a, const char *b) {
+ _cleanup_free_ char *x = NULL, *y = NULL;
+
+@@ -76,7 +112,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
+ return 0;
+
+ printf("%s%s%s %s → %s\n",
+- ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom);
++ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom);
+ return 1;
+ }
+
+@@ -160,24 +196,26 @@ static int found_override(const char *top, const char *bottom) {
+ }
+
+ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *toppath, const char *drop) {
+- _cleanup_free_ char *conf = NULL;
++ _cleanup_free_ char *unit = NULL;
+ _cleanup_free_ char *path = NULL;
+ _cleanup_strv_free_ char **list = NULL;
+ char **file;
+ char *c;
+ int r;
+
++ assert(!endswith(drop, "/"));
++
+ path = strjoin(toppath, "/", drop, NULL);
+ if (!path)
+ return -ENOMEM;
+
+- path_kill_slashes(path);
++ log_debug("Looking at %s", path);
+
+- conf = strdup(drop);
+- if (!conf)
++ unit = strdup(drop);
++ if (!unit)
+ return -ENOMEM;
+
+- c = strrchr(conf, '.');
++ c = strrchr(unit, '.');
+ if (!c)
+ return -EINVAL;
+ *c = 0;
+@@ -200,35 +238,21 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+ p = strjoin(path, "/", *file, NULL);
+ if (!p)
+ return -ENOMEM;
++ d = p + strlen(toppath) + 1;
+
+- path_kill_slashes(p);
+-
+- d = strrchr(p, '/');
+- if (!d || d == p) {
+- free(p);
+- return -EINVAL;
+- }
+- d--;
+- d = strrchr(p, '/');
+-
+- if (!d || d == p) {
+- free(p);
+- return -EINVAL;
+- }
+-
++ log_debug("Adding at top: %s → %s", d, p);
+ k = hashmap_put(top, d, p);
+ if (k >= 0) {
+ p = strdup(p);
+ if (!p)
+ return -ENOMEM;
+- d = strrchr(p, '/');
+- d--;
+- d = strrchr(p, '/');
++ d = p + strlen(toppath) + 1;
+ } else if (k != -EEXIST) {
+ free(p);
+ return k;
+ }
+
++ log_debug("Adding at bottom: %s → %s", d, p);
+ free(hashmap_remove(bottom, d));
+ k = hashmap_put(bottom, d, p);
+ if (k < 0) {
+@@ -236,14 +260,14 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+ return k;
+ }
+
+- h = hashmap_get(drops, conf);
++ h = hashmap_get(drops, unit);
+ if (!h) {
+ h = hashmap_new(string_hash_func, string_compare_func);
+ if (!h)
+ return -ENOMEM;
+- hashmap_put(drops, conf, h);
+- conf = strdup(conf);
+- if (!conf)
++ hashmap_put(drops, unit, h);
++ unit = strdup(unit);
++ if (!unit)
+ return -ENOMEM;
+ }
+
+@@ -251,7 +275,8 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
+ if (!p)
+ return -ENOMEM;
+
+- k = hashmap_put(h, path_get_file_name(p), p);
++ log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p);
++ k = hashmap_put(h, basename(p), p);
+ if (k < 0) {
+ free(p);
+ if (k != -EEXIST)
+@@ -269,12 +294,14 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ assert(drops);
+ assert(path);
+
++ log_debug("Looking at %s", path);
++
+ d = opendir(path);
+ if (!d) {
+ if (errno == ENOENT)
+ return 0;
+
+- log_error("Failed to enumerate %s: %m", path);
++ log_error("Failed to open %s: %m", path);
+ return -errno;
+ }
+
+@@ -285,11 +312,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+
+ errno = 0;
+ de = readdir(d);
+- if (!de && errno != 0)
+- return -errno;
+-
+ if (!de)
+- break;
++ return -errno;
+
+ if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+ enumerate_dir_d(top, bottom, drops, path, de->d_name);
+@@ -301,9 +325,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ if (!p)
+ return -ENOMEM;
+
+- path_kill_slashes(p);
+-
+- k = hashmap_put(top, path_get_file_name(p), p);
++ log_debug("Adding at top: %s → %s", basename(p), p);
++ k = hashmap_put(top, basename(p), p);
+ if (k >= 0) {
+ p = strdup(p);
+ if (!p)
+@@ -313,44 +336,37 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ return k;
+ }
+
+- free(hashmap_remove(bottom, path_get_file_name(p)));
+- k = hashmap_put(bottom, path_get_file_name(p), p);
++ log_debug("Adding at bottom: %s → %s", basename(p), p);
++ free(hashmap_remove(bottom, basename(p)));
++ k = hashmap_put(bottom, basename(p), p);
+ if (k < 0) {
+ free(p);
+ return k;
+ }
+ }
+-
+- return 0;
+ }
+
+-static int process_suffix(const char *prefixes, const char *suffix, bool dropins) {
++static int process_suffix(const char *suffix) {
+ const char *p;
+ char *f;
+- Hashmap *top, *bottom=NULL, *drops=NULL;
++ Hashmap *top, *bottom, *drops;
+ Hashmap *h;
+ char *key;
+ int r = 0, k;
+ Iterator i, j;
+ int n_found = 0;
++ bool dropins;
+
+- assert(prefixes);
+ assert(suffix);
++ assert(!startswith(suffix, "/"));
++ assert(!strstr(suffix, "//"));
+
+- top = hashmap_new(string_hash_func, string_compare_func);
+- if (!top) {
+- r = -ENOMEM;
+- goto finish;
+- }
++ dropins = nulstr_contains(have_dropins, suffix);
+
++ top = hashmap_new(string_hash_func, string_compare_func);
+ bottom = hashmap_new(string_hash_func, string_compare_func);
+- if (!bottom) {
+- r = -ENOMEM;
+- goto finish;
+- }
+-
+ drops = hashmap_new(string_hash_func, string_compare_func);
+- if (!drops) {
++ if (!top || !bottom || !drops) {
+ r = -ENOMEM;
+ goto finish;
+ }
+@@ -365,10 +381,8 @@ static int process_suffix(const char *prefixes, const char *suffix, bool dropins
+ }
+
+ k = enumerate_dir(top, bottom, drops, t, dropins);
+- if (k < 0)
++ if (r == 0)
+ r = k;
+-
+- log_debug("Looking at %s", t);
+ }
+
+ HASHMAP_FOREACH_KEY(f, key, top, i) {
+@@ -409,21 +423,20 @@ finish:
+ return r < 0 ? r : n_found;
+ }
+
+-static int process_suffix_chop(const char *prefixes, const char *suffix, const char *have_dropins) {
++static int process_suffix_chop(const char *suffix) {
+ const char *p;
+
+- assert(prefixes);
+ assert(suffix);
+
+ if (!path_is_absolute(suffix))
+- return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++ return process_suffix(suffix);
+
+ /* Strip prefix from the suffix */
+ NULSTR_FOREACH(p, prefixes) {
+ if (startswith(suffix, p)) {
+ suffix += strlen(p);
+ suffix += strspn(suffix, "/");
+- return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
++ return process_suffix(suffix);
+ }
+ }
+
+@@ -548,35 +561,6 @@ static int parse_argv(int argc, char *argv[]) {
+ }
+
+ int main(int argc, char *argv[]) {
+-
+- const char prefixes[] =
+- "/etc\0"
+- "/run\0"
+- "/usr/local/lib\0"
+- "/usr/local/share\0"
+- "/usr/lib\0"
+- "/usr/share\0"
+-#ifdef HAVE_SPLIT_USR
+- "/lib\0"
+-#endif
+- ;
+-
+- const char suffixes[] =
+- "sysctl.d\0"
+- "tmpfiles.d\0"
+- "modules-load.d\0"
+- "binfmt.d\0"
+- "systemd/system\0"
+- "systemd/user\0"
+- "systemd/system-preset\0"
+- "systemd/user-preset\0"
+- "udev/rules.d\0"
+- "modprobe.d\0";
+-
+- const char have_dropins[] =
+- "systemd/system\0"
+- "systemd/user\0";
+-
+ int r = 0, k;
+ int n_found = 0;
+
+@@ -595,14 +579,14 @@ int main(int argc, char *argv[]) {
+ else if (arg_diff)
+ arg_flags |= SHOW_OVERRIDDEN;
+
+- if (!arg_no_pager)
+- pager_open(false);
++ pager_open_if_enabled();
+
+ if (optind < argc) {
+ int i;
+
+ for (i = optind; i < argc; i++) {
+- k = process_suffix_chop(prefixes, argv[i], have_dropins);
++ path_kill_slashes(argv[i]);
++ k = process_suffix_chop(argv[i]);
+ if (k < 0)
+ r = k;
+ else
+@@ -613,7 +597,7 @@ int main(int argc, char *argv[]) {
+ const char *n;
+
+ NULSTR_FOREACH(n, suffixes) {
+- k = process_suffix(prefixes, n, nulstr_contains(have_dropins, n));
++ k = process_suffix(n);
+ if (k < 0)
+ r = k;
+ else
diff --git a/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
new file mode 100644
index 0000000..23026ab
--- /dev/null
+++ b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
@@ -0,0 +1,251 @@
+From 31ce1352b687551d62d3b7d4dc1276b2dff1d65a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 22 Dec 2013 22:53:23 -0500
+Subject: [PATCH] delta: if prefix is specified, only show overrides there
+
+systemd-delta /run/systemd/system will show all unit overrides
+in /run, etc.
+---
+ man/systemd-delta.xml | 80 +++++++++++++++++++++++++++++++++++++++++----------
+ src/delta/delta.c | 71 ++++++++++++++++++++++++++++-----------------
+ 2 files changed, 109 insertions(+), 42 deletions(-)
+
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 413ebd8..4d3ab78 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -49,7 +49,9 @@
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+- <command>systemd-delta <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">SUFFIX</arg></command>
++ <command>systemd-delta</command>
++ <arg choice="opt" rep="repeat">OPTIONS</arg>
++ <arg choice="opt" rep="repeat"><replaceable>PREFIX</replaceable><optional>/<replaceable>SUFFIX</replaceable></optional>|<replaceable>SUFFIX</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+@@ -57,18 +59,46 @@
+ <title>Description</title>
+
+ <para><command>systemd-delta</command> may be used to
+- identify and compare configuration files in
+- <filename>/etc</filename> that override default
+- counterparts in <filename>/usr</filename>. The command
+- line argument can be one or more name of a subdirectories of
+- <filename>/etc</filename> or
+- <filename>/usr/lib</filename> to compare, such as
+- <filename>tmpfiles.d</filename>, <filename>sysctl.d</filename> or
+- <filename>systemd/system</filename>.</para>
+-
+- <para>When no argument is specified a number of
+- well-known subdirectories are searched for overridden
+- files.</para>
++ identify and compare configuration files that override
++ other configuration files. Files in
++ <filename>/etc</filename> have highest priority, files
++ in <filename>/run</filename> have the second highest
++ priority, ..., files in <filename>/lib</filename> have
++ lowest priority. Files in a directory with higher
++ priority override files with the same name in
++ directories of lower priority. In addition, certain
++ configuration files can have <literal>.d</literal>
++ directories which contain "drop-in" files with
++ configuration snippets which augment the main
++ configuration file. "Drop-in" files can be overriden
++ in the same way by placing files with the same name in
++ a directory of higher priority (except that in case of
++ "drop-in" files, both the "drop-in" file name and the
++ name of the containing directory, which corresponds to
++ the name of the main configuration file, must match).
++ For a fuller explanation, see
++ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++ </para>
++
++ <para>The command line argument will be split into a
++ prefix and a suffix. Either is optional. The prefix
++ must be one of the directories containing
++ configuration files (<filename>/etc</filename>,
++ <filename>/run</filename>,
++ <filename>/usr/lib</filename>, ...). If it is given,
++ only overriding files contained in this directory will
++ be shown. Otherwise, all overriding files will be
++ shown. The suffix must be a name of a subdirectory
++ containing configuration files like
++ <filename>tmpfiles.d</filename>,
++ <filename>sysctl.d</filename> or
++ <filename>systemd/system</filename>. If it is given,
++ only configuration files in this subdirectory (across
++ all configuration paths) will be analyzed. Otherwise,
++ all configuration files will be analyzed. If the
++ commandline argument is not given at all, all
++ configuration files will be analyzed. See below for
++ some examples.</para>
+ </refsect1>
+
+ <refsect1>
+@@ -168,9 +198,28 @@
+ </varlistentry>
+
+ </variablelist>
+-
+ </refsect1>
+
++ <refsect1>
++ <title>Examples</title>
++
++ <para>To see all local configuration:</para>
++ <programlisting>systemd-delta
++ </programlisting>
++
++ <para>To see all runtime configuration:</para>
++ <programlisting>systemd-delta /run
++ </programlisting>
++
++ <para>To see all system unit configuration changes:</para>
++ <programlisting>systemd-delta systemd/system
++ </programlisting>
++
++ <para>To see all runtime "drop-in" changes for system units:</para>
++ <programlisting>systemd-delta --type=extended /run/systemd/system
++ </programlisting>
++ </refsect1>
++
+ <refsect1>
+ <title>Exit status</title>
+
+@@ -181,7 +230,8 @@
+ <refsect1>
+ <title>See Also</title>
+ <para>
+- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index e97f2e9..ae658f9 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -4,6 +4,7 @@
+ This file is part of systemd.
+
+ Copyright 2012 Lennart Poettering
++ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+@@ -346,7 +347,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ }
+ }
+
+-static int process_suffix(const char *suffix) {
++static int process_suffix(const char *suffix, const char *onlyprefix) {
+ const char *p;
+ char *f;
+ Hashmap *top, *bottom, *drops;
+@@ -391,20 +392,23 @@ static int process_suffix(const char *suffix) {
+ o = hashmap_get(bottom, key);
+ assert(o);
+
+- if (path_equal(o, f))
+- notify_override_unchanged(f);
+- else {
+- k = found_override(f, o);
+- if (k < 0)
+- r = k;
+- else
+- n_found += k;
++ if (!onlyprefix || startswith(o, onlyprefix)) {
++ if (path_equal(o, f)) {
++ notify_override_unchanged(f);
++ } else {
++ k = found_override(f, o);
++ if (k < 0)
++ r = k;
++ else
++ n_found += k;
++ }
+ }
+
+ h = hashmap_get(drops, key);
+ if (h)
+ HASHMAP_FOREACH(o, h, j)
+- n_found += notify_override_extended(f, o);
++ if (!onlyprefix || startswith(o, onlyprefix))
++ n_found += notify_override_extended(f, o);
+ }
+
+ finish:
+@@ -423,24 +427,41 @@ finish:
+ return r < 0 ? r : n_found;
+ }
+
+-static int process_suffix_chop(const char *suffix) {
++static int process_suffixes(const char *onlyprefix) {
++ const char *n;
++ int n_found = 0, r;
++
++ NULSTR_FOREACH(n, suffixes) {
++ r = process_suffix(n, onlyprefix);
++ if (r < 0)
++ return r;
++ else
++ n_found += r;
++ }
++ return n_found;
++}
++
++static int process_suffix_chop(const char *arg) {
+ const char *p;
+
+- assert(suffix);
++ assert(arg);
+
+- if (!path_is_absolute(suffix))
+- return process_suffix(suffix);
++ if (!path_is_absolute(arg))
++ return process_suffix(arg, NULL);
+
+ /* Strip prefix from the suffix */
+ NULSTR_FOREACH(p, prefixes) {
+- if (startswith(suffix, p)) {
+- suffix += strlen(p);
++ const char *suffix = startswith(arg, p);
++ if (suffix) {
+ suffix += strspn(suffix, "/");
+- return process_suffix(suffix);
++ if (*suffix)
++ return process_suffix(suffix, NULL);
++ else
++ return process_suffixes(arg);
+ }
+ }
+
+- log_error("Invalid suffix specification %s.", suffix);
++ log_error("Invalid suffix specification %s.", arg);
+ return -EINVAL;
+ }
+
+@@ -594,15 +615,11 @@ int main(int argc, char *argv[]) {
+ }
+
+ } else {
+- const char *n;
+-
+- NULSTR_FOREACH(n, suffixes) {
+- k = process_suffix(n);
+- if (k < 0)
+- r = k;
+- else
+- n_found += k;
+- }
++ k = process_suffixes(NULL);
++ if (k < 0)
++ r = k;
++ else
++ n_found += k;
+ }
+
+ if (r >= 0)
diff --git a/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
new file mode 100644
index 0000000..e89402c
--- /dev/null
+++ b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
@@ -0,0 +1,1520 @@
+From 316d1c573345d8d13a289ce38cbe2fd683a75d98 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 24 Dec 2013 16:39:37 +0100
+Subject: [PATCH] log: log_error() and friends add a newline after each line
+ anyway, so avoid including it in the log strings
+
+Conflicts:
+ src/bus-driverd/bus-driverd.c
+ src/bus-proxyd/bus-proxyd.c
+ src/shared/path-util.c
+ src/udev/net/link-config.c
+ src/udev/scsi_id/scsi_id.c
+ src/udev/scsi_id/scsi_serial.c
+ src/udev/udev-builtin-keyboard.c
+ src/udev/udev-event.c
+ src/udev/udev-rules.c
+ src/udev/udevadm-monitor.c
+ src/udev/udevadm-trigger.c
+ src/udev/udevd.c
+---
+ src/binfmt/binfmt.c | 2 +-
+ src/bootchart/bootchart.c | 4 +-
+ src/journal/coredumpctl.c | 2 +-
+ src/journal/journal-authenticate.c | 2 +-
+ src/modules-load/modules-load.c | 4 +-
+ src/sysctl/sysctl.c | 2 +-
+ src/test/test-udev.c | 8 +-
+ src/tmpfiles/tmpfiles.c | 4 +-
+ src/udev/accelerometer/accelerometer.c | 2 +-
+ src/udev/ata_id/ata_id.c | 6 +-
+ src/udev/cdrom_id/cdrom_id.c | 160 ++++++++++++++++-----------------
+ src/udev/udev-builtin-blkid.c | 2 +-
+ src/udev/udev-builtin-firmware.c | 10 +--
+ src/udev/udev-builtin-input_id.c | 14 +--
+ src/udev/udev-builtin-kmod.c | 18 ++--
+ src/udev/udev-builtin-usb_id.c | 22 ++---
+ src/udev/udev-ctrl.c | 22 ++---
+ src/udev/udev-node.c | 32 +++----
+ src/udev/udev-watch.c | 10 +--
+ src/udev/udevadm-hwdb.c | 42 ++++-----
+ src/udev/udevadm-settle.c | 16 ++--
+ src/udev/udevadm-test.c | 4 +-
+ src/udev/udevadm.c | 2 +-
+ 23 files changed, 195 insertions(+), 195 deletions(-)
+
+diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
+index 5a42b3d..7ed1ae7 100644
+--- a/src/binfmt/binfmt.c
++++ b/src/binfmt/binfmt.c
+@@ -94,7 +94,7 @@ static int apply_file(const char *path, bool ignore_enoent) {
+ return r;
+ }
+
+- log_debug("apply: %s\n", path);
++ log_debug("apply: %s", path);
+ for (;;) {
+ char l[LINE_MAX], *p;
+ int k;
+diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c
+index 14ccd3e..9f99c1f 100644
+--- a/src/bootchart/bootchart.c
++++ b/src/bootchart/bootchart.c
+@@ -262,12 +262,12 @@ static void do_journal_append(char *file)
+
+ f = open(file, O_RDONLY);
+ if (f < 0) {
+- log_error("Failed to read bootchart data: %m\n");
++ log_error("Failed to read bootchart data: %m");
+ return;
+ }
+ n = loop_read(f, p + 10, BOOTCHART_MAX, false);
+ if (n < 0) {
+- log_error("Failed to read bootchart data: %s\n", strerror(-n));
++ log_error("Failed to read bootchart data: %s", strerror(-n));
+ close(f);
+ return;
+ }
+diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c
+index 75c96cc..560a91b 100644
+--- a/src/journal/coredumpctl.c
++++ b/src/journal/coredumpctl.c
+@@ -417,7 +417,7 @@ static int dump_core(sd_journal* j) {
+
+ r = sd_journal_previous(j);
+ if (r >= 0)
+- log_warning("More than one entry matches, ignoring rest.\n");
++ log_warning("More than one entry matches, ignoring rest.");
+
+ return 0;
+ }
+diff --git a/src/journal/journal-authenticate.c b/src/journal/journal-authenticate.c
+index bd7100a..f416b79 100644
+--- a/src/journal/journal-authenticate.c
++++ b/src/journal/journal-authenticate.c
+@@ -60,7 +60,7 @@ int journal_file_append_tag(JournalFile *f) {
+ o->tag.seqnum = htole64(journal_file_tag_seqnum(f));
+ o->tag.epoch = htole64(FSPRG_GetEpoch(f->fsprg_state));
+
+- log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"\n",
++ log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"",
+ le64toh(o->tag.seqnum),
+ FSPRG_GetEpoch(f->fsprg_state));
+
+diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
+index 49ee420..9789398 100644
+--- a/src/modules-load/modules-load.c
++++ b/src/modules-load/modules-load.c
+@@ -122,7 +122,7 @@ static int load_module(struct kmod_ctx *ctx, const char *m) {
+ struct kmod_list *itr, *modlist = NULL;
+ int r = 0;
+
+- log_debug("load: %s\n", m);
++ log_debug("load: %s", m);
+
+ r = kmod_module_new_from_lookup(ctx, m, &modlist);
+ if (r < 0) {
+@@ -190,7 +190,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent
+ return r;
+ }
+
+- log_debug("apply: %s\n", path);
++ log_debug("apply: %s", path);
+ for (;;) {
+ char line[LINE_MAX], *l;
+ int k;
+diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
+index b5670db..8fb0eb6 100644
+--- a/src/sysctl/sysctl.c
++++ b/src/sysctl/sysctl.c
+@@ -132,7 +132,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
+ return r;
+ }
+
+- log_debug("parse: %s\n", path);
++ log_debug("parse: %s", path);
+ while (!feof(f)) {
+ char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
+ void *v;
+diff --git a/src/test/test-udev.c b/src/test/test-udev.c
+index 17825f1..676669b 100644
+--- a/src/test/test-udev.c
++++ b/src/test/test-udev.c
+@@ -101,20 +101,20 @@ int main(int argc, char *argv[])
+ if (udev == NULL)
+ return EXIT_FAILURE;
+
+- log_debug("version %s\n", VERSION);
++ log_debug("version %s", VERSION);
+ label_init("/dev");
+
+ sigprocmask(SIG_SETMASK, NULL, &sigmask_orig);
+
+ action = argv[1];
+ if (action == NULL) {
+- log_error("action missing\n");
++ log_error("action missing");
+ goto out;
+ }
+
+ devpath = argv[2];
+ if (devpath == NULL) {
+- log_error("devpath missing\n");
++ log_error("devpath missing");
+ goto out;
+ }
+
+@@ -123,7 +123,7 @@ int main(int argc, char *argv[])
+ strscpyl(syspath, sizeof(syspath), "/sys", devpath, NULL);
+ dev = udev_device_new_from_syspath(udev, syspath);
+ if (dev == NULL) {
+- log_debug("unknown device '%s'\n", devpath);
++ log_debug("unknown device '%s'", devpath);
+ goto out;
+ }
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index e23847b..00f74c2 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -359,7 +359,7 @@ static int dir_cleanup(
+ continue;
+
+ if (i->type != IGNORE_DIRECTORY_PATH || !streq(dent->d_name, p)) {
+- log_debug("rmdir '%s'\n", sub_path);
++ log_debug("rmdir '%s'", sub_path);
+
+ if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
+ if (errno != ENOENT && errno != ENOTEMPTY) {
+@@ -407,7 +407,7 @@ static int dir_cleanup(
+ if (age >= cutoff)
+ continue;
+
+- log_debug("unlink '%s'\n", sub_path);
++ log_debug("unlink '%s'", sub_path);
+
+ if (unlinkat(dirfd(d), dent->d_name, 0) < 0) {
+ if (errno != ENOENT) {
+diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c
+index e611b48..9610d7c 100644
+--- a/src/udev/accelerometer/accelerometer.c
++++ b/src/udev/accelerometer/accelerometer.c
+@@ -334,7 +334,7 @@ int main (int argc, char** argv)
+ return 0;
+ }
+
+- log_debug("opening accelerometer device %s\n", devnode);
++ log_debug("opening accelerometer device %s", devnode);
+ test_orientation(udev, dev, devnode);
+ free(devnode);
+ log_close();
+diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c
+index d375d43..5e55f8d 100644
+--- a/src/udev/ata_id/ata_id.c
++++ b/src/udev/ata_id/ata_id.c
+@@ -462,14 +462,14 @@ int main(int argc, char *argv[])
+
+ node = argv[optind];
+ if (node == NULL) {
+- log_error("no node specified\n");
++ log_error("no node specified");
+ rc = 1;
+ goto exit;
+ }
+
+ fd = open(node, O_RDONLY|O_NONBLOCK);
+ if (fd < 0) {
+- log_error("unable to open '%s'\n", node);
++ log_error("unable to open '%s'", node);
+ rc = 1;
+ goto exit;
+ }
+@@ -501,7 +501,7 @@ int main(int argc, char *argv[])
+ } else {
+ /* If this fails, then try HDIO_GET_IDENTITY */
+ if (ioctl(fd, HDIO_GET_IDENTITY, &id) != 0) {
+- log_debug("HDIO_GET_IDENTITY failed for '%s': %m\n", node);
++ log_debug("HDIO_GET_IDENTITY failed for '%s': %m", node);
+ rc = 2;
+ goto close;
+ }
+diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c
+index 1ad0459..1fc0dfa 100644
+--- a/src/udev/cdrom_id/cdrom_id.c
++++ b/src/udev/cdrom_id/cdrom_id.c
+@@ -137,10 +137,10 @@ static bool is_mounted(const char *device)
+ static void info_scsi_cmd_err(struct udev *udev, const char *cmd, int err)
+ {
+ if (err == -1) {
+- log_debug("%s failed\n", cmd);
++ log_debug("%s failed", cmd);
+ return;
+ }
+- log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh\n", cmd, SK(err), ASC(err), ASCQ(err));
++ log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh", cmd, SK(err), ASC(err), ASCQ(err));
+ }
+
+ struct scsi_cmd {
+@@ -205,11 +205,11 @@ static int media_lock(struct udev *udev, int fd, bool lock)
+ /* disable the kernel's lock logic */
+ err = ioctl(fd, CDROM_CLEAR_OPTIONS, CDO_LOCK);
+ if (err < 0)
+- log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed\n");
++ log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed");
+
+ err = ioctl(fd, CDROM_LOCKDOOR, lock ? 1 : 0);
+ if (err < 0)
+- log_debug("CDROM_LOCKDOOR failed\n");
++ log_debug("CDROM_LOCKDOOR failed");
+
+ return err;
+ }
+@@ -237,7 +237,7 @@ static int cd_capability_compat(struct udev *udev, int fd)
+
+ capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL);
+ if (capability < 0) {
+- log_debug("CDROM_GET_CAPABILITY failed\n");
++ log_debug("CDROM_GET_CAPABILITY failed");
+ return -1;
+ }
+
+@@ -261,7 +261,7 @@ static int cd_capability_compat(struct udev *udev, int fd)
+ static int cd_media_compat(struct udev *udev, int fd)
+ {
+ if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) {
+- log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK\n");
++ log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK");
+ return -1;
+ }
+ cd_media = 1;
+@@ -285,11 +285,11 @@ static int cd_inquiry(struct udev *udev, int fd)
+ }
+
+ if ((inq[0] & 0x1F) != 5) {
+- log_debug("not an MMC unit\n");
++ log_debug("not an MMC unit");
+ return -1;
+ }
+
+- log_debug("INQUIRY: [%.8s][%.16s][%.4s]\n", inq + 8, inq + 16, inq + 32);
++ log_debug("INQUIRY: [%.8s][%.16s][%.4s]", inq + 8, inq + 16, inq + 32);
+ return 0;
+ }
+
+@@ -299,105 +299,105 @@ static void feature_profile_media(struct udev *udev, int cur_profile)
+ case 0x03:
+ case 0x04:
+ case 0x05:
+- log_debug("profile 0x%02x \n", cur_profile);
++ log_debug("profile 0x%02x ", cur_profile);
+ cd_media = 1;
+ cd_media_mo = 1;
+ break;
+ case 0x08:
+- log_debug("profile 0x%02x media_cd_rom\n", cur_profile);
++ log_debug("profile 0x%02x media_cd_rom", cur_profile);
+ cd_media = 1;
+ cd_media_cd_rom = 1;
+ break;
+ case 0x09:
+- log_debug("profile 0x%02x media_cd_r\n", cur_profile);
++ log_debug("profile 0x%02x media_cd_r", cur_profile);
+ cd_media = 1;
+ cd_media_cd_r = 1;
+ break;
+ case 0x0a:
+- log_debug("profile 0x%02x media_cd_rw\n", cur_profile);
++ log_debug("profile 0x%02x media_cd_rw", cur_profile);
+ cd_media = 1;
+ cd_media_cd_rw = 1;
+ break;
+ case 0x10:
+- log_debug("profile 0x%02x media_dvd_ro\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_ro", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_rom = 1;
+ break;
+ case 0x11:
+- log_debug("profile 0x%02x media_dvd_r\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_r", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_r = 1;
+ break;
+ case 0x12:
+- log_debug("profile 0x%02x media_dvd_ram\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_ram", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_ram = 1;
+ break;
+ case 0x13:
+- log_debug("profile 0x%02x media_dvd_rw_ro\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_rw_ro", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_rw = 1;
+ cd_media_dvd_rw_ro = 1;
+ break;
+ case 0x14:
+- log_debug("profile 0x%02x media_dvd_rw_seq\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_rw_seq", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_rw = 1;
+ cd_media_dvd_rw_seq = 1;
+ break;
+ case 0x1B:
+- log_debug("profile 0x%02x media_dvd_plus_r\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_plus_r", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_plus_r = 1;
+ break;
+ case 0x1A:
+- log_debug("profile 0x%02x media_dvd_plus_rw\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_plus_rw", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_plus_rw = 1;
+ break;
+ case 0x2A:
+- log_debug("profile 0x%02x media_dvd_plus_rw_dl\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_plus_rw_dl", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_plus_rw_dl = 1;
+ break;
+ case 0x2B:
+- log_debug("profile 0x%02x media_dvd_plus_r_dl\n", cur_profile);
++ log_debug("profile 0x%02x media_dvd_plus_r_dl", cur_profile);
+ cd_media = 1;
+ cd_media_dvd_plus_r_dl = 1;
+ break;
+ case 0x40:
+- log_debug("profile 0x%02x media_bd\n", cur_profile);
++ log_debug("profile 0x%02x media_bd", cur_profile);
+ cd_media = 1;
+ cd_media_bd = 1;
+ break;
+ case 0x41:
+ case 0x42:
+- log_debug("profile 0x%02x media_bd_r\n", cur_profile);
++ log_debug("profile 0x%02x media_bd_r", cur_profile);
+ cd_media = 1;
+ cd_media_bd_r = 1;
+ break;
+ case 0x43:
+- log_debug("profile 0x%02x media_bd_re\n", cur_profile);
++ log_debug("profile 0x%02x media_bd_re", cur_profile);
+ cd_media = 1;
+ cd_media_bd_re = 1;
+ break;
+ case 0x50:
+- log_debug("profile 0x%02x media_hddvd\n", cur_profile);
++ log_debug("profile 0x%02x media_hddvd", cur_profile);
+ cd_media = 1;
+ cd_media_hddvd = 1;
+ break;
+ case 0x51:
+- log_debug("profile 0x%02x media_hddvd_r\n", cur_profile);
++ log_debug("profile 0x%02x media_hddvd_r", cur_profile);
+ cd_media = 1;
+ cd_media_hddvd_r = 1;
+ break;
+ case 0x52:
+- log_debug("profile 0x%02x media_hddvd_rw\n", cur_profile);
++ log_debug("profile 0x%02x media_hddvd_rw", cur_profile);
+ cd_media = 1;
+ cd_media_hddvd_rw = 1;
+ break;
+ default:
+- log_debug("profile 0x%02x <ignored>\n", cur_profile);
++ log_debug("profile 0x%02x <ignored>", cur_profile);
+ break;
+ }
+ }
+@@ -414,77 +414,77 @@ static int feature_profiles(struct udev *udev, const unsigned char *profiles, si
+ case 0x03:
+ case 0x04:
+ case 0x05:
+- log_debug("profile 0x%02x mo\n", profile);
++ log_debug("profile 0x%02x mo", profile);
+ cd_mo = 1;
+ break;
+ case 0x08:
+- log_debug("profile 0x%02x cd_rom\n", profile);
++ log_debug("profile 0x%02x cd_rom", profile);
+ cd_cd_rom = 1;
+ break;
+ case 0x09:
+- log_debug("profile 0x%02x cd_r\n", profile);
++ log_debug("profile 0x%02x cd_r", profile);
+ cd_cd_r = 1;
+ break;
+ case 0x0A:
+- log_debug("profile 0x%02x cd_rw\n", profile);
++ log_debug("profile 0x%02x cd_rw", profile);
+ cd_cd_rw = 1;
+ break;
+ case 0x10:
+- log_debug("profile 0x%02x dvd_rom\n", profile);
++ log_debug("profile 0x%02x dvd_rom", profile);
+ cd_dvd_rom = 1;
+ break;
+ case 0x12:
+- log_debug("profile 0x%02x dvd_ram\n", profile);
++ log_debug("profile 0x%02x dvd_ram", profile);
+ cd_dvd_ram = 1;
+ break;
+ case 0x13:
+ case 0x14:
+- log_debug("profile 0x%02x dvd_rw\n", profile);
++ log_debug("profile 0x%02x dvd_rw", profile);
+ cd_dvd_rw = 1;
+ break;
+ case 0x1B:
+- log_debug("profile 0x%02x dvd_plus_r\n", profile);
++ log_debug("profile 0x%02x dvd_plus_r", profile);
+ cd_dvd_plus_r = 1;
+ break;
+ case 0x1A:
+- log_debug("profile 0x%02x dvd_plus_rw\n", profile);
++ log_debug("profile 0x%02x dvd_plus_rw", profile);
+ cd_dvd_plus_rw = 1;
+ break;
+ case 0x2A:
+- log_debug("profile 0x%02x dvd_plus_rw_dl\n", profile);
++ log_debug("profile 0x%02x dvd_plus_rw_dl", profile);
+ cd_dvd_plus_rw_dl = 1;
+ break;
+ case 0x2B:
+- log_debug("profile 0x%02x dvd_plus_r_dl\n", profile);
++ log_debug("profile 0x%02x dvd_plus_r_dl", profile);
+ cd_dvd_plus_r_dl = 1;
+ break;
+ case 0x40:
+ cd_bd = 1;
+- log_debug("profile 0x%02x bd\n", profile);
++ log_debug("profile 0x%02x bd", profile);
+ break;
+ case 0x41:
+ case 0x42:
+ cd_bd_r = 1;
+- log_debug("profile 0x%02x bd_r\n", profile);
++ log_debug("profile 0x%02x bd_r", profile);
+ break;
+ case 0x43:
+ cd_bd_re = 1;
+- log_debug("profile 0x%02x bd_re\n", profile);
++ log_debug("profile 0x%02x bd_re", profile);
+ break;
+ case 0x50:
+ cd_hddvd = 1;
+- log_debug("profile 0x%02x hddvd\n", profile);
++ log_debug("profile 0x%02x hddvd", profile);
+ break;
+ case 0x51:
+ cd_hddvd_r = 1;
+- log_debug("profile 0x%02x hddvd_r\n", profile);
++ log_debug("profile 0x%02x hddvd_r", profile);
+ break;
+ case 0x52:
+ cd_hddvd_rw = 1;
+- log_debug("profile 0x%02x hddvd_rw\n", profile);
++ log_debug("profile 0x%02x hddvd_rw", profile);
+ break;
+ default:
+- log_debug("profile 0x%02x <ignored>\n", profile);
++ log_debug("profile 0x%02x <ignored>", profile);
+ break;
+ }
+ }
+@@ -507,13 +507,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd)
+ if ((err != 0)) {
+ info_scsi_cmd_err(udev, "READ DISC INFORMATION", err);
+ if (cd_media == 1) {
+- log_debug("no current profile, but disc is present; assuming CD-ROM\n");
++ log_debug("no current profile, but disc is present; assuming CD-ROM");
+ cd_media_cd_rom = 1;
+ cd_media_track_count = 1;
+ cd_media_track_count_data = 1;
+ return 0;
+ } else {
+- log_debug("no current profile, assuming no media\n");
++ log_debug("no current profile, assuming no media");
+ return -1;
+ }
+ };
+@@ -522,13 +522,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd)
+
+ if (header[2] & 16) {
+ cd_media_cd_rw = 1;
+- log_debug("profile 0x0a media_cd_rw\n");
++ log_debug("profile 0x0a media_cd_rw");
+ } else if ((header[2] & 3) < 2 && cd_cd_r) {
+ cd_media_cd_r = 1;
+- log_debug("profile 0x09 media_cd_r\n");
++ log_debug("profile 0x09 media_cd_r");
+ } else {
+ cd_media_cd_rom = 1;
+- log_debug("profile 0x08 media_cd_rom\n");
++ log_debug("profile 0x08 media_cd_rom");
+ }
+ return 0;
+ }
+@@ -556,8 +556,8 @@ static int cd_profiles(struct udev *udev, int fd)
+ info_scsi_cmd_err(udev, "GET CONFIGURATION", err);
+ /* handle pre-MMC2 drives which do not support GET CONFIGURATION */
+ if (SK(err) == 0x5 && ASC(err) == 0x20) {
+- log_debug("drive is pre-MMC2 and does not support 46h get configuration command\n");
+- log_debug("trying to work around the problem\n");
++ log_debug("drive is pre-MMC2 and does not support 46h get configuration command");
++ log_debug("trying to work around the problem");
+ ret = cd_profiles_old_mmc(udev, fd);
+ }
+ goto out;
+@@ -565,18 +565,18 @@ static int cd_profiles(struct udev *udev, int fd)
+
+ cur_profile = features[6] << 8 | features[7];
+ if (cur_profile > 0) {
+- log_debug("current profile 0x%02x\n", cur_profile);
++ log_debug("current profile 0x%02x", cur_profile);
+ feature_profile_media (udev, cur_profile);
+ ret = 0; /* we have media */
+ } else {
+- log_debug("no current profile, assuming no media\n");
++ log_debug("no current profile, assuming no media");
+ }
+
+ len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3];
+- log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len);
++ log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len);
+
+ if (len > sizeof(features)) {
+- log_debug("can not get features in a single query, truncating\n");
++ log_debug("can not get features in a single query, truncating");
+ len = sizeof(features);
+ } else if (len <= 8) {
+ len = sizeof(features);
+@@ -596,10 +596,10 @@ static int cd_profiles(struct udev *udev, int fd)
+
+ /* parse the length once more, in case the drive decided to have other features suddenly :) */
+ len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3];
+- log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len);
++ log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len);
+
+ if (len > sizeof(features)) {
+- log_debug("can not get features in a single query, truncating\n");
++ log_debug("can not get features in a single query, truncating");
+ len = sizeof(features);
+ }
+
+@@ -611,11 +611,11 @@ static int cd_profiles(struct udev *udev, int fd)
+
+ switch (feature) {
+ case 0x00:
+- log_debug("GET CONFIGURATION: feature 'profiles', with %i entries\n", features[i+3] / 4);
++ log_debug("GET CONFIGURATION: feature 'profiles', with %i entries", features[i+3] / 4);
+ feature_profiles(udev, &features[i]+4, features[i+3]);
+ break;
+ default:
+- log_debug("GET CONFIGURATION: feature 0x%04x <ignored>, with 0x%02x bytes\n", feature, features[i+3]);
++ log_debug("GET CONFIGURATION: feature 0x%04x <ignored>, with 0x%02x bytes", feature, features[i+3]);
+ break;
+ }
+ }
+@@ -646,8 +646,8 @@ static int cd_media_info(struct udev *udev, int fd)
+ };
+
+ cd_media = 1;
+- log_debug("disk type %02x\n", header[8]);
+- log_debug("hardware reported media status: %s\n", media_status[header[2] & 3]);
++ log_debug("disk type %02x", header[8]);
++ log_debug("hardware reported media status: %s", media_status[header[2] & 3]);
+
+ /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */
+ if (!cd_media_cd_rom)
+@@ -685,7 +685,7 @@ static int cd_media_info(struct udev *udev, int fd)
+ }
+ if (dvdstruct[4] & 0x02) {
+ cd_media_state = media_status[2];
+- log_debug("write-protected DVD-RAM media inserted\n");
++ log_debug("write-protected DVD-RAM media inserted");
+ goto determined;
+ }
+
+@@ -702,13 +702,13 @@ static int cd_media_info(struct udev *udev, int fd)
+
+ len = format[3];
+ if (len & 7 || len < 16) {
+- log_debug("invalid format capacities length\n");
++ log_debug("invalid format capacities length");
+ return -1;
+ }
+
+ switch(format[8] & 3) {
+ case 1:
+- log_debug("unformatted DVD-RAM media inserted\n");
++ log_debug("unformatted DVD-RAM media inserted");
+ /* This means that last format was interrupted
+ * or failed, blank dvd-ram discs are factory
+ * formatted. Take no action here as it takes
+@@ -717,12 +717,12 @@ static int cd_media_info(struct udev *udev, int fd)
+ goto determined;
+
+ case 2:
+- log_debug("formatted DVD-RAM media inserted\n");
++ log_debug("formatted DVD-RAM media inserted");
+ break;
+
+ case 3:
+ cd_media = 0; //return no media
+- log_debug("format capacities returned no media\n");
++ log_debug("format capacities returned no media");
+ return -1;
+ }
+ }
+@@ -758,9 +758,9 @@ static int cd_media_info(struct udev *udev, int fd)
+
+ if (!result) {
+ cd_media_state = media_status[0];
+- log_debug("no data in blocks 0 or 16, assuming blank\n");
++ log_debug("no data in blocks 0 or 16, assuming blank");
+ } else {
+- log_debug("data in blocks 0 or 16, assuming complete\n");
++ log_debug("data in blocks 0 or 16, assuming complete");
+ }
+ }
+
+@@ -796,7 +796,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+ }
+
+ len = (header[0] << 8 | header[1]) + 2;
+- log_debug("READ TOC: len: %d, start track: %d, end track: %d\n", len, header[2], header[3]);
++ log_debug("READ TOC: len: %d, start track: %d, end track: %d", len, header[2], header[3]);
+ if (len > sizeof(toc))
+ return -1;
+ if (len < 2)
+@@ -830,7 +830,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+ is_data_track = (p[1] & 0x04) != 0;
+
+ block = p[4] << 24 | p[5] << 16 | p[6] << 8 | p[7];
+- log_debug("track=%u info=0x%x(%s) start_block=%u\n",
++ log_debug("track=%u info=0x%x(%s) start_block=%u",
+ p[2], p[1] & 0x0f, is_data_track ? "data":"audio", block);
+
+ if (is_data_track)
+@@ -850,7 +850,7 @@ static int cd_media_toc(struct udev *udev, int fd)
+ return -1;
+ }
+ len = header[4+4] << 24 | header[4+5] << 16 | header[4+6] << 8 | header[4+7];
+- log_debug("last track %u starts at block %u\n", header[4+2], len);
++ log_debug("last track %u starts at block %u", header[4+2], len);
+ cd_media_session_last_offset = (unsigned long long int)len * 2048;
+ return 0;
+ }
+@@ -919,7 +919,7 @@ int main(int argc, char *argv[])
+
+ node = argv[optind];
+ if (!node) {
+- log_error("no device\n");
++ log_error("no device");
+ fprintf(stderr, "no device\n");
+ rc = 1;
+ goto exit;
+@@ -937,12 +937,12 @@ int main(int argc, char *argv[])
+ nanosleep(&duration, NULL);
+ }
+ if (fd < 0) {
+- log_debug("unable to open '%s'\n", node);
++ log_debug("unable to open '%s'", node);
+ fprintf(stderr, "unable to open '%s'\n", node);
+ rc = 1;
+ goto exit;
+ }
+- log_debug("probing: '%s'\n", node);
++ log_debug("probing: '%s'", node);
+
+ /* same data as original cdrom_id */
+ if (cd_capability_compat(udev, fd) < 0) {
+@@ -973,19 +973,19 @@ int main(int argc, char *argv[])
+ work:
+ /* lock the media, so we enable eject button events */
+ if (lock && cd_media) {
+- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)\n");
++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)");
+ media_lock(udev, fd, true);
+ }
+
+ if (unlock && cd_media) {
+- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n");
++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)");
+ media_lock(udev, fd, false);
+ }
+
+ if (eject) {
+- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n");
++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)");
+ media_lock(udev, fd, false);
+- log_debug("START_STOP_UNIT (eject)\n");
++ log_debug("START_STOP_UNIT (eject)");
+ media_eject(udev, fd);
+ }
+
+diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
+index b48dccc..c806bd6 100644
+--- a/src/udev/udev-builtin-blkid.c
++++ b/src/udev/udev-builtin-blkid.c
+@@ -190,7 +190,7 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
+ if (err < 0)
+ goto out;
+
+- log_debug("probe %s %sraid offset=%llu\n",
++ log_debug("probe %s %sraid offset=%llu",
+ udev_device_get_devnode(dev),
+ noraid ? "no" : "", (unsigned long long) offset);
+
+diff --git a/src/udev/udev-builtin-firmware.c b/src/udev/udev-builtin-firmware.c
+index b80940b..8cfeed6 100644
+--- a/src/udev/udev-builtin-firmware.c
++++ b/src/udev/udev-builtin-firmware.c
+@@ -33,7 +33,7 @@ static bool set_loading(struct udev *udev, char *loadpath, const char *state)
+
+ ldfile = fopen(loadpath, "we");
+ if (ldfile == NULL) {
+- log_error("error: can not open '%s'\n", loadpath);
++ log_error("error: can not open '%s'", loadpath);
+ return false;
+ };
+ fprintf(ldfile, "%s\n", state);
+@@ -53,7 +53,7 @@ static bool copy_firmware(struct udev *udev, const char *source, const char *tar
+ return false;
+ }
+
+- log_debug("writing '%s' (%zi) to '%s'\n", source, size, target);
++ log_debug("writing '%s' (%zi) to '%s'", source, size, target);
+
+ fsource = fopen(source, "re");
+ if (fsource == NULL)
+@@ -90,7 +90,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+
+ firmware = udev_device_get_property_value(dev, "FIRMWARE");
+ if (firmware == NULL) {
+- log_error("firmware parameter missing\n\n");
++ log_error("firmware parameter missing");
+ rc = EXIT_FAILURE;
+ goto exit;
+ }
+@@ -112,7 +112,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+ strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL);
+
+ if (fwfile == NULL) {
+- log_debug("did not find firmware file '%s'\n", firmware);
++ log_debug("did not find firmware file '%s'", firmware);
+ rc = EXIT_FAILURE;
+ /*
+ * Do not cancel the request in the initrd, the real root might have
+@@ -136,7 +136,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo
+
+ strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL);
+ if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) {
+- log_error("error sending firmware '%s' to device\n", firmware);
++ log_error("error sending firmware '%s' to device", firmware);
+ set_loading(udev, loadpath, "-1");
+ rc = EXIT_FAILURE;
+ goto exit;
+diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
+index 445b602..4691fc0 100644
+--- a/src/udev/udev-builtin-input_id.c
++++ b/src/udev/udev-builtin-input_id.c
+@@ -57,7 +57,7 @@ static void get_cap_mask(struct udev_device *dev,
+ unsigned long val;
+
+ snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr));
+- log_debug("%s raw kernel attribute: %s\n", attr, text);
++ log_debug("%s raw kernel attribute: %s", attr, text);
+
+ memset (bitmask, 0, bitmask_size);
+ i = 0;
+@@ -66,7 +66,7 @@ static void get_cap_mask(struct udev_device *dev,
+ if (i < bitmask_size/sizeof(unsigned long))
+ bitmask[i] = val;
+ else
+- log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val);
++ log_debug("ignoring %s block %lX which is larger than maximum size", attr, val);
+ *word = '\0';
+ ++i;
+ }
+@@ -74,12 +74,12 @@ static void get_cap_mask(struct udev_device *dev,
+ if (i < bitmask_size / sizeof(unsigned long))
+ bitmask[i] = val;
+ else
+- log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val);
++ log_debug("ignoring %s block %lX which is larger than maximum size", attr, val);
+
+ if (test) {
+ /* printf pattern with the right unsigned long number of hex chars */
+ snprintf(text, sizeof(text), " bit %%4u: %%0%zilX\n", 2 * sizeof(unsigned long));
+- log_debug("%s decoded bit map:\n", attr);
++ log_debug("%s decoded bit map:", attr);
+ val = bitmask_size / sizeof (unsigned long);
+ /* skip over leading zeros */
+ while (bitmask[val-1] == 0 && val > 0)
+@@ -151,7 +151,7 @@ static void test_key (struct udev_device *dev,
+
+ /* do we have any KEY_* capability? */
+ if (!test_bit (EV_KEY, bitmask_ev)) {
+- log_debug("test_key: no EV_KEY capability\n");
++ log_debug("test_key: no EV_KEY capability");
+ return;
+ }
+
+@@ -159,13 +159,13 @@ static void test_key (struct udev_device *dev,
+ found = 0;
+ for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) {
+ found |= bitmask_key[i];
+- log_debug("test_key: checking bit block %lu for any keys; found=%i\n", (unsigned long)i*BITS_PER_LONG, found > 0);
++ log_debug("test_key: checking bit block %lu for any keys; found=%i", (unsigned long)i*BITS_PER_LONG, found > 0);
+ }
+ /* If there are no keys in the lower block, check the higher block */
+ if (!found) {
+ for (i = KEY_OK; i < BTN_TRIGGER_HAPPY; ++i) {
+ if (test_bit (i, bitmask_key)) {
+- log_debug("test_key: Found key %x in high block\n", i);
++ log_debug("test_key: Found key %x in high block", i);
+ found = 1;
+ break;
+ }
+diff --git a/src/udev/udev-builtin-kmod.c b/src/udev/udev-builtin-kmod.c
+index fc28121..097f881 100644
+--- a/src/udev/udev-builtin-kmod.c
++++ b/src/udev/udev-builtin-kmod.c
+@@ -44,18 +44,18 @@ static int load_module(struct udev *udev, const char *alias)
+ return err;
+
+ if (list == NULL)
+- log_debug("no module matches '%s'\n", alias);
++ log_debug("no module matches '%s'", alias);
+
+ kmod_list_foreach(l, list) {
+ struct kmod_module *mod = kmod_module_get_module(l);
+
+ err = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, NULL, NULL, NULL, NULL);
+ if (err == KMOD_PROBE_APPLY_BLACKLIST)
+- log_debug("module '%s' is blacklisted\n", kmod_module_get_name(mod));
++ log_debug("module '%s' is blacklisted", kmod_module_get_name(mod));
+ else if (err == 0)
+- log_debug("inserted '%s'\n", kmod_module_get_name(mod));
++ log_debug("inserted '%s'", kmod_module_get_name(mod));
+ else
+- log_debug("failed to insert '%s'\n", kmod_module_get_name(mod));
++ log_debug("failed to insert '%s'", kmod_module_get_name(mod));
+
+ kmod_module_unref(mod);
+ }
+@@ -79,12 +79,12 @@ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool te
+ return 0;
+
+ if (argc < 3 || !streq(argv[1], "load")) {
+- log_error("expect: %s load <module>\n", argv[0]);
++ log_error("expect: %s load <module>", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ for (i = 2; argv[i]; i++) {
+- log_debug("execute '%s' '%s'\n", argv[1], argv[i]);
++ log_debug("execute '%s' '%s'", argv[1], argv[i]);
+ load_module(udev, argv[i]);
+ }
+
+@@ -101,7 +101,7 @@ static int builtin_kmod_init(struct udev *udev)
+ if (!ctx)
+ return -ENOMEM;
+
+- log_debug("load module index\n");
++ log_debug("load module index");
+ kmod_set_log_fn(ctx, udev_kmod_log, udev);
+ kmod_load_resources(ctx);
+ return 0;
+@@ -110,14 +110,14 @@ static int builtin_kmod_init(struct udev *udev)
+ /* called on udev shutdown and reload request */
+ static void builtin_kmod_exit(struct udev *udev)
+ {
+- log_debug("unload module index\n");
++ log_debug("unload module index");
+ ctx = kmod_unref(ctx);
+ }
+
+ /* called every couple of seconds during event activity; 'true' if config has changed */
+ static bool builtin_kmod_validate(struct udev *udev)
+ {
+- log_debug("validate module index\n");
++ log_debug("validate module index");
+ if (!ctx)
+ return false;
+ return (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK);
+diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c
+index 3e2f43e..1b9f824 100644
+--- a/src/udev/udev-builtin-usb_id.c
++++ b/src/udev/udev-builtin-usb_id.c
+@@ -275,7 +275,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ /* usb interface directory */
+ dev_interface = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface");
+ if (dev_interface == NULL) {
+- log_debug("unable to access usb_interface device of '%s'\n",
++ log_debug("unable to access usb_interface device of '%s'",
+ udev_device_get_syspath(dev));
+ return EXIT_FAILURE;
+ }
+@@ -285,7 +285,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+
+ if_class = udev_device_get_sysattr_value(dev_interface, "bInterfaceClass");
+ if (!if_class) {
+- log_debug("%s: cannot get bInterfaceClass attribute\n",
++ log_debug("%s: cannot get bInterfaceClass attribute",
+ udev_device_get_sysname(dev));
+ return EXIT_FAILURE;
+ }
+@@ -300,13 +300,13 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ set_usb_iftype(type_str, if_class_num, sizeof(type_str)-1);
+ }
+
+- log_debug("%s: if_class %d protocol %d\n",
++ log_debug("%s: if_class %d protocol %d",
+ udev_device_get_syspath(dev_interface), if_class_num, protocol);
+
+ /* usb device directory */
+ dev_usb = udev_device_get_parent_with_subsystem_devtype(dev_interface, "usb", "usb_device");
+ if (!dev_usb) {
+- log_debug("unable to find parent 'usb' device of '%s'\n",
++ log_debug("unable to find parent 'usb' device of '%s'",
+ udev_device_get_syspath(dev));
+ return EXIT_FAILURE;
+ }
+@@ -323,19 +323,19 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+ /* get scsi device */
+ dev_scsi = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device");
+ if (dev_scsi == NULL) {
+- log_debug("unable to find parent 'scsi' device of '%s'\n",
++ log_debug("unable to find parent 'scsi' device of '%s'",
+ udev_device_get_syspath(dev));
+ goto fallback;
+ }
+ if (sscanf(udev_device_get_sysname(dev_scsi), "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) {
+- log_debug("invalid scsi device '%s'\n", udev_device_get_sysname(dev_scsi));
++ log_debug("invalid scsi device '%s'", udev_device_get_sysname(dev_scsi));
+ goto fallback;
+ }
+
+ /* Generic SPC-2 device */
+ scsi_vendor = udev_device_get_sysattr_value(dev_scsi, "vendor");
+ if (!scsi_vendor) {
+- log_debug("%s: cannot get SCSI vendor attribute\n",
++ log_debug("%s: cannot get SCSI vendor attribute",
+ udev_device_get_sysname(dev_scsi));
+ goto fallback;
+ }
+@@ -345,7 +345,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+
+ scsi_model = udev_device_get_sysattr_value(dev_scsi, "model");
+ if (!scsi_model) {
+- log_debug("%s: cannot get SCSI model attribute\n",
++ log_debug("%s: cannot get SCSI model attribute",
+ udev_device_get_sysname(dev_scsi));
+ goto fallback;
+ }
+@@ -355,7 +355,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+
+ scsi_type = udev_device_get_sysattr_value(dev_scsi, "type");
+ if (!scsi_type) {
+- log_debug("%s: cannot get SCSI type attribute\n",
++ log_debug("%s: cannot get SCSI type attribute",
+ udev_device_get_sysname(dev_scsi));
+ goto fallback;
+ }
+@@ -363,7 +363,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool
+
+ scsi_rev = udev_device_get_sysattr_value(dev_scsi, "rev");
+ if (!scsi_rev) {
+- log_debug("%s: cannot get SCSI revision attribute\n",
++ log_debug("%s: cannot get SCSI revision attribute",
+ udev_device_get_sysname(dev_scsi));
+ goto fallback;
+ }
+@@ -389,7 +389,7 @@ fallback:
+ if (!usb_vendor)
+ usb_vendor = vendor_id;
+ if (!usb_vendor) {
+- log_debug("No USB vendor information available\n");
++ log_debug("No USB vendor information available");
+ return EXIT_FAILURE;
+ }
+ udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc));
+diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
+index e60da90..1898685 100644
+--- a/src/udev/udev-ctrl.c
++++ b/src/udev/udev-ctrl.c
+@@ -84,7 +84,7 @@ struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd)
+ if (fd < 0) {
+ uctrl->sock = socket(AF_LOCAL, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0);
+ if (uctrl->sock < 0) {
+- log_error("error getting socket: %m\n");
++ log_error("error getting socket: %m");
+ udev_ctrl_unref(uctrl);
+ return NULL;
+ }
+@@ -118,14 +118,14 @@ int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl)
+
+ if (err < 0) {
+ err = -errno;
+- log_error("bind failed: %m\n");
++ log_error("bind failed: %m");
+ return err;
+ }
+
+ err = listen(uctrl->sock, 0);
+ if (err < 0) {
+ err = -errno;
+- log_error("listen failed: %m\n");
++ log_error("listen failed: %m");
+ return err;
+ }
+
+@@ -193,7 +193,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl)
+ conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
+ if (conn->sock < 0) {
+ if (errno != EINTR)
+- log_error("unable to receive ctrl connection: %m\n");
++ log_error("unable to receive ctrl connection: %m");
+ goto err;
+ }
+
+@@ -204,7 +204,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl)
+ goto err;
+ }
+ if (ucred.uid > 0) {
+- log_error("sender uid=%i, message ignored\n", ucred.uid);
++ log_error("sender uid=%i, message ignored", ucred.uid);
+ goto err;
+ }
+
+@@ -367,11 +367,11 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn)
+ continue;
+ goto err;
+ } else if (r == 0) {
+- log_error("timeout waiting for ctrl message\n");
++ log_error("timeout waiting for ctrl message");
+ goto err;
+ } else {
+ if (!(pfd[0].revents & POLLIN)) {
+- log_error("ctrl connection error: %m\n");
++ log_error("ctrl connection error: %m");
+ goto err;
+ }
+ }
+@@ -388,24 +388,24 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn)
+ smsg.msg_controllen = sizeof(cred_msg);
+ size = recvmsg(conn->sock, &smsg, 0);
+ if (size < 0) {
+- log_error("unable to receive ctrl message: %m\n");
++ log_error("unable to receive ctrl message: %m");
+ goto err;
+ }
+ cmsg = CMSG_FIRSTHDR(&smsg);
+ cred = (struct ucred *) CMSG_DATA(cmsg);
+
+ if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
+- log_error("no sender credentials received, message ignored\n");
++ log_error("no sender credentials received, message ignored");
+ goto err;
+ }
+
+ if (cred->uid != 0) {
+- log_error("sender uid=%i, message ignored\n", cred->uid);
++ log_error("sender uid=%i, message ignored", cred->uid);
+ goto err;
+ }
+
+ if (uctrl_msg->ctrl_msg_wire.magic != UDEV_CTRL_MAGIC) {
+- log_error("message magic 0x%08x doesn't match, ignore it\n", uctrl_msg->ctrl_msg_wire.magic);
++ log_error("message magic 0x%08x doesn't match, ignore it", uctrl_msg->ctrl_msg_wire.magic);
+ goto err;
+ }
+
+diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
+index 1148a15..ca3d781 100644
+--- a/src/udev/udev-node.c
++++ b/src/udev/udev-node.c
+@@ -65,7 +65,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+ /* preserve link with correct target, do not replace node of other device */
+ if (lstat(slink, &stats) == 0) {
+ if (S_ISBLK(stats.st_mode) || S_ISCHR(stats.st_mode)) {
+- log_error("conflicting device node '%s' found, link to '%s' will not be created\n", slink, node);
++ log_error("conflicting device node '%s' found, link to '%s' will not be created", slink, node);
+ goto exit;
+ } else if (S_ISLNK(stats.st_mode)) {
+ char buf[UTIL_PATH_SIZE];
+@@ -75,7 +75,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+ if (len > 0 && len < (int)sizeof(buf)) {
+ buf[len] = '\0';
+ if (streq(target, buf)) {
+- log_debug("preserve already existing symlink '%s' to '%s'\n", slink, target);
++ log_debug("preserve already existing symlink '%s' to '%s'", slink, target);
+ label_fix(slink, true, false);
+ utimensat(AT_FDCWD, slink, NULL, AT_SYMLINK_NOFOLLOW);
+ goto exit;
+@@ -83,7 +83,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+ }
+ }
+ } else {
+- log_debug("creating symlink '%s' to '%s'\n", slink, target);
++ log_debug("creating symlink '%s' to '%s'", slink, target);
+ do {
+ err = mkdir_parents_label(slink, 0755);
+ if (err != 0 && err != -ENOENT)
+@@ -98,7 +98,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+ goto exit;
+ }
+
+- log_debug("atomically replace '%s'\n", slink);
++ log_debug("atomically replace '%s'", slink);
+ strscpyl(slink_tmp, sizeof(slink_tmp), slink, ".tmp-", udev_device_get_id_filename(dev), NULL);
+ unlink(slink_tmp);
+ do {
+@@ -112,12 +112,12 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
+ label_context_clear();
+ } while (err == -ENOENT);
+ if (err != 0) {
+- log_error("symlink '%s' '%s' failed: %m\n", target, slink_tmp);
++ log_error("symlink '%s' '%s' failed: %m", target, slink_tmp);
+ goto exit;
+ }
+ err = rename(slink_tmp, slink);
+ if (err != 0) {
+- log_error("rename '%s' '%s' failed: %m\n", slink_tmp, slink);
++ log_error("rename '%s' '%s' failed: %m", slink_tmp, slink);
+ unlink(slink_tmp);
+ }
+ exit:
+@@ -151,7 +151,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
+ if (dent->d_name[0] == '.')
+ continue;
+
+- log_debug("found '%s' claiming '%s'\n", dent->d_name, stackdir);
++ log_debug("found '%s' claiming '%s'", dent->d_name, stackdir);
+
+ /* did we find ourself? */
+ if (streq(dent->d_name, udev_device_get_id_filename(dev)))
+@@ -164,7 +164,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
+ devnode = udev_device_get_devnode(dev_db);
+ if (devnode != NULL) {
+ if (target == NULL || udev_device_get_devlink_priority(dev_db) > priority) {
+- log_debug("'%s' claims priority %i for '%s'\n",
++ log_debug("'%s' claims priority %i for '%s'",
+ udev_device_get_syspath(dev_db), udev_device_get_devlink_priority(dev_db), stackdir);
+ priority = udev_device_get_devlink_priority(dev_db);
+ strscpy(buf, bufsize, devnode);
+@@ -197,11 +197,11 @@ static void link_update(struct udev_device *dev, const char *slink, bool add)
+
+ target = link_find_prioritized(dev, add, dirname, buf, sizeof(buf));
+ if (target == NULL) {
+- log_debug("no reference left, remove '%s'\n", slink);
++ log_debug("no reference left, remove '%s'", slink);
+ if (unlink(slink) == 0)
+ util_delete_path(udev, slink);
+ } else {
+- log_debug("creating link '%s' to '%s'\n", slink, target);
++ log_debug("creating link '%s' to '%s'", slink, target);
+ node_symlink(dev, target, slink);
+ }
+
+@@ -246,7 +246,7 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
+ if (found)
+ continue;
+
+- log_debug("update old name, '%s' no longer belonging to '%s'\n",
++ log_debug("update old name, '%s' no longer belonging to '%s'",
+ name, udev_device_get_devpath(dev));
+ link_update(dev, name, false);
+ }
+@@ -266,24 +266,24 @@ static int node_permissions_apply(struct udev_device *dev, bool apply, mode_t mo
+
+ if (lstat(devnode, &stats) != 0) {
+ err = -errno;
+- log_debug("can not stat() node '%s' (%m)\n", devnode);
++ log_debug("can not stat() node '%s' (%m)", devnode);
+ goto out;
+ }
+
+ if (((stats.st_mode & S_IFMT) != (mode & S_IFMT)) || (stats.st_rdev != devnum)) {
+ err = -EEXIST;
+- log_debug("found node '%s' with non-matching devnum %s, skip handling\n",
++ log_debug("found node '%s' with non-matching devnum %s, skip handling",
+ udev_device_get_devnode(dev), udev_device_get_id_filename(dev));
+ goto out;
+ }
+
+ if (apply) {
+ if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
+- log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++ log_debug("set permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
+ chmod(devnode, mode);
+ chown(devnode, uid, gid);
+ } else {
+- log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++ log_debug("preserve permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
+ }
+ label_fix(devnode, true, false);
+ }
+@@ -299,7 +299,7 @@ void udev_node_add(struct udev_device *dev, bool apply, mode_t mode, uid_t uid,
+ char filename[UTIL_PATH_SIZE];
+ struct udev_list_entry *list_entry;
+
+- log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d\n",
++ log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d",
+ udev_device_get_devnode(dev), udev_device_get_id_filename(dev), mode, uid, gid);
+
+ if (node_permissions_apply(dev, apply, mode, uid, gid) < 0)
+diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c
+index 9b694c6..cbe0c37 100644
+--- a/src/udev/udev-watch.c
++++ b/src/udev/udev-watch.c
+@@ -40,7 +40,7 @@ int udev_watch_init(struct udev *udev)
+ {
+ inotify_fd = inotify_init1(IN_CLOEXEC);
+ if (inotify_fd < 0)
+- log_error("inotify_init failed: %m\n");
++ log_error("inotify_init failed: %m");
+ return inotify_fd;
+ }
+
+@@ -79,7 +79,7 @@ void udev_watch_restore(struct udev *udev)
+ if (dev == NULL)
+ goto unlink;
+
+- log_debug("restoring old watch on '%s'\n", udev_device_get_devnode(dev));
++ log_debug("restoring old watch on '%s'", udev_device_get_devnode(dev));
+ udev_watch_begin(udev, dev);
+ udev_device_unref(dev);
+ unlink:
+@@ -103,10 +103,10 @@ void udev_watch_begin(struct udev *udev, struct udev_device *dev)
+ if (inotify_fd < 0)
+ return;
+
+- log_debug("adding watch on '%s'\n", udev_device_get_devnode(dev));
++ log_debug("adding watch on '%s'", udev_device_get_devnode(dev));
+ wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
+ if (wd < 0) {
+- log_error("inotify_add_watch(%d, %s, %o) failed: %m\n",
++ log_error("inotify_add_watch(%d, %s, %o) failed: %m",
+ inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE);
+ return;
+ }
+@@ -133,7 +133,7 @@ void udev_watch_end(struct udev *udev, struct udev_device *dev)
+ if (wd < 0)
+ return;
+
+- log_debug("removing watch on '%s'\n", udev_device_get_devnode(dev));
++ log_debug("removing watch on '%s'", udev_device_get_devnode(dev));
+ inotify_rm_watch(inotify_fd, wd);
+
+ snprintf(filename, sizeof(filename), "/run/udev/watch/%d", wd);
+diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
+index d9dc73b..fe56758 100644
+--- a/src/udev/udevadm-hwdb.c
++++ b/src/udev/udevadm-hwdb.c
+@@ -389,17 +389,17 @@ static int trie_store(struct trie *trie, const char *filename) {
+ goto out;
+ }
+
+- log_debug("=== trie on-disk ===\n");
+- log_debug("size: %8llu bytes\n", (unsigned long long)size);
+- log_debug("header: %8zu bytes\n", sizeof(struct trie_header_f));
+- log_debug("nodes: %8llu bytes (%8llu)\n",
++ log_debug("=== trie on-disk ===");
++ log_debug("size: %8llu bytes", (unsigned long long)size);
++ log_debug("header: %8zu bytes", sizeof(struct trie_header_f));
++ log_debug("nodes: %8llu bytes (%8llu)",
+ (unsigned long long)t.nodes_count * sizeof(struct trie_node_f), (unsigned long long)t.nodes_count);
+- log_debug("child pointers: %8llu bytes (%8llu)\n",
++ log_debug("child pointers: %8llu bytes (%8llu)",
+ (unsigned long long)t.children_count * sizeof(struct trie_child_entry_f), (unsigned long long)t.children_count);
+- log_debug("value pointers: %8llu bytes (%8llu)\n",
++ log_debug("value pointers: %8llu bytes (%8llu)",
+ (unsigned long long)t.values_count * sizeof(struct trie_value_entry_f), (unsigned long long)t.values_count);
+- log_debug("string store: %8llu bytes\n", (unsigned long long)trie->strings->len);
+- log_debug("strings start: %8llu\n", (unsigned long long) t.strings_off);
++ log_debug("string store: %8llu bytes", (unsigned long long)trie->strings->len);
++ log_debug("strings start: %8llu", (unsigned long long) t.strings_off);
+ out:
+ free(filename_tmp);
+ return err;
+@@ -412,7 +412,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
+
+ value = strchr(line, '=');
+ if (!value) {
+- log_error("Error, key/value pair expected but got '%s' in '%s':\n", line, filename);
++ log_error("Error, key/value pair expected but got '%s' in '%s':", line, filename);
+ return -EINVAL;
+ }
+
+@@ -420,7 +420,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
+ value++;
+
+ if (line[0] == '\0' || value[0] == '\0') {
+- log_error("Error, empty key or value '%s' in '%s':\n", line, filename);
++ log_error("Error, empty key or value '%s' in '%s':", line, filename);
+ return -EINVAL;
+ }
+
+@@ -471,7 +471,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+ break;
+
+ if (line[0] == ' ') {
+- log_error("Error, MATCH expected but got '%s' in '%s':\n", line, filename);
++ log_error("Error, MATCH expected but got '%s' in '%s':", line, filename);
+ break;
+ }
+
+@@ -482,7 +482,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+
+ case HW_MATCH:
+ if (len == 0) {
+- log_error("Error, DATA expected but got empty line in '%s':\n", filename);
++ log_error("Error, DATA expected but got empty line in '%s':", filename);
+ state = HW_NONE;
+ udev_list_cleanup(&match_list);
+ break;
+@@ -508,7 +508,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
+ }
+
+ if (line[0] != ' ') {
+- log_error("Error, DATA expected but got '%s' in '%s':\n", line, filename);
++ log_error("Error, DATA expected but got '%s' in '%s':", line, filename);
+ state = HW_NONE;
+ udev_list_cleanup(&match_list);
+ break;
+@@ -602,7 +602,7 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
+
+ err = conf_files_list_strv(&files, ".hwdb", root, conf_file_dirs);
+ if (err < 0) {
+- log_error("failed to enumerate hwdb files: %s\n", strerror(-err));
++ log_error("failed to enumerate hwdb files: %s", strerror(-err));
+ rc = EXIT_FAILURE;
+ goto out;
+ }
+@@ -614,18 +614,18 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
+
+ strbuf_complete(trie->strings);
+
+- log_debug("=== trie in-memory ===\n");
+- log_debug("nodes: %8zu bytes (%8zu)\n",
++ log_debug("=== trie in-memory ===");
++ log_debug("nodes: %8zu bytes (%8zu)",
+ trie->nodes_count * sizeof(struct trie_node), trie->nodes_count);
+- log_debug("children arrays: %8zu bytes (%8zu)\n",
++ log_debug("children arrays: %8zu bytes (%8zu)",
+ trie->children_count * sizeof(struct trie_child_entry), trie->children_count);
+- log_debug("values arrays: %8zu bytes (%8zu)\n",
++ log_debug("values arrays: %8zu bytes (%8zu)",
+ trie->values_count * sizeof(struct trie_value_entry), trie->values_count);
+- log_debug("strings: %8zu bytes\n",
++ log_debug("strings: %8zu bytes",
+ trie->strings->len);
+- log_debug("strings incoming: %8zu bytes (%8zu)\n",
++ log_debug("strings incoming: %8zu bytes (%8zu)",
+ trie->strings->in_len, trie->strings->in_count);
+- log_debug("strings dedup'ed: %8zu bytes (%8zu)\n",
++ log_debug("strings dedup'ed: %8zu bytes (%8zu)",
+ trie->strings->dedup_len, trie->strings->dedup_count);
+
+ if (asprintf(&hwdb_bin, "%s/etc/udev/hwdb.bin", root) < 0) {
+diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
+index c4fc4ee..a131e3f 100644
+--- a/src/udev/udevadm-settle.c
++++ b/src/udev/udevadm-settle.c
+@@ -113,20 +113,20 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+ end = udev_queue_get_kernel_seqnum(udev_queue);
+
+ if (start > end) {
+- log_error("seq-start larger than seq-end, ignoring\n");
++ log_error("seq-start larger than seq-end, ignoring");
+ start = 0;
+ end = 0;
+ }
+
+ if (start > kernel_seq || end > kernel_seq) {
+- log_error("seq-start or seq-end larger than current kernel value, ignoring\n");
++ log_error("seq-start or seq-end larger than current kernel value, ignoring");
+ start = 0;
+ end = 0;
+ }
+- log_debug("start=%llu end=%llu current=%llu\n", (unsigned long long)start, (unsigned long long)end, kernel_seq);
++ log_debug("start=%llu end=%llu current=%llu", (unsigned long long)start, (unsigned long long)end, kernel_seq);
+ } else {
+ if (end > 0) {
+- log_error("seq-end needs seq-start parameter, ignoring\n");
++ log_error("seq-end needs seq-start parameter, ignoring");
+ end = 0;
+ }
+ }
+@@ -138,7 +138,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+ uctrl = udev_ctrl_new(udev);
+ if (uctrl != NULL) {
+ if (udev_ctrl_send_ping(uctrl, timeout) < 0) {
+- log_debug("no connection to daemon\n");
++ log_debug("no connection to daemon");
+ udev_ctrl_unref(uctrl);
+ rc = EXIT_SUCCESS;
+ goto out;
+@@ -150,10 +150,10 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+ pfd[0].events = POLLIN;
+ pfd[0].fd = inotify_init1(IN_CLOEXEC);
+ if (pfd[0].fd < 0) {
+- log_error("inotify_init failed: %m\n");
++ log_error("inotify_init failed: %m");
+ } else {
+ if (inotify_add_watch(pfd[0].fd, "/run/udev" , IN_MOVED_TO) < 0) {
+- log_error("watching /run/udev failed\n");
++ log_error("watching /run/udev failed");
+ close(pfd[0].fd);
+ pfd[0].fd = -1;
+ }
+@@ -206,7 +206,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[])
+ struct udev_list_entry *list_entry;
+
+ if (!quiet && udev_queue_get_queued_list_entry(udev_queue) != NULL) {
+- log_debug("timeout waiting for udev queue\n");
++ log_debug("timeout waiting for udev queue");
+ printf("\nudevadm settle - timeout of %i seconds reached, the event queue contains:\n", timeout);
+ udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue))
+ printf(" %s (%s)\n",
+diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
+index df1409b..3aa3274 100644
+--- a/src/udev/udevadm-test.c
++++ b/src/udev/udevadm-test.c
+@@ -52,7 +52,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[])
+ {}
+ };
+
+- log_debug("version %s\n", VERSION);
++ log_debug("version %s", VERSION);
+
+ for (;;) {
+ int option;
+@@ -74,7 +74,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[])
+ resolve_names = -1;
+ } else {
+ fprintf(stderr, "resolve-names must be early, late or never\n");
+- log_error("resolve-names must be early, late or never\n");
++ log_error("resolve-names must be early, late or never");
+ exit(EXIT_FAILURE);
+ }
+ break;
+diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
+index e14b3ca..dbca369 100644
+--- a/src/udev/udevadm.c
++++ b/src/udev/udevadm.c
+@@ -79,7 +79,7 @@ static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int arg
+ {
+ if (cmd->debug)
+ log_set_max_level(LOG_DEBUG);
+- log_debug("calling: %s\n", cmd->name);
++ log_debug("calling: %s", cmd->name);
+ return cmd->cmd(udev, argc, argv);
+ }
+
diff --git a/0196-man-units-tmpfiles.d-5-cleanup.patch b/0196-man-units-tmpfiles.d-5-cleanup.patch
new file mode 100644
index 0000000..fd8eb7b
--- /dev/null
+++ b/0196-man-units-tmpfiles.d-5-cleanup.patch
@@ -0,0 +1,401 @@
+From 6972095a2b6eb919b622a89d11e0dc823ed60efb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 24 Dec 2013 10:21:45 -0500
+Subject: [PATCH] man,units: tmpfiles.d(5) cleanup
+
+Condition for /lib (necessary for split /usr) was missing from the unit.
+
+Some changes which were done in tmpfiles.d(5) were not carried over to
+systemd-tmpfiles(1).
+
+Also use markup where possible.
+
+Conflicts:
+ man/tmpfiles.d.xml
+---
+ man/systemd-tmpfiles.xml | 53 ++++++----
+ man/tmpfiles.d.xml | 168 +++++++++++++++++++-------------
+ units/systemd-tmpfiles-setup.service.in | 1 +
+ 3 files changed, 134 insertions(+), 88 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index ba727e1..91c0372 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -54,7 +54,9 @@
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+- <command>systemd-tmpfiles <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">CONFIGURATION FILE</arg></command>
++ <command>systemd-tmpfiles</command>
++ <arg choice="opt" rep="repeat">OPTIONS</arg>
++ <arg choice="opt" rep="repeat"><replaceable>CONFIGFILE</replaceable></arg>
+ </cmdsynopsis>
+
+ <para><filename>systemd-tmpfiles-setup.service</filename></para>
+@@ -67,22 +69,20 @@
+ <title>Description</title>
+
+ <para><command>systemd-tmpfiles</command> creates,
+- deletes and cleans up volatile and temporary files and
++ deletes, and cleans up volatile and temporary files and
+ directories, based on the configuration file format and
+- location specified in <citerefentry>
+- <refentrytitle>tmpfiles.d</refentrytitle>
+- <manvolnum>5</manvolnum>
+- </citerefentry>.</para>
++ location specified in
++ <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++ </para>
+
+ <para>If invoked with no arguments, it applies all
+ directives from all configuration files. If one or
+ more filenames are passed on the command line, only
+ the directives in these files are applied. If only
+ the basename of a configuration file is specified,
+- all configuration directories as specified in <citerefentry>
+- <refentrytitle>tmpfiles.d</refentrytitle>
+- <manvolnum>5</manvolnum>
+- </citerefentry> are searched for a matching file.</para>
++ all configuration directories as specified in
++ <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++ are searched for a matching file.</para>
+ </refsect1>
+
+ <refsect1>
+@@ -94,12 +94,25 @@
+
+ <varlistentry>
+ <term><option>--create</option></term>
+- <listitem><para>If this option is passed, all
+- files and directories marked with f,
+- F, d, D in the configuration files are
+- created. Files and directories marked with z,
+- Z have their ownership, access mode and security
+- labels set.</para></listitem>
++ <listitem><para>If this option is
++ passed, all files and directories
++ marked with <varname>f</varname>,
++ <varname>F</varname>,
++ <varname>w</varname>,
++ <varname>d</varname>,
++ <varname>D</varname>,
++ <varname>p</varname>,
++ <varname>L</varname>,
++ <varname>c</varname>,
++ <varname>b</varname>,
++ <varname>m</varname> in the
++ configuration files are created or
++ written to. Files and directories
++ marked with <varname>z</varname>,
++ <varname>Z</varname>,
++ <varname>m</varname> have their
++ ownership, access mode and security
++ labels set. </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -113,9 +126,11 @@
+ <varlistentry>
+ <term><option>--remove</option></term>
+ <listitem><para>If this option is
+- passed, all files and directories marked
+- with r, R in the configuration files
+- are removed.</para></listitem>
++ passed, all files and directories
++ marked with <varname>r</varname>,
++ <varname>R</varname> in the
++ configuration files are
++ removed.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--prefix=PATH</option></term>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index e8b630d..a00637b 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -67,23 +67,32 @@
+ <title>Configuration Format</title>
+
+ <para>Each configuration file shall be named in the
+- style of <filename><package>.conf</filename>.
+- Files in <filename>/etc/</filename> override files
+- with the same name in <filename>/usr/lib/</filename>
+- and <filename>/run/</filename>. Files in
+- <filename>/run/</filename> override files with the same
+- name in <filename>/usr/lib/</filename>. Packages
++ style of
++ <filename><replaceable>package</replaceable>.conf</filename>
++ or
++ <filename><replaceable>package</replaceable>-<replaceable>part</replaceable>.conf</filename>.
++ The second variant should be used when it is desirable
++ to make it easy to override just this part of
++ configuration.</para>
++
++ <para>Files in <filename>/etc/tmpfiles.d</filename>
++ override files with the same name in
++ <filename>/usr/lib/tmpfiles.d</filename> and
++ <filename>/run/tmpfiles.d</filename>. Files in
++ <filename>/run/tmpfiles.d</filename> override files
++ with the same name in
++ <filename>/usr/lib/tmpfiles.d</filename>. Packages
+ should install their configuration files in
+- <filename>/usr/lib/</filename>. Files in
+- <filename>/etc/</filename> are reserved for the local
+- administrator, who may use this logic to override the
+- configuration files installed by vendor packages. All
+- configuration files are sorted by their filename in
+- lexicographic order, regardless in which of the
+- directories they reside. If multiple files specify the
+- same path, the entry in the file with the lexicographically
+- earliest name will be applied, all all other conflicting
+- entries logged as errors.</para>
++ <filename>/usr/lib/tmpfiles.d</filename>. Files in
++ <filename>/etc/tmpfiles.d</filename> are reserved for
++ the local administrator, who may use this logic to
++ override the configuration files installed by vendor
++ packages. All configuration files are sorted by their
++ filename in lexicographic order, regardless in which
++ of the directories they reside. If multiple files
++ specify the same path, the entry in the file with the
++ lexicographically earliest name will be applied, all
++ all other conflicting entries logged as errors.</para>
+
+ <para>If the administrator wants to disable a
+ configuration file supplied by the vendor, the
+@@ -93,10 +102,10 @@
+ same filename.</para>
+
+ <para>The configuration format is one line per path
+- containing action, path, mode, ownership, age and argument
++ containing type, path, mode, ownership, age, and argument
+ fields:</para>
+
+- <programlisting>Type Path Mode UID GID Age Argument
++ <programlisting>#Type Path Mode UID GID Age Argument
+ d /run/user 0755 root root 10d -
+ L /tmp/foobar - - - - /dev/null</programlisting>
+
+@@ -109,12 +118,12 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ <variablelist>
+ <varlistentry>
+ <term><varname>f</varname></term>
+- <listitem><para>Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++ <listitem><para>Create a file if it does not exist yet. If the argument parameter is given, it will be written to the file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>F</varname></term>
+- <listitem><para>Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
++ <listitem><para>Create or truncate a file. If the argument parameter is given, it will be written to the file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -127,32 +136,32 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+
+ <varlistentry>
+ <term><varname>d</varname></term>
+- <listitem><para>Create a directory if it does not exist yet</para></listitem>
++ <listitem><para>Create a directory if it does not exist yet.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>D</varname></term>
+- <listitem><para>Create or empty a directory</para></listitem>
++ <listitem><para>Create or empty a directory.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>p</varname></term>
+- <listitem><para>Create a named pipe (FIFO) if it does not exist yet</para></listitem>
++ <listitem><para>Create a named pipe (FIFO) if it does not exist yet.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>L</varname></term>
+- <listitem><para>Create a symlink if it does not exist yet</para></listitem>
++ <listitem><para>Create a symlink if it does not exist yet.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>c</varname></term>
+- <listitem><para>Create a character device node if it does not exist yet</para></listitem>
++ <listitem><para>Create a character device node if it does not exist yet.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>b</varname></term>
+- <listitem><para>Create a block device node if it does not exist yet</para></listitem>
++ <listitem><para>Create a block device node if it does not exist yet.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -174,11 +183,12 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ as controlled with the Age
+ parameter. Note that lines of
+ this type do not influence the
+- effect of r or R lines. Lines
+- of this type accept
++ effect of <varname>r</varname>
++ or <varname>R</varname> lines.
++ Lines of this type accept
+ shell-style globs in place of
+- normal path
+- names.</para></listitem>
++ normal path names.
++ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -187,28 +197,31 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ during cleaning. Use this type
+ to exclude paths from clean-up
+ as controlled with the Age
+- parameter. Unlike x this
++ parameter. Unlike
++ <varname>x</varname>, this
+ parameter will not exclude the
+- content if path is a directory,
+- but only directory itself.
+- Note that lines of this type do
+- not influence the effect of r
+- or R lines. Lines of this type
+- accept shell-style globs in
+- place of normal path
+- names.</para></listitem>
++ content if path is a
++ directory, but only directory
++ itself. Note that lines of
++ this type do not influence the
++ effect of <varname>r</varname>
++ or <varname>R</varname> lines.
++ Lines of this type accept
++ shell-style globs in place of
++ normal path names.
++ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>r</varname></term>
+ <listitem><para>Remove a file
+- or directory if it
+- exists. This may not be used
+- to remove non-empty
+- directories, use R for
+- that. Lines of this type
+- accept shell-style globs in
+- place of normal path
++ or directory if it exists.
++ This may not be used to remove
++ non-empty directories, use
++ <varname>R</varname> for that.
++ Lines of this type accept
++ shell-style globs in place of
++ normal path
+ names.</para></listitem>
+ </varlistentry>
+
+@@ -308,11 +321,14 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ <para>The file access mode to use when
+ creating this file or directory. If omitted or
+ when set to -, the default is used: 0755 for
+- directories, 0644 for all other file
+- objects. For z, Z lines, if omitted or when set
+- to -, the file access mode will not be
+- modified. This parameter is ignored for x, r,
+- R, L lines.</para>
++ directories, 0644 for all other file objects.
++ For <varname>z</varname>, <varname>Z</varname>
++ lines, if omitted or when set to
++ <literal>-</literal>, the file access mode
++ will not be modified. This parameter is
++ ignored for <varname>x</varname>,
++ <varname>r</varname>, <varname>R</varname>,
++ <varname>L</varname> lines.</para>
+ </refsect2>
+
+ <refsect2>
+@@ -321,10 +337,15 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ <para>The user and group to use for this file
+ or directory. This may either be a numeric
+ user/group ID or a user or group name. If
+- omitted or when set to -, the default 0 (root)
+- is used. For z, Z lines, when omitted or when set to -,
+- the file ownership will not be modified.
+- These parameters are ignored for x, r, R, L lines.</para>
++ omitted or when set to <literal>-</literal>,
++ the default 0 (root) is used. For
++ <varname>z</varname>, <varname>Z</varname>
++ lines, when omitted or when set to -, the file
++ ownership will not be modified. These
++ parameters are ignored for
++ <varname>x</varname>, <varname>r</varname>,
++ <varname>R</varname>, <varname>L</varname>
++ lines.</para>
+ </refsect2>
+
+ <refsect2>
+@@ -357,28 +378,37 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ <para>When the age is set to zero, the files are cleaned
+ unconditionally.</para>
+
+- <para>The age field only applies to lines starting with
+- d, D and x. If omitted or set to -, no automatic clean-up
+- is done.</para>
++ <para>The age field only applies to lines
++ starting with <varname>d</varname>,
++ <varname>D</varname>, and
++ <varname>x</varname>. If omitted or set to
++ <literal>-</literal>, no automatic clean-up is
++ done.</para>
+
+ <para>If the age field starts with a tilde
+- character (~), the clean-up is only applied to
+- files and directories one level inside the
+- directory specified, but not the files and
+- directories immediately inside it.</para>
++ character <literal>~</literal>, the clean-up
++ is only applied to files and directories one
++ level inside the directory specified, but not
++ the files and directories immediately inside
++ it.</para>
+ </refsect2>
+
+ <refsect2>
+ <title>Argument</title>
+
+- <para>For L lines determines the destination
+- path of the symlink. For c, b determines the
++ <para>For <varname>L</varname> lines
++ determines the destination path of the
++ symlink. For <varname>c</varname>,
++ <varname>b</varname> determines the
+ major/minor of the device node, with major and
+- minor formatted as integers, separated by :,
+- e.g. "1:3". For f, F, w may be used to specify
+- a short string that is written to the file,
+- suffixed by a newline. Ignored for all other
+- lines.</para>
++ minor formatted as integers, separated by
++ <literal>:</literal>, e.g.
++ <literal>1:3</literal>. For
++ <varname>f</varname>, <varname>F</varname>,
++ and <varname>w</varname> may be used to
++ specify a short string that is written to the
++ file, suffixed by a newline. Ignored for all
++ other lines.</para>
+ </refsect2>
+
+ </refsect1>
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 6f98063..3405e28 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -14,6 +14,7 @@ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
+ Before=sysinit.target shutdown.target
+ ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d
++ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
diff --git a/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
new file mode 100644
index 0000000..bfe7f21
--- /dev/null
+++ b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
@@ -0,0 +1,281 @@
+From 66b1ee20b814b02cd0fb73fec4a2a9b11defc607 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 20 Dec 2013 20:25:39 -0500
+Subject: [PATCH] tmpfiles: introduce the concept of unsafe operations
+
+Various operations done by systemd-tmpfiles may only be safely done at
+boot (e.g. removal of X lockfiles in /tmp, creation of /run/nologin).
+Other operations may be done at any point in time (e.g. setting the
+ownership on /{run,var}/log/journal). This distinction is largely
+orthogonal to the type of operation.
+
+A new switch --unsafe is added, and operations which should only be
+executed during bootup are marked with an exclamation mark in the
+configuration files. systemd-tmpfiles.service is modified to use this
+switch, and guards are added so it is hard to re-start it by mistake.
+
+If we install a new version of systemd, we actually want to enforce
+some changes to tmpfiles configuration immediately. This should now be
+possible to do safely, so distribution packages can be modified to
+execute the "safe" subset at package installation time.
+
+/run/nologin creation is split out into a separate service, to make it
+easy to override.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1043212
+https://bugzilla.redhat.com/show_bug.cgi?id=1045849
+---
+ Makefile.am | 1 +
+ man/systemd-tmpfiles.xml | 6 ++++++
+ man/tmpfiles.d.xml | 25 +++++++++++++++++++++++++
+ src/tmpfiles/tmpfiles.c | 22 +++++++++++++++++++---
+ tmpfiles.d/legacy.conf | 6 +++---
+ tmpfiles.d/systemd-nologin.conf | 11 +++++++++++
+ tmpfiles.d/systemd.conf | 4 +---
+ tmpfiles.d/x11.conf | 2 +-
+ units/systemd-tmpfiles-setup.service.in | 6 ++++--
+ 9 files changed, 71 insertions(+), 12 deletions(-)
+ create mode 100644 tmpfiles.d/systemd-nologin.conf
+
+diff --git a/Makefile.am b/Makefile.am
+index 16a5c3c..6233a7f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1599,6 +1599,7 @@ nodist_systemunit_DATA += \
+
+ dist_tmpfiles_DATA = \
+ tmpfiles.d/systemd.conf \
++ tmpfiles.d/systemd-nologin.conf \
+ tmpfiles.d/tmp.conf \
+ tmpfiles.d/x11.conf
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 91c0372..495247e 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,6 +133,12 @@
+ removed.</para></listitem>
+ </varlistentry>
+ <varlistentry>
++ <term><option>--unsafe</option></term>
++ <listitem><para>Also execute lines
++ with an exclamation mark.
++ </para></listitem>
++ </varlistentry>
++ <varlistentry>
+ <term><option>--prefix=PATH</option></term>
+ <listitem><para>Only apply rules that
+ apply to paths with the specified
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index a00637b..39aa68d 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -113,6 +113,9 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ <refsect2>
+ <title>Type</title>
+
++ <para>The type consists of a single letter and
++ optionally an exclamation mark.</para>
++
+ <para>The following line types are understood:</para>
+
+ <variablelist>
+@@ -262,6 +265,28 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ names.</para></listitem>
+ </varlistentry>
+ </variablelist>
++
++ <para>If the exclamation mark is used, this
++ line is only safe of execute during boot, and
++ can break a running system. Lines without the
++ exclamation mark are presumed to be safe to
++ execute at any time, e.g. on package upgrades.
++ <command>systemd-tmpfiles</command> will
++ execute line with an exclamation mark only if
++ option <option>--unsafe</option> is given.
++ </para>
++
++ <para>For example:
++ <programlisting>
++# Make sure these are created by default so that nobody else can
++d /tmp/.X11-unix 1777 root root 10d
++
++# Unlink the X11 lock files
++r! /tmp/.X[0-9]*-lock
++ </programlisting>
++ The second line in contrast to the first one
++ would break a running system, and will only be
++ executed with <option>--unsafe</option>.</para>
+ </refsect2>
+
+ <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 00f74c2..30a8a55 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,6 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
++static bool arg_unsafe = false;
+
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1073,7 +1074,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ _cleanup_item_free_ Item *i = NULL;
+ Item *existing;
+ _cleanup_free_ char
+- *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
++ *action = NULL, *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
+ char type;
+ Hashmap *h;
+ int r, n = -1;
+@@ -1083,8 +1084,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ assert(buffer);
+
+ r = sscanf(buffer,
+- "%c %ms %ms %ms %ms %ms %n",
+- &type,
++ "%ms %ms %ms %ms %ms %ms %n",
++ &action,
+ &path,
+ &mode,
+ &user,
+@@ -1096,6 +1097,14 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ return -EIO;
+ }
+
++ if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
++ log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
++ return -EINVAL;
++ } else if (strlen(action) > 1 && !arg_unsafe)
++ return 0;
++
++ type = action[0];
++
+ i = new0(Item, 1);
+ if (!i)
+ return log_oom();
+@@ -1266,6 +1275,7 @@ static int help(void) {
+ " --create Create marked files/directories\n"
+ " --clean Clean up marked directories\n"
+ " --remove Remove marked files/directories\n"
++ " --unsafe Execute actions only safe at boot\n"
+ " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n"
+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n",
+ program_invocation_short_name);
+@@ -1279,6 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+ ARG_CREATE,
+ ARG_CLEAN,
+ ARG_REMOVE,
++ ARG_UNSAFE,
+ ARG_PREFIX,
+ ARG_EXCLUDE_PREFIX,
+ };
+@@ -1288,6 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+ { "create", no_argument, NULL, ARG_CREATE },
+ { "clean", no_argument, NULL, ARG_CLEAN },
+ { "remove", no_argument, NULL, ARG_REMOVE },
++ { "unsafe", no_argument, NULL, ARG_UNSAFE },
+ { "prefix", required_argument, NULL, ARG_PREFIX },
+ { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX },
+ { NULL, 0, NULL, 0 }
+@@ -1318,6 +1330,10 @@ static int parse_argv(int argc, char *argv[]) {
+ arg_remove = true;
+ break;
+
++ case ARG_UNSAFE:
++ arg_unsafe = true;
++ break;
++
+ case ARG_PREFIX:
+ if (strv_extend(&include_prefixes, optarg) < 0)
+ return log_oom();
+diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
+index 3fff347..a165687 100644
+--- a/tmpfiles.d/legacy.conf
++++ b/tmpfiles.d/legacy.conf
+@@ -29,6 +29,6 @@ d /run/lock/lockdev 0775 root lock -
+ # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
+ # 'quotacheck.mode=force'
+
+-r /forcefsck
+-r /fastboot
+-r /forcequotacheck
++r! /forcefsck
++r! /fastboot
++r! /forcequotacheck
+diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf
+new file mode 100644
+index 0000000..d61232b
+--- /dev/null
++++ b/tmpfiles.d/systemd-nologin.conf
+@@ -0,0 +1,11 @@
++# This file is part of systemd.
++#
++# systemd is free software; you can redistribute it and/or modify it
++# under the terms of the GNU Lesser General Public License as published by
++# the Free Software Foundation; either version 2.1 of the License, or
++# (at your option) any later version.
++
++# See tmpfiles.d(5) and systemd-forbid-user-logins.service(5).
++# This file has special suffix so it is not run by mistake.
++
++F! /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index a05c657..7c6d6b9 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -8,7 +8,7 @@
+ # See tmpfiles.d(5) for details
+
+ d /run/user 0755 root root ~10d
+-F /run/utmp 0664 root utmp -
++F! /run/utmp 0664 root utmp -
+
+ f /var/log/wtmp 0664 root utmp -
+ f /var/log/btmp 0600 root utmp -
+@@ -22,8 +22,6 @@ d /run/systemd/users 0755 root root -
+ d /run/systemd/machines 0755 root root -
+ d /run/systemd/shutdown 0755 root root -
+
+-F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+-
+ m /var/log/journal 2755 root systemd-journal - -
+ m /var/log/journal/%m 2755 root systemd-journal - -
+ m /run/log/journal 2755 root systemd-journal - -
+diff --git a/tmpfiles.d/x11.conf b/tmpfiles.d/x11.conf
+index ece6a5c..4c96a54 100644
+--- a/tmpfiles.d/x11.conf
++++ b/tmpfiles.d/x11.conf
+@@ -15,4 +15,4 @@ d /tmp/.font-unix 1777 root root 10d
+ d /tmp/.Test-unix 1777 root root 10d
+
+ # Unlink the X11 lock files
+-r /tmp/.X[0-9]*-lock
++r! /tmp/.X[0-9]*-lock
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index 3405e28..c2dcae0 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -6,7 +6,7 @@
+ # (at your option) any later version.
+
+ [Unit]
+-Description=Recreate Volatile Files and Directories
++Description=Create Volatile Files and Directories
+ Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
+ DefaultDependencies=no
+ Wants=local-fs.target
+@@ -18,8 +18,10 @@ ConditionDirectoryNotEmpty=|/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/etc/tmpfiles.d
+ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
++RefuseManualStart=yes
++RefuseManualStop=yes
+
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
diff --git a/0198-sleep-config-fix-useless-check-for-swapfile-type.patch b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch
new file mode 100644
index 0000000..2871866
--- /dev/null
+++ b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch
@@ -0,0 +1,43 @@
+From 5e86ba530ae6f7a4c9aec4069b0b8481003094c6 Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner at archlinux.org>
+Date: Tue, 24 Dec 2013 16:42:06 -0500
+Subject: [PATCH] sleep-config: fix useless check for swapfile type
+
+Since 0c6f1f4ea49 the check was useless, because the kernel will
+ever only write "partition" or "file" there.
+
+OTOH, it is possible that "\\040(deleted)" (escaped " (deleted)")
+will be added for removed files. This should not happen, so add
+a warning to detect those cases.
+---
+ src/shared/sleep-config.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index 2bb0493..d76e3ad 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -183,7 +183,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+ (void) fscanf(f, "%*s %*s %*s %*s %*s\n");
+
+ for (i = 1;; i++) {
+- _cleanup_free_ char *dev = NULL, *d = NULL, *type = NULL;
++ _cleanup_free_ char *dev = NULL, *type = NULL;
+ size_t size_field, used_field;
+ int k;
+
+@@ -202,12 +202,8 @@ static int hibernation_partition_size(size_t *size, size_t *used) {
+ continue;
+ }
+
+- d = cunescape(dev);
+- if (!d)
+- return -ENOMEM;
+-
+- if (!streq(type, "partition") && !streq(type, "file")) {
+- log_debug("Partition %s has type %s, ignoring.", d, type);
++ if (streq(type, "partition") && endswith(dev, "\\040(deleted)")) {
++ log_warning("Ignoring deleted swapfile '%s'.", dev);
+ continue;
+ }
+
diff --git a/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
new file mode 100644
index 0000000..08ec28f
--- /dev/null
+++ b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
@@ -0,0 +1,178 @@
+From 2c3dd6140293fb09b4c78b5db2dbcad35ee7d002 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 26 Dec 2013 01:52:01 +0100
+Subject: [PATCH] journalctl: make sure -b --foobar cannot be misunderstood as
+ --boot=--foobar
+
+Conflicts:
+ src/journal/journalctl.c
+ src/systemd/sd-bus.h
+---
+ src/journal/journalctl.c | 111 +++++++++++++++++++++++++----------------------
+ 1 file changed, 60 insertions(+), 51 deletions(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index 1d66792..ccd96b2 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -72,7 +72,8 @@ static bool arg_no_tail = false;
+ static bool arg_quiet = false;
+ static bool arg_merge = false;
+ static bool arg_boot = false;
+-static char *arg_boot_descriptor = NULL;
++static sd_id128_t arg_boot_id = {};
++static int arg_boot_offset = 0;
+ static bool arg_dmesg = false;
+ static const char *arg_cursor = NULL;
+ static const char *arg_after_cursor = NULL;
+@@ -122,6 +123,41 @@ static void pager_open_if_enabled(void) {
+ pager_open(arg_pager_end);
+ }
+
++static int parse_boot_descriptor(const char *x, sd_id128_t *boot_id, int *offset) {
++ sd_id128_t id = SD_ID128_NULL;
++ int off = 0, r;
++
++ if (strlen(x) >= 32) {
++ char *t;
++
++ t = strndupa(x, 32);
++ r = sd_id128_from_string(t, &id);
++ if (r >= 0)
++ x += 32;
++
++ if (*x != '-' && *x != '+' && *x != 0)
++ return -EINVAL;
++
++ if (*x != 0) {
++ r = safe_atoi(x, &off);
++ if (r < 0)
++ return r;
++ }
++ } else {
++ r = safe_atoi(x, &off);
++ if (r < 0)
++ return r;
++ }
++
++ if (boot_id)
++ *boot_id = id;
++
++ if (offset)
++ *offset = off;
++
++ return 0;
++}
++
+ static int help(void) {
+
+ pager_open_if_enabled();
+@@ -365,16 +401,23 @@ static int parse_argv(int argc, char *argv[]) {
+ case 'b':
+ arg_boot = true;
+
+- if (optarg)
+- arg_boot_descriptor = optarg;
+- else if (optind < argc) {
+- int boot;
++ if (optarg) {
++ r = parse_boot_descriptor(optarg, &arg_boot_id, &arg_boot_offset);
++ if (r < 0) {
++ log_error("Failed to parse boot descriptor '%s'", optarg);
++ return -EINVAL;
++ }
++ } else {
++
++ /* Hmm, no argument? Maybe the next
++ * word on the command line is
++ * supposed to be the argument? Let's
++ * see if there is one and is parsable
++ * as a boot descriptor... */
+
+- if (argv[optind][0] != '-' ||
+- safe_atoi(argv[optind], &boot) >= 0) {
+- arg_boot_descriptor = argv[optind];
++ if (optind < argc &&
++ parse_boot_descriptor(argv[optind], &arg_boot_id, &arg_boot_offset) >= 0)
+ optind++;
+- }
+ }
+
+ break;
+@@ -809,9 +852,6 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative
+ assert(j);
+ assert(boot_id);
+
+- if (relative == 0 && !sd_id128_equal(*boot_id, SD_ID128_NULL))
+- return 0;
+-
+ r = sd_journal_query_unique(j, "_BOOT_ID");
+ if (r < 0)
+ return r;
+@@ -878,58 +918,27 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative
+
+ static int add_boot(sd_journal *j) {
+ char match[9+32+1] = "_BOOT_ID=";
+- char *offset;
+- sd_id128_t boot_id = SD_ID128_NULL;
+- int r, relative = 0;
++ int r;
+
+ assert(j);
+
+ if (!arg_boot)
+ return 0;
+
+- if (!arg_boot_descriptor)
++ if (arg_boot_offset == 0 && sd_id128_equal(arg_boot_id, SD_ID128_NULL))
+ return add_match_this_boot(j);
+
+- if (strlen(arg_boot_descriptor) >= 32) {
+- char tmp = arg_boot_descriptor[32];
+- arg_boot_descriptor[32] = '\0';
+- r = sd_id128_from_string(arg_boot_descriptor, &boot_id);
+- arg_boot_descriptor[32] = tmp;
+-
+- if (r < 0) {
+- log_error("Failed to parse boot ID '%.32s': %s",
+- arg_boot_descriptor, strerror(-r));
+- return r;
+- }
+-
+- offset = arg_boot_descriptor + 32;
+-
+- if (*offset && *offset != '-' && *offset != '+') {
+- log_error("Relative boot ID offset must start with a '+' or a '-', found '%s' ", offset);
+- return -EINVAL;
+- }
+- } else
+- offset = arg_boot_descriptor;
+-
+- if (*offset) {
+- r = safe_atoi(offset, &relative);
+- if (r < 0) {
+- log_error("Failed to parse relative boot ID number '%s'", offset);
+- return -EINVAL;
+- }
+- }
+-
+- r = get_relative_boot_id(j, &boot_id, relative);
++ r = get_relative_boot_id(j, &arg_boot_id, arg_boot_offset);
+ if (r < 0) {
+- if (sd_id128_equal(boot_id, SD_ID128_NULL))
+- log_error("Failed to look up boot %+d: %s", relative, strerror(-r));
++ if (sd_id128_equal(arg_boot_id, SD_ID128_NULL))
++ log_error("Failed to look up boot %+i: %s", arg_boot_offset, strerror(-r));
+ else
+- log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+d: %s",
+- SD_ID128_FORMAT_VAL(boot_id), relative, strerror(-r));
++ log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+i: %s",
++ SD_ID128_FORMAT_VAL(arg_boot_id), arg_boot_offset, strerror(-r));
+ return r;
+ }
+
+- sd_id128_to_string(boot_id, match + 9);
++ sd_id128_to_string(arg_boot_id, match + 9);
+
+ r = sd_journal_add_match(j, match, sizeof(match) - 1);
+ if (r < 0) {
diff --git a/0200-man-resolve-word-omissions.patch b/0200-man-resolve-word-omissions.patch
new file mode 100644
index 0000000..8528eef
--- /dev/null
+++ b/0200-man-resolve-word-omissions.patch
@@ -0,0 +1,725 @@
+From 424e80301de3b39d8641a49a7755af6dc3d6b4e8 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:43 +0100
+Subject: [PATCH] man: resolve word omissions
+
+This is a recurring submission and includes corrections to:
+word omissions and word class choice.
+
+Conflicts:
+ man/sd_bus_message_get_cookie.xml
+ man/sd_bus_request_name.xml
+ man/sd_watchdog_enabled.xml
+ man/systemd-getty-generator.xml
+---
+ man/binfmt.d.xml | 4 ++--
+ man/journald.conf.xml | 2 +-
+ man/loginctl.xml | 2 +-
+ man/sd-daemon.xml | 2 +-
+ man/sd-journal.xml | 2 +-
+ man/sd-login.xml | 4 ++--
+ man/sd_booted.xml | 2 +-
+ man/sd_get_seats.xml | 8 ++++----
+ man/sd_id128_get_machine.xml | 2 +-
+ man/sd_id128_randomize.xml | 2 +-
+ man/sd_id128_to_string.xml | 2 +-
+ man/sd_is_fifo.xml | 2 +-
+ man/sd_journal_add_match.xml | 2 +-
+ man/sd_journal_get_catalog.xml | 2 +-
+ man/sd_journal_get_cursor.xml | 2 +-
+ man/sd_journal_get_cutoff_realtime_usec.xml | 2 +-
+ man/sd_journal_get_data.xml | 2 +-
+ man/sd_journal_get_fd.xml | 2 +-
+ man/sd_journal_get_realtime_usec.xml | 2 +-
+ man/sd_journal_get_usage.xml | 2 +-
+ man/sd_journal_next.xml | 6 +++---
+ man/sd_journal_print.xml | 2 +-
+ man/sd_journal_query_unique.xml | 2 +-
+ man/sd_journal_seek_head.xml | 4 ++--
+ man/sd_journal_stream_fd.xml | 2 +-
+ man/sd_listen_fds.xml | 4 ++--
+ man/sd_login_monitor_new.xml | 2 +-
+ man/sd_notify.xml | 4 ++--
+ man/sd_pid_get_session.xml | 2 +-
+ man/sd_seat_get_active.xml | 2 +-
+ man/sd_session_is_active.xml | 2 +-
+ man/sd_uid_get_state.xml | 4 ++--
+ man/sysctl.d.xml | 4 ++--
+ man/systemctl.xml | 4 ++--
+ man/systemd-getty-generator.xml | 8 ++++----
+ man/systemd-halt.service.xml | 2 +-
+ man/systemd-machine-id-setup.xml | 2 +-
+ man/systemd.preset.xml | 4 ++--
+ man/systemd.service.xml | 2 +-
+ man/systemd.socket.xml | 4 ++--
+ man/systemd.unit.xml | 4 ++--
+ man/tmpfiles.d.xml | 4 ++--
+ 42 files changed, 62 insertions(+), 62 deletions(-)
+
+diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
+index 94f97e0..6f8668b 100644
+--- a/man/binfmt.d.xml
++++ b/man/binfmt.d.xml
+@@ -88,8 +88,8 @@
+ administrator, who may use this logic to override the
+ configuration files installed from vendor
+ packages. All files are sorted by their filename in
+- lexicographic order, regardless in which of the
+- directories they reside. If multiple files specify
++ lexicographic order, regardless of which of the
++ directories they reside in. If multiple files specify
+ the same binary type name, the entry in the file with
+ the lexicographically latest name will be applied.</para>
+
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index 8e642a3..b362c5d 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -155,7 +155,7 @@
+ into the system journal. If
+ <literal>uid</literal>, any user ID
+ will get his own journal files
+- regardless whether it belongs to a
++ regardless of whether it belongs to a
+ system service or refers to a real
+ logged in user. If
+ <literal>none</literal>, journal files
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 1b54ff7..133d6cf 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -109,7 +109,7 @@
+
+ <listitem><para>When showing
+ session/user/seat properties, show all
+- properties regardless whether they are
++ properties regardless of whether they are
+ set or not.</para></listitem>
+ </varlistentry>
+
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 6e804e1..84c1afa 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -144,7 +144,7 @@
+ <para>These APIs are implemented in the reference
+ implementation's <filename>sd-daemon.c</filename> and
+ <filename>sd-daemon.h</filename> files. These
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+diff --git a/man/sd-journal.xml b/man/sd-journal.xml
+index 6d39611..832d584 100644
+--- a/man/sd-journal.xml
++++ b/man/sd-journal.xml
+@@ -98,7 +98,7 @@
+ <refsect1>
+ <title>Notes</title>
+
+- <para>These APIs are implemented as shared library,
++ <para>These APIs are implemented as a shared library,
+ which can be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd-login.xml b/man/sd-login.xml
+index 251b35b..1d47b29 100644
+--- a/man/sd-login.xml
++++ b/man/sd-login.xml
+@@ -99,7 +99,7 @@
+ caller with the libc
+ <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ call after use, including the strings referenced
+- therein. Similar, individual strings returned need to
++ therein. Similarly, individual strings returned need to
+ be freed, as well.</para>
+
+ <para>As a special exception, instead of an empty
+@@ -120,7 +120,7 @@
+ <refsect1>
+ <title>Notes</title>
+
+- <para>These APIs are implemented as shared library,
++ <para>These APIs are implemented as a shared library,
+ which can be compiled and linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 64c0cd9..6f8cc95 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -100,7 +100,7 @@
+ in the reference implementation's
+ <filename>sd-daemon.c</filename> and
+ <filename>sd-daemon.h</filename> files. These
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 8254b7c..1e55af3 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -90,13 +90,13 @@
+ <constant>NULL</constant> may be returned and should be considered
+ equivalent to an empty array.</para>
+
+- <para>Similar, <function>sd_get_sessions()</function> may
++ <para>Similarly, <function>sd_get_sessions()</function> may
+ be used to determine all current login sessions.</para>
+
+- <para>Similar, <function>sd_get_uids()</function> may
++ <para>Similarly, <function>sd_get_uids()</function> may
+ be used to determine all Unix users who currently have login sessions.</para>
+
+- <para>Similar,
++ <para>Similarly,
+ <function>sd_get_machine_names()</function> may be
+ used to determine all current virtual machines and
+ containers on the system.</para>
+@@ -122,7 +122,7 @@
+ <function>sd_get_sessions()</function>,
+ <function>sd_get_uids()</function> and
+ <function>sd_get_machine_names()</function> interfaces
+- are available as shared library, which can be compiled
++ are available as a shared library, which can be compiled
+ and linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
+index 6bee7ad..084fda2 100644
+--- a/man/sd_id128_get_machine.xml
++++ b/man/sd_id128_get_machine.xml
+@@ -116,7 +116,7 @@
+
+ <para>The <function>sd_id128_get_machine()</function>
+ and <function>sd_id128_get_boot()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml
+index 0b95803..100de16 100644
+--- a/man/sd_id128_randomize.xml
++++ b/man/sd_id128_randomize.xml
+@@ -95,7 +95,7 @@
+ <title>Notes</title>
+
+ <para>The <function>sd_id128_randomize()</function> interface
+- is available as shared library, which can be compiled
++ is available as a shared library, which can be compiled
+ and linked to with the
+ <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
+index 71cf82a..eae2915 100644
+--- a/man/sd_id128_to_string.xml
++++ b/man/sd_id128_to_string.xml
+@@ -118,7 +118,7 @@
+
+ <para>The <function>sd_id128_to_string()</function>
+ and <function>sd_id128_from_string()</function> interfaces are
+- available as shared library, which can be compiled and
++ available as a shared library, which can be compiled and
+ linked to with the <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+ </refsect1>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4d9cd79..5e79453 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -208,7 +208,7 @@
+ related functions are implemented in the reference
+ implementation's <filename>sd-daemon.c</filename> and
+ <filename>sd-daemon.h</filename> files. These
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml
+index b6c7b06..6568234 100644
+--- a/man/sd_journal_add_match.xml
++++ b/man/sd_journal_add_match.xml
+@@ -174,7 +174,7 @@
+ <function>sd_journal_add_disjunction()</function>,
+ <function>sd_journal_add_conjunction()</function> and
+ <function>sd_journal_flush_matches()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml
+index 4a7e0a1..ecd329f 100644
+--- a/man/sd_journal_get_catalog.xml
++++ b/man/sd_journal_get_catalog.xml
+@@ -118,7 +118,7 @@
+
+ <para>The <function>sd_journal_get_catalog()</function> and
+ <function>sd_journal_get_catalog_for_message_id()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
+index 4cee7d5..046c154 100644
+--- a/man/sd_journal_get_cursor.xml
++++ b/man/sd_journal_get_cursor.xml
+@@ -130,7 +130,7 @@
+
+ <para>The <function>sd_journal_get_cursor()</function>
+ and <function>sd_journal_test_cursor()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
+index 9bf8220..287c1c5 100644
+--- a/man/sd_journal_get_cutoff_realtime_usec.xml
++++ b/man/sd_journal_get_cutoff_realtime_usec.xml
+@@ -122,7 +122,7 @@
+ <function>sd_journal_get_cutoff_realtime_usec()</function>
+ and
+ <function>sd_journal_get_cutoff_monotonic_usec()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml
+index 0e1111e..6ed52b5 100644
+--- a/man/sd_journal_get_data.xml
++++ b/man/sd_journal_get_data.xml
+@@ -203,7 +203,7 @@
+ <function>sd_journal_set_data_threshold()</function>
+ and
+ <function>sd_journal_get_data_threshold()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml
+index 764f716..4b36f97 100644
+--- a/man/sd_journal_get_fd.xml
++++ b/man/sd_journal_get_fd.xml
+@@ -253,7 +253,7 @@ else {
+ <function>sd_journal_reliable_fd()</function>,
+ <function>sd_journal_process()</function> and
+ <function>sd_journal_wait()</function> interfaces are
+- available as shared library, which can be compiled and
++ available as a shared library, which can be compiled and
+ linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml
+index 8870c29..bf1aa50 100644
+--- a/man/sd_journal_get_realtime_usec.xml
++++ b/man/sd_journal_get_realtime_usec.xml
+@@ -122,7 +122,7 @@
+ <function>sd_journal_get_realtime_usec()</function>
+ and
+ <function>sd_journal_get_monotonic_usec()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml
+index 180d8b2..08d8640 100644
+--- a/man/sd_journal_get_usage.xml
++++ b/man/sd_journal_get_usage.xml
+@@ -84,7 +84,7 @@
+ <title>Notes</title>
+
+ <para>The <function>sd_journal_get_usage()</function>
+- interface is available as shared library, which can be
++ interface is available as a shared library, which can be
+ compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
+index 6e437d1..1409b0d 100644
+--- a/man/sd_journal_next.xml
++++ b/man/sd_journal_next.xml
+@@ -102,7 +102,7 @@
+ functions such as
+ <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+- <para>Similar, <function>sd_journal_previous()</function> sets
++ <para>Similarly, <function>sd_journal_previous()</function> sets
+ the read pointer back one entry.</para>
+
+ <para><function>sd_journal_next_skip()</function> and
+@@ -129,7 +129,7 @@
+ <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ and <function>sd_journal_next()</function> in order to
+ make iterating through the journal easier. See below
+- for an example. Similar,
++ for an example. Similarly,
+ <function>SD_JOURNAL_FOREACH_BACKWARDS()</function>
+ may be used for iterating the journal in reverse
+ order.</para>
+@@ -156,7 +156,7 @@
+ <para>The <function>sd_journal_next()</function>, <function>sd_journal_previous()</function>,
+ <function>sd_journal_next_skip()</function> and
+ <function>sd_journal_previous_skip()</function> interfaces are
+- available as shared library, which can be compiled and
++ available as a shared library, which can be compiled and
+ linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
+index e61a648..a716cc3 100644
+--- a/man/sd_journal_print.xml
++++ b/man/sd_journal_print.xml
+@@ -227,7 +227,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
+ <function>sd_journal_printv()</function>,
+ <function>sd_journal_send()</function> and
+ <function>sd_journal_sendv()</function> interfaces
+- are available as shared library, which can be compiled
++ are available as a shared library, which can be compiled
+ and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml
+index f5d9d2b..f0b9204 100644
+--- a/man/sd_journal_query_unique.xml
++++ b/man/sd_journal_query_unique.xml
+@@ -156,7 +156,7 @@
+ <para>The <function>sd_journal_query_unique()</function>,
+ <function>sd_journal_enumerate_unique()</function> and
+ <function>sd_journal_restart_unique()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml
+index 03de30a..939f0b1 100644
+--- a/man/sd_journal_seek_head.xml
++++ b/man/sd_journal_seek_head.xml
+@@ -94,7 +94,7 @@
+ seeks to the beginning of the journal, i.e. the oldest
+ available entry.</para>
+
+- <para>Similar,
++ <para>Similarly,
+ <function>sd_journal_seek_tail()</function> may be
+ used to seek to the end of the journal, i.e. the most
+ recent available entry.</para>
+@@ -156,7 +156,7 @@
+ <function>sd_journal_seek_monotonic_usec()</function>,
+ <function>sd_journal_seek_realtime_usec()</function>,
+ and <function>sd_journal_seek_cursor()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
+index 4bd0abc..a8dc8fd 100644
+--- a/man/sd_journal_stream_fd.xml
++++ b/man/sd_journal_stream_fd.xml
+@@ -112,7 +112,7 @@
+ <title>Notes</title>
+
+ <para>The <function>sd_journal_stream_fd()</function>
+- interface is available as shared library, which can
++ interface is available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index 240300d..aaabdbf 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -73,7 +73,7 @@
+ parameter is non-zero,
+ <function>sd_listen_fds()</function> will unset the
+ <varname>$LISTEN_FDS</varname>/<varname>$LISTEN_PID</varname>
+- environment variables before returning (regardless
++ environment variables before returning (regardless of
+ whether the function call itself succeeded or
+ not). Further calls to
+ <function>sd_listen_fds()</function> will then fail,
+@@ -149,7 +149,7 @@
+ implemented in the reference implementation's
+ <filename>sd-daemon.c</filename> and
+ <filename>sd-daemon.h</filename> files. These
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index 909a3d9..f439d3e 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -224,7 +224,7 @@ else {
+ <function>sd_login_monitor_get_fd()</function>,
+ <function>sd_login_monitor_get_events()</function> and
+ <function>sd_login_monitor_get_timeout()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index 55965ff..e078140 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -79,7 +79,7 @@
+ <para>If the <parameter>unset_environment</parameter>
+ parameter is non-zero, <function>sd_notify()</function>
+ will unset the <varname>$NOTIFY_SOCKET</varname>
+- environment variable before returning (regardless
++ environment variable before returning (regardless of
+ whether the function call itself succeeded or
+ not). Further calls to
+ <function>sd_notify()</function> will then fail, but
+@@ -236,7 +236,7 @@
+ the reference implementation's
+ <filename>sd-daemon.c</filename> and
+ <filename>sd-daemon.h</filename> files. These
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
+index e5c7709..ff5905b 100644
+--- a/man/sd_pid_get_session.xml
++++ b/man/sd_pid_get_session.xml
+@@ -186,7 +186,7 @@
+ <function>sd_pid_get_owner_uid()</function>,
+ <function>sd_pid_get_machine_name()</function> and
+ <function>sd_pid_get_slice()</function> interfaces are
+- available as shared library, which can be compiled and
++ available as a shared library, which can be compiled and
+ linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index cd87696..23d582d 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -164,7 +164,7 @@
+ <function>sd_seat_can_multi_session()</function>,
+ <function>sd_seat_can_tty()</function> and
+ <function>sd_seat_can_grapical()</function> interfaces
+- are available as shared library, which can be compiled
++ are available as a shared library, which can be compiled
+ and linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
+index 293ce71..06891f7 100644
+--- a/man/sd_session_is_active.xml
++++ b/man/sd_session_is_active.xml
+@@ -252,7 +252,7 @@
+ <function>sd_session_get_class()</function>,
+ <function>sd_session_get_display()</function> and
+ <function>sd_session_get_tty()</function>
+- interfaces are available as shared library, which can
++ interfaces are available as a shared library, which can
+ be compiled and linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index d4d23f4..0faa765 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -139,7 +139,7 @@
+ be returned and should be considered equivalent to an
+ empty array.</para>
+
+- <para>Similar, <function>sd_uid_get_seats()</function>
++ <para>Similarly, <function>sd_uid_get_seats()</function>
+ may be used to determine the list of seats on which
+ the user currently has sessions. Similar semantics
+ apply, however note that the user may have
+@@ -171,7 +171,7 @@
+ <function>sd_uid_is_on_seat()</function>,
+ <function>sd_uid_get_sessions()</function>, and
+ <function>sd_uid_get_seats()</function> interfaces are
+- available as shared library, which can be compiled and
++ available as a shared library, which can be compiled and
+ linked to with the <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file.</para>
+ </refsect1>
+diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
+index 854864c..5544283 100644
+--- a/man/sysctl.d.xml
++++ b/man/sysctl.d.xml
+@@ -89,8 +89,8 @@
+ administrator, who may use this logic to override the
+ configuration files installed by vendor packages. All
+ configuration files are sorted by their filename in
+- lexicographic order, regardless in which of the
+- directories they reside. If multiple files specify the
++ lexicographic order, regardless of which of the
++ directories they reside in. If multiple files specify the
+ same variable name, the entry in the file with the
+ lexicographically latest name will be applied. It is
+ recommended to prefix all filenames with a two-digit
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index b4bc15d..61deb19 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -250,7 +250,7 @@ systemctl start foo
+ sleep state. Any user may take these locks and privileged
+ users may override these locks. If any locks are taken,
+ shutdown and sleep state requests will normally fail
+- (regardless if privileged or not) and a list of active locks
++ (regardless of whether privileged or not) and a list of active locks
+ is printed. However, if <option>--ignore-inhibitors</option>
+ is specified, the locks are ignored and not printed, and the
+ operation attempted anyway, possibly requiring additional
+@@ -445,7 +445,7 @@ systemctl start foo
+ with identical immediate effects, however, since the latter
+ is lost on reboot, the changes are lost too.</para>
+
+- <para>Similar, when used with
++ <para>Similarly, when used with
+ <command>set-property</command>, make changes only
+ temporarily, so that they are lost on the next
+ reboot.</para>
+diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml
+index da88e72..b1993ae 100644
+--- a/man/systemd-getty-generator.xml
++++ b/man/systemd-getty-generator.xml
+@@ -61,10 +61,10 @@
+ subsystem. It will also instantiate
+ <filename>serial-getty at .service</filename> instances
+ for virtualizer consoles, if execution in a
+- virtualized environment is detected. This should
+- ensure that the user is shown a login prompt at the
+- right place, regardless in which environment the
+- system is started. For example, it is sufficient to
++ virtualized environment is detected. This
++ should ensure that the user is shown a login prompt at
++ the right place, regardless of which environment the
++ system is started in. For example, it is sufficient to
+ redirect the kernel console with a kernel command line
+ argument such as <varname>console=</varname> to get
+ both kernel messages and a getty prompt on a serial
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 90b443f..99457aa 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -65,7 +65,7 @@
+ <para><filename>systemd-halt.service</filename> is a
+ system service that is pulled in by
+ <filename>halt.target</filename> and is responsible
+- for the actual system halt. Similar,
++ for the actual system halt. Similarly,
+ <filename>systemd-poweroff.service</filename> is
+ pulled in by <filename>poweroff.target</filename>,
+ <filename>systemd-reboot.service</filename> by
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index fef76bc..bc38d55 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -80,7 +80,7 @@
+ UUID passed is sufficiently unique and is different
+ for every booted instanced of the VM.</para>
+
+- <para>Similar, if run inside a Linux container
++ <para>Similarly, if run inside a Linux container
+ environment and a UUID is set for the container this
+ is used to initialize the machine ID. For details see
+ the documentation of the <ulink
+diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml
+index 16db8cd..55cb4de 100644
+--- a/man/systemd.preset.xml
++++ b/man/systemd.preset.xml
+@@ -126,8 +126,8 @@
+ administrator, who may use this logic to override the
+ preset files installed by vendor packages. All preset
+ files are sorted by their filename in lexicographic
+- order, regardless in which of the directories they
+- reside. If multiple files specify the same unit name,
++ order, regardless of which of the directories they
++ reside in. If multiple files specify the same unit name,
+ the entry in the file with the lexicographically earliest
+ name will be applied. It is recommended to prefix all
+ filenames with a two-digit number and a dash, to simplify
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 8f9137c..80a935d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -712,7 +712,7 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+ timeout for the service expires.
+ If set to
+ <option>always</option>, the service
+- will be restarted regardless whether
++ will be restarted regardless of whether
+ it exited cleanly or not, got
+ terminated abnormally by a signal or
+ hit a timeout.</para>
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 1c78562..ac3127d 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -213,7 +213,7 @@
+ traffic on any of the sockets will
+ trigger service activation, and all
+ listed sockets will be passed to the
+- service, regardless whether there is
++ service, regardless of whether there is
+ incoming traffic on them or not. If
+ the empty string is assigned to any of
+ these options, the list of addresses
+@@ -225,7 +225,7 @@
+ it is often desirable to listen on it
+ before the interface it is configured
+ on is up and running, and even
+- regardless whether it will be up and
++ regardless of whether it will be up and
+ running ever at all. To deal with this
+ it is recommended to set the
+ <varname>FreeBind=</varname> option
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 77127ff..b70c5e9 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -634,7 +634,7 @@
+ dependency on another unit is shut
+ down while the latter is started up,
+ the shut down is ordered before the
+- start-up regardless whether the
++ start-up regardless of whether the
+ ordering dependency is actually of
+ type <varname>After=</varname> or
+ <varname>Before=</varname>. If two
+@@ -938,7 +938,7 @@
+ exists, is a regular file and marked
+ executable.</para>
+
+- <para>Similar,
++ <para>Similarly,
+ <varname>ConditionKernelCommandLine=</varname>
+ may be used to check whether a
+ specific kernel command line option is
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 39aa68d..ed88751 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -88,8 +88,8 @@
+ the local administrator, who may use this logic to
+ override the configuration files installed by vendor
+ packages. All configuration files are sorted by their
+- filename in lexicographic order, regardless in which
+- of the directories they reside. If multiple files
++ filename in lexicographic order, regardless of which
++ of the directories they reside in. If multiple files
+ specify the same path, the entry in the file with the
+ lexicographically earliest name will be applied, all
+ all other conflicting entries logged as errors.</para>
diff --git a/0201-man-improvements-to-comma-placement.patch b/0201-man-improvements-to-comma-placement.patch
new file mode 100644
index 0000000..b1a9674
--- /dev/null
+++ b/0201-man-improvements-to-comma-placement.patch
@@ -0,0 +1,507 @@
+From 4a1155c88d295e81037fd8a48b585a00fbf43cbc Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:44 +0100
+Subject: [PATCH] man: improvements to comma placement
+
+This is a recurring submission and includes corrections to:
+comma placement.
+
+Conflicts:
+ man/sd_bus_message_get_cookie.xml
+ man/sd_bus_request_name.xml
+ man/sd_session_is_active.xml
+ man/sd_watchdog_enabled.xml
+ man/systemctl.xml
+ man/systemd.exec.xml
+ man/systemd.timer.xml
+ man/systemd.unit.xml
+---
+ man/halt.xml | 2 +-
+ man/hostnamectl.xml | 2 +-
+ man/sd-daemon.xml | 4 ++--
+ man/sd-readahead.xml | 2 +-
+ man/sd_booted.xml | 2 +-
+ man/sd_get_seats.xml | 2 +-
+ man/sd_is_fifo.xml | 2 +-
+ man/sd_listen_fds.xml | 2 +-
+ man/sd_login_monitor_new.xml | 6 +++---
+ man/sd_notify.xml | 2 +-
+ man/sd_readahead.xml | 2 +-
+ man/sd_seat_get_active.xml | 4 ++--
+ man/sd_uid_get_state.xml | 4 ++--
+ man/shutdown.xml | 2 +-
+ man/systemd-analyze.xml | 2 +-
+ man/systemd-ask-password.xml | 2 +-
+ man/systemd-cat.xml | 2 +-
+ man/systemd-cgls.xml | 2 +-
+ man/systemd-cgtop.xml | 2 +-
+ man/systemd-coredumpctl.xml | 2 +-
+ man/systemd-delta.xml | 2 +-
+ man/systemd-machine-id-setup.xml | 2 +-
+ man/systemd-notify.xml | 2 +-
+ man/systemd-tmpfiles.xml | 2 +-
+ man/systemd-tty-ask-password-agent.xml | 2 +-
+ man/systemd.device.xml | 2 +-
+ man/systemd.mount.xml | 2 +-
+ man/systemd.service.xml | 2 +-
+ man/systemd.special.xml | 2 +-
+ man/systemd.swap.xml | 2 +-
+ man/systemd.xml | 2 +-
+ man/telinit.xml | 2 +-
+ man/timedatectl.xml | 2 +-
+ 33 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/man/halt.xml b/man/halt.xml
+index 2a13d3c..f54a864 100644
+--- a/man/halt.xml
++++ b/man/halt.xml
+@@ -148,7 +148,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index b39fb55..a0776f5 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -255,7 +255,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
+index 84c1afa..b48eac9 100644
+--- a/man/sd-daemon.xml
++++ b/man/sd-daemon.xml
+@@ -83,7 +83,7 @@
+ <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ for more information about the functions
+- implemented. In addition to these functions a couple
++ implemented. In addition to these functions, a couple
+ of logging prefixes are defined as macros:</para>
+
+ <programlisting>#define SD_EMERG "<0>" /* system is unusable */
+@@ -135,7 +135,7 @@
+ implementation. See the respective function man pages
+ for details.</para>
+
+- <para>In addition, for details about the algorithms
++ <para>In addition, for details about the algorithms,
+ check the liberally licensed reference implementation
+ sources:
+ <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c"/>
+diff --git a/man/sd-readahead.xml b/man/sd-readahead.xml
+index f8a0a0b..bcc46b2 100644
+--- a/man/sd-readahead.xml
++++ b/man/sd-readahead.xml
+@@ -83,7 +83,7 @@
+ reference implementation. See the respective function
+ man pages for details.</para>
+
+- <para>In addition, for details about the algorithms
++ <para>In addition, for details about the algorithms,
+ check the liberally licensed reference implementation
+ sources:
+ <ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c"/>
+diff --git a/man/sd_booted.xml b/man/sd_booted.xml
+index 6f8cc95..1e38d2a 100644
+--- a/man/sd_booted.xml
++++ b/man/sd_booted.xml
+@@ -106,7 +106,7 @@
+ file. Alternatively, applications consuming these APIs
+ may copy the implementation into their source
+ tree. For more details about the reference
+- implementation see
++ implementation, see
+ <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+ <para>If the reference implementation is used as
+diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
+index 1e55af3..f0e7655 100644
+--- a/man/sd_get_seats.xml
++++ b/man/sd_get_seats.xml
+@@ -107,7 +107,7 @@
+ <refsect1>
+ <title>Return Value</title>
+
+- <para>On success <function>sd_get_seats()</function>,
++ <para>On success, <function>sd_get_seats()</function>,
+ <function>sd_get_sessions()</function>,
+ <function>sd_get_uids()</function> and
+ <function>sd_get_machine_names()</function> return the
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 5e79453..4bb2236 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -214,7 +214,7 @@
+ file. Alternatively, applications consuming these APIs
+ may copy the implementation into their source
+ tree. For more details about the reference
+- implementation see
++ implementation, see
+ <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+ <para>These functions continue to work as described,
+diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
+index aaabdbf..6a9e082 100644
+--- a/man/sd_listen_fds.xml
++++ b/man/sd_listen_fds.xml
+@@ -155,7 +155,7 @@
+ file. Alternatively, applications consuming these APIs
+ may copy the implementation into their source
+ tree. For more details about the reference
+- implementation see
++ implementation, see
+ <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+ <para>If the reference implementation is used as
+diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
+index f439d3e..14ff241 100644
+--- a/man/sd_login_monitor_new.xml
++++ b/man/sd_login_monitor_new.xml
+@@ -198,13 +198,13 @@ else {
+ <refsect1>
+ <title>Return Value</title>
+
+- <para>On success
++ <para>On success,
+ <function>sd_login_monitor_new()</function>,
+ <function>sd_login_monitor_flush()</function> and
+ <function>sd_login_monitor_get_timeout()</function>
+- return 0 or a positive integer. On success
++ return 0 or a positive integer. On success,
+ <function>sd_login_monitor_get_fd()</function> returns
+- a Unix file descriptor. On success
++ a Unix file descriptor. On success,
+ <function>sd_login_monitor_get_events()</function>
+ returns a combination of <constant>POLLIN</constant>,
+ <constant>POLLOUT</constant> and suchlike. On failure,
+diff --git a/man/sd_notify.xml b/man/sd_notify.xml
+index e078140..aae27a8 100644
+--- a/man/sd_notify.xml
++++ b/man/sd_notify.xml
+@@ -241,7 +241,7 @@
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ file. Alternatively, applications consuming these APIs
+ may copy the implementation into their source tree. For
+- more details about the reference implementation see
++ more details about the reference implementation, see
+ <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+ <para>If the reference implementation is used as
+diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml
+index bb01bcf..9827299 100644
+--- a/man/sd_readahead.xml
++++ b/man/sd_readahead.xml
+@@ -139,7 +139,7 @@
+ <filename>sd-readahead.h</filename> files. It is
+ recommended that applications consuming this API copy
+ the implementation into their source tree. For more
+- details about the reference implementation see
++ details about the reference implementation, see
+ <citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry></para>
+
+ <para>If -DDISABLE_SYSTEMD is set during compilation,
+diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
+index 23d582d..c64ba13 100644
+--- a/man/sd_seat_get_active.xml
++++ b/man/sd_seat_get_active.xml
+@@ -143,9 +143,9 @@
+ <refsect1>
+ <title>Return Value</title>
+
+- <para> On success
++ <para> On success,
+ <function>sd_seat_get_active()</function>
+- returns 0 or a positive integer. On success
++ returns 0 or a positive integer. On success,
+ <function>sd_seat_get_sessions()</function> returns
+ the number of entries in the session identifier
+ array. If the test succeeds,
+diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
+index 0faa765..30b254c 100644
+--- a/man/sd_uid_get_state.xml
++++ b/man/sd_uid_get_state.xml
+@@ -152,11 +152,11 @@
+ <refsect1>
+ <title>Return Value</title>
+
+- <para>On success
++ <para>On success,
+ <function>sd_uid_get_state()</function> returns 0 or a
+ positive integer. If the test succeeds,
+ <function>sd_uid_is_on_seat()</function> returns a
+- positive integer, if it fails
++ positive integer; if it fails,
+ 0. <function>sd_uid_get_sessions()</function> and
+ <function>sd_uid_get_seats()</function> return the
+ number of entries in the returned arrays. On failure,
+diff --git a/man/shutdown.xml b/man/shutdown.xml
+index 795fb66..27e7e87 100644
+--- a/man/shutdown.xml
++++ b/man/shutdown.xml
+@@ -164,7 +164,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
+index aefbfc8..b7753f9 100644
+--- a/man/systemd-analyze.xml
++++ b/man/systemd-analyze.xml
+@@ -270,7 +270,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
+index 8af328d..79902cb 100644
+--- a/man/systemd-ask-password.xml
++++ b/man/systemd-ask-password.xml
+@@ -167,7 +167,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
+index ffb1dfd..ba7a2cf 100644
+--- a/man/systemd-cat.xml
++++ b/man/systemd-cat.xml
+@@ -158,7 +158,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
+index 432706b..152b883 100644
+--- a/man/systemd-cgls.xml
++++ b/man/systemd-cgls.xml
+@@ -145,7 +145,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
+index 7faedfb..0e1f7c5 100644
+--- a/man/systemd-cgtop.xml
++++ b/man/systemd-cgtop.xml
+@@ -264,7 +264,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-coredumpctl.xml b/man/systemd-coredumpctl.xml
+index 9ccb67d..67f75d1 100644
+--- a/man/systemd-coredumpctl.xml
++++ b/man/systemd-coredumpctl.xml
+@@ -200,7 +200,7 @@
+
+ <refsect1>
+ <title>Exit status</title>
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise. Not finding any matching coredumps is treated
+ as failure.
+ </para>
+diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
+index 4d3ab78..ebaa349 100644
+--- a/man/systemd-delta.xml
++++ b/man/systemd-delta.xml
+@@ -223,7 +223,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
+index bc38d55..7b3aa7e 100644
+--- a/man/systemd-machine-id-setup.xml
++++ b/man/systemd-machine-id-setup.xml
+@@ -116,7 +116,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
+index a769346..e14977d 100644
+--- a/man/systemd-notify.xml
++++ b/man/systemd-notify.xml
+@@ -172,7 +172,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index 495247e..c678031 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -178,7 +178,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd-tty-ask-password-agent.xml b/man/systemd-tty-ask-password-agent.xml
+index 31a18ba..cb5fb43 100644
+--- a/man/systemd-tty-ask-password-agent.xml
++++ b/man/systemd-tty-ask-password-agent.xml
+@@ -148,7 +148,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/systemd.device.xml b/man/systemd.device.xml
+index 002b647..586473c 100644
+--- a/man/systemd.device.xml
++++ b/man/systemd.device.xml
+@@ -75,7 +75,7 @@
+ udev tag (by default all block and network devices,
+ and a few others). This may be used to define
+ dependencies between devices and other units. To tag a
+- udev device use <literal>TAG+="systemd"</literal> in
++ udev device, use <literal>TAG+="systemd"</literal> in
+ the udev rules file, see
+ <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details.</para>
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index df5a79e..6f9f70c 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -94,7 +94,7 @@
+ in a unit file
+ <filename>home-lennart.mount</filename>. For details
+ about the escaping logic used to convert a file system
+- path to a unit name see
++ path to a unit name, see
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+ <para>Optionally, a mount unit may be accompanied by
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 80a935d..e869f95 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -441,7 +441,7 @@
+ <literal>one</literal> and
+ <literal>two two</literal>,
+ respectively. Since two commands are
+- specified
++ specified,
+ <varname>Type=oneshot</varname> must
+ be used.</para>
+
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 863a029..76bb5cd 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -996,7 +996,7 @@
+ <filename>smartcard.target</filename>,
+ <filename>sound.target</filename>.</para>
+
+- <para>In addition the following special unit is
++ <para>In addition, the following special unit is
+ understood only when systemd runs as service instance:</para>
+
+ <variablelist>
+diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
+index 13f6c84..5e8b25f 100644
+--- a/man/systemd.swap.xml
++++ b/man/systemd.swap.xml
+@@ -85,7 +85,7 @@
+ <filename noindex='true'>/dev/sda5</filename> must be configured in a
+ unit file <filename>dev-sda5.swap</filename>. For
+ details about the escaping logic used to convert a
+- file system path to a unit name see
++ file system path to a unit name, see
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
+
+ <para>All swap units automatically get the appropriate
+diff --git a/man/systemd.xml b/man/systemd.xml
+index 85c06d3..23a0c26 100644
+--- a/man/systemd.xml
++++ b/man/systemd.xml
+@@ -494,7 +494,7 @@
+ <filename>/proc</filename>.</para>
+
+ <para>For more information about the concepts and
+- ideas behind systemd please refer to the <ulink
++ ideas behind systemd, please refer to the <ulink
+ url="http://0pointer.de/blog/projects/systemd.html">Original
+ Design Document</ulink>.</para>
+
+diff --git a/man/telinit.xml b/man/telinit.xml
+index bb80939..b20a60a 100644
+--- a/man/telinit.xml
++++ b/man/telinit.xml
+@@ -171,7 +171,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+diff --git a/man/timedatectl.xml b/man/timedatectl.xml
+index be0ad3f..f4975ce 100644
+--- a/man/timedatectl.xml
++++ b/man/timedatectl.xml
+@@ -222,7 +222,7 @@
+ <refsect1>
+ <title>Exit status</title>
+
+- <para>On success 0 is returned, a non-zero failure
++ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
diff --git a/0202-man-grammar-and-wording-improvements.patch b/0202-man-grammar-and-wording-improvements.patch
new file mode 100644
index 0000000..f40a0a9
--- /dev/null
+++ b/0202-man-grammar-and-wording-improvements.patch
@@ -0,0 +1,79 @@
+From cae52ffc976561b6c847a38e3ea9d9a9ce2c1513 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh at inai.de>
+Date: Thu, 26 Dec 2013 02:47:45 +0100
+Subject: [PATCH] man: grammar and wording improvements
+
+This is a recurring submission and includes corrections to:
+- missing words, preposition choice.
+- change of /lib to /usr/lib, because that is what most distros are
+ using as the system-wide location for systemd/udev files.
+
+Conflicts:
+ man/journalctl.xml
+ man/sd_bus_message_get_cookie.xml
+ man/sd_bus_request_name.xml
+ man/systemctl.xml
+ man/systemd-networkd.service.xml
+ man/systemd.device.xml
+ man/systemd.exec.xml
+ man/systemd.timer.xml
+ man/udev.xml
+---
+ man/daemon.xml | 2 +-
+ man/sd_is_fifo.xml | 2 +-
+ man/systemd.service.xml | 2 +-
+ man/systemd.unit.xml | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 7790420..1fe4546 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -408,7 +408,7 @@
+ description files.</para>
+
+ <para>In systemd, if the developer or
+- administrator wants to make sure a service or
++ administrator wants to make sure that a service or
+ other unit is activated automatically on boot,
+ it is recommended to place a symlink to the
+ unit file in the <filename>.wants/</filename>
+diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
+index 4bb2236..58cd1c9 100644
+--- a/man/sd_is_fifo.xml
++++ b/man/sd_is_fifo.xml
+@@ -165,7 +165,7 @@
+ called to check whether the specified file descriptor
+ refers to a special file. If the
+ <parameter>path</parameter> parameter is not
+- <constant>NULL</constant>, it is checked whether file
++ <constant>NULL</constant>, it is checked whether the file
+ descriptor is bound to the specified file
+ name. Special files in this context are character
+ device nodes and files in <filename>/proc</filename>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e869f95..e3a370f 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -427,7 +427,7 @@
+ <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+ </programlisting>
+
+- <para>Only select environment variables
++ <para>Only select environment variables that
+ are set for executed commands. See
+ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index b70c5e9..f6b4b24 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -548,7 +548,7 @@
+ of units. When systemd stops or restarts
+ the units listed here, the action is
+ propagated to this unit.
+- Note that this is a one way dependency —
++ Note that this is a one-way dependency —
+ changes to this unit do not affect the
+ listed units.
+ </para></listitem>
diff --git a/0203-man-document-fail-nofail-auto-noauto.patch b/0203-man-document-fail-nofail-auto-noauto.patch
new file mode 100644
index 0000000..104ec34
--- /dev/null
+++ b/0203-man-document-fail-nofail-auto-noauto.patch
@@ -0,0 +1,130 @@
+From 6566f27fc123e1b2fd14e5177dcb21c6b3598d5d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 25 Dec 2013 23:20:57 -0500
+Subject: [PATCH] man: document fail/nofail, auto/noauto
+
+Also s/filesystem/file system/ in a few places.
+
+Conflicts:
+ TODO
+ man/systemd-fsck at .service.xml
+ man/systemd-fstab-generator.xml
+---
+ man/systemd-fsck at .service.xml | 5 ++++-
+ man/systemd-fstab-generator.xml | 6 ++++++
+ man/systemd-halt.service.xml | 2 +-
+ man/systemd.mount.xml | 20 +++++++++++++++++++-
+ man/systemd.unit.xml | 2 +-
+ man/udevadm.xml | 2 +-
+ 6 files changed, 32 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd-fsck at .service.xml b/man/systemd-fsck at .service.xml
+index e934352..c653dc5 100644
+--- a/man/systemd-fsck at .service.xml
++++ b/man/systemd-fsck at .service.xml
+@@ -62,7 +62,10 @@
+ system
+ check. <filename>systemd-fsck-root.service</filename> is
+ responsible for file system checks on the root
+- file system.</para>
++ file system. The root file system check is performed
++ before the other file systems. Either service is enabled
++ at boot if passno in <filename>/etc/fstab</filename> for
++ the file system is set to a value greater than zero.</para>
+
+ <para><filename>systemd-fsck</filename> will
+ forward file system checking progress to the
+diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
+index 9ca16c7..e3cf5d2 100644
+--- a/man/systemd-fstab-generator.xml
++++ b/man/systemd-fstab-generator.xml
+@@ -61,6 +61,12 @@
+ reloaded. This will instantiate mount and swap units
+ as necessary.</para>
+
++ <para>The <varname>passno</varname> field is treated
++ like a simple boolean, and the ordering information is
++ discarded. However, if the root file system is
++ checked, it is checked before all the other
++ file systems.</para>
++
+ <para>See
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ and
+diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
+index 99457aa..bec2e36 100644
+--- a/man/systemd-halt.service.xml
++++ b/man/systemd-halt.service.xml
+@@ -86,7 +86,7 @@
+ <para>It is necessary to have this code in a separate binary
+ because otherwise rebooting after an upgrade might be broken —
+ the running PID 1 could still depend on libraries which are not
+- available any more, thus keeping the filesystem busy, which
++ available any more, thus keeping the file system busy, which
+ then cannot be re-mounted read-only.</para>
+
+ <para>Immediately before executing the actual system
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 6f9f70c..cadf950 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -132,7 +132,10 @@
+ for details). Mounts listed in
+ <filename>/etc/fstab</filename> will be converted into
+ native units dynamically at boot and when the
+- configuration of the system manager is reloaded. See
++ configuration of the system manager is reloaded. In
++ general, configuring mount points through
++ <filename>/etc/fstab</filename> is the preferred
++ approach. See
+ <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for details about the conversion.</para>
+
+@@ -159,6 +162,21 @@
+ <literal>s</literal>, <literal>min</literal>,
+ <literal>h</literal>, <literal>ms</literal>.</para>
+
++ <para>If <option>nofail</option> is given, this mount
++ will be only wanted, not required, by the
++ <filename>local-fs.target</filename>. This means that
++ the boot will continue even if this mount point is not
++ mounted successfully. Option <option>fail</option> has
++ the opposite meaning and is the default.</para>
++
++ <para>If <option>noauto</option> is given, this mount
++ will not be added as a dependency for
++ <filename>local-fs.target</filename>. This means that
++ it will not be mounted automatically during boot,
++ unless it is pulled in by some other unit. Option
++ <option>auto</option> has the opposite meaning and is
++ the default.</para>
++
+ <para>If a mount point is configured in both
+ <filename>/etc/fstab</filename> and a unit file that
+ is stored below <filename>/usr</filename>, the former
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index f6b4b24..4704352 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -232,7 +232,7 @@
+ multiple units from a single configuration file. If
+ systemd looks for a unit configuration file, it will
+ first search for the literal unit name in the
+- filesystem. If that yields no success and the unit
++ file system. If that yields no success and the unit
+ name contains an <literal>@</literal> character, systemd will look for a
+ unit template that shares the same name but with the
+ instance string (i.e. the part between the <literal>@</literal> character
+diff --git a/man/udevadm.xml b/man/udevadm.xml
+index a1ffe42..ca3713f 100644
+--- a/man/udevadm.xml
++++ b/man/udevadm.xml
+@@ -461,7 +461,7 @@
+ <varlistentry>
+ <term><option>--root=<replaceable>string</replaceable></option></term>
+ <listitem>
+- <para>Alternative root path in the filesystem for reading and writing files.</para>
++ <para>Alternative root path in the file system for reading and writing files.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
diff --git a/0204-man-fix-description-of-is-enabled-returned-value.patch b/0204-man-fix-description-of-is-enabled-returned-value.patch
new file mode 100644
index 0000000..0686560
--- /dev/null
+++ b/0204-man-fix-description-of-is-enabled-returned-value.patch
@@ -0,0 +1,22 @@
+From 8debc611398abf60d16e73982c9d56b5ea957e15 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 24 Dec 2013 22:57:15 -0500
+Subject: [PATCH] man: fix description of is-enabled returned value
+
+---
+ man/systemctl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 61deb19..25b03d8 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -932,7 +932,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+ <row>
+ <entry><literal>static</literal></entry>
+ <entry>Unit is not enabled, but has no provisions for enabling in [Install] section</entry>
+- <entry>1</entry>
++ <entry>0</entry>
+ </row>
+ <row>
+ <entry><literal>disabled</literal></entry>
diff --git a/0205-man-fix-Type-reference.patch b/0205-man-fix-Type-reference.patch
new file mode 100644
index 0000000..7bc3030
--- /dev/null
+++ b/0205-man-fix-Type-reference.patch
@@ -0,0 +1,23 @@
+From c32611c5388de404cf4b169fa3d757c2603e597d Mon Sep 17 00:00:00 2001
+From: Marcos Felipe Rasia de Mello <marcosfrm at gmail.com>
+Date: Thu, 26 Dec 2013 17:47:57 -0200
+Subject: [PATCH] man: fix Type= reference
+
+Simple man page fix attached.
+---
+ man/systemd.service.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index e3a370f..898c19d 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,7 +139,7 @@
+
+ <para>If set to
+ <option>simple</option> (the default
+- value if <varname>BusName=</varname>
++ value if <varname>Type=</varname>
+ is not specified), it is expected that
+ the process configured with
+ <varname>ExecStart=</varname> is the
diff --git a/0206-man-fix-Type-reference-v2.patch b/0206-man-fix-Type-reference-v2.patch
new file mode 100644
index 0000000..694a0f3
--- /dev/null
+++ b/0206-man-fix-Type-reference-v2.patch
@@ -0,0 +1,37 @@
+From 73868c5b0a59438256d8abd4157ff915a7dc1f37 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 01:18:39 -0500
+Subject: [PATCH] man: fix Type= reference v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+grawity:
+
+ It looks like the old version _was_ correct – the default value will
+ be "Type=dbus" if the service has a BusName set.
+
+ Suggested change: "if neither Type= nor BusName= is specified"
+---
+ man/systemd.service.xml | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 898c19d..71bcfb4 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -139,9 +139,11 @@
+
+ <para>If set to
+ <option>simple</option> (the default
+- value if <varname>Type=</varname>
+- is not specified), it is expected that
+- the process configured with
++ value if neither
++ <varname>Type=</varname> nor
++ <varname>BusName=</varname> are
++ specified), it is expected that the
++ process configured with
+ <varname>ExecStart=</varname> is the
+ main process of the service. In this
+ mode, if the process offers
diff --git a/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 0000000..c013152
--- /dev/null
+++ b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,38 @@
+From d38baf3d9088a2d206a6b622fb7f609dc115bd6a Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Fri, 27 Dec 2013 09:35:20 -0800
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
+index 6f8301f..192b715 100644
+--- a/hwdb/20-bluetooth-vendor-product.hwdb
++++ b/hwdb/20-bluetooth-vendor-product.hwdb
+@@ -427,7 +427,7 @@ bluetooth:v008B*
+ ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC
+
+ bluetooth:v008C*
+- ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
++ ID_VENDOR_FROM_DATABASE=Qualcomm Retail Solutions, Inc. (formerly Qualcomm Labs, Inc.)
+
+ bluetooth:v008D*
+ ID_VENDOR_FROM_DATABASE=Zscan Software
+@@ -839,3 +839,15 @@ bluetooth:v0115*
+
+ bluetooth:v0116*
+ ID_VENDOR_FROM_DATABASE=1OAK Technologies
++
++bluetooth:v0117*
++ ID_VENDOR_FROM_DATABASE=Wimoto Technologies Inc
++
++bluetooth:v0118*
++ ID_VENDOR_FROM_DATABASE=Radius Networks, Inc.
++
++bluetooth:v0119*
++ ID_VENDOR_FROM_DATABASE=Wize Technology Co., Ltd.
++
++bluetooth:v011A*
++ ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
diff --git a/0208-man-add-a-note-about-propagating-signals.patch b/0208-man-add-a-note-about-propagating-signals.patch
new file mode 100644
index 0000000..687f5a7
--- /dev/null
+++ b/0208-man-add-a-note-about-propagating-signals.patch
@@ -0,0 +1,61 @@
+From 16142c7f1f24c58af1388608f1efb382a094bcb5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 15:27:24 -0500
+Subject: [PATCH] man: add a note about propagating signals
+
+---
+ man/systemd.service.xml | 39 +++++++++++++++++++++++++--------------
+ 1 file changed, 25 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 71bcfb4..af3e0f2 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -734,22 +734,33 @@ ExecStart=/bin/echo $ONE $TWO ${TWO}
+ considered successful termination, in
+ addition to the normal successful exit
+ code 0 and the signals <constant>SIGHUP</constant>, <constant>SIGINT</constant>,
+- <constant>SIGTERM</constant> and <constant>SIGPIPE</constant>. Exit status
++ <constant>SIGTERM</constant>, and <constant>SIGPIPE</constant>. Exit status
+ definitions can either be numeric exit
+ codes or termination signal names,
+- separated by spaces. Example:
+- <literal>SuccessExitStatus=1 2 8
+- <constant>SIGKILL</constant></literal>, ensures that exit
+- codes 1, 2, 8 and the termination
+- signal <constant>SIGKILL</constant> are considered clean
+- service terminations. This option may
+- appear more than once in which case
+- the list of successful exit statuses
+- is merged. If the empty string is
+- assigned to this option, the list is
+- reset, all prior assignments of this
+- option will have no
+- effect.</para></listitem>
++ separated by spaces. For example:
++ <programlisting>SuccessExitStatus=1 2 8 <constant>SIGKILL</constant></programlisting>
++ ensures that exit codes 1, 2, 8 and
++ the termination signal
++ <constant>SIGKILL</constant> are
++ considered clean service terminations.
++ </para>
++
++ <para>Note that if a process has a
++ signal handler installed and exits by
++ calling
++ <citerefentry><refentrytitle>_exit</refentrytitle><manvolnum>2</manvolnum></citerefentry>
++ in response to a signal, the
++ information about the signal is lost.
++ Programs should instead perform cleanup and kill themselves with the same signal instead. See
++ <ulink url="http://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT — How to be a proper program</ulink>.</para>
++
++ <para>This option may appear more than once
++ in which case the list of successful
++ exit statuses is merged. If the empty
++ string is assigned to this option, the
++ list is reset, all prior assignments
++ of this option will have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0209-man-include-autoconf-snippet-in-daemon-7.patch b/0209-man-include-autoconf-snippet-in-daemon-7.patch
new file mode 100644
index 0000000..1a74456
--- /dev/null
+++ b/0209-man-include-autoconf-snippet-in-daemon-7.patch
@@ -0,0 +1,41 @@
+From cc5b9c30f5e8312ee8905f7882da7ab79fef571c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny at gentoo.org>
+Date: Fri, 27 Dec 2013 23:44:27 -0500
+Subject: [PATCH] man: include autoconf snippet in daemon(7)
+
+https://bugs.freedesktop.org/show_bug.cgi?id=40446
+---
+ man/daemon.xml | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/man/daemon.xml b/man/daemon.xml
+index 1fe4546..105826a 100644
+--- a/man/daemon.xml
++++ b/man/daemon.xml
+@@ -765,12 +765,20 @@
+
+ <programlisting>PKG_PROG_PKG_CONFIG
+ AC_ARG_WITH([systemdsystemunitdir],
+- AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+- [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+-if test "x$with_systemdsystemunitdir" != xno; then
+- AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+-fi
+-AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])</programlisting>
++ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),,
++ [with_systemdsystemunitdir=auto])
++AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
++ def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
++
++ AS_IF([test "x$def_systemdsystemunitdir" = "x"],
++ [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
++ [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
++ with_systemdsystemunitdir=no],
++ [with_systemdsystemunitdir=$def_systemdsystemunitdir])])
++AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
++ [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
++AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"])
++</programlisting>
+
+ <para>This snippet allows automatic
+ installation of the unit files on systemd
diff --git a/0210-systemd-python-fix-setting-of-exception-codes.patch b/0210-systemd-python-fix-setting-of-exception-codes.patch
new file mode 100644
index 0000000..82d0980
--- /dev/null
+++ b/0210-systemd-python-fix-setting-of-exception-codes.patch
@@ -0,0 +1,325 @@
+From 2a683cff7e7ac4f94ce545a0907d5b5b883c2a36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 29 Dec 2013 23:39:28 -0500
+Subject: [PATCH] systemd-python: fix setting of exception codes
+
+The return value of 0 would be treated as failure by mistake,
+resulting in " SystemError: error return without exception set".
+The way that set_error() is used is changed to be the same
+everywhere.
+---
+ src/python-systemd/_daemon.c | 14 +++++-----
+ src/python-systemd/_reader.c | 63 ++++++++++++++++++++------------------------
+ 2 files changed, 35 insertions(+), 42 deletions(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index f0ab16f..c6db69f 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -88,7 +88,7 @@ static PyObject* notify(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+
+ r = sd_notify(unset, msg);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -123,7 +123,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #endif
+
+ r = sd_listen_fds(unset);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return long_FromLong(r);
+@@ -151,7 +151,7 @@ static PyObject* is_fifo(PyObject *self, PyObject *args) {
+ #endif
+
+ r = sd_is_fifo(fd, path);
+- if (set_error(r, path, NULL))
++ if (set_error(r, path, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -179,7 +179,7 @@ static PyObject* is_mq(PyObject *self, PyObject *args) {
+ #endif
+
+ r = sd_is_mq(fd, path);
+- if (set_error(r, path, NULL))
++ if (set_error(r, path, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -203,7 +203,7 @@ static PyObject* is_socket(PyObject *self, PyObject *args) {
+ return NULL;
+
+ r = sd_is_socket(fd, family, type, listening);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -230,7 +230,7 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) {
+ }
+
+ r = sd_is_socket_inet(fd, family, type, listening, (uint16_t) port);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -265,7 +265,7 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) {
+ #endif
+
+ r = sd_is_socket_unix(fd, type, listening, path, length);
+- if (set_error(r, path, NULL))
++ if (set_error(r, path, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
+index bc5db19..0c88926 100644
+--- a/src/python-systemd/_reader.c
++++ b/src/python-systemd/_reader.c
+@@ -206,8 +206,7 @@ PyDoc_STRVAR(Reader_reliable_fd__doc__,
+ static PyObject* Reader_reliable_fd(Reader *self, PyObject *args)
+ {
+ int r = sd_journal_reliable_fd(self->j);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ return PyBool_FromLong(r);
+ }
+@@ -221,8 +220,7 @@ PyDoc_STRVAR(Reader_get_events__doc__,
+ static PyObject* Reader_get_events(Reader *self, PyObject *args)
+ {
+ int r = sd_journal_get_events(self->j);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ return long_FromLong(r);
+ }
+@@ -242,8 +240,7 @@ static PyObject* Reader_get_timeout(Reader *self, PyObject *args)
+ uint64_t t;
+
+ r = sd_journal_get_timeout(self->j, &t);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ if (t == (uint64_t) -1)
+@@ -265,8 +262,7 @@ static PyObject* Reader_get_timeout_ms(Reader *self, PyObject *args)
+ uint64_t t;
+
+ r = sd_journal_get_timeout(self->j, &t);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return absolute_timeout(t);
+@@ -304,7 +300,7 @@ static PyObject* Reader_get_usage(Reader *self, PyObject *args)
+ uint64_t bytes;
+
+ r = sd_journal_get_usage(self->j, &bytes);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(bytes));
+@@ -366,8 +362,7 @@ static PyObject* Reader_next(Reader *self, PyObject *args)
+ assert_not_reached("should not be here");
+ Py_END_ALLOW_THREADS
+
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ return PyBool_FromLong(r);
+ }
+@@ -445,7 +440,8 @@ static PyObject* Reader_get(Reader *self, PyObject *args)
+ if (r == -ENOENT) {
+ PyErr_SetString(PyExc_KeyError, field);
+ return NULL;
+- } else if (set_error(r, NULL, "field name is not valid"))
++ }
++ if (set_error(r, NULL, "field name is not valid") < 0)
+ return NULL;
+
+ r = extract(msg, msg_len, NULL, &value);
+@@ -530,7 +526,7 @@ static PyObject* Reader_get_realtime(Reader *self, PyObject *args)
+ assert(!args);
+
+ r = sd_journal_get_realtime_usec(self->j, ×tamp);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -555,7 +551,7 @@ static PyObject* Reader_get_monotonic(Reader *self, PyObject *args)
+ assert(!args);
+
+ r = sd_journal_get_monotonic_usec(self->j, ×tamp, &id);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(timestamp));
+@@ -598,8 +594,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds
+ return NULL;
+
+ r = sd_journal_add_match(self->j, match, match_len);
+- set_error(r, NULL, "Invalid match");
+- if (r < 0)
++ if (set_error(r, NULL, "Invalid match") < 0)
+ return NULL;
+
+ Py_RETURN_NONE;
+@@ -616,8 +611,7 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args)
+ {
+ int r;
+ r = sd_journal_add_disjunction(self->j);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -633,8 +627,7 @@ static PyObject* Reader_add_conjunction(Reader *self, PyObject *args)
+ {
+ int r;
+ r = sd_journal_add_conjunction(self->j);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -661,7 +654,7 @@ static PyObject* Reader_seek_head(Reader *self, PyObject *args)
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_seek_head(self->j);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -678,7 +671,7 @@ static PyObject* Reader_seek_tail(Reader *self, PyObject *args)
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_seek_tail(self->j);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -699,7 +692,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args)
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_seek_realtime_usec(self->j, timestamp);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -723,20 +716,20 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args)
+
+ if (bootid) {
+ r = sd_id128_from_string(bootid, &id);
+- if (set_error(r, NULL, "Invalid bootid"))
++ if (set_error(r, NULL, "Invalid bootid") < 0)
+ return NULL;
+ } else {
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_id128_get_boot(&id);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_seek_monotonic_usec(self->j, id, timestamp);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ Py_RETURN_NONE;
+@@ -809,7 +802,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args)
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_seek_cursor(self->j, cursor);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, "Invalid cursor"))
++ if (set_error(r, NULL, "Invalid cursor") < 0)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+@@ -828,7 +821,7 @@ static PyObject* Reader_get_cursor(Reader *self, PyObject *args)
+ assert(!args);
+
+ r = sd_journal_get_cursor(self->j, &cursor);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return unicode_FromString(cursor);
+@@ -851,8 +844,7 @@ static PyObject* Reader_test_cursor(Reader *self, PyObject *args)
+ return NULL;
+
+ r = sd_journal_test_cursor(self->j, cursor);
+- set_error(r, NULL, NULL);
+- if (r < 0)
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return PyBool_FromLong(r);
+@@ -876,7 +868,7 @@ static PyObject* Reader_query_unique(Reader *self, PyObject *args)
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_query_unique(self->j, query);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, "Invalid field name"))
++ if (set_error(r, NULL, "Invalid field name") < 0)
+ return NULL;
+
+ value_set = PySet_New(0);
+@@ -930,7 +922,8 @@ static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
+ else
+ set_error(r, NULL, NULL);
+ return NULL;
+- } else if (set_error(r, NULL, NULL))
++ }
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return unicode_FromString(msg);
+@@ -955,13 +948,13 @@ static PyObject* get_catalog(PyObject *self, PyObject *args)
+ return NULL;
+
+ r = sd_id128_from_string(id_, &id);
+- if (set_error(r, NULL, "Invalid id128"))
++ if (set_error(r, NULL, "Invalid id128") < 0)
+ return NULL;
+
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_get_catalog_for_message_id(id, &msg);
+ Py_END_ALLOW_THREADS
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return unicode_FromString(msg);
+@@ -979,7 +972,7 @@ static PyObject* Reader_get_data_threshold(Reader *self, void *closure)
+ int r;
+
+ r = sd_journal_get_data_threshold(self->j, &cvalue);
+- if (set_error(r, NULL, NULL))
++ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ return long_FromSize_t(cvalue);
diff --git a/0211-systemd-python-fix-listen_fds-under-Python-2.patch b/0211-systemd-python-fix-listen_fds-under-Python-2.patch
new file mode 100644
index 0000000..fb0e675
--- /dev/null
+++ b/0211-systemd-python-fix-listen_fds-under-Python-2.patch
@@ -0,0 +1,22 @@
+From 353a5553a38d002a69a4fbafabf1e9ab50ff32c2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 00:01:00 -0500
+Subject: [PATCH] systemd-python: fix listen_fds under Python 2
+
+---
+ src/python-systemd/_daemon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
+index c6db69f..3982e85 100644
+--- a/src/python-systemd/_daemon.c
++++ b/src/python-systemd/_daemon.c
+@@ -114,7 +114,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
+ #else
+ PyObject *obj = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|O:_listen_fds",
+- (char**) kwlist, &unset, &obj))
++ (char**) kwlist, &obj))
+ return NULL;
+ if (obj != NULL)
+ unset = PyObject_IsTrue(obj);
diff --git a/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
new file mode 100644
index 0000000..a08fc4b
--- /dev/null
+++ b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
@@ -0,0 +1,120 @@
+From 204a710b647527c35cee26962bbd324e6cebc822 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 00:11:30 -0500
+Subject: [PATCH] man: expand on some more subtle points in systemd.socket(5)
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#1694
+---
+ man/systemd.socket.xml | 67 ++++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 49 insertions(+), 18 deletions(-)
+
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index ac3127d..570a6fb 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -85,21 +85,26 @@
+ processes of the socket.</para>
+
+ <para>For each socket file a matching service file
+- (see
++ must exist, describing the service to start on
++ incoming traffic on the socket (see
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+- for details) must exist, describing the service to
+- start on incoming traffic on the socket. Depending on
+- the setting of <option>Accept=</option> (see below),
+- this must either be named like the socket unit, but
+- with the suffix replaced; or it must be a template
+- file named the same way. Example: a socket file
++ for more information about .service files). The name
++ of the .service unit is by default the same as the
++ name of the .socket unit, but can be altered with
++ <option>Service=</option> option described below.
++ Depending on the setting of <option>Accept=</option>
++ option described below, this .service unit must either
++ be named like the .socket unit, but with the suffix
++ replaced, unless overridden with
++ <option>Service=</option>; or it must be a template
++ unit named the same way. Example: a socket file
+ <filename>foo.socket</filename> needs a matching
+ service <filename>foo.service</filename> if
+ <option>Accept=false</option> is set. If
+- <option>Accept=true</option> is set, a service template
+- file <filename>foo at .service</filename> must exist from
+- which services are instantiated for each incoming
+- connection.</para>
++ <option>Accept=true</option> is set, a service
++ template file <filename>foo at .service</filename> must
++ exist from which services are instantiated for each
++ incoming connection.</para>
+
+ <para>Unless <varname>DefaultDependencies=</varname>
+ is set to <option>false</option>, socket units will
+@@ -116,9 +121,21 @@
+ boot or late system shutdown should disable this
+ option.</para>
+
++ <para>Socket units will have a
++ <varname>Before=</varname> dependency on the service
++ which they trigger added implicitly. No implicit
++ <varname>WantedBy=</varname> or
++ <varname>RequiredBy=</varname> dependency from the
++ socket to the service is added. This means that the
++ service may be started without the socket, in which
++ case it must be able to open sockets by itself. To
++ prevent this, an explicit <varname>Requires=</varname>
++ dependency may be added.</para>
++
+ <para>Socket units may be used to implement on-demand
+ starting of services, as well as parallelized starting
+- of services.</para>
++ of services. See the blog stories linked at the end
++ for introduction.</para>
+
+ <para>Note that the daemon software configured for
+ socket activation with socket units needs to be able
+@@ -221,12 +238,23 @@
+ of any of these options will have no
+ effect.</para>
+
++ <para>It is also possible to have more
++ than one socket unit for the same
++ service when using
++ <varname>Service=</varname>, and the
++ service will receive all the sockets
++ configured in all the socket units.
++ Sockets configured in one unit are
++ passed in the order of configuration,
++ but no ordering between socket units
++ is specified.</para>
++
+ <para>If an IP address is used here,
+ it is often desirable to listen on it
+ before the interface it is configured
+ on is up and running, and even
+ regardless of whether it will be up and
+- running ever at all. To deal with this
++ running at any point. To deal with this
+ it is recommended to set the
+ <varname>FreeBind=</varname> option
+ described below.</para></listitem>
+@@ -687,11 +715,14 @@
+ <term><varname>Service=</varname></term>
+ <listitem><para>Specifies the service
+ unit name to activate on incoming
+- traffic. This defaults to the service
+- that bears the same name as the socket
+- (ignoring the different suffixes). In
+- most cases it should not be necessary
+- to use this option.</para></listitem>
++ traffic. This setting is only allowed
++ for sockets with
++ <varname>Accept=no</varname>. It
++ defaults to the service that bears the
++ same name as the socket (with the
++ suffix replaced). In most cases it
++ should not be necessary to use this
++ option.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
diff --git a/0213-tmpfiles-rename-unsafe-to-boot.patch b/0213-tmpfiles-rename-unsafe-to-boot.patch
new file mode 100644
index 0000000..aec129c
--- /dev/null
+++ b/0213-tmpfiles-rename-unsafe-to-boot.patch
@@ -0,0 +1,119 @@
+From 3d2c847396cf348ef1ee55f5d4211045a6202efc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 13:00:38 -0500
+Subject: [PATCH] tmpfiles: rename --unsafe to --boot
+
+As suggested by Kay, it is better to describe what is done,
+not what might happen.
+---
+ man/systemd-tmpfiles.xml | 2 +-
+ man/tmpfiles.d.xml | 4 ++--
+ src/tmpfiles/tmpfiles.c | 14 +++++++-------
+ units/systemd-tmpfiles-setup.service.in | 2 +-
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
+index c678031..64f9cf9 100644
+--- a/man/systemd-tmpfiles.xml
++++ b/man/systemd-tmpfiles.xml
+@@ -133,7 +133,7 @@
+ removed.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+- <term><option>--unsafe</option></term>
++ <term><option>--boot</option></term>
+ <listitem><para>Also execute lines
+ with an exclamation mark.
+ </para></listitem>
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index ed88751..8267ffc 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -273,7 +273,7 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ execute at any time, e.g. on package upgrades.
+ <command>systemd-tmpfiles</command> will
+ execute line with an exclamation mark only if
+- option <option>--unsafe</option> is given.
++ option <option>--boot</option> is given.
+ </para>
+
+ <para>For example:
+@@ -286,7 +286,7 @@ r! /tmp/.X[0-9]*-lock
+ </programlisting>
+ The second line in contrast to the first one
+ would break a running system, and will only be
+- executed with <option>--unsafe</option>.</para>
++ executed with <option>--boot</option>.</para>
+ </refsect2>
+
+ <refsect2>
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 30a8a55..4dd1638 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -106,7 +106,7 @@ static Set *unix_sockets = NULL;
+ static bool arg_create = false;
+ static bool arg_clean = false;
+ static bool arg_remove = false;
+-static bool arg_unsafe = false;
++static bool arg_boot = false;
+
+ static char **include_prefixes = NULL;
+ static char **exclude_prefixes = NULL;
+@@ -1100,7 +1100,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) {
+ log_error("[%s:%u] Unknown modifier '%s'", fname, line, action);
+ return -EINVAL;
+- } else if (strlen(action) > 1 && !arg_unsafe)
++ } else if (strlen(action) > 1 && !arg_boot)
+ return 0;
+
+ type = action[0];
+@@ -1275,7 +1275,7 @@ static int help(void) {
+ " --create Create marked files/directories\n"
+ " --clean Clean up marked directories\n"
+ " --remove Remove marked files/directories\n"
+- " --unsafe Execute actions only safe at boot\n"
++ " --boot Execute actions only safe at boot\n"
+ " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n"
+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n",
+ program_invocation_short_name);
+@@ -1289,7 +1289,7 @@ static int parse_argv(int argc, char *argv[]) {
+ ARG_CREATE,
+ ARG_CLEAN,
+ ARG_REMOVE,
+- ARG_UNSAFE,
++ ARG_BOOT,
+ ARG_PREFIX,
+ ARG_EXCLUDE_PREFIX,
+ };
+@@ -1299,7 +1299,7 @@ static int parse_argv(int argc, char *argv[]) {
+ { "create", no_argument, NULL, ARG_CREATE },
+ { "clean", no_argument, NULL, ARG_CLEAN },
+ { "remove", no_argument, NULL, ARG_REMOVE },
+- { "unsafe", no_argument, NULL, ARG_UNSAFE },
++ { "boot", no_argument, NULL, ARG_BOOT },
+ { "prefix", required_argument, NULL, ARG_PREFIX },
+ { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX },
+ { NULL, 0, NULL, 0 }
+@@ -1330,8 +1330,8 @@ static int parse_argv(int argc, char *argv[]) {
+ arg_remove = true;
+ break;
+
+- case ARG_UNSAFE:
+- arg_unsafe = true;
++ case ARG_BOOT:
++ arg_boot = true;
+ break;
+
+ case ARG_PREFIX:
+diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
+index c2dcae0..01043b7 100644
+--- a/units/systemd-tmpfiles-setup.service.in
++++ b/units/systemd-tmpfiles-setup.service.in
+@@ -24,4 +24,4 @@ RefuseManualStop=yes
+ [Service]
+ Type=oneshot
+ RemainAfterExit=yes
+-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev
++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev
diff --git a/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
new file mode 100644
index 0000000..5bbb976
--- /dev/null
+++ b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
@@ -0,0 +1,47 @@
+From ba087745bca7eea8f62cc529c3e6c5eaf6bf2904 Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller at googlemail.com>
+Date: Mon, 30 Dec 2013 17:43:52 +0100
+Subject: [PATCH] sleep-config: Dereference pointer before check for NULL
+
+This fixes a bug pointed out by http://css.csail.mit.edu/stack/
+(Optimization-unstable code)
+It is a similar fix as f146f5e159 (2013-12-30, core:
+Forgot to dereference pointer when checking for NULL)
+
+To explain this bug consider the following similar, but simpler code:
+ if (!p)
+ free(*p)
+
+Assume the if condition evaluates to true, then we will access *p,
+which means the compiler can assume p is a valid pointer, so it could
+dereference p and use the value *p.
+Assuming p as a valid pointer, !p will be false.
+But initally we assumed the condition evaluates to true.
+
+By this reasoning the optimizing compiler can deduce, we have dead code.
+("The if will never be taken, as *p must be valid, because otherwise
+accessing *p inside the if would segfault")
+
+This led to an error message of the static code checker, so I checked the
+code in question.
+
+As we access *modes and *states before the check in the changed line of
+this patch, I assume the line to be wrong and we actually wanted to check
+for *modes and *states being both non null.
+---
+ src/shared/sleep-config.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index d76e3ad..b2a0787 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -94,7 +94,7 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+ } else
+ assert_not_reached("what verb");
+
+- if (!modes || !states) {
++ if (!*modes || !*states) {
+ strv_free(*modes);
+ strv_free(*states);
+ return log_oom();
diff --git a/0215-sleep-config-fix-double-free.patch b/0215-sleep-config-fix-double-free.patch
new file mode 100644
index 0000000..be26e91
--- /dev/null
+++ b/0215-sleep-config-fix-double-free.patch
@@ -0,0 +1,99 @@
+From e8d2aa2c8d3533a2dc6f0db5ed22453a16bcf1ee Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 31 Dec 2013 11:23:58 -0500
+Subject: [PATCH] sleep-config: fix double free
+
+Before 34a3baa4d 'sleep-config: Dereference pointer before check for NULL'
+oom conditions would not be detected properly. After that commit, a double
+free was performed.
+
+Rework the whole function to be easier to understand, and also replace
+strv_split_nulstr with strv_new, since we know the strings anyway.
+---
+ src/shared/sleep-config.c | 38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index b2a0787..70a0896 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -28,11 +28,14 @@
+ #include "strv.h"
+ #include "util.h"
+
+-int parse_sleep_config(const char *verb, char ***modes, char ***states) {
++#define USE(x, y) do{ (x) = (y); (y) = NULL; } while(0)
++
++int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
+ _cleanup_strv_free_ char
+ **suspend_mode = NULL, **suspend_state = NULL,
+ **hibernate_mode = NULL, **hibernate_state = NULL,
+ **hybrid_mode = NULL, **hybrid_state = NULL;
++ char **modes, **states;
+
+ const ConfigTableItem items[] = {
+ { "Sleep", "SuspendMode", config_parse_strv, 0, &suspend_mode },
+@@ -59,47 +62,46 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) {
+
+ if (streq(verb, "suspend")) {
+ /* empty by default */
+- *modes = suspend_mode;
++ USE(modes, suspend_mode);
+
+ if (suspend_state)
+- *states = suspend_state;
++ USE(states, suspend_state);
+ else
+- *states = strv_split_nulstr("mem\0standby\0freeze\0");
++ states = strv_new("mem", "standby", "freeze", NULL);
+
+- suspend_mode = suspend_state = NULL;
+ } else if (streq(verb, "hibernate")) {
+ if (hibernate_mode)
+- *modes = hibernate_mode;
++ USE(modes, hibernate_mode);
+ else
+- *modes = strv_split_nulstr("platform\0shutdown\0");
++ modes = strv_new("platform", "shutdown", NULL);
+
+ if (hibernate_state)
+- *states = hibernate_state;
++ USE(states, hibernate_state);
+ else
+- *states = strv_split_nulstr("disk\0");
++ states = strv_new("disk", NULL);
+
+- hibernate_mode = hibernate_state = NULL;
+ } else if (streq(verb, "hybrid-sleep")) {
+ if (hybrid_mode)
+- *modes = hybrid_mode;
++ USE(modes, hybrid_mode);
+ else
+- *modes = strv_split_nulstr("suspend\0platform\0shutdown\0");
++ modes = strv_new("suspend", "platform", "shutdown", NULL);
+
+ if (hybrid_state)
+- *states = hybrid_state;
++ USE(states, hybrid_state);
+ else
+- *states = strv_split_nulstr("disk\0");
++ states = strv_new("disk", NULL);
+
+- hybrid_mode = hybrid_state = NULL;
+ } else
+ assert_not_reached("what verb");
+
+- if (!*modes || !*states) {
+- strv_free(*modes);
+- strv_free(*states);
++ if ((!modes && !streq(verb, "suspend")) || !states) {
++ strv_free(modes);
++ strv_free(states);
+ return log_oom();
+ }
+
++ *_modes = modes;
++ *_states = states;
+ return 0;
+ }
+
diff --git a/0216-rules-drivers-do-not-reset-RUN-list.patch b/0216-rules-drivers-do-not-reset-RUN-list.patch
new file mode 100644
index 0000000..1c9eb58
--- /dev/null
+++ b/0216-rules-drivers-do-not-reset-RUN-list.patch
@@ -0,0 +1,33 @@
+From eb882aa36d9c700b7b5469df3f2bf43092d5c68b Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Fri, 3 Jan 2014 01:32:03 +0100
+Subject: [PATCH] rules: drivers - do not reset RUN list
+
+---
+ rules/80-drivers.rules | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules
+index 0b22d73..8551f47 100644
+--- a/rules/80-drivers.rules
++++ b/rules/80-drivers.rules
+@@ -2,12 +2,12 @@
+
+ ACTION=="remove", GOTO="drivers_end"
+
+-ENV{MODALIAS}=="?*", RUN{builtin}="kmod load $env{MODALIAS}"
+-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}="kmod load tifm_sd"
+-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}="kmod load tifm_ms"
+-SUBSYSTEM=="memstick", RUN{builtin}="kmod load ms_block mspro_block"
+-SUBSYSTEM=="i2o", RUN{builtin}="kmod load i2o_block"
+-SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}="kmod load ppdev"
+-KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}="kmod load sm_ftl"
++ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}"
++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd"
++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms"
++SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block"
++SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block"
++SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev"
++KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl"
+
+ LABEL="drivers_end"
diff --git a/0217-core-manager-print-info-about-interesting-signals.patch b/0217-core-manager-print-info-about-interesting-signals.patch
new file mode 100644
index 0000000..3cad48c
--- /dev/null
+++ b/0217-core-manager-print-info-about-interesting-signals.patch
@@ -0,0 +1,45 @@
+From 0e09a7e4c14e6b1d31a9a56b80d02b52c9583ab1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 22:12:38 -0500
+Subject: [PATCH] core/manager: print info about interesting signals
+
+Information about signals which are not routinely received by systemd
+are printed at info level. This should make it easier to see what is
+happening in the system.
+---
+ src/core/manager.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index a34a3c6..69ad4b5 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -1435,16 +1435,22 @@ static int manager_process_signal_fd(Manager *m) {
+ }
+
+ if (sfsi.ssi_pid > 0) {
+- char *p = NULL;
++ _cleanup_free_ char *p = NULL;
+
+ get_process_comm(sfsi.ssi_pid, &p);
+
+- log_debug("Received SIG%s from PID %lu (%s).",
+- signal_to_string(sfsi.ssi_signo),
+- (unsigned long) sfsi.ssi_pid, strna(p));
+- free(p);
++ log_full(sfsi.ssi_signo == SIGCHLD ||
++ (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER)
++ ? LOG_DEBUG : LOG_INFO,
++ "Received SIG%s from PID %lu (%s).",
++ signal_to_string(sfsi.ssi_signo),
++ (unsigned long) sfsi.ssi_pid, strna(p));
+ } else
+- log_debug("Received SIG%s.", signal_to_string(sfsi.ssi_signo));
++ log_full(sfsi.ssi_signo == SIGCHLD ||
++ (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER)
++ ? LOG_DEBUG : LOG_INFO,
++ "Received SIG%s.",
++ signal_to_string(sfsi.ssi_signo));
+
+ switch (sfsi.ssi_signo) {
+
diff --git a/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
new file mode 100644
index 0000000..707ce3e
--- /dev/null
+++ b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
@@ -0,0 +1,26 @@
+From d4466e04783415eee7eec269104e60ab1f6b4b50 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Dec 2013 11:21:56 -0500
+Subject: [PATCH] core/service: check if mainpid matches only if it is set
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1047304
+
+Conflicts:
+ src/core/service.c
+---
+ src/core/service.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 62ae8f0..f0acda1 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -3400,7 +3400,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+ return;
+ }
+
+- if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
++ if (s->notify_access == NOTIFY_MAIN && s->main_pid != 0 && pid != s->main_pid) {
+ log_warning_unit(u->id,
+ "%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
+ u->id, (unsigned long) pid, (unsigned long) s->main_pid);
diff --git a/0219-man-typo-fix.patch b/0219-man-typo-fix.patch
new file mode 100644
index 0000000..6a1759b
--- /dev/null
+++ b/0219-man-typo-fix.patch
@@ -0,0 +1,22 @@
+From dfb3a987b160406fb4cf6cc3935cf54571d7c373 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Sat, 4 Jan 2014 23:21:13 +0100
+Subject: [PATCH] man: typo fix
+
+---
+ man/systemd.time.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemd.time.xml b/man/systemd.time.xml
+index f438fa5..a837f23 100644
+--- a/man/systemd.time.xml
++++ b/man/systemd.time.xml
+@@ -222,7 +222,7 @@
+ <para>In the date and time specifications, any
+ component may be specified as <literal>*</literal> in
+ which case any value will match. Alternatively, each
+- component can be specified as list of values separated
++ component can be specified as a list of values separated
+ by commas. Values may also be suffixed with
+ <literal>/</literal> and a repetition value, which
+ indicates that the value and all values plus multiples
diff --git a/0220-swap-remove-if-else-with-the-same-data-path.patch b/0220-swap-remove-if-else-with-the-same-data-path.patch
new file mode 100644
index 0000000..fc12f02
--- /dev/null
+++ b/0220-swap-remove-if-else-with-the-same-data-path.patch
@@ -0,0 +1,29 @@
+From d61f36a7ef07c252b49cc8015fe37b69bffb1a35 Mon Sep 17 00:00:00 2001
+From: Stefan Beller <stefanbeller at googlemail.com>
+Date: Fri, 3 Jan 2014 20:33:20 +0100
+Subject: [PATCH] swap: remove if/else with the same data path
+
+This was introduced in e1770af812 (2012-02-03, swap: replace failure
+boolean by result enum).
+
+This just removes unneeded lines of code, no functional change.
+---
+ src/core/swap.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index f295b65..727bb95 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -959,10 +959,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+ case SWAP_DEACTIVATING_SIGKILL:
+ case SWAP_DEACTIVATING_SIGTERM:
+
+- if (f == SWAP_SUCCESS)
+- swap_enter_dead(s, f);
+- else
+- swap_enter_dead(s, f);
++ swap_enter_dead(s, f);
+ break;
+
+ default:
diff --git a/0221-hwdb-update.patch b/0221-hwdb-update.patch
new file mode 100644
index 0000000..2c7a3c1
--- /dev/null
+++ b/0221-hwdb-update.patch
@@ -0,0 +1,769 @@
+From 3c8008b94726f3812ac28f4a33db61635323ee6a Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel at holtmann.org>
+Date: Sun, 5 Jan 2014 00:44:34 -0800
+Subject: [PATCH] hwdb: update
+
+Conflicts:
+ hwdb/20-sdio-vendor-model.hwdb
+---
+ hwdb/20-OUI.hwdb | 97 +++++++++++++++++++++++++-
+ hwdb/20-pci-vendor-model.hwdb | 154 ++++++++++++++++++++++++++++++++++++++----
+ hwdb/20-usb-vendor-model.hwdb | 6 ++
+ 3 files changed, 241 insertions(+), 16 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index 92b96ae..a51a00a 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -13627,6 +13627,12 @@ OUI:40D8551E2*
+ OUI:40D8551E3*
+ ID_OUI_FROM_DATABASE=Mega Electronics Ltd
+
++OUI:40D8551E4*
++ ID_OUI_FROM_DATABASE=STEK Ltd
++
++OUI:40D855EE6*
++ ID_OUI_FROM_DATABASE=Narinet, Inc.
++
+ OUI:000000*
+ ID_OUI_FROM_DATABASE=XEROX CORPORATION
+
+@@ -35222,7 +35228,7 @@ OUI:001C4C*
+ ID_OUI_FROM_DATABASE=Petrotest Instruments
+
+ OUI:001C4D*
+- ID_OUI_FROM_DATABASE=Zeemote Technology Inc. (part of Aplix).
++ ID_OUI_FROM_DATABASE=Aplix IP Holdings Corporation
+
+ OUI:001C4E*
+ ID_OUI_FROM_DATABASE=TASA International Limited
+@@ -52606,6 +52612,9 @@ OUI:08D42B*
+ OUI:08D5C0*
+ ID_OUI_FROM_DATABASE=Seers Technology Co., Ltd
+
++OUI:08D833*
++ ID_OUI_FROM_DATABASE=Shenzhen RF Technology Co,.Ltd
++
+ OUI:08E5DA*
+ ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.
+
+@@ -53308,6 +53317,9 @@ OUI:1423D7*
+ OUI:142BD2*
+ ID_OUI_FROM_DATABASE=Armtel Ltd.
+
++OUI:142D27*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:142D8B*
+ ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
+
+@@ -53761,6 +53773,9 @@ OUI:18C451*
+ OUI:18C8E7*
+ ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd
+
++OUI:18CC23*
++ ID_OUI_FROM_DATABASE=Philio Technology Corporation
++
+ OUI:18D071*
+ ID_OUI_FROM_DATABASE=DASAN SMC, Inc.
+
+@@ -54688,6 +54703,9 @@ OUI:2838CF*
+ OUI:2839E7*
+ ID_OUI_FROM_DATABASE=Preceno Technology Pte.Ltd.
+
++OUI:283B96*
++ ID_OUI_FROM_DATABASE=Cool Control LTD
++
+ OUI:283CE4*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
+@@ -54907,6 +54925,9 @@ OUI:28E14C*
+ OUI:28E297*
+ ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd.
+
++OUI:28E347*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:28E608*
+ ID_OUI_FROM_DATABASE=Tokheim
+
+@@ -55717,6 +55738,9 @@ OUI:34E0CF*
+ OUI:34E0D7*
+ ID_OUI_FROM_DATABASE=DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD
+
++OUI:34E2FD*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:34EF44*
+ ID_OUI_FROM_DATABASE=2Wire
+
+@@ -56023,6 +56047,9 @@ OUI:3C1040*
+ OUI:3C106F*
+ ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES
+
++OUI:3C15C2*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:3C15EA*
+ ID_OUI_FROM_DATABASE=TESCOM CO., LTD.
+
+@@ -56227,6 +56254,9 @@ OUI:3CC99E*
+ OUI:3CCA87*
+ ID_OUI_FROM_DATABASE=Iders Incorporated
+
++OUI:3CCD93*
++ ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
++
+ OUI:3CCE73*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -56408,7 +56438,7 @@ OUI:40667A*
+ ID_OUI_FROM_DATABASE=mediola - connected living AG
+
+ OUI:406826*
+- ID_OUI_FROM_DATABASE=Thales Optronics Limited
++ ID_OUI_FROM_DATABASE=Thales UK Limited
+
+ OUI:406AAB*
+ ID_OUI_FROM_DATABASE=RIM
+@@ -57436,6 +57466,9 @@ OUI:5048EB*
+ OUI:504A5E*
+ ID_OUI_FROM_DATABASE=Masimo Corporation
+
++OUI:504A6E*
++ ID_OUI_FROM_DATABASE=NETGEAR INC.,
++
+ OUI:504F94*
+ ID_OUI_FROM_DATABASE=Loxone Electronics GmbH
+
+@@ -58480,6 +58513,9 @@ OUI:6045BD*
+ OUI:604616*
+ ID_OUI_FROM_DATABASE=XIAMEN VANN INTELLIGENT CO., LTD
+
++OUI:6047D4*
++ ID_OUI_FROM_DATABASE=FORICS Electronic Technology Co., Ltd.
++
+ OUI:604A1C*
+ ID_OUI_FROM_DATABASE=SUYIN Corporation
+
+@@ -58630,6 +58666,9 @@ OUI:60D30A*
+ OUI:60D819*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
++OUI:60D9C7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:60DA23*
+ ID_OUI_FROM_DATABASE=Estech Co.,Ltd
+
+@@ -58849,6 +58888,9 @@ OUI:6473E2*
+ OUI:647657*
+ ID_OUI_FROM_DATABASE=Innovative Security Designs
+
++OUI:6476BA*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:647791*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -58882,6 +58924,9 @@ OUI:6487D7*
+ OUI:6488FF*
+ ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+
++OUI:648D9E*
++ ID_OUI_FROM_DATABASE=IVT Electronic Co.,Ltd
++
+ OUI:64995D*
+ ID_OUI_FROM_DATABASE=LGE
+
+@@ -59161,6 +59206,9 @@ OUI:687924*
+ OUI:6879ED*
+ ID_OUI_FROM_DATABASE=SHARP Corporation
+
++OUI:687CC8*
++ ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L.
++
+ OUI:687CD5*
+ ID_OUI_FROM_DATABASE=Y Soft Corporation, a.s.
+
+@@ -59425,6 +59473,9 @@ OUI:6C6F18*
+ OUI:6C7039*
+ ID_OUI_FROM_DATABASE=Novar GmbH
+
++OUI:6C709F*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:6C71D9*
+ ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc
+
+@@ -59779,6 +59830,9 @@ OUI:708B78*
+ OUI:708D09*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
++OUI:709383*
++ ID_OUI_FROM_DATABASE=Intelligent Optical Network High Tech CO.,LTD.
++
+ OUI:7093F8*
+ ID_OUI_FROM_DATABASE=Space Monkey, Inc.
+
+@@ -60166,6 +60220,9 @@ OUI:74F612*
+ OUI:74F726*
+ ID_OUI_FROM_DATABASE=Neuron Robotics
+
++OUI:74F85D*
++ ID_OUI_FROM_DATABASE=Berkeley Nucleonics Corp
++
+ OUI:74FDA0*
+ ID_OUI_FROM_DATABASE=Compupal (Group) Corporation
+
+@@ -60862,6 +60919,9 @@ OUI:7CFADF*
+ OUI:7CFE28*
+ ID_OUI_FROM_DATABASE=Salutron Inc.
+
++OUI:7CFF62*
++ ID_OUI_FROM_DATABASE=Huizhou Super Electron Technology Co.,Ltd.
++
+ OUI:80000B*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+@@ -61105,6 +61165,9 @@ OUI:80D019*
+ OUI:80D18B*
+ ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd
+
++OUI:80D433*
++ ID_OUI_FROM_DATABASE=LzLabs GmbH
++
+ OUI:80D733*
+ ID_OUI_FROM_DATABASE=QSR Automations, Inc.
+
+@@ -61336,6 +61399,9 @@ OUI:84ACA4*
+ OUI:84AF1F*
+ ID_OUI_FROM_DATABASE=Beat System Service Co,. Ltd.
+
++OUI:84B59C*
++ ID_OUI_FROM_DATABASE=Juniper networks
++
+ OUI:84C2E4*
+ ID_OUI_FROM_DATABASE=Jiangsu Qinheng Co., Ltd.
+
+@@ -61402,6 +61468,9 @@ OUI:880355*
+ OUI:880905*
+ ID_OUI_FROM_DATABASE=MTMCommunications
+
++OUI:880FB6*
++ ID_OUI_FROM_DATABASE=Jabil Circuits India Pvt Ltd,-EHTP unit
++
+ OUI:881036*
+ ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+
+@@ -62605,6 +62674,9 @@ OUI:983000*
+ OUI:983071*
+ ID_OUI_FROM_DATABASE=DAIKYUNG VASCOM
+
++OUI:98349D*
++ ID_OUI_FROM_DATABASE=Krauss Maffei Technologies GmbH
++
+ OUI:983571*
+ ID_OUI_FROM_DATABASE=Sub10 Systems Ltd
+
+@@ -63061,6 +63133,9 @@ OUI:9CCAD9*
+ OUI:9CCD82*
+ ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD
+
++OUI:9CD21E*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:9CD24B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+@@ -63358,6 +63433,9 @@ OUI:A0CEC8*
+ OUI:A0CF5B*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:A0D12A*
++ ID_OUI_FROM_DATABASE=AXPRO Technology Inc.
++
+ OUI:A0D3C1*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
+@@ -64366,6 +64444,9 @@ OUI:B05B1F*
+ OUI:B05CE5*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
++OUI:B061C7*
++ ID_OUI_FROM_DATABASE=Ericsson-LG Enterprise
++
+ OUI:B06563*
+ ID_OUI_FROM_DATABASE=Shanghai Railway Communication Factory
+
+@@ -64684,6 +64765,9 @@ OUI:B46293*
+ OUI:B462AD*
+ ID_OUI_FROM_DATABASE=raytest GmbH
+
++OUI:B46698*
++ ID_OUI_FROM_DATABASE=Zealabs srl
++
+ OUI:B467E9*
+ ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd.
+
+@@ -65590,6 +65674,9 @@ OUI:C098E5*
+ OUI:C09C92*
+ ID_OUI_FROM_DATABASE=COBY
+
++OUI:C09D26*
++ ID_OUI_FROM_DATABASE=Topicon HK Lmd.
++
+ OUI:C09F42*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -65833,6 +65920,9 @@ OUI:C45DD8*
+ OUI:C46044*
+ ID_OUI_FROM_DATABASE=Everex Electronics Limited
+
++OUI:C4626B*
++ ID_OUI_FROM_DATABASE=ZPT Vigantice
++
+ OUI:C462EA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -68605,6 +68695,9 @@ OUI:EC14F6*
+ OUI:EC172F*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+
++OUI:EC1766*
++ ID_OUI_FROM_DATABASE=Research Centre Module
++
+ OUI:EC1A59*
+ ID_OUI_FROM_DATABASE=Belkin International Inc.
+
+diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
+index 6142dc8..7f833e3 100644
+--- a/hwdb/20-pci-vendor-model.hwdb
++++ b/hwdb/20-pci-vendor-model.hwdb
+@@ -4166,6 +4166,9 @@ pci:v00001002d00006600*
+ pci:v00001002d00006601*
+ ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M]
+
++pci:v00001002d00006601sv0000103Csd00002100*
++ ID_MODEL_FROM_DATABASE=FirePro M4100
++
+ pci:v00001002d00006602*
+ ID_MODEL_FROM_DATABASE=Mars
+
+@@ -4185,10 +4188,22 @@ pci:v00001002d00006607*
+ ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M]
+
+ pci:v00001002d00006610*
+- ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250]
++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250]
+
+ pci:v00001002d00006611*
+- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570]
++ ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R7 240 OEM]
++
++pci:v00001002d00006611sv00001028sd0000210B*
++ ID_MODEL_FROM_DATABASE=Radeon R5 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd00004248*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv0000174Bsd0000A240*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
++
++pci:v00001002d00006611sv00001B0Asd000090D3*
++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM
+
+ pci:v00001002d00006613*
+ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240]
+@@ -4224,7 +4239,7 @@ pci:v00001002d00006658*
+ ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X]
+
+ pci:v00001002d0000665C*
+- ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770]
++ ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770 / R9 260 OEM]
+
+ pci:v00001002d0000665Csv00001043sd00000452*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7790 DirectCU II OC
+@@ -4235,6 +4250,12 @@ pci:v00001002d0000665Csv00001462sd00002930*
+ pci:v00001002d0000665Csv00001462sd00002932*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8770
+
++pci:v00001002d0000665Csv00001462sd00002934*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
++pci:v00001002d0000665Csv0000148Csd00009260*
++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM
++
+ pci:v00001002d0000665Csv00001682sd00003310*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7790 Black Edition 2 GB
+
+@@ -4817,9 +4838,21 @@ pci:v00001002d00006742sv0000148Csd00006570*
+ pci:v00001002d00006742sv00001682sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
++pci:v00001002d00006742sv0000174Bsd00005570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 5570]
++
+ pci:v00001002d00006742sv0000174Bsd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
++pci:v00001002d00006742sv0000174Bsd00007570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 7570]
++
++pci:v00001002d00006742sv0000174Bsd00008510*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8510]
++
++pci:v00001002d00006742sv0000174Bsd00008570*
++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8570]
++
+ pci:v00001002d00006742sv00001787sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+@@ -5541,13 +5574,13 @@ pci:v00001002d00006770sv000017AAsd00003658*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470A
+
+ pci:v00001002d00006771*
+- ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490]
++ ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490 / R5 235X OEM]
+
+ pci:v00001002d00006772*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7450A]
+
+ pci:v00001002d00006778*
+- ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470]
++ ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470 / R5 235 OEM]
+
+ pci:v00001002d00006778sv00001019sd00000024*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+@@ -5580,7 +5613,7 @@ pci:v00001002d00006778sv0000174Bsd0000E145*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+
+ pci:v00001002d00006779*
+- ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450]
++ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
+
+ pci:v00001002d00006779sv00001019sd00000016*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+@@ -5979,7 +6012,7 @@ pci:v00001002d00006831*
+ ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
+
+ pci:v00001002d00006835*
+- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260]
++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R9 255 OEM]
+
+ pci:v00001002d00006837*
+ ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730]
+@@ -8967,7 +9000,7 @@ pci:v00001002d0000999C*
+ ID_MODEL_FROM_DATABASE=Richland
+
+ pci:v00001002d0000999D*
+- ID_MODEL_FROM_DATABASE=Richland
++ ID_MODEL_FROM_DATABASE=Richland [Radeon HD 8550D]
+
+ pci:v00001002d000099A0*
+ ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7520G]
+@@ -17663,6 +17696,9 @@ pci:v0000109Ed0000036Esv00001461sd00000761*
+ pci:v0000109Ed0000036Esv00001461sd00000771*
+ ID_MODEL_FROM_DATABASE=AverMedia AVerTV DVB-T 771
+
++pci:v0000109Ed0000036Esv00001464sd0000AA00*
++ ID_MODEL_FROM_DATABASE=iTuner Spectra8
++
+ pci:v0000109Ed0000036Esv000014F1sd00000001*
+ ID_MODEL_FROM_DATABASE=Bt878 Mediastream Controller NTSC
+
+@@ -27503,6 +27539,9 @@ pci:v000010ECd00005209*
+ pci:v000010ECd00005227*
+ ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader
+
++pci:v000010ECd00005227sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v000010ECd00005229*
+ ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+
+@@ -48170,9 +48209,18 @@ pci:v0000168Cd00000033*
+ pci:v0000168Cd00000034*
+ ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter
+
++pci:v0000168Cd00000034sv00001A56sd00002003*
++ ID_MODEL_FROM_DATABASE=Killer Wireless-N 1202 Half-size Mini PCIe Card
++
+ pci:v0000168Cd00000036*
+ ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter
+
++pci:v0000168Cd00000037*
++ ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter
++
++pci:v0000168Cd00000037sv00001A3Bsd00002100*
++ ID_MODEL_FROM_DATABASE=AW-NB100H 802.11n Wireless Mini PCIe Card
++
+ pci:v0000168Cd0000003C*
+ ID_MODEL_FROM_DATABASE=QCA988x 802.11ac Wireless Network Adapter
+
+@@ -48191,6 +48239,9 @@ pci:v0000168Cd00009013*
+ pci:v0000168Cd0000FF19*
+ ID_MODEL_FROM_DATABASE=AR5006X Wireless Network Adapter
+
++pci:v0000168Cd0000FF1B*
++ ID_MODEL_FROM_DATABASE=AR2425 Wireless Network Adapter [AR5007EG 802.11bg]
++
+ pci:v0000168Cd0000FF1C*
+ ID_MODEL_FROM_DATABASE=AR5008 Wireless Network Adapter
+
+@@ -49406,6 +49457,9 @@ pci:v00001814d00003298sv0000103Csd000018EC*
+ pci:v00001814d00003592*
+ ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe
+
++pci:v00001814d0000359F*
++ ID_MODEL_FROM_DATABASE=RT3592 PCIe Wireless Network Adapter
++
+ pci:v00001814d00005360*
+ ID_MODEL_FROM_DATABASE=RT5360 Wireless 802.11n 1T/1R
+
+@@ -49421,6 +49475,9 @@ pci:v00001814d00005390*
+ pci:v00001814d00005390sv0000103Csd00001636*
+ ID_MODEL_FROM_DATABASE=U98Z077.00 Half-size Mini PCIe Card
+
++pci:v00001814d00005392*
++ ID_MODEL_FROM_DATABASE=RT5392 PCIe Wireless Network Adapter
++
+ pci:v00001814d0000539F*
+ ID_MODEL_FROM_DATABASE=RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip]
+
+@@ -50585,6 +50642,12 @@ pci:v00001957d00000087*
+ pci:v00001957d000000B4*
+ ID_MODEL_FROM_DATABASE=MPC8315E
+
++pci:v00001957d000000B6*
++ ID_MODEL_FROM_DATABASE=MPC8314E
++
++pci:v00001957d000000B6sv00001A56sd00001101*
++ ID_MODEL_FROM_DATABASE=Killer Xeno Pro Gigabit Ethernet Controller
++
+ pci:v00001957d000000C2*
+ ID_MODEL_FROM_DATABASE=MPC8379E
+
+@@ -50669,6 +50732,12 @@ pci:v00001957d00007011*
+ pci:v00001957d00007018*
+ ID_MODEL_FROM_DATABASE=MPC8610
+
++pci:v00001957d0000C006*
++ ID_MODEL_FROM_DATABASE=MPC8308
++
++pci:v00001957d0000C006sv00001A56sd00001201*
++ ID_MODEL_FROM_DATABASE=Killer E2100 Gigabit Ethernet Controller
++
+ pci:v00001958*
+ ID_VENDOR_FROM_DATABASE=Faster Technology, LLC.
+
+@@ -54164,6 +54233,9 @@ pci:v00008086d00000412*
+ pci:v00008086d00000416*
+ ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller
+
++pci:v00008086d00000416sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000041A*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller
+
+@@ -54680,9 +54752,15 @@ pci:v00008086d0000095Asv00008086sd00005000*
+ pci:v00008086d0000095Asv00008086sd00005002*
+ ID_MODEL_FROM_DATABASE=Wireless-N 7265
+
++pci:v00008086d0000095Asv00008086sd0000500A*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005010*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
++pci:v00008086d0000095Asv00008086sd00005012*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005020*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+
+@@ -54695,6 +54773,9 @@ pci:v00008086d0000095Asv00008086sd00005090*
+ pci:v00008086d0000095Asv00008086sd00005110*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
++pci:v00008086d0000095Asv00008086sd00005190*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00005400*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+@@ -54707,24 +54788,30 @@ pci:v00008086d0000095Asv00008086sd00005420*
+ pci:v00008086d0000095Asv00008086sd00005490*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
++pci:v00008086d0000095Asv00008086sd00005590*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
++
+ pci:v00008086d0000095Asv00008086sd00009010*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+-pci:v00008086d0000095Asv00008086sd00009210*
++pci:v00008086d0000095Asv00008086sd00009110*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+-pci:v00008086d0000095Asv00008086sd00009410*
++pci:v00008086d0000095Asv00008086sd00009210*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+-pci:v00008086d0000095B*
+- ID_MODEL_FROM_DATABASE=Wireless 7265
++pci:v00008086d0000095Asv00008086sd00009310*
++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+-pci:v00008086d0000095Bsv00008086sd0000500A*
++pci:v00008086d0000095Asv00008086sd00009410*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
+-pci:v00008086d0000095Bsv00008086sd00005012*
++pci:v00008086d0000095Asv00008086sd00009510*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265
+
++pci:v00008086d0000095B*
++ ID_MODEL_FROM_DATABASE=Wireless 7265
++
+ pci:v00008086d0000095Bsv00008086sd00005200*
+ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265
+
+@@ -54860,6 +54947,9 @@ pci:v00008086d00000C01*
+ pci:v00008086d00000C04*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
+
++pci:v00008086d00000C04sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C05*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller
+
+@@ -54872,6 +54962,9 @@ pci:v00008086d00000C09*
+ pci:v00008086d00000C0C*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller
+
++pci:v00008086d00000C0Csv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00000C46*
+ ID_MODEL_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
+
+@@ -57986,6 +58079,9 @@ pci:v00008086d00001539*
+ pci:v00008086d0000153A*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I217-LM
+
++pci:v00008086d0000153Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d0000153B*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I217-V
+
+@@ -69035,6 +69131,9 @@ pci:v00008086d00008C02*
+ pci:v00008086d00008C03*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
+
++pci:v00008086d00008C03sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C04*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
+
+@@ -69062,12 +69161,18 @@ pci:v00008086d00008C0F*
+ pci:v00008086d00008C10*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+
++pci:v00008086d00008C10sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C11*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+
+ pci:v00008086d00008C12*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+
++pci:v00008086d00008C12sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C13*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
+
+@@ -69110,12 +69215,18 @@ pci:v00008086d00008C1F*
+ pci:v00008086d00008C20*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+
++pci:v00008086d00008C20sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C21*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
+
+ pci:v00008086d00008C22*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller
+
++pci:v00008086d00008C22sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C23*
+ ID_MODEL_FROM_DATABASE=8 Series Chipset Family CHAP Counters
+
+@@ -69125,12 +69236,21 @@ pci:v00008086d00008C24*
+ pci:v00008086d00008C26*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1
+
++pci:v00008086d00008C26sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C2D*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2
+
++pci:v00008086d00008C2Dsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C31*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI
+
++pci:v00008086d00008C31sv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C33*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LAN Controller
+
+@@ -69140,6 +69260,9 @@ pci:v00008086d00008C34*
+ pci:v00008086d00008C3A*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1
+
++pci:v00008086d00008C3Asv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C3B*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #2
+
+@@ -69197,6 +69320,9 @@ pci:v00008086d00008C4E*
+ pci:v00008086d00008C4F*
+ ID_MODEL_FROM_DATABASE=QM87 Express LPC Controller
+
++pci:v00008086d00008C4Fsv000017AAsd0000220E*
++ ID_MODEL_FROM_DATABASE=ThinkPad T440p
++
+ pci:v00008086d00008C50*
+ ID_MODEL_FROM_DATABASE=B85 Express LPC Controller
+
+diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
+index 6663820..60dbcd2 100644
+--- a/hwdb/20-usb-vendor-model.hwdb
++++ b/hwdb/20-usb-vendor-model.hwdb
+@@ -46055,6 +46055,12 @@ usb:v1B5A*
+ usb:v1B65*
+ ID_VENDOR_FROM_DATABASE=The Hong Kong Standards and Testing Centre Ltd.
+
++usb:v1B71*
++ ID_VENDOR_FROM_DATABASE=Fushicai
++
++usb:v1B71p3002*
++ ID_MODEL_FROM_DATABASE=USBTV007 Video Grabber [EasyCAP]
++
+ usb:v1B72*
+ ID_VENDOR_FROM_DATABASE=ATERGI TECHNOLOGY CO., LTD.
+
diff --git a/0222-journal-Add-missing-byte-order-conversions.patch b/0222-journal-Add-missing-byte-order-conversions.patch
new file mode 100644
index 0000000..8493e83
--- /dev/null
+++ b/0222-journal-Add-missing-byte-order-conversions.patch
@@ -0,0 +1,58 @@
+From 43539d6b60ef0db3e98d00bef0024614c8c1807a Mon Sep 17 00:00:00 2001
+From: George McCollister <george.mccollister at gmail.com>
+Date: Tue, 31 Dec 2013 14:37:32 -0600
+Subject: [PATCH] journal: Add missing byte order conversions
+
+Convert entry_array.items[0] to host byte order prior to passing it to
+chain_cache_put().
+
+[zj: also use le64toh in journal-verify.c]
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73194
+---
+ src/journal/journal-file.c | 4 ++--
+ src/journal/journal-verify.c | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index 5ef6a2a..ba65464 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -1452,7 +1452,7 @@ static int generic_array_get(
+
+ found:
+ /* Let's cache this item for the next invocation */
+- chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i);
++ chain_cache_put(f->chain_cache, ci, first, a, le64toh(o->entry_array.items[0]), t, i);
+
+ r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
+ if (r < 0)
+@@ -1685,7 +1685,7 @@ found:
+ return 0;
+
+ /* Let's cache this item for the next invocation */
+- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
++ chain_cache_put(f->chain_cache, ci, first, a, le64toh(array->entry_array.items[0]), t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
+
+ if (subtract_one && i == 0)
+ p = last_p;
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 3405811..82b0f0a 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -249,12 +249,12 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
+ }
+
+ for (i = 0; i < journal_file_entry_array_n_items(o); i++)
+- if (o->entry_array.items[i] != 0 &&
+- !VALID64(o->entry_array.items[i])) {
++ if (le64toh(o->entry_array.items[i]) != 0 &&
++ !VALID64(le64toh(o->entry_array.items[i]))) {
+ log_error(OFSfmt": invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
+ offset,
+ i, journal_file_entry_array_n_items(o),
+- o->entry_array.items[i]);
++ le64toh(o->entry_array.items[i]));
+ return -EBADMSG;
+ }
+
diff --git a/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
new file mode 100644
index 0000000..511c442
--- /dev/null
+++ b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
@@ -0,0 +1,39 @@
+From c47bbfc9af040f1b0fce2edced4136ee921d9e70 Mon Sep 17 00:00:00 2001
+From: Raudi <mpell at web.de>
+Date: Mon, 6 Jan 2014 19:44:08 -0500
+Subject: [PATCH] hwdb: change key mappings for Samsung 90X3A
+
+The Key codes didn't match with the described key. Also the key
+identifier strings were missing. I hope I chose appropriate ones.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=70296
+---
+ hwdb/60-keyboard.hwdb | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ab9e569..644cb94 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -886,7 +886,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+ KEYBOARD_KEY_b3=!prog3 # Fn+F11 fan/cooling mode changer
+
+ # Series 9
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr*
+ KEYBOARD_KEY_ce=! # Fn+F8 keyboard backlight up
+ KEYBOARD_KEY_8d=! # Fn+F7 keyboard backlight down
+@@ -894,6 +893,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr
+ KEYBOARD_KEY_97=! # Fn+F12 Wi-Fi toggle
+ KEYBOARD_KEY_d5=! # Fn+F6 battery life extender
+
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
++ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
++ KEYBOARD_KEY_8d=!prog3 # Fn+F6 performance mode
++ KEYBOARD_KEY_97=!kbdillumdown # Fn+F7 keyboard backlight down
++ KEYBOARD_KEY_96=!kbdillumup # Fn+F8 keyboard backlight up
++ KEYBOARD_KEY_d5=!wlan # Fn+F12 Wi-Fi toggle
++
+ # SQ1US
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pnSQ1US:pvr*
+ KEYBOARD_KEY_d4=menu
diff --git a/0224-hwdb-add-Samsung-700G.patch b/0224-hwdb-add-Samsung-700G.patch
new file mode 100644
index 0000000..41cb167
--- /dev/null
+++ b/0224-hwdb-add-Samsung-700G.patch
@@ -0,0 +1,22 @@
+From 8e48fd6cc5e12bb1662970dc7a7d306550a9a079 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov at gmail.com>
+Date: Mon, 6 Jan 2014 20:06:59 -0500
+Subject: [PATCH] hwdb: add Samsung 700G
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 644cb94..ccfc734 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -875,6 +875,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
+ KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
+
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700G*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
diff --git a/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
new file mode 100644
index 0000000..0f668a2
--- /dev/null
+++ b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
@@ -0,0 +1,28 @@
+From 1bfc778f2c82180873407f2da8a8c3335ae37b07 Mon Sep 17 00:00:00 2001
+From: Dmitry Pisklov <dpisklov at gmail.com>
+Date: Mon, 6 Jan 2014 20:08:21 -0500
+Subject: [PATCH] hwdb: remove duplicate entry for Samsung 700Z
+
+keyboardbrightnessup/down are not even real keys.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=72311
+---
+ hwdb/60-keyboard.hwdb | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index ccfc734..cf3d1fb 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -918,11 +918,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:pvr*
+ KEYBOARD_KEY_77=f22 # Touchpad on
+ KEYBOARD_KEY_79=f23 # Touchpad off
+
+-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
+- KEYBOARD_KEY_ba=ejectcd
+- KEYBOARD_KEY_96=keyboardbrightnessup
+- KEYBOARD_KEY_97=keyboardbrightnessdown
+-
+ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
+ KEYBOARD_KEY_ad=leftmeta
+
diff --git a/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
new file mode 100644
index 0000000..ac9269d
--- /dev/null
+++ b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
@@ -0,0 +1,22 @@
+From 0ec2b82ee4f1bb1fdbf3293cfe10e59240d5c533 Mon Sep 17 00:00:00 2001
+From: AppleBloom <rat.o.drat at gmail.com>
+Date: Mon, 6 Jan 2014 20:51:47 -0500
+Subject: [PATCH] hwdb: fix match for Thinkpad X201 tablet
+
+https://bugs.freedesktop.org/show_bug.cgi?id=71929
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index cf3d1fb..d253724 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -524,6 +524,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr*
+
+ # Thinkpad X200_Tablet
+ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X2*Tablet*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*
+ KEYBOARD_KEY_5d=menu
+ KEYBOARD_KEY_63=fn
+ KEYBOARD_KEY_66=screenlock
diff --git a/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
new file mode 100644
index 0000000..3486097
--- /dev/null
+++ b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
@@ -0,0 +1,26 @@
+From 5ed0efb00ec5cf103debcb4fc5f38398c59cc619 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Tue, 7 Jan 2014 09:40:01 +0100
+Subject: [PATCH] keymap: Recognize different Toshiba Satellite capitalizations
+
+https://launchpad.net/bugs/665918
+---
+ hwdb/60-keyboard.hwdb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index d253724..84a061f 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1056,9 +1056,9 @@ keyboard:dmi:bvn*:bvr*:bd*:svnFOXCONN:pnQBOOK:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMTC:pn*:pvrA0:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnMio*Technology:pnN890:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnPEGATRON*CORP.:pnSpring*Peak:*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU]30[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU][35]0[05]*:pvr*
++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU][35]0[05]*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*Pro*[uU]300*:pvr*
+-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU]500*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnViooo*Corporation:pnPT17:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnHANNspree:pnSN10E100:*
+ keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pni1520M:*
diff --git a/0228-sleep.c-fix-typo.patch b/0228-sleep.c-fix-typo.patch
new file mode 100644
index 0000000..0ad123a
--- /dev/null
+++ b/0228-sleep.c-fix-typo.patch
@@ -0,0 +1,22 @@
+From b1f114caf2e2b0913e4122847c7fa2b182b86771 Mon Sep 17 00:00:00 2001
+From: Michele Curti <michele.curti at gmail.com>
+Date: Tue, 7 Jan 2014 17:51:41 +0100
+Subject: [PATCH] sleep.c: fix typo
+
+---
+ src/sleep/sleep.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
+index f96987f..c228cb6 100644
+--- a/src/sleep/sleep.c
++++ b/src/sleep/sleep.c
+@@ -90,7 +90,7 @@ static int execute(char **modes, char **states) {
+ const char* note = strappenda("SLEEP=", arg_verb);
+
+ /* This file is opened first, so that if we hit an error,
+- * we can abort before modyfing any state. */
++ * we can abort before modifying any state. */
+ f = fopen("/sys/power/state", "we");
+ if (!f) {
+ log_error("Failed to open /sys/power/state: %m");
diff --git a/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
new file mode 100644
index 0000000..d005b76
--- /dev/null
+++ b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
@@ -0,0 +1,22 @@
+From 35fbb83e322dfe14771d0c84b623b423a38b1200 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Thu, 9 Jan 2014 16:43:00 +0100
+Subject: [PATCH] delta: ensure that d_type will be set on every fs
+
+---
+ src/delta/delta.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/delta/delta.c b/src/delta/delta.c
+index ae658f9..a8dd57e 100644
+--- a/src/delta/delta.c
++++ b/src/delta/delta.c
+@@ -316,6 +316,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
+ if (!de)
+ return -errno;
+
++ dirent_ensure_type(d, de);
++
+ if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+ enumerate_dir_d(top, bottom, drops, path, de->d_name);
+
diff --git a/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
new file mode 100644
index 0000000..6e7cb46
--- /dev/null
+++ b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
@@ -0,0 +1,33 @@
+From 3bef88018c93e77d50d3206e84f6fa2fe8c2fb99 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Thu, 9 Jan 2014 18:00:50 +0100
+Subject: [PATCH] tmpfiles: don't allow label_fix to print ENOENT when we want
+ to ignore it
+
+---
+ src/tmpfiles/tmpfiles.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 4dd1638..5e49cc8 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -435,8 +435,6 @@ finish:
+ }
+
+ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+- int r;
+-
+ /* not using i->path directly because it may be a glob */
+ if (i->mode_set)
+ if (chmod(path, i->mode) < 0) {
+@@ -457,8 +455,7 @@ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+ }
+ }
+
+- r = label_fix(path, false, false);
+- return r == -ENOENT && ignore_enoent ? 0 : r;
++ return label_fix(path, ignore_enoent, false);
+ }
+
+ static int item_set_perms(Item *i, const char *path) {
diff --git a/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
new file mode 100644
index 0000000..a491004
--- /dev/null
+++ b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
@@ -0,0 +1,86 @@
+From 4f4e72a317126e9d41db675ddae27a0942cd23bf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 9 Jan 2014 22:23:32 -0500
+Subject: [PATCH] man: mention which variables will be expanded in ExecStart
+
+Conflicts:
+ man/systemd.service.xml
+---
+ man/systemd.exec.xml | 6 ++++--
+ man/systemd.service.xml | 35 +++++++++++++++++++++++------------
+ 2 files changed, 27 insertions(+), 14 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index e213ec4..c8414d4 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -295,9 +295,11 @@
+ for the assignment.</para>
+
+ <para>Example:
+- <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
++ <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"</programlisting>
+ gives three variables <literal>VAR1</literal>,
+- <literal>VAR2</literal>, <literal>VAR3</literal>.
++ <literal>VAR2</literal>, <literal>VAR3</literal>
++ with the values <literal>word1 word2</literal>,
++ <literal>word3</literal>, <literal>$word 5 6</literal>.
+ </para>
+
+ <para>
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index af3e0f2..4fb21ba 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -392,16 +392,32 @@
+ replaced by the value of the
+ environment variable including all
+ whitespace it contains, resulting in a
+- single argument. Use
++ single argument. Use
+ <literal>$FOO</literal> as a separate
+ word on the command line, in which
+ case it will be replaced by the value
+- of the environment variable split up
+- at whitespace, resulting in zero or
+- more arguments. To pass literal dollar sign
+- use <literal>$$</literal>. Note that the first
+- argument (i.e. the program to execute)
+- may not be a variable.</para>
++ of the environment variable split at
++ whitespace, resulting in zero or more
++ arguments. To pass a literal dollar
++ sign, use <literal>$$</literal>.
++ Variables whose value is not known at
++ expansion time are treated as empty
++ strings. Note that the first argument
++ (i.e. the program to execute) may not
++ be a variable.</para>
++
++ <para>Variables to be used in this
++ fashion may be defined through
++ <varname>Environment=</varname> and
++ <varname>EnvironmentFile=</varname>.
++ In addition, variables listed in
++ section "Environment variables in
++ spawned processes" in
++ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
++ which are considered "static
++ configuration" may used (this includes
++ e.g. <varname>$USER</varname>, but not
++ <varname>$TERM</varname>).</para>
+
+ <para>Optionally, if the absolute file
+ name is prefixed with
+@@ -429,11 +445,6 @@
+ <programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
+ </programlisting>
+
+- <para>Only select environment variables that
+- are set for executed commands. See
+- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+- </para>
+-
+ <para>Example:</para>
+ <programlisting>ExecStart=/bin/echo one ; /bin/echo "two two"
+ </programlisting>
diff --git a/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
new file mode 100644
index 0000000..a9f69ab
--- /dev/null
+++ b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
@@ -0,0 +1,28 @@
+From 0fb47635e6db4d27b821388274c0c83d612fc0bb Mon Sep 17 00:00:00 2001
+From: Unai Uribarri <unaiur at gmail.com>
+Date: Sat, 11 Jan 2014 09:19:41 -0500
+Subject: [PATCH] hwdb: Add support for Toshiba Satellite P75-A7200 keyboard
+
+---
+ hwdb/60-keyboard.hwdb | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
+index 84a061f..e3d1f02 100644
+--- a/hwdb/60-keyboard.hwdb
++++ b/hwdb/60-keyboard.hwdb
+@@ -1012,6 +1012,14 @@ keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940
+ KEYBOARD_KEY_13e=switchvideomode
+ KEYBOARD_KEY_13f=f21 # Touchpad toggle
+
++# Satellite P75-A7200
++keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr*
++ KEYBOARD_KEY_13c=brightnessdown
++ KEYBOARD_KEY_13d=brightnessup
++ KEYBOARD_KEY_13e=switchvideomode
++ KEYBOARD_KEY_13f=touchpad_toggle
++ KEYBOARD_KEY_9e=wlan
++
+ ###########################################################
+ # VIA
+ ###########################################################
diff --git a/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
new file mode 100644
index 0000000..4b23ffe
--- /dev/null
+++ b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
@@ -0,0 +1,321 @@
+From 9b9103a07cc32fa76be4c71fcd9a93b5d946edd4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 28 Dec 2013 19:33:23 -0500
+Subject: [PATCH] journal: fix access to munmapped memory in
+ sd_journal_enumerate_unique
+
+sd_j_e_u needs to keep a reference to an object while comparing it
+with possibly duplicate objects in other files. Because the size of
+mmap cache is limited, with enough files and object to compare to,
+at some point the object being compared would be munmapped, resulting
+in a segmentation fault.
+
+Fix this issue by turning keep_always into a reference count that can
+be increased and decreased. Other callers which set keep_always=true
+are unmodified: their references are never released but are ignored
+when the whole file is closed, which happens at some point. keep_always
+is increased in sd_j_e_u and later on released.
+---
+ src/journal/journal-file.c | 5 +---
+ src/journal/journal-file.h | 24 +++++++++++++++++++
+ src/journal/journal-verify.c | 4 ----
+ src/journal/mmap-cache.c | 57 +++++++++++++++++++++++++++++++++++---------
+ src/journal/mmap-cache.h | 18 +++++++++++++-
+ src/journal/sd-journal.c | 18 +++++++++++---
+ 6 files changed, 103 insertions(+), 23 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index ba65464..4d9787a 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -419,7 +419,6 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+ void *t;
+ Object *o;
+ uint64_t s;
+- unsigned context;
+
+ assert(f);
+ assert(ret);
+@@ -428,10 +427,8 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
+ if (!VALID64(offset))
+ return -EFAULT;
+
+- /* One context for each type, plus one catch-all for the rest */
+- context = type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
+
+- r = journal_file_move_to(f, context, false, offset, sizeof(ObjectHeader), &t);
++ r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t);
+ if (r < 0)
+ return r;
+
+diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
+index 50bdb67..0bd23f7 100644
+--- a/src/journal/journal-file.h
++++ b/src/journal/journal-file.h
+@@ -128,6 +128,10 @@ int journal_file_open_reliably(
+ #define ALIGN64(x) (((x) + 7ULL) & ~7ULL)
+ #define VALID64(x) (((x) & 7ULL) == 0ULL)
+
++/* Use six characters to cover the offsets common in smallish journal
++ * files without adding too many zeros. */
++#define OFSfmt "%06"PRIx64
++
+ static inline bool VALID_REALTIME(uint64_t u) {
+ /* This considers timestamps until the year 3112 valid. That should be plenty room... */
+ return u > 0 && u < (1ULL << 55);
+@@ -197,3 +201,23 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *
+ int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
+
+ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
++
++
++static unsigned type_to_context(int type) {
++ /* One context for each type, plus one catch-all for the rest */
++ return type > 0 && type < _OBJECT_TYPE_MAX ? type : 0;
++}
++
++static inline int journal_file_object_keep(JournalFile *f, Object *o, uint64_t offset) {
++ unsigned context = type_to_context(o->object.type);
++
++ return mmap_cache_get(f->mmap, f->fd, f->prot, context, true,
++ offset, o->object.size, &f->last_stat, NULL);
++}
++
++static inline int journal_file_object_release(JournalFile *f, Object *o, uint64_t offset) {
++ unsigned context = type_to_context(o->object.type);
++
++ return mmap_cache_release(f->mmap, f->fd, f->prot, context,
++ offset, o->object.size);
++}
+diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
+index 82b0f0a..f2422ff 100644
+--- a/src/journal/journal-verify.c
++++ b/src/journal/journal-verify.c
+@@ -34,10 +34,6 @@
+ #include "compress.h"
+ #include "fsprg.h"
+
+-/* Use six characters to cover the offsets common in smallish journal
+- * files without adding to many zeros. */
+-#define OFSfmt "%06"PRIx64
+-
+ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
+ uint64_t i;
+
+diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
+index 42a8a7d..24b2bb8 100644
+--- a/src/journal/mmap-cache.c
++++ b/src/journal/mmap-cache.c
+@@ -38,7 +38,7 @@ typedef struct FileDescriptor FileDescriptor;
+ struct Window {
+ MMapCache *cache;
+
+- bool keep_always;
++ unsigned keep_always;
+ bool in_unused;
+
+ int prot;
+@@ -185,7 +185,7 @@ static void context_detach_window(Context *c) {
+ c->window = NULL;
+ LIST_REMOVE(Context, by_window, w->contexts, c);
+
+- if (!w->contexts && !w->keep_always) {
++ if (!w->contexts && w->keep_always == 0) {
+ /* Not used anymore? */
+ LIST_PREPEND(Window, unused, c->cache->unused, w);
+ if (!c->cache->last_unused)
+@@ -360,7 +360,6 @@ static int try_context(
+ assert(m->n_ref > 0);
+ assert(fd >= 0);
+ assert(size > 0);
+- assert(ret);
+
+ c = hashmap_get(m->contexts, UINT_TO_PTR(context+1));
+ if (!c)
+@@ -378,9 +377,10 @@ static int try_context(
+ return 0;
+ }
+
+- c->window->keep_always = c->window->keep_always || keep_always;
++ c->window->keep_always += keep_always;
+
+- *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
++ if (ret)
++ *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset);
+ return 1;
+ }
+
+@@ -402,7 +402,6 @@ static int find_mmap(
+ assert(m->n_ref > 0);
+ assert(fd >= 0);
+ assert(size > 0);
+- assert(ret);
+
+ f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
+ if (!f)
+@@ -422,9 +421,10 @@ static int find_mmap(
+ return -ENOMEM;
+
+ context_attach_window(c, w);
+- w->keep_always = w->keep_always || keep_always;
++ w->keep_always += keep_always;
+
+- *ret = (uint8_t*) w->ptr + (offset - w->offset);
++ if (ret)
++ *ret = (uint8_t*) w->ptr + (offset - w->offset);
+ return 1;
+ }
+
+@@ -450,7 +450,6 @@ static int add_mmap(
+ assert(m->n_ref > 0);
+ assert(fd >= 0);
+ assert(size > 0);
+- assert(ret);
+
+ woffset = offset & ~((uint64_t) page_size() - 1ULL);
+ wsize = size + (offset - woffset);
+@@ -520,7 +519,8 @@ static int add_mmap(
+ c->window = w;
+ LIST_PREPEND(Context, by_window, w->contexts, c);
+
+- *ret = (uint8_t*) w->ptr + (offset - w->offset);
++ if (ret)
++ *ret = (uint8_t*) w->ptr + (offset - w->offset);
+ return 1;
+ }
+
+@@ -541,7 +541,6 @@ int mmap_cache_get(
+ assert(m->n_ref > 0);
+ assert(fd >= 0);
+ assert(size > 0);
+- assert(ret);
+
+ /* Check whether the current context is the right one already */
+ r = try_context(m, fd, prot, context, keep_always, offset, size, ret);
+@@ -563,6 +562,42 @@ int mmap_cache_get(
+ return add_mmap(m, fd, prot, context, keep_always, offset, size, st, ret);
+ }
+
++int mmap_cache_release(
++ MMapCache *m,
++ int fd,
++ int prot,
++ unsigned context,
++ uint64_t offset,
++ size_t size) {
++
++ FileDescriptor *f;
++ Window *w;
++
++ assert(m);
++ assert(m->n_ref > 0);
++ assert(fd >= 0);
++ assert(size > 0);
++
++ f = hashmap_get(m->fds, INT_TO_PTR(fd + 1));
++ if (!f)
++ return -EBADF;
++
++ assert(f->fd == fd);
++
++ LIST_FOREACH(by_fd, w, f->windows)
++ if (window_matches(w, fd, prot, offset, size))
++ break;
++
++ if (!w)
++ return -ENOENT;
++
++ if (w->keep_always == 0)
++ return -ENOLCK;
++
++ w->keep_always -= 1;
++ return 0;
++}
++
+ void mmap_cache_close_fd(MMapCache *m, int fd) {
+ FileDescriptor *f;
+
+diff --git a/src/journal/mmap-cache.h b/src/journal/mmap-cache.h
+index 912336d..647555a 100644
+--- a/src/journal/mmap-cache.h
++++ b/src/journal/mmap-cache.h
+@@ -31,7 +31,23 @@ MMapCache* mmap_cache_new(void);
+ MMapCache* mmap_cache_ref(MMapCache *m);
+ MMapCache* mmap_cache_unref(MMapCache *m);
+
+-int mmap_cache_get(MMapCache *m, int fd, int prot, unsigned context, bool keep_always, uint64_t offset, size_t size, struct stat *st, void **ret);
++int mmap_cache_get(
++ MMapCache *m,
++ int fd,
++ int prot,
++ unsigned context,
++ bool keep_always,
++ uint64_t offset,
++ size_t size,
++ struct stat *st,
++ void **ret);
++int mmap_cache_release(
++ MMapCache *m,
++ int fd,
++ int prot,
++ unsigned context,
++ uint64_t offset,
++ size_t size);
+ void mmap_cache_close_fd(MMapCache *m, int fd);
+ void mmap_cache_close_context(MMapCache *m, unsigned context);
+
+diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
+index 52abbe9..46c3feb 100644
+--- a/src/journal/sd-journal.c
++++ b/src/journal/sd-journal.c
+@@ -2508,9 +2508,7 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) {
+ }
+
+ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l) {
+- Object *o;
+ size_t k;
+- int r;
+
+ if (!j)
+ return -EINVAL;
+@@ -2535,9 +2533,11 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+ for (;;) {
+ JournalFile *of;
+ Iterator i;
++ Object *o;
+ const void *odata;
+ size_t ol;
+ bool found;
++ int r;
+
+ /* Proceed to next data object in the field's linked list */
+ if (j->unique_offset == 0) {
+@@ -2574,8 +2574,16 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+ return r;
+
+ /* Let's do the type check by hand, since we used 0 context above. */
+- if (o->object.type != OBJECT_DATA)
++ if (o->object.type != OBJECT_DATA) {
++ log_error("%s:offset " OFSfmt ": object has type %d, expected %d",
++ j->unique_file->path, j->unique_offset,
++ o->object.type, OBJECT_DATA);
+ return -EBADMSG;
++ }
++
++ r = journal_file_object_keep(j->unique_file, o, j->unique_offset);
++ if (r < 0)
++ return r;
+
+ r = return_data(j, j->unique_file, o, &odata, &ol);
+ if (r < 0)
+@@ -2609,6 +2617,10 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
+ if (found)
+ continue;
+
++ r = journal_file_object_release(j->unique_file, o, j->unique_offset);
++ if (r < 0)
++ return r;
++
+ r = return_data(j, j->unique_file, o, data, l);
+ if (r < 0)
+ return r;
diff --git a/0234-gpt-auto-generator-skip-nonexistent-devices.patch b/0234-gpt-auto-generator-skip-nonexistent-devices.patch
new file mode 100644
index 0000000..1735610
--- /dev/null
+++ b/0234-gpt-auto-generator-skip-nonexistent-devices.patch
@@ -0,0 +1,32 @@
+From 182a32427b50aed5812833e3ecb8a6078160a501 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= <l.stelmach at samsung.com>
+Date: Tue, 7 Jan 2014 15:00:22 +0100
+Subject: [PATCH] gpt-auto-generator: skip nonexistent devices
+
+The devices we work with have eMMC chips for storage. The chips
+provide four "hardware" partitions. The first is /dev/mmcblk0, it
+takes almost whole space and holds a GPT with several real partitions
+(/dev/mmcblk0p?). Then there are three block devices (mmcblk0boot0,
+mmcblk0boot1, rpmb) that are part of the same hardware as mmcblk0 that
+are presented by the kernel as children of the latter. That relationship
+makes gpt-auto-generator try to peek them but since they are not GPT
+partitions blkid_do_safeprobe() returns -2 making verify_gpt_parition()
+function return -ENODEV.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index 25440e7..0e8e959 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -298,6 +298,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+
+ r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+ if (r < 0) {
++ /* skip child devices which are not detected properly */
++ if (r == -ENODEV)
++ continue;
+ log_error("Failed to verify GPT partition %s: %s",
+ node, strerror(-r));
+ return r;
diff --git a/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
new file mode 100644
index 0000000..90dcbbb
--- /dev/null
+++ b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
@@ -0,0 +1,38 @@
+From 15ef380be7e38898fe2aef4ae3aa6fb0ce804564 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 11 Jan 2014 16:45:29 -0500
+Subject: [PATCH] gpt-auto-generator: use EBADSLT code when unable to detect
+ partition type
+
+ENODEV suggests that something is missing, which is be misleading
+here.
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index 0e8e959..d7c09f0 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -74,10 +74,8 @@ static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr
+
+ errno = 0;
+ r = blkid_do_safeprobe(b);
+- if (r == -2)
+- return -ENODEV;
+- else if (r == 1)
+- return -ENODEV;
++ if (r == -2 || r == 1) /* no result or uncertain */
++ return -EBADSLT;
+ else if (r != 0)
+ return errno ? -errno : -EIO;
+
+@@ -299,7 +297,7 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
+ r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+ if (r < 0) {
+ /* skip child devices which are not detected properly */
+- if (r == -ENODEV)
++ if (r == -EBADSLT)
+ continue;
+ log_error("Failed to verify GPT partition %s: %s",
+ node, strerror(-r));
diff --git a/0236-journald-do-not-free-space-when-disk-space-runs-low.patch b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch
new file mode 100644
index 0000000..53a0bda
--- /dev/null
+++ b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch
@@ -0,0 +1,265 @@
+From 96dc1b72f3fb5d344538984121e11e5804905145 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 13 Nov 2013 00:42:22 -0500
+Subject: [PATCH] journald: do not free space when disk space runs low
+
+Before, journald would remove journal files until both MaxUse= and
+KeepFree= settings would be satisfied. The first one depends (if set
+automatically) on the size of the file system and is constant. But
+the second one depends on current use of the file system, and a spike
+in disk usage would cause journald to delete journal files, trying to
+reach usage which would leave 15% of the disk free. This behaviour is
+surprising for the user who doesn't expect his logs to be purged when
+disk usage goes above 85%, which on a large disk could be some
+gigabytes from being full. In addition attempting to keep 15% free
+provides an attack vector where filling the disk sufficiently disposes
+of almost all logs.
+
+Instead, obey KeepFree= only as a limit on adding additional files.
+When replacing old files with new, ignore KeepFree=. This means that
+if journal disk usage reached some high point that at some later point
+start to violate the KeepFree= constraint, journald will not add files
+to go above this point, but it will stay (slightly) below it. When
+journald is restarted, it forgets the previous maximum usage value,
+and sets the limit based on the current usage, so if disk remains to
+be filled, journald might use one journal-file-size less on each
+restart, if restarts happen just after rotation. This seems like a
+reasonable compromise between implementation complexity and robustness.
+---
+ man/journald.conf.xml | 39 +++++++++++++++++++++++----------
+ src/journal/journal-file.h | 1 +
+ src/journal/journal-vacuum.c | 6 ++---
+ src/journal/journal-vacuum.h | 2 +-
+ src/journal/journald-server.c | 22 ++++++++++++++-----
+ src/journal/test-journal-interleaving.c | 4 ++--
+ src/journal/test-journal.c | 4 ++--
+ src/shared/macro.h | 7 ++++++
+ 8 files changed, 58 insertions(+), 27 deletions(-)
+
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index b362c5d..e0796e1 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -250,20 +250,35 @@
+ <para><varname>SystemMaxUse=</varname>
+ and <varname>RuntimeMaxUse=</varname>
+ control how much disk space the
+- journal may use up at
+- maximum. Defaults to 10% of the size
+- of the respective file
+- system. <varname>SystemKeepFree=</varname>
+- and
++ journal may use up at maximum.
++ <varname>SystemKeepFree=</varname> and
+ <varname>RuntimeKeepFree=</varname>
+ control how much disk space
+- systemd-journald shall always leave
+- free for other uses. Defaults to 15%
+- of the size of the respective file
+- system. systemd-journald will respect
+- both limits, i.e. use the smaller of
+- the two values.
+- <varname>SystemMaxFileSize=</varname>
++ systemd-journald shall leave free for
++ other uses.
++ <command>systemd-journald</command>
++ will respect both limits and use the
++ smaller of the two values.</para>
++
++ <para>The first pair defaults to 10%
++ and the second to 15% of the size of
++ the respective file system. If the
++ file system is nearly full and either
++ <varname>SystemKeepFree=</varname> or
++ <varname>RuntimeKeepFree=</varname> is
++ violated when systemd-journald is
++ started, the value will be raised to
++ percentage that is actually free. This
++ means that if before there was enough
++ free space and journal files were
++ created, and subsequently something
++ else causes the file system to fill
++ up, journald will stop using more
++ space, but it'll will not removing
++ existing files to go reduce footprint
++ either.</para>
++
++ <para><varname>SystemMaxFileSize=</varname>
+ and
+ <varname>RuntimeMaxFileSize=</varname>
+ control how large individual journal
+diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
+index 0bd23f7..2e06b57 100644
+--- a/src/journal/journal-file.h
++++ b/src/journal/journal-file.h
+@@ -37,6 +37,7 @@
+
+ typedef struct JournalMetrics {
+ uint64_t max_use;
++ uint64_t use;
+ uint64_t max_size;
+ uint64_t min_size;
+ uint64_t keep_free;
+diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
+index d4a1c6c..8b07f65 100644
+--- a/src/journal/journal-vacuum.c
++++ b/src/journal/journal-vacuum.c
+@@ -150,7 +150,6 @@ static int journal_file_empty(int dir_fd, const char *name) {
+ int journal_directory_vacuum(
+ const char *directory,
+ uint64_t max_use,
+- uint64_t min_free,
+ usec_t max_retention_usec,
+ usec_t *oldest_usec) {
+
+@@ -164,7 +163,7 @@ int journal_directory_vacuum(
+
+ assert(directory);
+
+- if (max_use <= 0 && min_free <= 0 && max_retention_usec <= 0)
++ if (max_use <= 0 && max_retention_usec <= 0)
+ return 0;
+
+ if (max_retention_usec > 0) {
+@@ -310,8 +309,7 @@ int journal_directory_vacuum(
+ }
+
+ if ((max_retention_usec <= 0 || list[i].realtime >= retention_limit) &&
+- (max_use <= 0 || sum <= max_use) &&
+- (min_free <= 0 || (uint64_t) ss.f_bavail * (uint64_t) ss.f_bsize >= min_free))
++ (max_use <= 0 || sum <= max_use))
+ break;
+
+ if (unlinkat(dirfd(d), list[i].filename, 0) >= 0) {
+diff --git a/src/journal/journal-vacuum.h b/src/journal/journal-vacuum.h
+index f5e3e52..bc30c3a 100644
+--- a/src/journal/journal-vacuum.h
++++ b/src/journal/journal-vacuum.h
+@@ -23,4 +23,4 @@
+
+ #include <inttypes.h>
+
+-int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free, usec_t max_retention_usec, usec_t *oldest_usec);
++int journal_directory_vacuum(const char *directory, uint64_t max_use, usec_t max_retention_usec, usec_t *oldest_usec);
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 1fcb3d5..cd2cfe9 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -158,9 +158,18 @@ static uint64_t available_space(Server *s, bool verbose) {
+ }
+
+ ss_avail = ss.f_bsize * ss.f_bavail;
+- avail = ss_avail > m->keep_free ? ss_avail - m->keep_free : 0;
+
+- s->cached_available_space = MIN(m->max_use, avail) > sum ? MIN(m->max_use, avail) - sum : 0;
++ /* If we reached a high mark, we will always allow this much
++ * again, unless usage goes above max_use. This watermark
++ * value is cached so that we don't give up space on pressure,
++ * but hover below the maximum usage. */
++
++ if (m->use < sum)
++ m->use = sum;
++
++ avail = LESS_BY(ss_avail, m->keep_free);
++
++ s->cached_available_space = LESS_BY(MIN(m->max_use, avail), sum);
+ s->cached_available_space_timestamp = ts;
+
+ if (verbose) {
+@@ -168,13 +177,14 @@ static uint64_t available_space(Server *s, bool verbose) {
+ fb4[FORMAT_BYTES_MAX], fb5[FORMAT_BYTES_MAX];
+
+ server_driver_message(s, SD_MESSAGE_JOURNAL_USAGE,
+- "%s journal is using %s (max %s, leaving %s of free %s, current limit %s).",
++ "%s journal is using %s (max allowed %s, "
++ "trying to leave %s free of %s available → current limit %s).",
+ s->system_journal ? "Permanent" : "Runtime",
+ format_bytes(fb1, sizeof(fb1), sum),
+ format_bytes(fb2, sizeof(fb2), m->max_use),
+ format_bytes(fb3, sizeof(fb3), m->keep_free),
+ format_bytes(fb4, sizeof(fb4), ss_avail),
+- format_bytes(fb5, sizeof(fb5), MIN(m->max_use, avail)));
++ format_bytes(fb5, sizeof(fb5), s->cached_available_space + sum));
+ }
+
+ return s->cached_available_space;
+@@ -378,7 +388,7 @@ void server_vacuum(Server *s) {
+ if (s->system_journal) {
+ char *p = strappenda("/var/log/journal/", ids);
+
+- r = journal_directory_vacuum(p, s->system_metrics.max_use, s->system_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
++ r = journal_directory_vacuum(p, s->system_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec);
+ if (r < 0 && r != -ENOENT)
+ log_error("Failed to vacuum %s: %s", p, strerror(-r));
+ }
+@@ -386,7 +396,7 @@ void server_vacuum(Server *s) {
+ if (s->runtime_journal) {
+ char *p = strappenda("/run/log/journal/", ids);
+
+- r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->runtime_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
++ r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec);
+ if (r < 0 && r != -ENOENT)
+ log_error("Failed to vacuum %s: %s", p, strerror(-r));
+ }
+diff --git a/src/journal/test-journal-interleaving.c b/src/journal/test-journal-interleaving.c
+index 1a058ea..974fa3b 100644
+--- a/src/journal/test-journal-interleaving.c
++++ b/src/journal/test-journal-interleaving.c
+@@ -194,7 +194,7 @@ static void test_skip(void (*setup)(void))
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+- journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++ journal_directory_vacuum(".", 3000000, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+@@ -279,7 +279,7 @@ static void test_sequence_numbers(void) {
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+- journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++ journal_directory_vacuum(".", 3000000, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c
+index 190c426..3b8778d 100644
+--- a/src/journal/test-journal.c
++++ b/src/journal/test-journal.c
+@@ -126,7 +126,7 @@ static void test_non_empty(void) {
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+- journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++ journal_directory_vacuum(".", 3000000, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+@@ -165,7 +165,7 @@ static void test_empty(void) {
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+- journal_directory_vacuum(".", 3000000, 0, 0, NULL);
++ journal_directory_vacuum(".", 3000000, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+diff --git a/src/shared/macro.h b/src/shared/macro.h
+index d4f92b6..bc5b3c1 100644
+--- a/src/shared/macro.h
++++ b/src/shared/macro.h
+@@ -114,6 +114,13 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
+ _a < _b ? _a : _b; \
+ })
+
++#define LESS_BY(A,B) \
++ __extension__ ({ \
++ typeof(A) _A = (A); \
++ typeof(B) _B = (B); \
++ _A > _B ? _A - _B : 0; \
++ })
++
+ #ifndef CLAMP
+ #define CLAMP(x, low, high) \
+ __extension__ ({ \
diff --git a/0237-man-add-busctl-1.patch b/0237-man-add-busctl-1.patch
new file mode 100644
index 0000000..208c839
--- /dev/null
+++ b/0237-man-add-busctl-1.patch
@@ -0,0 +1,239 @@
+From 7cfdb4b03c310e9bb55609a98eb70356e4c50148 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 11 Jan 2014 23:44:34 -0500
+Subject: [PATCH] man: add busctl(1)
+
+Conflicts:
+ Makefile-man.am
+ TODO
+ man/systemd-bus-proxyd.xml
+---
+ Makefile-man.am | 1 +
+ man/busctl.xml | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 207 insertions(+)
+ create mode 100644 man/busctl.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 3f626e8..9c3cb35 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -3,6 +3,7 @@
+
+ MANPAGES += \
+ man/bootup.7 \
++ man/busctl.1 \
+ man/daemon.7 \
+ man/halt.8 \
+ man/hostname.5 \
+diff --git a/man/busctl.xml b/man/busctl.xml
+new file mode 100644
+index 0000000..0c5f05a
+--- /dev/null
++++ b/man/busctl.xml
+@@ -0,0 +1,206 @@
++<?xml version='1.0'?> <!--*-nxml-*-->
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
++"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++
++<!--
++This file is part of systemd.
++
++Copyright 2014 Zbigniew Jędrzejewski-Szmek
++
++systemd is free software; you can redistribute it and/or modify it
++under the terms of the GNU Lesser General Public License as published by
++the Free Software Foundation; either version 2.1 of the License, or
++(at your option) any later version.
++
++systemd is distributed in the hope that it will be useful, but
++WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++Lesser General Public License for more details.
++
++You should have received a copy of the GNU Lesser General Public License
++along with systemd; If not, see <http://www.gnu.org/licenses/>.
++-->
++
++<refentry id="busctl">
++
++ <refentryinfo>
++ <title>busctl</title>
++ <productname>systemd</productname>
++
++ <authorgroup>
++ <author>
++ <contrib>A monkey with a typewriter</contrib>
++ <firstname>Zbigniew</firstname>
++ <surname>Jędrzejewski-Szmek</surname>
++ <email>zbyszek at in.waw.pl</email>
++ </author>
++ </authorgroup>
++ </refentryinfo>
++
++ <refmeta>
++ <refentrytitle>busctl</refentrytitle>
++ <manvolnum>1</manvolnum>
++ </refmeta>
++
++ <refnamediv>
++ <refname>busctl</refname>
++ <refpurpose>Introspect the bus</refpurpose>
++ </refnamediv>
++
++ <refsynopsisdiv>
++ <cmdsynopsis>
++ <command>busctl</command>
++ <arg choice="opt" rep="repeat">OPTIONS</arg>
++ <arg choice="opt">COMMAND</arg>
++ <arg choice="opt" rep="repeat"><replaceable>NAME</replaceable></arg>
++ </cmdsynopsis>
++ </refsynopsisdiv>
++
++ <refsect1>
++ <title>Description</title>
++
++ <para><command>busctl</command> may be used to
++ introspect and monitor the D-Bus bus.</para>
++ </refsect1>
++
++ <refsect1>
++ <title>Options</title>
++
++ <para>The following options are understood:</para>
++
++ <variablelist>
++ <varlistentry>
++ <term><option>-h</option></term>
++ <term><option>--help</option></term>
++
++ <listitem><para>Print a short help text and exit.
++ </para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--version</option></term>
++
++ <listitem>
++ <para>Print a short version string and exit.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--no-pager</option></term>
++
++ <listitem>
++ <para>Do not pipe output into a pager.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--system</option></term>
++
++ <listitem>
++ <para>Talk to the systemd system manager (the
++ default).</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--user</option></term>
++
++ <listitem>
++ <para>Talk to the systemd manager of the calling
++ user.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--address=<replaceable>ADDRESS</replaceable></option></term>
++
++ <listitem><para>Connect to the bus specified by
++ <replaceable>ADDRESS</replaceable> instead of using suitable
++ defaults for either the system or user bus (see
++ <option>--system</option> and <option>--user</option>
++ options).</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--show-machine</option></term>
++
++ <listitem><para>When showing the list of endpoints, show a
++ column containing the names of containers they belong to.
++ See
++ <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
++ </para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--unique</option></term>
++
++ <listitem><para>When showing the list of endpoints, show
++ only "unique" names (of the form
++ <literal>:<replaceable>number</replaceable>.<replaceable>number</replaceable></literal>).
++ </para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--acquired</option></term>
++
++ <listitem><para>The opposite of <option>--unique</option> —
++ only "well-known" names will be shown.</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--activatable</option></term>
++
++ <listitem><para>When showing the list of endpoints, show
++ only endpoints which haven't actually been activated yet,
++ but may be started automatically if accessed.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><option>--match=<replaceable>MATCH</replaceable></option></term>
++
++ <listitem><para>When showing messages being exchanged, show only the
++ subset matching <replaceable>MATCH</replaceable>.</para></listitem>
++ <!-- TODO: link to sd_bus_add_match when it is written? -->
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>Commands</title>
++
++ <para>The following commands are understood:</para>
++
++ <variablelist>
++ <varlistentry>
++ <term><command>list</command></term>
++
++ <listitem><para>Show endpoints attached to the bus. This is
++ the default if no command is specified.</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
++ <term><command>monitor</command> <arg choice="opt" rep="repeat"><replaceable>NAME</replaceable></arg></term>
++
++ <listitem><para>Dump messages being exchanged. If
++ <replaceable>NAME</replaceable> is specified, show messages
++ to or from this endpoint. Otherwsise, show all messages on the
++ bus.</para></listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect1>
++
++ <refsect1>
++ <title>See Also</title>
++
++ <para>
++ <citerefentry><refentrytitle>dbus-daemon</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++ <ulink url="http://freedesktop.org/wiki/Software/dbus">D-Bus</ulink>,
++ <ulink url="https://code.google.com/p/d-bus/">kdbus</ulink>,
++ <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>systemd-bus-proxyd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++ </para>
++ </refsect1>
++</refentry>
diff --git a/kernel-install-grubby.patch b/kernel-install-grubby.patch
index 717c484..481859d 100644
--- a/kernel-install-grubby.patch
+++ b/kernel-install-grubby.patch
@@ -1,6 +1,6 @@
-From dd33348393551411885397ff7d88a3a908eeb018 Mon Sep 17 00:00:00 2001
+From 0fe97bc02e3108efdb844feb1b367a89ba995d83 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald at redhat.com>
-Date: Wed, 13 Mar 2013 07:57:53 +0100
+Date: Tue, 14 Jan 2014 17:48:08 -0500
Subject: [PATCH] kernel-install: add fedora specific callouts to
new-kernel-pkg
@@ -9,7 +9,7 @@ Subject: [PATCH] kernel-install: add fedora specific callouts to
1 file changed, 21 insertions(+)
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
-index fb2ee57..31e988a 100644
+index 3ae1d77..3a2ac56 100644
--- a/src/kernel-install/kernel-install
+++ b/src/kernel-install/kernel-install
@@ -19,6 +19,27 @@
@@ -39,7 +39,4 @@ index fb2ee57..31e988a 100644
+
usage()
{
- echo "Usage:" >&2
---
-1.8.3.1
-
+ echo "Usage:"
diff --git a/systemd.spec b/systemd.spec
index 9f9edf6..bb52ff5 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -16,7 +16,7 @@
Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 208
-Release: 10%{?gitcommit:.git%{gitcommit}}%{?dist}
+Release: 11%{?gitcommit:.git%{gitcommit}}%{?dist}
# For a breakdown of the licensing, see README
License: LGPLv2+ and MIT and GPLv2+
Summary: A System and Service Manager
@@ -97,7 +97,7 @@ Patch057: 0057-libudev-default-log_priority-to-INFO.patch
Patch058: 0058-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
Patch059: 0059-zsh-completion-add-systemd-run.patch
Patch060: 0060-man-explain-NAME-in-systemctl-man-page.patch
-#Patch061: 0061-virt-move-caching-of-virtualization-check-results-in.patch
+Patch061: 0061-virt-move-caching-of-virtualization-check-results-in.patch
Patch062: 0062-systemctl-fix-typo-in-help-text.patch
Patch063: 0063-analyze-plot-place-the-text-on-the-side-with-most-sp.patch
Patch064: 0064-detect_virtualization-returns-NULL-pass-empty-string.patch
@@ -129,8 +129,8 @@ Patch089: 0089-timer-properly-format-relative-timestamps-in-the-fut.patch
Patch090: 0090-timer-consider-usec_t-1-an-invalid-timestamp.patch
Patch091: 0091-udev-usb_id-remove-obsoleted-bInterfaceSubClass-5-ma.patch
Patch092: 0092-Add-support-for-saving-restoring-keyboard-backlights.patch
-#Patch093: 0093-static-nodes-don-t-call-mkdir.patch
-#Patch094: 0094-Fix-kmod-error-message-to-have-correct-version-requi.patch
+Patch093: 0093-static-nodes-don-t-call-mkdir.patch
+Patch094: 0094-Fix-kmod-error-message-to-have-correct-version-requi.patch
Patch095: 0095-systemd-python-fix-booted-and-add-two-functions-to-d.patch
Patch096: 0096-activate-mention-E-in-the-help-text.patch
Patch097: 0097-activate-fix-crash-when-s-is-passed.patch
@@ -152,13 +152,13 @@ Patch112: 0112-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch
Patch113: 0113-core-socket-fix-SO_REUSEPORT.patch
Patch114: 0114-localed-match-converted-keymaps-before-legacy.patch
Patch115: 0115-keymap-Add-Toshiba-Satellite-U940.patch
-#Patch116: 0116-calendar-support-yearly-and-annually-names-the-same-.patch
-#Patch117: 0117-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
-#Patch118: 0118-manager-don-t-do-plymouth-in-a-container.patch
-#Patch119: 0119-nspawn-add-new-drop-capability-switch.patch
-#Patch120: 0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
-#Patch121: 0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
-#Patch122: 0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch116: 0116-calendar-support-yearly-and-annually-names-the-same-.patch
+Patch117: 0117-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
+Patch118: 0118-manager-don-t-do-plymouth-in-a-container.patch
+Patch119: 0119-nspawn-add-new-drop-capability-switch.patch
+Patch120: 0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
+Patch121: 0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
+Patch122: 0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Patch123: 0123-journal-when-appending-to-journal-file-allocate-larg.patch
Patch124: 0124-journal-make-table-const.patch
Patch125: 0125-journald-keep-statistics-on-how-of-we-hit-miss-the-m.patch
@@ -167,16 +167,113 @@ Patch127: 0127-journal-fix-iteration-when-we-go-backwards-from-the-.patch
Patch128: 0128-journal-allow-journal_file_copy_entry-to-work-on-non.patch
Patch129: 0129-journal-simplify-pre-allocation-logic.patch
Patch130: 0130-journald-mention-how-long-we-needed-to-flush-to-var-.patch
-#Patch131: 0131-automount-log-info-about-triggering-process.patch
-#Patch132: 0132-virt-split-detect_vm-into-separate-functions.patch
-#Patch133: 0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
-#Patch134: 0134-sysfs-show.c-return-negative-error.patch
-#Patch135: 0135-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
-#Patch136: 0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
-#Patch137: 0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
-#Patch138: 0138-systemd-treat-reload-failure-as-failure.patch
-#Patch139: 0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
-Patch140: 0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+Patch131: 0131-automount-log-info-about-triggering-process.patch
+Patch132: 0132-virt-split-detect_vm-into-separate-functions.patch
+Patch133: 0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch134: 0134-sysfs-show.c-return-negative-error.patch
+Patch135: 0135-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
+Patch136: 0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
+Patch137: 0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
+Patch138: 0138-systemd-treat-reload-failure-as-failure.patch
+Patch139: 0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
+Patch140: 0140-systemd-add-a-start-job-for-all-units-specified-with.patch
+Patch141: 0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch
+Patch142: 0142-Fix-memory-leak-in-stdout-journal-streams.patch
+Patch143: 0143-man-document-is-enabled-output.patch
+Patch144: 0144-hostnamed-avoid-using-NULL-in-error-path.patch
+Patch145: 0145-logind-use-correct-who-enum-values-with-KillUnit.patch
+Patch146: 0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch
+Patch147: 0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch
+Patch148: 0148-kernel-install-add-h-help.patch
+Patch149: 0149-kernel-install-fix-help-output.patch
+Patch150: 0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch
+Patch151: 0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch
+Patch152: 0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch
+Patch153: 0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch154: 0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch
+Patch155: 0155-libudev-hwdb-use-libudev-not-systemd-logging.patch
+Patch156: 0156-core-manager-remove-infinite-loop.patch
+Patch157: 0157-util-check-for-overflow-in-greedy_realloc.patch
+Patch158: 0158-journald-use-a-bit-more-cleanup-magic.patch
+Patch159: 0159-journald-malloc-less-when-streaming-messages.patch
+Patch160: 0160-activate-clean-up-inherited-descriptors.patch
+Patch161: 0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch
+Patch162: 0162-units-don-t-run-readahead-done-timers-in-containers.patch
+Patch163: 0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch
+Patch164: 0164-journal-pipe-journalctl-help-output-into-a-pager.patch
+Patch165: 0165-nspawn-complain-and-continue-if-machine-has-same-id.patch
+Patch166: 0166-man-beef-up-ExecStart-description.patch
+Patch167: 0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch
+Patch168: 0168-systemctl-add-the-plain-option-to-the-help-message.patch
+Patch169: 0169-Fix-a-few-resource-leaks-in-error-paths.patch
+Patch170: 0170-Fix-a-few-signed-unsigned-format-string-issues.patch
+Patch171: 0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch
+Patch172: 0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch
+Patch173: 0173-journal-file-protect-against-alloca-0.patch
+Patch174: 0174-man-describe-journalctl-show-cursor.patch
+Patch175: 0175-journal-fix-against-theoretical-undefined-behavior.patch
+Patch176: 0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch
+Patch177: 0177-journal-file.c-remove-redundant-assignment-of-variab.patch
+Patch178: 0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch
+Patch179: 0179-libudev-devices-received-from-udev-are-always-initia.patch
+Patch180: 0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch
+Patch181: 0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch
+Patch182: 0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch
+Patch183: 0183-man-be-more-explicit-about-option-arguments-that-tak.patch
+Patch184: 0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch
+Patch185: 0185-journalctl-zsh-completion-fix-several-issues-in-help.patch
+Patch186: 0186-keymap-Refactor-Acer-tables.patch
+Patch187: 0187-logging-reduce-send-timeout-to-something-more-sensib.patch
+Patch188: 0188-DEFAULT_PATH_SPLIT_USR-macro.patch
+Patch189: 0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch
+Patch190: 0190-logind-remove-dead-variable.patch
+Patch191: 0191-hwdb-update.patch
+Patch192: 0192-delta-replace-readdir_r-with-readdir.patch
+Patch193: 0193-delta-fix-delta-for-drop-ins.patch
+Patch194: 0194-delta-if-prefix-is-specified-only-show-overrides-the.patch
+Patch195: 0195-log-log_error-and-friends-add-a-newline-after-each-l.patch
+Patch196: 0196-man-units-tmpfiles.d-5-cleanup.patch
+Patch197: 0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch
+Patch198: 0198-sleep-config-fix-useless-check-for-swapfile-type.patch
+Patch199: 0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch
+Patch200: 0200-man-resolve-word-omissions.patch
+Patch201: 0201-man-improvements-to-comma-placement.patch
+Patch202: 0202-man-grammar-and-wording-improvements.patch
+Patch203: 0203-man-document-fail-nofail-auto-noauto.patch
+Patch204: 0204-man-fix-description-of-is-enabled-returned-value.patch
+Patch205: 0205-man-fix-Type-reference.patch
+Patch206: 0206-man-fix-Type-reference-v2.patch
+Patch207: 0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+Patch208: 0208-man-add-a-note-about-propagating-signals.patch
+Patch209: 0209-man-include-autoconf-snippet-in-daemon-7.patch
+Patch210: 0210-systemd-python-fix-setting-of-exception-codes.patch
+Patch211: 0211-systemd-python-fix-listen_fds-under-Python-2.patch
+Patch212: 0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch
+Patch213: 0213-tmpfiles-rename-unsafe-to-boot.patch
+Patch214: 0214-sleep-config-Dereference-pointer-before-check-for-NU.patch
+Patch215: 0215-sleep-config-fix-double-free.patch
+Patch216: 0216-rules-drivers-do-not-reset-RUN-list.patch
+Patch217: 0217-core-manager-print-info-about-interesting-signals.patch
+Patch218: 0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch
+Patch219: 0219-man-typo-fix.patch
+Patch220: 0220-swap-remove-if-else-with-the-same-data-path.patch
+Patch221: 0221-hwdb-update.patch
+Patch222: 0222-journal-Add-missing-byte-order-conversions.patch
+Patch223: 0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch
+Patch224: 0224-hwdb-add-Samsung-700G.patch
+Patch225: 0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch
+Patch226: 0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch
+Patch227: 0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch
+Patch228: 0228-sleep.c-fix-typo.patch
+Patch229: 0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch
+Patch230: 0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch
+Patch231: 0231-man-mention-which-variables-will-be-expanded-in-Exec.patch
+Patch232: 0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch
+Patch233: 0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch
+Patch234: 0234-gpt-auto-generator-skip-nonexistent-devices.patch
+Patch235: 0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch
+Patch236: 0236-journald-do-not-free-space-when-disk-space-runs-low.patch
+Patch237: 0237-man-add-busctl-1.patch
# kernel-install patch for grubby, drop if grubby is obsolete
Patch1000: kernel-install-grubby.patch
@@ -224,7 +321,7 @@ Requires(pre): /usr/bin/getent
Requires(pre): /usr/sbin/groupadd
Requires: dbus
Requires: %{name}-libs = %{version}-%{release}
-Requires: kmod >= 14
+Requires: kmod >= 15
Requires: diffutils
Provides: /bin/systemctl
Provides: /sbin/shutdown
@@ -705,6 +802,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
%{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator
%{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator
%{_prefix}/lib/tmpfiles.d/systemd.conf
+%{_prefix}/lib/tmpfiles.d/systemd-nologin.conf
%{_prefix}/lib/tmpfiles.d/x11.conf
%{_prefix}/lib/tmpfiles.d/legacy.conf
%{_prefix}/lib/tmpfiles.d/tmp.conf
@@ -828,6 +926,11 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
%{_datadir}/systemd/gatewayd
%changelog
+* Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 208-11
+- Backport a few fixes, relevant documentation updates, and HWDB changes
+ (#1051797, #1051768, #1047335, #1047304, #1047186, #1045849, #1043304,
+ #1043212, #1039351, #1031325, #1023820, #1017509, #953077)
+
* Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 208-10
- Remove patch for #1026860 now that LVM rules have been updated
More information about the scm-commits
mailing list