commit: c9bdf97b36685eeda879b4c0ae033c5fd7c99e16
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 30 May 2020 13:28:01 +0200
Initial Commit
Diffstat:
207 files changed, 18091 insertions(+), 0 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,17 @@
+# Ignore crossdev-generated files
+cross-*
+/categories
+
+/system-use-flags.txt
+/repos.conf/eselect-repo.conf
+
+# Ignore overlay-synchronised settings
+/make.conf
+/sets
+/package.use
+/package.accept_keywords
+/package.license
+/package.mask
+/package.unmask
+/profile
+/make.profile
diff --git a/README.md b/README.md
@@ -0,0 +1,7 @@
+## /etc/portage
+
+This is the parts of my ``/etc/portage`` files that I wish to render public.
+
+A large part of what’s in `patches` is `git format-patch` on my own branch(es)
+of theses softwares, it’s included in here for simplicity but might get added
+to a `.gitignore` at some point.
diff --git a/bashrc b/bashrc
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+if [ "${EBUILD_PHASE}" == "postinst" ] || [ "${EBUILD_PHASE}" == "postrm" ]; then
+ echo ":: Calling makewhatis"
+ makewhatis -Q -T utf8 ${MANPATH//:/ }
+fi
+
+#if [ "${EBUILD_PHASE}" == "prepare" ]; then
+# if grep -q -- '-bin$' <<<"${PN}"; then
+# echo ":: *-bin package, not deblobbing"
+# else
+# go-deblob -e 'test*' -e '*/test*' -d "${WORKDIR}"
+# fi
+#fi
diff --git a/env/as-nasm b/env/as-nasm
@@ -0,0 +1 @@
+AS="nasm"+
\ No newline at end of file
diff --git a/env/cxx11 b/env/cxx11
@@ -0,0 +1 @@
+CXXFLAGS="${CXXFLAGS} -std=cxx11"
diff --git a/env/debug b/env/debug
@@ -0,0 +1,2 @@
+CFLAGS="-O1 -pipe -ggdb"
+CXXFLAGS="${CFLAGS}"
diff --git a/env/fno_common b/env/fno_common
@@ -0,0 +1,4 @@
+# https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common#Reproducing_the_build_failure_with_older_gcc_versions
+# https://bugs.gentoo.org/show_bug.cgi?id=705764
+CFLAGS="${CFLAGS} -fno-common"
+CXXFLAGS="${CXXFLAGS} -fno-common"
diff --git a/env/gcc b/env/gcc
@@ -0,0 +1,18 @@
+AS="as"
+AR="gcc-ar"
+CC="gcc"
+CCC="g++"
+CFLAGS="${COMMON_FLAGS}"
+LDFLAGS=""
+CPP="gcc -E"
+CXX="g++"
+CXXFLAGS="${COMMON_FLAGS}"
+LD="ld"
+NM="gcc-nm"
+OBJCOPY="objcopy"
+OBJDUMP="objdump"
+OBJSIZE="size"
+RANLIB="gcc-ranlib"
+READELF="readelf"
+READOBJ="readobj"
+STRIP="strip"
diff --git a/env/gcc-4 b/env/gcc-4
@@ -0,0 +1,2 @@
+CC=gcc-4.8.5
+CXX=g++-4.8.5
diff --git a/env/gcc-ar b/env/gcc-ar
@@ -0,0 +1 @@
+AR="gcc-ar"+
\ No newline at end of file
diff --git a/env/gcc-as b/env/gcc-as
@@ -0,0 +1 @@
+AS="as"+
\ No newline at end of file
diff --git a/env/gcc-clags b/env/gcc-clags
@@ -0,0 +1,2 @@
+CFLAGS="-O2 -pipe -march=native -mtune=native"
+CXXFLAGS="${CFLAGS}"
diff --git a/env/gnu b/env/gnu
@@ -0,0 +1,17 @@
+AR="gcc-ar"
+AS="as"
+CC="gcc"
+CCC="g++"
+CFLAGS="${COMMON_FLAGS}"
+CPP="cpp"
+CXX="g++"
+CXXFLAGS="${COMMON_FLAGS}"
+LD="ld.bfd"
+NM="gcc-nm"
+OBJCOPY="objcopy"
+OBJDUMP="objdump"
+OBJSIZE="size"
+RANLIB="gcc-ranlib"
+READELF="readelf"
+READOBJ="readobj"
+STRIP="strip"
diff --git a/env/gnu-ld b/env/gnu-ld
@@ -0,0 +1 @@
+LD="ld"
diff --git a/env/latomic b/env/latomic
@@ -0,0 +1 @@
+LDFLAGS="${LDFLAGS} -latomic"+
\ No newline at end of file
diff --git a/env/libcxx b/env/libcxx
@@ -0,0 +1,2 @@
+CXX="clang++ -stdlib=libc++"
+OBJCXX="clang++ -stdlib=libc++"
diff --git a/env/libstdcxx b/env/libstdcxx
@@ -0,0 +1,2 @@
+CXX="clang++ -stdlib=libstdc++"
+OBJCXX="clang++ -stdlib=libstdc++"
diff --git a/env/libtool b/env/libtool
@@ -0,0 +1 @@
+LIBTOOL="libtool"+
\ No newline at end of file
diff --git a/env/log_disable_0 b/env/log_disable_0
@@ -0,0 +1,3 @@
+# https://trac.webkit.org/wiki/WebKitGTK/Debugging#Loggingsupport
+export CFLAGS="${CFLAGS} -DLOG_DISABLED=0"
+export CXXFLAGS="${CXXFLAGS} -DLOG_DISABLED=0"
diff --git a/env/no-execstack b/env/no-execstack
@@ -0,0 +1 @@
+LDFLAGS="${LDFLAGS} -Wl,-z,noexecstack"+
\ No newline at end of file
diff --git a/env/noclean b/env/noclean
@@ -0,0 +1 @@
+FEATURES="noclean"+
\ No newline at end of file
diff --git a/env/notmpfs.conf b/env/notmpfs.conf
@@ -0,0 +1,2 @@
+PORTAGE_TMPDIR="/var/tmp/notmpfs"
+
diff --git a/package.env/as-nasm b/package.env/as-nasm
@@ -0,0 +1 @@
+media-libs/x264 as-nasm
diff --git a/package.env/debug b/package.env/debug
@@ -0,0 +1 @@
+=net-misc/openssh-7.7_p1-r9::gentoo debug
diff --git a/package.env/fno_common b/package.env/fno_common
@@ -0,0 +1 @@
+app-editors/vis gcc fno_common
diff --git a/package.env/gcc b/package.env/gcc
@@ -0,0 +1,87 @@
+=app-arch/arj-3.10.22-r7::gentoo gcc
+=app-editors/vim-1.14::lanodanOverlay gcc
+=app-emulation/wine-staging-2.19-r7::bobwya gcc
+=app-emulation/wine-staging-4.3_p1::bobwya gcc
+~app-office/abiword-3.0.2::gentoo gcc
+=app-office/libreoffice-6.2.4.2::gentoo gcc
+=app-text/openjade-1.3.2-r8 gcc
+=app-text/texlive-core-2017-r4::gentoo gcc
+=dev-cpp/clucene-2.3.3.4-r6::gentoo gcc
+=dev-cpp/tbb-2017.20161128::gentoo gcc
+=dev-lang/ocaml-4.04.2-r1::gentoo gcc
+=dev-libs/openssl-0.9.8z_p8-r1::gentoo gcc
+=dev-libs/softhsm-2.5.0::gentoo gcc
+=dev-util/vulkan-headers-1.1.92.0 gcc # See related issues/PR https://bugs.llvm.org/show_bug.cgi?id=37136 Fails on 6.0.1
+=games-arcade/stepmania-5.1.0_beta2::lanodanOverlay gcc
+=games-engines/devilutionx-9999::poly-c gcc
+=games-fps/gzdoom-4.1.1::guru gcc
+=games-puzzle/pingus-0.7.6-r2::gentoo gcc
+=games-puzzle/pipewalker-0.9.4-r1::gentoo gcc
+=games-sports/vdrift-20120722::gentoo gcc
+=games-sports/vdrift-2014.10.20::lanodanOverlay gcc
+=media-libs/allegro-4.4.2-r2::gentoo gcc
+=media-libs/id3lib-3.8.3-r8:0/0::gentoo gcc
+=media-libs/openal-1.19.1:0/0::gentoo gcc
+=media-libs/shaderc-2018.0::gentoo gcc
+=media-libs/vulkan-loader-1.1.114::gentoo gcc
+=media-libs/vulkan-loader-1.1.92.1::gentoo gcc # See related issues/PR https://bugs.llvm.org/show_bug.cgi?id=37136 Fails on 6.0.1
+=media-video/mkvtoolnix-29.0.0::gentoo gcc
+=net-irc/unrealircd-4.2.0::lanodanOverlay gcc
+=net-vpn/i2pd-2.20.0::gentoo gcc
+=net-wireless/crda-3.18-r1:0/0::gentoo gcc
+=sys-apps/apparmor-2.13.2::gentoo gcc
+=sys-firmware/ipxe-1.0.0_p20190728:0/0::gentoo gcc
+=sys-firmware/seabios-1.12.0::gentoo gcc
+cross-*/* gcc
+net-firewall/nftables gcc
+net-libs/libnftnl gcc
+sys-devel/gcc gcc
+sys-libs/glibc gcc
+~dev-libs/elfutils-0.176 gcc
+~dev-libs/elfutils-0.177::gentoo gcc
+=media-libs/ftgl-2.1.3_rc5::gentoo gcc
+~sys-boot/syslinux-6.04_pre1 gcc
+=dev-scheme/racket-7.3::gentoo gcc
+=app-emulation/dxvk-1.6::tastytea gcc
+=media-plugins/caps-plugins-0.9.24::gentoo gcc
+
+## Perl :(
+dev-lang/perl gcc
+dev-perl/* gcc
+
+## Haskell
+dev-haskell/*::gentoo gcc
+dev-lang/ghc::gentoo gcc
+# grep -rl 'haskell-cabal' *-* | cut -d/ -f1-2 | sort -u | grep -v dev-haskell | sed 's;$; gcc;'
+app-admin/haskell-updater gcc
+app-emacs/ghc-mod gcc
+app-forensics/quickfuzz gcc
+app-portage/fquery gcc
+app-portage/hackport gcc
+app-text/pandoc gcc
+dev-games/goatee gcc
+dev-lang/epic gcc
+dev-lang/helium gcc
+dev-lang/whitespace gcc
+dev-util/bnfc gcc
+dev-util/bustle gcc
+dev-util/shellcheck gcc
+dev-util/shelltestrunner gcc
+dev-vcs/darcs gcc
+dev-vcs/git-annex gcc
+games-board/goatee-gtk gcc
+games-roguelike/mazesofmonad gcc
+net-mail/list-remote-forwards gcc
+net-mail/mailbox-count gcc
+net-misc/haeredes gcc
+net-misc/hath gcc
+sci-mathematics/agda gcc
+sci-mathematics/agda-lib-ffi gcc
+sci-mathematics/agda-stdlib gcc
+www-apps/gitit gcc
+x11-misc/xmobar gcc
+x11-wm/xmonad gcc
+x11-wm/xmonad-contrib gcc
+=app-misc/g810-led-0.3.6::gentoo gcc
+=media-gfx/potrace-1.15::gentoo gcc
+=dev-libs/botan-2.14.0::gentoo gcc
diff --git a/package.env/gcc-ar b/package.env/gcc-ar
@@ -0,0 +1,4 @@
+=sys-libs/timezone-data-2017c::gentoo gcc-ar
+app-text/pandoc gcc-ar
+=net-libs/libnet-1.0.2a-r5::gentoo gcc-ar
+dev-haskell/* gcc-ar
diff --git a/package.env/gcc-as b/package.env/gcc-as
@@ -0,0 +1,2 @@
+~app-emulation/qemu-3.1.0 gcc-as
+~app-emulation/qemu-4.0.0 gcc-as
diff --git a/package.env/gcc-clags b/package.env/gcc-clags
@@ -0,0 +1 @@
+sys-devel/gcc gcc-clags
diff --git a/package.env/gcc-haskell b/package.env/gcc-haskell
@@ -0,0 +1,7 @@
+dev-haskell/* gcc
+x11-misc/xmobar gcc
+x11-drivers/nvidia-drivers gcc
+x11-wm/xmonad* gcc
+app-text/pandoc gcc
+dev-util/shellcheck gcc
+gui-wm/waymonad gcc
diff --git a/package.env/gcc-stdc11-bugs b/package.env/gcc-stdc11-bugs
@@ -0,0 +1 @@
+=app-text/stardict-3.0.6-r3 gcc
diff --git a/package.env/gcc-tmp b/package.env/gcc-tmp
@@ -0,0 +1,2 @@
+sys-devel/clang:6 gcc
+sys-devel/llvm:6 gcc
diff --git a/package.env/gnu-ld b/package.env/gnu-ld
@@ -0,0 +1 @@
+=sys-firmware/seabios-1.12.0::gentoo gnu-ld
diff --git a/package.env/latomic b/package.env/latomic
@@ -0,0 +1,2 @@
+=media-libs/mesa-17.2.8::gentoo latomic
+=media-libs/mesa-17.3.9::gentoo latomic
diff --git a/package.env/libtool b/package.env/libtool
@@ -0,0 +1,2 @@
+=sys-devel/gcc-7.2.0::gentoo libtool
+=sys-devel/gcc-6.4.0::gentoo libtool
diff --git a/package.env/log_disable_0 b/package.env/log_disable_0
@@ -0,0 +1 @@
+net-libs/webkit-gtk log_disable_0
diff --git a/package.env/no-execstack b/package.env/no-execstack
@@ -0,0 +1 @@
+=dev-libs/nspr-4.16::gentoo no-execstack
diff --git a/package.env/noclean b/package.env/noclean
@@ -0,0 +1 @@
+net-libs/webkit-gtk noclean+
\ No newline at end of file
diff --git a/package.env/notmpfs.conf b/package.env/notmpfs.conf
@@ -0,0 +1,14 @@
+app-office/libreoffice notmpfs.conf
+mail-client/thunderbird notmpfs.conf
+sys-devel/gcc notmpfs.conf
+www-client/chromium notmpfs.conf
+www-client/iridium-browser notmpfs.conf
+www-client/firefox notmpfs.conf
+dev-lang/ghc notmpfs.conf
+dev-lang/mono notmpfs.conf
+sys-kernel/gentoo-sources notmpfs.conf
+sys-libs/compiler-rt-sanitizers notmpfs.conf
+sys-devel/llvm notmpfs.conf
+dev-qt/qtwebengine notmpfs.conf
+sys-netbsd/netbsd-src notmpfs.conf
+=net-libs/webkit-gtk-2.24.1::lanodanOverlay notmpfs.conf
diff --git a/patches/app-admin/pass-otp-1.1.0/pass-otp-69-otp-insert_require_only_one_issuer_or_account.patch b/patches/app-admin/pass-otp-1.1.0/pass-otp-69-otp-insert_require_only_one_issuer_or_account.patch
@@ -0,0 +1,51 @@
+From 1ea820305d131a69eeac0e08ebce4b971c10e8f1 Mon Sep 17 00:00:00 2001
+From: Benjamin Denhartog <ben@denhartog.io>
+Date: Thu, 15 Mar 2018 14:03:50 -0700
+Subject: [PATCH] otp-insert: require only one of `--issuer` or `--account`
+
+closes #68
+---
+ otp.bash | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/otp.bash b/otp.bash
+index 33aca78..25ac459 100755
+--- a/otp.bash
++++ b/otp.bash
+@@ -105,9 +105,10 @@ otp_read_uri() {
+ }
+
+ otp_read_secret() {
+- local uri prompt="$1" echo="$2" issuer accountname
+- issuer="$(urlencode "$3")"
+- accountname="$(urlencode "$4")"
++ local uri prompt="$1" echo="$2" issuer accountname separator
++ [ ! "$3" = false ] && issuer="$(urlencode "$3")"
++ [ ! "$4" = false ] && accountname="$(urlencode "$4")"
++ [ -n "$issuer" ] && [ -n "$accountname" ] && separator=":"
+
+ if [[ -t 0 ]]; then
+ if [[ $echo -eq 0 ]]; then
+@@ -123,7 +124,8 @@ otp_read_secret() {
+ read -r secret
+ fi
+
+- uri="otpauth://totp/$issuer:$accountname?secret=$secret&issuer=$issuer"
++ uri="otpauth://totp/${issuer}${separator}${accountname}?secret=${secret}"
++ [ -n "$issuer" ] && uri="${uri}&issuer=${issuer}"
+ otp_parse_uri "$uri"
+ }
+
+@@ -216,7 +218,11 @@ cmd_otp_insert() {
+ fi
+
+ if [[ $from_secret -eq 1 ]]; then
+- ([[ -z "$issuer" ]] || [[ -z "$account" ]]) && die "Missing issuer or account"
++ [ -z "$issuer" ] && issuer=false
++ [ -z "$account" ] && account=false
++
++ [ "$issuer" = false ] && [ "$account" = false ] && die "Missing one of either '--issuer' or '--account'"
++
+ otp_read_secret "$prompt" $echo "$issuer" "$account"
+ else
+ otp_read_uri "$prompt" $echo
diff --git a/patches/app-arch/innoextract-1.7/innoextract-1.7_inno_5.6.2_0001.patch b/patches/app-arch/innoextract-1.7/innoextract-1.7_inno_5.6.2_0001.patch
@@ -0,0 +1,62 @@
+From 5cf1cb3ba07eba8d32b4bb961ba80401ea8248e7 Mon Sep 17 00:00:00 2001
+From: Daniel Scharrer <daniel@constexpr.org>
+Date: Sat, 8 Sep 2018 03:24:54 +0200
+Subject: [PATCH] Add preliminary Inno Setup 5.6.2 support
+
+---
+ CHANGELOG | 1 +
+ src/setup/header.cpp | 13 +++++++++++--
+ src/setup/header.hpp | 2 ++
+ 3 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/src/setup/header.cpp b/src/setup/header.cpp
+index 1484181..844b2e9 100644
+--- a/src/setup/header.cpp
++++ b/src/setup/header.cpp
+@@ -236,6 +236,13 @@ void header::load(std::istream & is, const version & version) {
+ } else {
+ setup_mutex.clear();
+ }
++ if(version >= INNO_VERSION(5, 6, 1)) {
++ is >> util::encoded_string(changes_environment, version.codepage());
++ is >> util::encoded_string(changes_associations, version.codepage());
++ } else {
++ changes_environment.clear();
++ changes_associations.clear();
++ }
+ if(version >= INNO_VERSION(5, 2, 5)) {
+ is >> util::ansi_string(license_text);
+ is >> util::ansi_string(info_before);
+@@ -498,7 +505,9 @@ void header::load(std::istream & is, const version & version) {
+ if(version < INNO_VERSION(1, 3, 21)) {
+ flagreader.add(OverwriteUninstRegEntries);
+ }
+- flagreader.add(ChangesAssociations);
++ if(version < INNO_VERSION(5, 6, 1)) {
++ flagreader.add(ChangesAssociations);
++ }
+ }
+ if(version >= INNO_VERSION(1, 3, 21)) {
+ if(version < INNO_VERSION(5, 3, 8)) {
+@@ -562,7 +571,7 @@ void header::load(std::istream & is, const version & version) {
+ if(version >= INNO_VERSION(4, 2, 2)) {
+ flagreader.add(EncryptionUsed);
+ }
+- if(version >= INNO_VERSION(5, 0, 4)) {
++ if(version >= INNO_VERSION(5, 0, 4) && version < INNO_VERSION(5, 6, 1)) {
+ flagreader.add(ChangesEnvironment);
+ }
+ if(version >= INNO_VERSION(5, 1, 7) && !version.unicode) {
+diff --git a/src/setup/header.hpp b/src/setup/header.hpp
+index a21dba0..8975e2f 100644
+--- a/src/setup/header.hpp
++++ b/src/setup/header.hpp
+@@ -154,6 +154,8 @@ struct header {
+ std::string uninstallable;
+ std::string close_applications_filter;
+ std::string setup_mutex;
++ std::string changes_environment;
++ std::string changes_associations;
+ std::string license_text;
+ std::string info_before;
+ std::string info_after;
diff --git a/patches/app-arch/innoextract-1.7/innoextract-1.7_inno_5.6.2_0002.patch b/patches/app-arch/innoextract-1.7/innoextract-1.7_inno_5.6.2_0002.patch
@@ -0,0 +1,22 @@
+From 38ae68f393b2f3ed1862ec7f24b1d99bbbaacb19 Mon Sep 17 00:00:00 2001
+From: Daniel Scharrer <daniel@constexpr.org>
+Date: Fri, 1 Mar 2019 04:20:25 +0100
+Subject: [PATCH] Fix support for Inno Setup 5.6.2 dev snapshot used by GOG
+
+Fixes: issue #74
+---
+ src/setup/header.cpp | 2 +-
+ src/setup/version.cpp | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/setup/version.cpp b/src/setup/version.cpp
+index 69ff234..08d720f 100644
+--- a/src/setup/version.cpp
++++ b/src/setup/version.cpp
+@@ -154,6 +154,8 @@ const known_version versions[] = {
+ { "Inno Setup Setup Data (5.5.7) (U)", INNO_VERSION_EXT(5, 5, 7, 0), true },
+ { "Inno Setup Setup Data (5.6.0)", INNO_VERSION_EXT(5, 6, 0, 0), false },
+ { "Inno Setup Setup Data (5.6.0) (u)", INNO_VERSION_EXT(5, 6, 0, 0), true },
++ { "Inno Setup Setup Data (5.6.2)", INNO_VERSION_EXT(5, 6, 2, 0), false }, // Unreleased, used by GOG
++ { "Inno Setup Setup Data (5.6.2) (u)", INNO_VERSION_EXT(5, 6, 2, 0), true }, // Unreleased, used by GOG
+ };
diff --git a/patches/app-editors/vis-0.4/619.patch b/patches/app-editors/vis-0.4/619.patch
@@ -0,0 +1,65 @@
+From b24be0909923f9f237accc98986128032d98b9db Mon Sep 17 00:00:00 2001
+From: Chris Rawnsley <chris@puny.agency>
+Date: Sun, 1 Oct 2017 20:32:12 +0100
+Subject: [PATCH] themes: add zenburn and make it the default 256 theme
+
+---
+ lua/themes/default-256.lua | 2 +-
+ lua/themes/zenburn.lua | 39 +++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 40 insertions(+), 1 deletion(-)
+ create mode 100644 lua/themes/zenburn.lua
+
+diff --git a/lua/themes/default-256.lua b/lua/themes/default-256.lua
+index 8479b1b5..e12776c0 120000
+--- a/lua/themes/default-256.lua
++++ b/lua/themes/default-256.lua
+@@ -1 +1 @@
+-solarized.lua
+\ No newline at end of file
++zenburn.lua
+\ No newline at end of file
+diff --git a/lua/themes/zenburn.lua b/lua/themes/zenburn.lua
+new file mode 100644
+index 00000000..f60e900f
+--- /dev/null
++++ b/lua/themes/zenburn.lua
+@@ -0,0 +1,39 @@
++-- A poor imitation of the original Vim colourscheme which can be
++-- found at https://github.com/jnurmine/Zenburn
++
++local lexers = vis.lexers
++
++lexers.STYLE_DEFAULT = 'fore:#d7d7d7,back:#3a3a3a'
++lexers.STYLE_NOTHING = ''
++lexers.STYLE_CLASS = ''
++lexers.STYLE_COMMENT = 'fore:#87af87'
++lexers.STYLE_CONSTANT = 'fore:#d7afaf,bold'
++lexers.STYLE_DEFINITION = 'fore:#ffd7af,bold'
++lexers.STYLE_ERROR = 'fore:#87d7af,back:#303030,bold'
++lexers.STYLE_FUNCTION = 'fore:#d7d7af'
++lexers.STYLE_KEYWORD = 'fore:#afaf87,bold'
++lexers.STYLE_LABEL = 'fore:#d7d7af'
++lexers.STYLE_NUMBER = 'fore:#87d7d7'
++lexers.STYLE_OPERATOR = 'fore:#ffffd7'
++lexers.STYLE_REGEX = ''
++lexers.STYLE_STRING = 'fore:#d78787'
++lexers.STYLE_PREPROCESSOR = 'fore:#ffd7af,bold'
++lexers.STYLE_TAG = 'fore:#d7afaf,bold'
++lexers.STYLE_TYPE = 'fore:#d7d7af,bold'
++lexers.STYLE_VARIABLE = ''
++lexers.STYLE_WHITESPACE = ''
++lexers.STYLE_EMBEDDED = ''
++lexers.STYLE_IDENTIFIER = ''
++
++lexers.STYLE_LINENUMBER = 'fore:#585858'
++lexers.STYLE_LINENUMBER_CURSOR = 'fore:#666666'
++lexers.STYLE_CURSOR = 'back:#585858'
++lexers.STYLE_CURSOR_PRIMARY = 'fore:#1c1c1c,back:#87afaf,bold'
++lexers.STYLE_CURSOR_LINE = 'back:#444444'
++lexers.STYLE_COLOR_COLUMN = 'back:#444444'
++lexers.STYLE_SELECTION = 'back:#5f875f'
++lexers.STYLE_STATUS = 'back:#262626,fore:#87af87'
++lexers.STYLE_STATUS_FOCUSED = 'back:#303030,fore:#afaf87,bold'
++lexers.STYLE_SEPARATOR = ''
++lexers.STYLE_INFO = ''
++lexers.STYLE_EOF = 'fore:#585858'
diff --git a/patches/app-editors/vis-0.4/vis-0.4-symbols.patch b/patches/app-editors/vis-0.4/vis-0.4-symbols.patch
@@ -0,0 +1,17 @@
+diff --git a/view.c b/view.c
+index fafabc5..c82384f 100644
+--- a/view.c
++++ b/view.c
+@@ -90,10 +90,10 @@ static const SyntaxSymbol symbols_none[] = {
+ };
+
+ static const SyntaxSymbol symbols_default[] = {
+- [SYNTAX_SYMBOL_SPACE] = { "·" /* Middle Dot U+00B7 */ },
++ [SYNTAX_SYMBOL_SPACE] = { "␣" /* Open Box U+2423 */ },
+ [SYNTAX_SYMBOL_TAB] = { "›" /* Single Right-Pointing Angle Quotation Mark U+203A */ },
+ [SYNTAX_SYMBOL_TAB_FILL] = { " " },
+- [SYNTAX_SYMBOL_EOL] = { "↵" /* Downwards Arrow with Corner Leftwards U+21B5 */ },
++ [SYNTAX_SYMBOL_EOL] = { "⏎" /* RETURN SYMBOL U+23CE */ },
+ [SYNTAX_SYMBOL_EOF] = { "~" },
+ };
+
diff --git a/patches/app-editors/vis-0.4/vis-0.4_ebuild_lexer.patch b/patches/app-editors/vis-0.4/vis-0.4_ebuild_lexer.patch
@@ -0,0 +1,107 @@
+diff --git a/lua/lexers/ebuild.lua b/lua/lexers/ebuild.lua
+new file mode 100644
+index 0000000..9ecb7d8
+--- /dev/null
++++ b/lua/lexers/ebuild.lua
+@@ -0,0 +1,87 @@
++-- Copyright 2006-2017 Mitchell mitchell.att.foicica.com. See LICENSE.
++-- Shell LPeg lexer.
++
++local l = require('lexer')
++local token, word_match = l.token, l.word_match
++local P, R, S = lpeg.P, lpeg.R, lpeg.S
++
++local M = {_NAME = 'ebuild'}
++
++-- Whitespace.
++local ws = token(l.WHITESPACE, l.space^1)
++
++-- Comments.
++local comment = token(l.COMMENT, '#' * l.nonnewline^0)
++
++-- Strings.
++local sq_str = l.delimited_range("'", false, true)
++local dq_str = l.delimited_range('"')
++local ex_str = l.delimited_range('`')
++local heredoc = '<<' * P(function(input, index)
++ local s, e, _, delimiter =
++ input:find('%-?(["\']?)([%a_][%w_]*)%1[\n\r\f;]+', index)
++ if s == index and delimiter then
++ local _, e = input:find('[\n\r\f]+'..delimiter, e)
++ return e and e + 1 or #input + 1
++ end
++end)
++local string = token(l.STRING, sq_str + dq_str + ex_str + heredoc)
++
++-- Numbers.
++local number = token(l.NUMBER, l.float + l.integer)
++
++-- Keywords.
++local keyword = token(l.KEYWORD, word_match({
++ -- Bash keywords
++ 'if', 'then', 'elif', 'else', 'fi', 'case', 'in', 'esac', 'while', 'for',
++ 'do', 'done', 'continue', 'local', 'return', 'select',
++ -- Ebuild keywords
++ 'use', 'has_version', 'best_version', 'use_width', 'use_enable',
++ 'keepdir', 'econf', 'die', 'einstall', 'einfo', 'ewarn', 'eerror', 'diropts',
++ 'dobin', 'docinto', 'dodoc', 'doexe', 'doheader', 'doinfo', 'doins',
++ 'dolib', 'dolib.a', 'dolib.so', 'doman', 'dosbin', 'dosym', 'emake', 'exeinto',
++ 'exeopts', 'fowners', 'fperms', 'insinto', 'insopts', 'into', 'libopts', 'newbin',
++ 'newexe', 'newheader', 'newins', 'newman', 'newsbin', 'has', 'unpack', 'into',
++ 'doinitd', 'doconfd', 'doenvd', 'domo', 'dodir', 'ebegin', 'eend',
++ 'newconfd', 'newdoc', 'newenvd', 'newinitd', 'newlib.a', 'newlib.so',
++ 'hasv', 'usev', 'usex', 'elog', 'eapply', 'eapply_user',
++ 'einstalldocs', 'in_iuse', 'get_libdir',
++ 'addread', 'addwrite', 'adddeny', 'addpredict',
++ -- Operators.
++ '-a', '-b', '-c', '-d', '-e', '-f', '-g', '-h', '-k', '-p', '-r', '-s', '-t',
++ '-u', '-w', '-x', '-O', '-G', '-L', '-S', '-N', '-nt', '-ot', '-ef', '-o',
++ '-z', '-n', '-eq', '-ne', '-lt', '-le', '-gt', '-ge'
++}, '-'))
++
++-- Identifiers.
++local identifier = token(l.IDENTIFIER, l.word)
++
++-- Variables.
++local variable = token(l.VARIABLE,
++ '$' * (S('!#?*@$') + l.digit^1 + l.word +
++ l.delimited_range('{}', true, true, true)))
++
++-- Operators.
++local operator = token(l.OPERATOR, S('=!<>+-/*^&|~.,:;?()[]{}'))
++
++M._rules = {
++ {'whitespace', ws},
++ {'keyword', keyword},
++ {'identifier', identifier},
++ {'string', string},
++ {'comment', comment},
++ {'number', number},
++ {'variable', variable},
++ {'operator', operator},
++}
++
++M._foldsymbols = {
++ _patterns = {'[a-z]+', '[{}]', '#'},
++ [l.KEYWORD] = {
++ ['if'] = 1, fi = -1, case = 1, esac = -1, ['do'] = 1, done = -1
++ },
++ [l.OPERATOR] = {['{'] = 1, ['}'] = -1},
++ [l.COMMENT] = {['#'] = l.fold_line_comments('#')}
++}
++
++return M
+diff --git a/lua/plugins/filetype.lua b/lua/plugins/filetype.lua
+index 52eef25..539513f 100644
+--- a/lua/plugins/filetype.lua
++++ b/lua/plugins/filetype.lua
+@@ -107,6 +107,9 @@ vis.ftdetect.filetypes = {
+ dsv = {
+ ext = { "group", "gshadow", "passwd", "shadow" },
+ },
++ ebuild = {
++ ext = { "%.ebuild$" },
++ },
+ eiffel = {
+ ext = { "%.e$", "%.eif$" },
+ },
diff --git a/patches/app-editors/vis-0.5/vis-0.4-symbols.patch b/patches/app-editors/vis-0.5/vis-0.4-symbols.patch
@@ -0,0 +1,13 @@
+diff --git a/view.c b/view.c
+index fafabc5..c82384f 100644
+--- a/view.c
++++ b/view.c
+@@ -90,6 +90,6 @@ static const SyntaxSymbol symbols_none[] = {
+ };
+
+ static const SyntaxSymbol symbols_default[] = {
+- [SYNTAX_SYMBOL_SPACE] = { "·" /* Middle Dot U+00B7 */ },
++ [SYNTAX_SYMBOL_SPACE] = { "␣" /* Open Box U+2423 */ },
+ [SYNTAX_SYMBOL_TAB] = { "›" /* Single Right-Pointing Angle Quotation Mark U+203A */ },
+ [SYNTAX_SYMBOL_TAB_FILL] = { " " },
+
diff --git a/patches/app-editors/vis-0.5/vis-0.4_ebuild_lexer.patch b/patches/app-editors/vis-0.5/vis-0.4_ebuild_lexer.patch
@@ -0,0 +1,107 @@
+diff --git a/lua/lexers/ebuild.lua b/lua/lexers/ebuild.lua
+new file mode 100644
+index 0000000..9ecb7d8
+--- /dev/null
++++ b/lua/lexers/ebuild.lua
+@@ -0,0 +1,87 @@
++-- Copyright 2006-2017 Mitchell mitchell.att.foicica.com. See LICENSE.
++-- Shell LPeg lexer.
++
++local l = require('lexer')
++local token, word_match = l.token, l.word_match
++local P, R, S = lpeg.P, lpeg.R, lpeg.S
++
++local M = {_NAME = 'ebuild'}
++
++-- Whitespace.
++local ws = token(l.WHITESPACE, l.space^1)
++
++-- Comments.
++local comment = token(l.COMMENT, '#' * l.nonnewline^0)
++
++-- Strings.
++local sq_str = l.delimited_range("'", false, true)
++local dq_str = l.delimited_range('"')
++local ex_str = l.delimited_range('`')
++local heredoc = '<<' * P(function(input, index)
++ local s, e, _, delimiter =
++ input:find('%-?(["\']?)([%a_][%w_]*)%1[\n\r\f;]+', index)
++ if s == index and delimiter then
++ local _, e = input:find('[\n\r\f]+'..delimiter, e)
++ return e and e + 1 or #input + 1
++ end
++end)
++local string = token(l.STRING, sq_str + dq_str + ex_str + heredoc)
++
++-- Numbers.
++local number = token(l.NUMBER, l.float + l.integer)
++
++-- Keywords.
++local keyword = token(l.KEYWORD, word_match({
++ -- Bash keywords
++ 'if', 'then', 'elif', 'else', 'fi', 'case', 'in', 'esac', 'while', 'for',
++ 'do', 'done', 'continue', 'local', 'return', 'select',
++ -- Ebuild keywords
++ 'use', 'has_version', 'best_version', 'use_width', 'use_enable',
++ 'keepdir', 'econf', 'die', 'einstall', 'einfo', 'ewarn', 'eerror', 'diropts',
++ 'dobin', 'docinto', 'dodoc', 'doexe', 'doheader', 'doinfo', 'doins',
++ 'dolib', 'dolib.a', 'dolib.so', 'doman', 'dosbin', 'dosym', 'emake', 'exeinto',
++ 'exeopts', 'fowners', 'fperms', 'insinto', 'insopts', 'into', 'libopts', 'newbin',
++ 'newexe', 'newheader', 'newins', 'newman', 'newsbin', 'has', 'unpack', 'into',
++ 'doinitd', 'doconfd', 'doenvd', 'domo', 'dodir', 'ebegin', 'eend',
++ 'newconfd', 'newdoc', 'newenvd', 'newinitd', 'newlib.a', 'newlib.so',
++ 'hasv', 'usev', 'usex', 'elog', 'eapply', 'eapply_user',
++ 'einstalldocs', 'in_iuse', 'get_libdir',
++ 'addread', 'addwrite', 'adddeny', 'addpredict',
++ -- Operators.
++ '-a', '-b', '-c', '-d', '-e', '-f', '-g', '-h', '-k', '-p', '-r', '-s', '-t',
++ '-u', '-w', '-x', '-O', '-G', '-L', '-S', '-N', '-nt', '-ot', '-ef', '-o',
++ '-z', '-n', '-eq', '-ne', '-lt', '-le', '-gt', '-ge'
++}, '-'))
++
++-- Identifiers.
++local identifier = token(l.IDENTIFIER, l.word)
++
++-- Variables.
++local variable = token(l.VARIABLE,
++ '$' * (S('!#?*@$') + l.digit^1 + l.word +
++ l.delimited_range('{}', true, true, true)))
++
++-- Operators.
++local operator = token(l.OPERATOR, S('=!<>+-/*^&|~.,:;?()[]{}'))
++
++M._rules = {
++ {'whitespace', ws},
++ {'keyword', keyword},
++ {'identifier', identifier},
++ {'string', string},
++ {'comment', comment},
++ {'number', number},
++ {'variable', variable},
++ {'operator', operator},
++}
++
++M._foldsymbols = {
++ _patterns = {'[a-z]+', '[{}]', '#'},
++ [l.KEYWORD] = {
++ ['if'] = 1, fi = -1, case = 1, esac = -1, ['do'] = 1, done = -1
++ },
++ [l.OPERATOR] = {['{'] = 1, ['}'] = -1},
++ [l.COMMENT] = {['#'] = l.fold_line_comments('#')}
++}
++
++return M
+diff --git a/lua/plugins/filetype.lua b/lua/plugins/filetype.lua
+index 52eef25..539513f 100644
+--- a/lua/plugins/filetype.lua
++++ b/lua/plugins/filetype.lua
+@@ -107,6 +107,9 @@ vis.ftdetect.filetypes = {
+ dsv = {
+ ext = { "group", "gshadow", "passwd", "shadow" },
+ },
++ ebuild = {
++ ext = { "%.ebuild$" },
++ },
+ eiffel = {
+ ext = { "%.e$", "%.eif$" },
+ },
diff --git a/patches/app-editors/vis-0.5/vis-0.5-match_quotes.patch b/patches/app-editors/vis-0.5/vis-0.5-match_quotes.patch
@@ -0,0 +1,22 @@
+diff --git a/vis-motions.c.old b/vis-motions.c
+index b72f280..781ee1f 100644
+--- a/vis-motions.c.old
++++ b/vis-motions.c
+@@ -181,7 +181,7 @@ static size_t window_nop(Vis *vis, Win *win, size_t pos) {
+ }
+
+ static size_t bracket_match(Text *txt, size_t pos) {
+- size_t hit = text_bracket_match_symbol(txt, pos, "(){}[]<>");
++ size_t hit = text_bracket_match_symbol(txt, pos, "(){}[]<>'\"");
+ if (hit != pos)
+ return hit;
+ char current;
+@@ -196,6 +196,8 @@ static size_t bracket_match(Text *txt, size_t pos) {
+ case ']':
+ case '<':
+ case '>':
++ case '\'':
++ case '"':
+ return it.pos;
+ }
+ text_iterator_byte_next(&it, NULL);
diff --git a/patches/app-editors/vis-test-0.5-respect_cc_cflags.patch b/patches/app-editors/vis-test-0.5-respect_cc_cflags.patch
@@ -0,0 +1,22 @@
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 10 May 2020 23:00:36 +0200
+Subject: [PATCH] core/Makefile: Respect $CC and $CFLAGS
+X-Adapted-From: https://github.com/martanne/vis-test/pull/22
+
+Related: https://bugs.gentoo.org/722014
+---
+ test/core/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/core/Makefile b/test/core/Makefile
+--- a/test/core/Makefile
++++ b/test/core/Makefile
+@@ -12,7 +12,7 @@ test: $(ALL)
+
+ config.h:
+ @echo Generating ccan configuration header
+- @${CC} ccan-config.c -o ccan-config && ./ccan-config > config.h
++ @${CC} ccan-config.c -o ccan-config && ./ccan-config "${CC}" ${CFLAGS} > config.h
+
+ text-test: config.h text-test.c ../../text.c ../../text-util.c ../../text-motions.c ../../text-objects.c ../../text-regex.c
+ @echo Compiling $@ binary
diff --git a/patches/app-emulation/playonlinux-4.2.12/fix-Makefile-CC.patch b/patches/app-emulation/playonlinux-4.2.12/fix-Makefile-CC.patch
@@ -0,0 +1,22 @@
+diff --git a/Makefile b/tmp/Makefile
+index fadd473..57000e4 100644
+--- a/Makefile
++++ b/tmp/Makefile
+@@ -21,7 +21,7 @@
+ #
+
+ CFLAGS ?= -O2
+-CC = gcc $(CFLAGS)
++CC ?= gcc
+ PYTHON = python2 -m py_compile
+ GZIP = gzip
+
+@@ -44,7 +44,7 @@ clean:
+ $(RM) ./ChangeLog
+
+ build:
+- $(CC) ./src/check_direct_rendering.c -o ./bin/playonlinux-check_dd -lGL -lX11
++ $(CC) $(CFLAGS) ./src/check_direct_rendering.c -o ./bin/playonlinux-check_dd -lGL -lX11
+ $(PYTHON) ./python/*.py
+ $(PYTHON) ./python/lib/*.py
+ echo -e '#!/bin/bash\nGDK_BACKEND=x11 ${sharedir}/playonlinux/playonlinux "$$@"\nexit 0' > ./bin/playonlinux
diff --git a/patches/app-i18n/uim-1.8.8/uim-1.8.8-xim__main.cpp_fix_cxx11_syntax.patch b/patches/app-i18n/uim-1.8.8/uim-1.8.8-xim__main.cpp_fix_cxx11_syntax.patch
@@ -0,0 +1,13 @@
+diff --git a/./xim/main.cpp.old b/./xim/main.cpp
+index a0b0bec..c5818ca 100644
+--- a/./xim/main.cpp.old
++++ b/./xim/main.cpp
+@@ -65,7 +65,7 @@ int g_option_mask;
+ int scr_width, scr_height;
+ int host_byte_order;
+
+-#define VERSION_NAME "uim-xim under the way! Version "PACKAGE_VERSION"\n"
++#define VERSION_NAME "uim-xim under the way! Version " PACKAGE_VERSION "\n"
+ const char *version_name=VERSION_NAME;
+ const char *usage=
+ "--help , --version :Show usage or version\n"
diff --git a/patches/app-text/enchant/enchant-1.6.1-Add-tag=CC.patch b/patches/app-text/enchant/enchant-1.6.1-Add-tag=CC.patch
@@ -0,0 +1,9 @@
+diff -u enchant-1.6.1.orig/configure enchant-1.6.1/configure
+--- enchant-1.6.1.orig/configure 2017-12-17 16:56:55.527440216 -0600
++++ enchant-1.6.1/configure 2017-12-17 16:56:28.533441941 -0600
+@@ -11038,7 +11038,7 @@
+ LIBTOOL_DEPS=$ltmain
+
+ # Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++LIBTOOL='$(SHELL) $(top_builddir)/libtool --tag=CC'
diff --git a/patches/app-text/mandoc/tbl_term.c_1.70_1.73.patch b/patches/app-text/mandoc/tbl_term.c_1.70_1.73.patch
@@ -0,0 +1,218 @@
+===================================================================
+RCS file: /cvs/mandoc/tbl_term.c,v
+retrieving revision 1.68
+retrieving revision 1.73
+diff -u -p -r1.68 -r1.73
+--- mandoc/tbl_term.c 2019/02/09 21:02:47 1.68
++++ mandoc/tbl_term.c 2020/01/11 16:26:08 1.73
+@@ -1,7 +1,7 @@
+-/* $Id: tbl_term.c,v 1.68 2019/02/09 21:02:47 schwarze Exp $ */
++/* $Id: tbl_term.c,v 1.73 2020/01/11 16:26:08 schwarze Exp $ */
+ /*
+ * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+- * Copyright (c) 2011-2019 Ingo Schwarze <schwarze@openbsd.org>
++ * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+@@ -46,7 +46,8 @@ static void tbl_fill_border(struct termp *, int, size_
+ static void tbl_fill_char(struct termp *, char, size_t);
+ static void tbl_fill_string(struct termp *, const char *, size_t);
+ static void tbl_hrule(struct termp *, const struct tbl_span *,
+- const struct tbl_span *, int);
++ const struct tbl_span *, const struct tbl_span *,
++ int);
+ static void tbl_literal(struct termp *, const struct tbl_dat *,
+ const struct roffcol *);
+ static void tbl_number(struct termp *, const struct tbl_opts *,
+@@ -163,7 +164,7 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ const struct tbl_cell *cp, *cpn, *cpp, *cps;
+ const struct tbl_dat *dp;
+ static size_t offset;
+- size_t save_offset;
++ size_t save_offset;
+ size_t coloff, tsz;
+ int hspans, ic, more;
+ int dvert, fc, horiz, lhori, rhori, uvert;
+@@ -222,9 +223,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+
+ if (tp->enc == TERMENC_ASCII &&
+ sp->opts->opts & TBL_OPT_DBOX)
+- tbl_hrule(tp, NULL, sp, TBL_OPT_DBOX);
++ tbl_hrule(tp, NULL, sp, sp, TBL_OPT_DBOX);
+ if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX))
+- tbl_hrule(tp, NULL, sp, TBL_OPT_BOX);
++ tbl_hrule(tp, NULL, sp, sp, TBL_OPT_BOX);
+ }
+
+ /* Set up the columns. */
+@@ -266,11 +267,11 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ hspans--;
+ continue;
+ }
+- if (dp == NULL)
+- continue;
+- hspans = dp->hspans;
+- if (ic || sp->layout->first->pos != TBL_CELL_SPAN)
++ if (dp != NULL &&
++ (ic || sp->layout->first->pos != TBL_CELL_SPAN)) {
++ hspans = dp->hspans;
+ dp = dp->next;
++ }
+ }
+
+ /* Set up a column for a right vertical frame. */
+@@ -301,11 +302,11 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ tp->tcol++;
+ tp->col = 0;
+ tbl_data(tp, sp->opts, cp, dp, tp->tbl.cols + ic);
+- if (dp == NULL)
+- continue;
+- hspans = dp->hspans;
+- if (cp->pos != TBL_CELL_SPAN)
++ if (dp != NULL &&
++ (ic || sp->layout->first->pos != TBL_CELL_SPAN)) {
++ hspans = dp->hspans;
+ dp = dp->next;
++ }
+ }
+ break;
+ }
+@@ -342,7 +343,7 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+
+ more = 0;
+ if (horiz)
+- tbl_hrule(tp, sp->prev, sp, 0);
++ tbl_hrule(tp, sp->prev, sp, sp->next, 0);
+ else {
+ cp = sp->layout->first;
+ cpn = sp->next == NULL ? NULL :
+@@ -424,11 +425,10 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ cp = cp->next;
+ continue;
+ }
+- if (dp != NULL) {
++ if (dp != NULL && (ic ||
++ sp->layout->first->pos != TBL_CELL_SPAN)) {
+ hspans = dp->hspans;
+- if (ic || sp->layout->first->pos
+- != TBL_CELL_SPAN)
+- dp = dp->next;
++ dp = dp->next;
+ }
+
+ /*
+@@ -557,12 +557,12 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ tp->tcol->rmargin = tp->maxrmargin;
+ if (sp->next == NULL) {
+ if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX)) {
+- tbl_hrule(tp, sp, NULL, TBL_OPT_BOX);
++ tbl_hrule(tp, sp, sp, NULL, TBL_OPT_BOX);
+ tp->skipvsp = 1;
+ }
+ if (tp->enc == TERMENC_ASCII &&
+ sp->opts->opts & TBL_OPT_DBOX) {
+- tbl_hrule(tp, sp, NULL, TBL_OPT_DBOX);
++ tbl_hrule(tp, sp, sp, NULL, TBL_OPT_DBOX);
+ tp->skipvsp = 2;
+ }
+ assert(tp->tbl.cols);
+@@ -571,7 +571,7 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+ } else if (horiz == 0 && sp->opts->opts & TBL_OPT_ALLBOX &&
+ (sp->next == NULL || sp->next->pos == TBL_SPAN_DATA ||
+ sp->next->next != NULL))
+- tbl_hrule(tp, sp, sp->next, TBL_OPT_ALLBOX);
++ tbl_hrule(tp, sp, sp, sp->next, TBL_OPT_ALLBOX);
+
+ tp->tcol->offset = save_offset;
+ tp->flags &= ~TERMP_NONOSPACE;
+@@ -579,9 +579,10 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
+
+ static void
+ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
+- const struct tbl_span *spn, int flags)
++ const struct tbl_span *sp, const struct tbl_span *spn, int flags)
+ {
+ const struct tbl_cell *cpp; /* Layout cell above this line. */
++ const struct tbl_cell *cp; /* Layout cell in this line. */
+ const struct tbl_cell *cpn; /* Layout cell below this line. */
+ const struct tbl_dat *dpn; /* Data cell below this line. */
+ const struct roffcol *col; /* Contains width and spacing. */
+@@ -592,6 +593,7 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+ int uw, dw; /* Vertical line widths. */
+
+ cpp = spp == NULL ? NULL : spp->layout->first;
++ cp = sp == NULL ? NULL : sp->layout->first;
+ cpn = spn == NULL ? NULL : spn->layout->first;
+ dpn = NULL;
+ if (spn != NULL) {
+@@ -600,11 +602,11 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+ else if (spn->next != NULL)
+ dpn = spn->next->first;
+ }
+- opts = spn == NULL ? spp->opts->opts : spn->opts->opts;
++ opts = sp->opts->opts;
+ bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :
+ opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;
+ hw = flags == TBL_OPT_DBOX || flags == TBL_OPT_BOX ? bw :
+- spn->pos == TBL_SPAN_DHORIZ ? 2 : 1;
++ sp->pos == TBL_SPAN_DHORIZ ? 2 : 1;
+
+ /* Print the left end of the line. */
+
+@@ -619,14 +621,19 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+ (spp == NULL || cpn == NULL ||
+ cpn->pos != TBL_CELL_DOWN ? BRIGHT * hw : 0), 1);
+
++ col = tp->tbl.cols;
+ for (;;) {
+- col = tp->tbl.cols + (cpn == NULL ? cpp->col : cpn->col);
++ if (cp == NULL)
++ col++;
++ else
++ col = tp->tbl.cols + cp->col;
+
+ /* Print the horizontal line inside this column. */
+
+ lw = cpp == NULL || cpn == NULL ||
+ (cpn->pos != TBL_CELL_DOWN &&
+- (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
++ (dpn == NULL || dpn->string == NULL ||
++ strcmp(dpn->string, "\\^") != 0))
+ ? hw : 0;
+ tbl_direct_border(tp, BHORIZ * lw,
+ col->width + col->spacing / 2);
+@@ -645,7 +652,10 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+ uw = 1;
+ }
+ cpp = cpp->next;
+- }
++ } else if (spp != NULL && opts & TBL_OPT_ALLBOX)
++ uw = 1;
++ if (cp != NULL)
++ cp = cp->next;
+ if (cpn != NULL) {
+ if (flags != TBL_OPT_DBOX) {
+ dw = cpn->vert;
+@@ -655,8 +665,9 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+ cpn = cpn->next;
+ while (dpn != NULL && dpn->layout != cpn)
+ dpn = dpn->next;
+- }
+- if (cpp == NULL && cpn == NULL)
++ } else if (spn != NULL && opts & TBL_OPT_ALLBOX)
++ dw = 1;
++ if (col + 1 == tp->tbl.cols + sp->opts->cols)
+ break;
+
+ /* Vertical lines do not cross spanned cells. */
+@@ -670,7 +681,8 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp
+
+ rw = cpp == NULL || cpn == NULL ||
+ (cpn->pos != TBL_CELL_DOWN &&
+- (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
++ (dpn == NULL || dpn->string == NULL ||
++ strcmp(dpn->string, "\\^") != 0))
+ ? hw : 0;
+
+ /* The line crossing at the end of this column. */
diff --git a/patches/dev-dotnet/msbuild-roslyn-csc-15.3/99-CopyRefAssemblyFix.patch b/patches/dev-dotnet/msbuild-roslyn-csc-15.3/99-CopyRefAssemblyFix.patch
@@ -0,0 +1,14 @@
+https://github.com/gentoo/dotnet/issues/426#issuecomment-499454972
+
+diff -Naur roslyn-ec1cde8b77c7bca654888681037f55aa0e62dd19/src/Compilers/Core/MSBuildTask/CopyRefAssembly.cs roslyn-ec1cde8b77c7bca654888681037f55aa0e62dd19/src/Compilers/Core/MSBuildTask/CopyRefAssembly-fixed.cs
+--- roslyn-ec1cde8b77c7bca654888681037f55aa0e62dd19/src/Compilers/Core/MSBuildTask/CopyRefAssembly.cs 2019-06-06 20:47:03.452887696 +1000
++++ roslyn-ec1cde8b77c7bca654888681037f55aa0e62dd19/src/Compilers/Core/MSBuildTask/CopyRefAssembly-fixed.cs 2019-06-06 20:54:10.449546085 +1000
+@@ -40,7 +40,7 @@
+
+ if (File.Exists(DestinationPath))
+ {
+- Guid source;
++ Guid source=Guid.Empty;
+ try
+ {
+ source = ExtractMvid(SourcePath);
diff --git a/patches/dev-embedded/avrdude/avrdude-6.3_no-datetime.patch b/patches/dev-embedded/avrdude/avrdude-6.3_no-datetime.patch
@@ -0,0 +1,11 @@
+--- a/main.c 2017-11-09 13:40:44.251913289 +0000
++++ b/main.c 2017-11-09 13:41:40.659228746 +0000
+@@ -682,7 +682,7 @@
+ avrdude_message(MSG_NOTICE, "\n%s: Version %s, compiled on %s at %s\n"
+ "%sCopyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/\n"
+ "%sCopyright (c) 2007-2014 Joerg Wunsch\n\n",
+- progname, version, __DATE__, __TIME__, progbuf, progbuf);
++ progname, version, "Jan 13 1984", "12:30:30", progbuf, progbuf);
+ avrdude_message(MSG_NOTICE, "%sSystem wide configuration file is \"%s\"\n",
+ progbuf, sys_config);
+
diff --git a/patches/dev-haskell/cpphs-1.20.8/xkbcommon_fix.patch b/patches/dev-haskell/cpphs-1.20.8/xkbcommon_fix.patch
@@ -0,0 +1,14 @@
+https://github.com/malcolmwallace/cpphs/issues/16
+
+diff -rN -u old-cpphs/Language/Preprocessor/Cpphs/Tokenise.hs new-cpphs/Language/Preprocessor/Cpphs/Tokenise.hs
+--- old-cpphs/Language/Preprocessor/Cpphs/Tokenise.hs 2018-05-08 16:57:53.934565562 +0200
++++ new-cpphs/Language/Preprocessor/Cpphs/Tokenise.hs 2018-05-08 16:57:53.934565562 +0200
+@@ -204,6 +204,8 @@
+ lexcpp LineComment w l ls (_:xs) = lexcpp LineComment (' ':w) l ls xs
+ lexcpp (NestComment _) w l ls ('*':'/':xs)
+ = lexcpp Any [] (w*/*l) ls xs
++ lexcpp (NestComment _) w l ls xs@('\n':_)
++ = lexcpp Any [] (w*/*l) ls xs
+ lexcpp (NestComment n) w l ls (x:xs) = lexcpp (NestComment n) (white x:w) l
+ ls xs
+ lexcpp mode w l ((p,l'):ls) [] = cpp mode next w l p ls ('\n':l')
diff --git a/patches/dev-lang/nss/nss-3.33-no-datetime.patch b/patches/dev-lang/nss/nss-3.33-no-datetime.patch
@@ -0,0 +1,14 @@
+diff --git a/./lib/ckfw/pem/ckpemver.c.old b/./lib/ckfw/pem/ckpemver.c
+index 76ab5df..8600945 100644
+--- a/lib/ckfw/pem/ckpemver.c.old
++++ b/lib/ckfw/pem/ckpemver.c
+@@ -53,7 +53,7 @@
+ */
+ const char __nss_ckpem_rcsid[] = "$Header: NSS Access to Flat Files in PEM format"
+ NSS_CKPEM_LIBRARY_VERSION _DEBUG_STRING
+- " " __DATE__ " " __TIME__ " $";
++ " Jan 13 1984 12:30:30 $";
+ const char __nss_ckcapi_sccsid[] = "@(#)NSS Access to Flag Files in PEM format "
+ NSS_CKPEM_LIBRARY_VERSION _DEBUG_STRING
+- " " __DATE__ " " __TIME__;
++ " Jan 13 1984 12:30:30";
diff --git a/patches/dev-lang/python-2.7/python-2.7.12-no-compiler-version.patch b/patches/dev-lang/python-2.7/python-2.7.12-no-compiler-version.patch
@@ -0,0 +1,25 @@
+diff --git a/./Python/getcompiler.c.old b/./Python/getcompiler.c
+index 0f441de..df1e7d2 100644
+--- a/./Python/getcompiler.c.old
++++ b/./Python/getcompiler.c
+@@ -5,18 +5,10 @@
+
+ #ifndef COMPILER
+
+-#ifdef __GNUC__
+-#define COMPILER "\n[GCC " __VERSION__ "]"
+-#endif
+-
+-#endif /* !COMPILER */
+-
+-#ifndef COMPILER
+-
+ #ifdef __cplusplus
+-#define COMPILER "[C++]"
++#define COMPILER "[C++ 1.2.3]"
+ #else
+-#define COMPILER "[C]"
++#define COMPILER "[CC 1.2.3]"
+ #endif
+
+ #endif /* !COMPILER */
diff --git a/patches/dev-lang/python-2.7/python-2.7.12-no-datetime.patch b/patches/dev-lang/python-2.7/python-2.7.12-no-datetime.patch
@@ -0,0 +1,28 @@
+diff --git a/Modules/getbuildinfo.c.old b/Modules/getbuildinfo.c
+index 7069b6e..11d0674 100644
+--- a/Modules/getbuildinfo.c.old
++++ b/Modules/getbuildinfo.c
+@@ -4,21 +4,8 @@
+ #include <stdio.h>
+ #endif
+
+-#ifndef DATE
+-#ifdef __DATE__
+-#define DATE __DATE__
+-#else
+-#define DATE "xx/xx/xx"
++#define DATE "Jan 13 1984"
+-#endif
+-#endif
+-
+-#ifndef TIME
+-#ifdef __TIME__
+-#define TIME __TIME__
+-#else
+-#define TIME "xx:xx:xx"
++#define TIME "12:30:30"
+-#endif
+-#endif
+
+ /* on unix, SVNVERSION is passed on the command line.
+ * on Windows, the string is interpolated using
diff --git a/patches/dev-lang/python-3.4/python-2.7.12-no-compiler-version.patch b/patches/dev-lang/python-3.4/python-2.7.12-no-compiler-version.patch
@@ -0,0 +1,25 @@
+diff --git a/./Python/getcompiler.c.old b/./Python/getcompiler.c
+index 0f441de..df1e7d2 100644
+--- a/./Python/getcompiler.c.old
++++ b/./Python/getcompiler.c
+@@ -5,18 +5,10 @@
+
+ #ifndef COMPILER
+
+-#ifdef __GNUC__
+-#define COMPILER "\n[GCC " __VERSION__ "]"
+-#endif
+-
+-#endif /* !COMPILER */
+-
+-#ifndef COMPILER
+-
+ #ifdef __cplusplus
+-#define COMPILER "[C++]"
++#define COMPILER "[C++ 1.2.3]"
+ #else
+-#define COMPILER "[C]"
++#define COMPILER "[CC 1.2.3]"
+ #endif
+
+ #endif /* !COMPILER */
diff --git a/patches/dev-lang/python-3.4/python-2.7.12-no-datetime.patch b/patches/dev-lang/python-3.4/python-2.7.12-no-datetime.patch
@@ -0,0 +1,28 @@
+diff --git a/Modules/getbuildinfo.c.old b/Modules/getbuildinfo.c
+index 7069b6e..11d0674 100644
+--- a/Modules/getbuildinfo.c.old
++++ b/Modules/getbuildinfo.c
+@@ -4,21 +4,8 @@
+ #include <stdio.h>
+ #endif
+
+-#ifndef DATE
+-#ifdef __DATE__
+-#define DATE __DATE__
+-#else
+-#define DATE "xx/xx/xx"
++#define DATE "Jan 13 1984"
+-#endif
+-#endif
+-
+-#ifndef TIME
+-#ifdef __TIME__
+-#define TIME __TIME__
+-#else
+-#define TIME "xx:xx:xx"
++#define TIME "12:30:30"
+-#endif
+-#endif
+
+ /* on unix, SVNVERSION is passed on the command line.
+ * on Windows, the string is interpolated using
diff --git a/patches/dev-lang/python-3.5/python-2.7.12-no-compiler-version.patch b/patches/dev-lang/python-3.5/python-2.7.12-no-compiler-version.patch
@@ -0,0 +1,25 @@
+diff --git a/./Python/getcompiler.c.old b/./Python/getcompiler.c
+index 0f441de..df1e7d2 100644
+--- a/./Python/getcompiler.c.old
++++ b/./Python/getcompiler.c
+@@ -5,18 +5,10 @@
+
+ #ifndef COMPILER
+
+-#ifdef __GNUC__
+-#define COMPILER "\n[GCC " __VERSION__ "]"
+-#endif
+-
+-#endif /* !COMPILER */
+-
+-#ifndef COMPILER
+-
+ #ifdef __cplusplus
+-#define COMPILER "[C++]"
++#define COMPILER "[C++ 1.2.3]"
+ #else
+-#define COMPILER "[C]"
++#define COMPILER "[CC 1.2.3]"
+ #endif
+
+ #endif /* !COMPILER */
diff --git a/patches/dev-lang/python-3.5/python-2.7.12-no-datetime.patch b/patches/dev-lang/python-3.5/python-2.7.12-no-datetime.patch
@@ -0,0 +1,28 @@
+diff --git a/Modules/getbuildinfo.c.old b/Modules/getbuildinfo.c
+index 7069b6e..11d0674 100644
+--- a/Modules/getbuildinfo.c.old
++++ b/Modules/getbuildinfo.c
+@@ -4,21 +4,8 @@
+ #include <stdio.h>
+ #endif
+
+-#ifndef DATE
+-#ifdef __DATE__
+-#define DATE __DATE__
+-#else
+-#define DATE "xx/xx/xx"
++#define DATE "Jan 13 1984"
+-#endif
+-#endif
+-
+-#ifndef TIME
+-#ifdef __TIME__
+-#define TIME __TIME__
+-#else
+-#define TIME "xx:xx:xx"
++#define TIME "12:30:30"
+-#endif
+-#endif
+
+ /* on unix, SVNVERSION is passed on the command line.
+ * on Windows, the string is interpolated using
diff --git a/patches/dev-lang/python-3.6/python-2.7.12-no-compiler-version.patch b/patches/dev-lang/python-3.6/python-2.7.12-no-compiler-version.patch
@@ -0,0 +1,25 @@
+diff --git a/./Python/getcompiler.c.old b/./Python/getcompiler.c
+index 0f441de..df1e7d2 100644
+--- a/./Python/getcompiler.c.old
++++ b/./Python/getcompiler.c
+@@ -5,18 +5,10 @@
+
+ #ifndef COMPILER
+
+-#ifdef __GNUC__
+-#define COMPILER "\n[GCC " __VERSION__ "]"
+-#endif
+-
+-#endif /* !COMPILER */
+-
+-#ifndef COMPILER
+-
+ #ifdef __cplusplus
+-#define COMPILER "[C++]"
++#define COMPILER "[C++ 1.2.3]"
+ #else
+-#define COMPILER "[C]"
++#define COMPILER "[CC 1.2.3]"
+ #endif
+
+ #endif /* !COMPILER */
diff --git a/patches/dev-lang/python-3.6/python-2.7.12-no-datetime.patch b/patches/dev-lang/python-3.6/python-2.7.12-no-datetime.patch
@@ -0,0 +1,28 @@
+diff --git a/Modules/getbuildinfo.c.old b/Modules/getbuildinfo.c
+index 7069b6e..11d0674 100644
+--- a/Modules/getbuildinfo.c.old
++++ b/Modules/getbuildinfo.c
+@@ -4,21 +4,8 @@
+ #include <stdio.h>
+ #endif
+
+-#ifndef DATE
+-#ifdef __DATE__
+-#define DATE __DATE__
+-#else
+-#define DATE "xx/xx/xx"
++#define DATE "Jan 13 1984"
+-#endif
+-#endif
+-
+-#ifndef TIME
+-#ifdef __TIME__
+-#define TIME __TIME__
+-#else
+-#define TIME "xx:xx:xx"
++#define TIME "12:30:30"
+-#endif
+-#endif
+
+ /* on unix, SVNVERSION is passed on the command line.
+ * on Windows, the string is interpolated using
diff --git a/patches/dev-libs/elfutils-0.170/elfutils-0.170-r1_configure_clang_gnu99.patch b/patches/dev-libs/elfutils-0.170/elfutils-0.170-r1_configure_clang_gnu99.patch
@@ -0,0 +1,16 @@
+diff --git a/configure.old b/configure
+index 14340f5..980495a 100755
+--- a/configure.old
++++ b/configure
+@@ -4960,11 +4960,6 @@ double bar (double a, double b)
+ double square (double z) { return z * z; }
+ return square (a) + square (b);
+ }
+-
+-void baz (int n)
+-{
+- struct S { int x[n]; };
+-}
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c99=yes
diff --git a/patches/dev-libs/libgit2-0.26.8/openssl_stream.h_libressl_2.7.patch b/patches/dev-libs/libgit2-0.26.8/openssl_stream.h_libressl_2.7.patch
@@ -0,0 +1,13 @@
+diff --git a/src/openssl_stream.h b/src/openssl_stream.h
+index f5e59da..6391176 100644
+--- a/src/openssl_stream.h
++++ b/src/openssl_stream.h
+@@ -27,7 +27,7 @@ extern int git_openssl_stream_new(git_stream **out, const char *host, const char
+
+
+
+-# if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++# if OPENSSL_VERSION_NUMBER < 0x10100000L || LIBRESSL_VERSION_NUMBER < 0x2070500fL
+
+ GIT_INLINE(BIO_METHOD*) BIO_meth_new(int type, const char *name)
+ {
diff --git a/patches/dev-util/bam/bam-0.4.0-no-datetime.patch b/patches/dev-util/bam/bam-0.4.0-no-datetime.patch
@@ -0,0 +1,26 @@
+diff --git a/src/main.c.old b/src/main.c
+index 0b1786c..c8462d1 100644
+--- a/src/main.c.old
++++ b/src/main.c
+@@ -759,7 +759,7 @@ static void print_help()
+ printf(" %-20s %s\n", options[j].sw, options[j].desc);
+ }
+ printf("\n");
+- printf("bam version " BAM_VERSION_STRING_COMPLETE ". built "__DATE__" "__TIME__" using " LUA_VERSION "\n");
++ printf("bam version " BAM_VERSION_STRING_COMPLETE ". using " LUA_VERSION "\n");
+ printf("by Magnus Auvinen (magnus.auvinen@gmail.com)\n");
+ printf("\n");
+
+diff --git a/src/cache.c.old b/src/cache.c
+index c83df36..d9e1463 100644
+--- a/src/cache.c.old
++++ b/src/cache.c
+@@ -25,7 +25,7 @@ static char bamheader[8] = {
+ static void cache_setup_header()
+ {
+ /* save a hashed version of the date and time in the header */
+- unsigned hash = string_hash(__DATE__ __TIME__);
++ unsigned hash = string_hash("Jan 13 1984 12:30:30");
+ bamheader[5] = hash&0xff;
+ bamheader[6] = (hash>>8)&0xff;
+ bamheader[7] = (hash>>16)&0xff;
diff --git a/patches/dev-util/itstool-2.0.5/index.html?h=contrib%2Ffix_crash_pipe b/patches/dev-util/itstool-2.0.5/index.html?h=contrib%2Ffix_crash_pipe
@@ -0,0 +1,48 @@
+From 7e737993e1320b0a7ea82618cb8031e93d8b2e80 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:27:25 +0100
+Subject: Fix an encoding crash when redirected to a pipe
+
+ITS Tool crashes when output is redirected to a pipe. This comes from
+Python not knowing the preferred encoding for stdout, and using ASCII by
+default, therefore failing to encode anything outside of it.
+
+This patch makes ITS Tool write to an UTF-8 encoding wrapper around
+stdout.
+---
+ itstool.in | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/itstool.in b/itstool.in
+index 5b0051f..592dc77 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -48,6 +48,7 @@ if PY3:
+ """Return a string that can be safely print()ed"""
+ # Since print works on both bytes and unicode, just return the argument
+ return s
++ uout = sys.stdout
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
+@@ -60,6 +61,8 @@ else:
+ # print may not work on unicode if the output encoding cannot be
+ # detected, so just encode with UTF-8
+ return unicode.encode(s, 'utf-8')
++ import codecs
++ uout = codecs.getwriter('utf-8')(sys.stdout)
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1565,7 +1568,7 @@ if __name__ == '__main__':
+ if opts.test is None:
+ doc.generate_messages()
+ if opts.output is None or opts.output == '-':
+- out = sys.stdout
++ out = uout
+ else:
+ try:
+ out = io.open(opts.output, 'wt', encoding='utf-8')
+--
+cgit v1.1
+
diff --git a/patches/dev-util/itstool-2.0.5/itstool-2.0.5-fix_crash_pipe.patch b/patches/dev-util/itstool-2.0.5/itstool-2.0.5-fix_crash_pipe.patch
@@ -0,0 +1,162 @@
+https://git.ortolo.eu/pkg-itstool.git/patch/?h=contrib/fix_crash_pipe&id=7e737993e1320b0a7ea82618cb8031e93d8b2e80&id2=39000db89b4d376af34fd4499743ac0fa5d7cd90
+
+From 95fd7ad4a7575639f17439832fcd406d94402322 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Fri, 7 Dec 2018 14:22:09 +0100
+Subject: Fix a unicode decode issue
+
+Since the support of Python 3, ITS Tool crashes with some documentation,
+namely Gnumeric's.
+
+This comes from the reporting of a merge error (which happens to come
+from invalid XML markup in a translation, which is an issue but should
+not lead to a crash). The error is reported by writing a
+percent-formatted unicode message, with one percent-parameter being the
+original msgstr, which is a unicode string too. The msgstr was
+needlessly encoded to bytes with utf-8, and then automatically decoded
+back to unicode by Python, using the default ascii code, which fails and
+raises an unexpected exception if it contains anything out of ASCII.
+
+This fixes the issue by removing the needless encode('utf-8').
+---
+ itstool.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/itstool.in b/itstool.in
+index b3c0033..ac7d7d2 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -1062,7 +1062,7 @@ class Document (object):
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr.encode('utf-8')))
++ msgstr))
+ self._xml_err = ''
+ return node
+ def scan_node(node):
+@@ -1089,7 +1089,7 @@ class Document (object):
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr.encode('utf-8')))
++ msgstr))
+ self._xml_err = ''
+ ctxt.doc().freeDoc()
+ return node
+--
+cgit v1.1
+
+
+From 7eb912264997067993ed0c2b4e74790bab57abe8 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:22:27 +0100
+Subject: Fix a further similar crash
+
+---
+ itstool.in | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+diff --git a/itstool.in b/itstool.in
+index ac7d7d2..5b0051f 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -44,9 +44,22 @@ if PY3:
+ else:
+ return str(s)
+ ustr_type = str
++ def pr_str(s):
++ """Return a string that can be safely print()ed"""
++ # Since print works on both bytes and unicode, just return the argument
++ return s
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
++ def pr_str(s):
++ """Return a string that can be safely print()ed"""
++ if isinstance(s, str):
++ # Since print works on str, just return the argument
++ return s
++ else:
++ # print may not work on unicode if the output encoding cannot be
++ # detected, so just encode with UTF-8
++ return unicode.encode(s, 'utf-8')
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1060,9 +1073,9 @@ class Document (object):
+ if strict:
+ raise
+ else:
+- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr))
++ msgstr)))
+ self._xml_err = ''
+ return node
+ def scan_node(node):
+@@ -1087,9 +1100,9 @@ class Document (object):
+ if strict:
+ raise
+ else:
+- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr))
++ msgstr)))
+ self._xml_err = ''
+ ctxt.doc().freeDoc()
+ return node
+--
+cgit v1.1
+
+
+From 7e737993e1320b0a7ea82618cb8031e93d8b2e80 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:27:25 +0100
+Subject: Fix an encoding crash when redirected to a pipe
+
+ITS Tool crashes when output is redirected to a pipe. This comes from
+Python not knowing the preferred encoding for stdout, and using ASCII by
+default, therefore failing to encode anything outside of it.
+
+This patch makes ITS Tool write to an UTF-8 encoding wrapper around
+stdout.
+---
+ itstool.in | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/itstool.in b/itstool.in
+index 5b0051f..592dc77 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -48,6 +48,7 @@ if PY3:
+ """Return a string that can be safely print()ed"""
+ # Since print works on both bytes and unicode, just return the argument
+ return s
++ uout = sys.stdout
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
+@@ -60,6 +61,8 @@ else:
+ # print may not work on unicode if the output encoding cannot be
+ # detected, so just encode with UTF-8
+ return unicode.encode(s, 'utf-8')
++ import codecs
++ uout = codecs.getwriter('utf-8')(sys.stdout)
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1565,7 +1568,7 @@ if __name__ == '__main__':
+ if opts.test is None:
+ doc.generate_messages()
+ if opts.output is None or opts.output == '-':
+- out = sys.stdout
++ out = uout
+ else:
+ try:
+ out = io.open(opts.output, 'wt', encoding='utf-8')
+--
+cgit v1.1
+
diff --git a/patches/dev-util/itstool-2.0.5/wget-log b/patches/dev-util/itstool-2.0.5/wget-log
@@ -0,0 +1,11 @@
+--2019-12-24 13:18:56-- https://git.ortolo.eu/pkg-itstool.git/patch/?h=contrib/fix_crash_pipe
+Resolving git.ortolo.eu (git.ortolo.eu)... 2001:910:139a:ffff::1, 80.67.179.154
+Connecting to git.ortolo.eu (git.ortolo.eu)|2001:910:139a:ffff::1|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: unspecified [text/plain]
+Saving to: ‘index.html?h=contrib%2Ffix_crash_pipe’
+
+
index.html?h=c [<=> ] 0 --.-KB/s
index.html?h=contrib%2Ffix_c [ <=> ] 1.62K --.-KB/s in 0s
+
+2019-12-24 13:18:57 (53.9 MB/s) - ‘index.html?h=contrib%2Ffix_crash_pipe’ saved [1656]
+
diff --git a/patches/dev-util/itstool-2.0.6/index.html?h=contrib%2Ffix_crash_pipe b/patches/dev-util/itstool-2.0.6/index.html?h=contrib%2Ffix_crash_pipe
@@ -0,0 +1,48 @@
+From 7e737993e1320b0a7ea82618cb8031e93d8b2e80 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:27:25 +0100
+Subject: Fix an encoding crash when redirected to a pipe
+
+ITS Tool crashes when output is redirected to a pipe. This comes from
+Python not knowing the preferred encoding for stdout, and using ASCII by
+default, therefore failing to encode anything outside of it.
+
+This patch makes ITS Tool write to an UTF-8 encoding wrapper around
+stdout.
+---
+ itstool.in | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/itstool.in b/itstool.in
+index 5b0051f..592dc77 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -48,6 +48,7 @@ if PY3:
+ """Return a string that can be safely print()ed"""
+ # Since print works on both bytes and unicode, just return the argument
+ return s
++ uout = sys.stdout
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
+@@ -60,6 +61,8 @@ else:
+ # print may not work on unicode if the output encoding cannot be
+ # detected, so just encode with UTF-8
+ return unicode.encode(s, 'utf-8')
++ import codecs
++ uout = codecs.getwriter('utf-8')(sys.stdout)
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1565,7 +1568,7 @@ if __name__ == '__main__':
+ if opts.test is None:
+ doc.generate_messages()
+ if opts.output is None or opts.output == '-':
+- out = sys.stdout
++ out = uout
+ else:
+ try:
+ out = io.open(opts.output, 'wt', encoding='utf-8')
+--
+cgit v1.1
+
diff --git a/patches/dev-util/itstool-2.0.6/itstool-2.0.5-fix_crash_pipe.patch b/patches/dev-util/itstool-2.0.6/itstool-2.0.5-fix_crash_pipe.patch
@@ -0,0 +1,162 @@
+https://git.ortolo.eu/pkg-itstool.git/patch/?h=contrib/fix_crash_pipe&id=7e737993e1320b0a7ea82618cb8031e93d8b2e80&id2=39000db89b4d376af34fd4499743ac0fa5d7cd90
+
+From 95fd7ad4a7575639f17439832fcd406d94402322 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Fri, 7 Dec 2018 14:22:09 +0100
+Subject: Fix a unicode decode issue
+
+Since the support of Python 3, ITS Tool crashes with some documentation,
+namely Gnumeric's.
+
+This comes from the reporting of a merge error (which happens to come
+from invalid XML markup in a translation, which is an issue but should
+not lead to a crash). The error is reported by writing a
+percent-formatted unicode message, with one percent-parameter being the
+original msgstr, which is a unicode string too. The msgstr was
+needlessly encoded to bytes with utf-8, and then automatically decoded
+back to unicode by Python, using the default ascii code, which fails and
+raises an unexpected exception if it contains anything out of ASCII.
+
+This fixes the issue by removing the needless encode('utf-8').
+---
+ itstool.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/itstool.in b/itstool.in
+index b3c0033..ac7d7d2 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -1062,7 +1062,7 @@ class Document (object):
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr.encode('utf-8')))
++ msgstr))
+ self._xml_err = ''
+ return node
+ def scan_node(node):
+@@ -1089,7 +1089,7 @@ class Document (object):
+ else:
+ sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr.encode('utf-8')))
++ msgstr))
+ self._xml_err = ''
+ ctxt.doc().freeDoc()
+ return node
+--
+cgit v1.1
+
+
+From 7eb912264997067993ed0c2b4e74790bab57abe8 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:22:27 +0100
+Subject: Fix a further similar crash
+
+---
+ itstool.in | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+diff --git a/itstool.in b/itstool.in
+index ac7d7d2..5b0051f 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -44,9 +44,22 @@ if PY3:
+ else:
+ return str(s)
+ ustr_type = str
++ def pr_str(s):
++ """Return a string that can be safely print()ed"""
++ # Since print works on both bytes and unicode, just return the argument
++ return s
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
++ def pr_str(s):
++ """Return a string that can be safely print()ed"""
++ if isinstance(s, str):
++ # Since print works on str, just return the argument
++ return s
++ else:
++ # print may not work on unicode if the output encoding cannot be
++ # detected, so just encode with UTF-8
++ return unicode.encode(s, 'utf-8')
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1060,9 +1073,9 @@ class Document (object):
+ if strict:
+ raise
+ else:
+- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr))
++ msgstr)))
+ self._xml_err = ''
+ return node
+ def scan_node(node):
+@@ -1087,9 +1100,9 @@ class Document (object):
+ if strict:
+ raise
+ else:
+- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ (lang + ' ') if lang is not None else '',
+- msgstr))
++ msgstr)))
+ self._xml_err = ''
+ ctxt.doc().freeDoc()
+ return node
+--
+cgit v1.1
+
+
+From 7e737993e1320b0a7ea82618cb8031e93d8b2e80 Mon Sep 17 00:00:00 2001
+From: Tanguy Ortolo <tanguy+debian@ortolo.eu>
+Date: Sun, 10 Mar 2019 15:27:25 +0100
+Subject: Fix an encoding crash when redirected to a pipe
+
+ITS Tool crashes when output is redirected to a pipe. This comes from
+Python not knowing the preferred encoding for stdout, and using ASCII by
+default, therefore failing to encode anything outside of it.
+
+This patch makes ITS Tool write to an UTF-8 encoding wrapper around
+stdout.
+---
+ itstool.in | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/itstool.in b/itstool.in
+index 5b0051f..592dc77 100755
+--- a/itstool.in
++++ b/itstool.in
+@@ -48,6 +48,7 @@ if PY3:
+ """Return a string that can be safely print()ed"""
+ # Since print works on both bytes and unicode, just return the argument
+ return s
++ uout = sys.stdout
+ else:
+ string_types = basestring,
+ ustr = ustr_type = unicode
+@@ -60,6 +61,8 @@ else:
+ # print may not work on unicode if the output encoding cannot be
+ # detected, so just encode with UTF-8
+ return unicode.encode(s, 'utf-8')
++ import codecs
++ uout = codecs.getwriter('utf-8')(sys.stdout)
+
+ NS_ITS = 'http://www.w3.org/2005/11/its'
+ NS_ITST = 'http://itstool.org/extensions/'
+@@ -1565,7 +1568,7 @@ if __name__ == '__main__':
+ if opts.test is None:
+ doc.generate_messages()
+ if opts.output is None or opts.output == '-':
+- out = sys.stdout
++ out = uout
+ else:
+ try:
+ out = io.open(opts.output, 'wt', encoding='utf-8')
+--
+cgit v1.1
+
diff --git a/patches/dev-util/itstool-2.0.6/wget-log b/patches/dev-util/itstool-2.0.6/wget-log
@@ -0,0 +1,11 @@
+--2019-12-24 13:18:56-- https://git.ortolo.eu/pkg-itstool.git/patch/?h=contrib/fix_crash_pipe
+Resolving git.ortolo.eu (git.ortolo.eu)... 2001:910:139a:ffff::1, 80.67.179.154
+Connecting to git.ortolo.eu (git.ortolo.eu)|2001:910:139a:ffff::1|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: unspecified [text/plain]
+Saving to: ‘index.html?h=contrib%2Ffix_crash_pipe’
+
+
index.html?h=c [<=> ] 0 --.-KB/s
index.html?h=contrib%2Ffix_c [ <=> ] 1.62K --.-KB/s in 0s
+
+2019-12-24 13:18:57 (53.9 MB/s) - ‘index.html?h=contrib%2Ffix_crash_pipe’ saved [1656]
+
diff --git a/patches/dev-util/samurai/samurai-0.6-Add-fake-l-flag-for-compatibility.patch b/patches/dev-util/samurai/samurai-0.6-Add-fake-l-flag-for-compatibility.patch
@@ -0,0 +1,26 @@
+From 71ed7717c707c9117088bebb7cc4e70a561bdfe5 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 8 Mar 2019 10:33:52 +0100
+Subject: [PATCH] samu.c: Add fake -l flag for compatibility
+
+---
+ samu.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/samu.c b/samu.c
+index 2eb6ce1..4f9ad8b 100644
+--- a/samu.c
++++ b/samu.c
+@@ -133,6 +133,9 @@ main(int argc, char *argv[])
+ case 'w':
+ warnflag(EARGF(usage()));
+ break;
++ case 'l':
++ // ignore for now ?
++ break;
+ default:
+ usage();
+ } ARGEND
+--
+2.19.2
+
diff --git a/patches/dev-util/scons-2.5.1/scons-2.5.1_reuse_PATH_env.patch b/patches/dev-util/scons-2.5.1/scons-2.5.1_reuse_PATH_env.patch
@@ -0,0 +1,13 @@
+diff --git a/engine/SCons/Platform/posix.py.old b/engine/SCons/Platform/posix.py
+index c2d3e50..fa233d2 100644
+--- a/engine/SCons/Platform/posix.py.old
++++ b/engine/SCons/Platform/posix.py
+@@ -89,7 +89,7 @@ def generate(env):
+
+ if 'ENV' not in env:
+ env['ENV'] = {}
+- env['ENV']['PATH'] = '/usr/local/bin:/opt/bin:/bin:/usr/bin'
++ env['ENV']['PATH'] = os.environ['PATH']
+ env['OBJPREFIX'] = ''
+ env['OBJSUFFIX'] = '.o'
+ env['SHOBJPREFIX'] = '$OBJPREFIX'
diff --git a/patches/games-arcade/syobon/WASD controls DxLibs.h.patch b/patches/games-arcade/syobon/WASD controls DxLibs.h.patch
@@ -0,0 +1,17 @@
+--- DxLib.h 2017-09-28 13:33:46.073097546 +0200
++++ DxLib.h 2017-09-28 13:52:42.984297422 +0200
+@@ -67,10 +67,10 @@
+
+ //Key Aliases
+ #define KEY_INPUT_ESCAPE SDLK_ESCAPE
+-#define KEY_INPUT_LEFT SDLK_LEFT
+-#define KEY_INPUT_RIGHT SDLK_RIGHT
+-#define KEY_INPUT_DOWN SDLK_DOWN
+-#define KEY_INPUT_UP SDLK_UP
++#define KEY_INPUT_LEFT SDLK_a
++#define KEY_INPUT_RIGHT SDLK_d
++#define KEY_INPUT_DOWN SDLK_s
++#define KEY_INPUT_UP SDLK_w
+ #define KEY_INPUT_F1 SDLK_F1
+ #define KEY_INPUT_O SDLK_o
+ #define KEY_INPUT_K SDLK_k
diff --git a/patches/gnustep-base/libobjc2/libobjc2-1.8.1-fix_redefinition_of_i.patch b/patches/gnustep-base/libobjc2/libobjc2-1.8.1-fix_redefinition_of_i.patch
@@ -0,0 +1,30 @@
+diff --git a/loader.c b/loader.c
+index 70ab229..a69d864 100644
+--- a/loader.c
++++ b/loader.c
+@@ -109,13 +109,14 @@ void __objc_exec_class(struct objc_module_abi_8 *module)
+
+ unsigned short defs = 0;
+ // Load the classes from this module
+- for (unsigned short i=0 ; i<symbols->class_count ; i++)
++ unsigned short i;
++ for (i=0 ; i<symbols->class_count ; i++)
+ {
+ objc_load_class(symbols->definitions[defs++]);
+ }
+ unsigned int category_start = defs;
+ // Load the categories from this module
+- for (unsigned short i=0 ; i<symbols->category_count; i++)
++ for (i=0 ; i<symbols->category_count; i++)
+ {
+ objc_try_load_category(symbols->definitions[defs++]);
+ }
+@@ -131,7 +132,7 @@ void __objc_exec_class(struct objc_module_abi_8 *module)
+ objc_init_buffered_statics();
+ // Fix up the class links for loaded classes.
+ objc_resolve_class_links();
+- for (unsigned short i=0 ; i<symbols->category_count; i++)
++ for (i=0 ; i<symbols->category_count; i++)
+ {
+ struct objc_category *cat = (struct objc_category*)
+ symbols->definitions[category_start++];
diff --git a/patches/mail-mta/opensmtpd/opensmtpd-6.0.2p1-uid_0_certificate.patch b/patches/mail-mta/opensmtpd/opensmtpd-6.0.2p1-uid_0_certificate.patch
@@ -0,0 +1,38 @@
+diff --git a/smtpd/ssl.c.old b/smtpd/ssl.c
+index 7dcd2ce..4e9d708 100644
+--- a/smtpd/ssl.c.old
++++ b/smtpd/ssl.c
+@@ -113,11 +113,11 @@ ssl_load_file(const char *name, off_t *len, mode_t perm)
+ return (NULL);
+ if (fstat(fd, &st) != 0)
+ goto fail;
+- if (st.st_uid != 0) {
+- log_warnx("warn: %s: not owned by uid 0", name);
+- errno = EACCES;
+- goto fail;
+- }
++ //if (st.st_uid != 0) {
++ // log_warnx("warn: %s: not owned by uid 0", name);
++ // errno = EACCES;
++ // goto fail;
++ //}
+ if (st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO) & ~perm) {
+ strmode(perm, mode);
+ log_warnx("warn: %s: insecure permissions: must be at most %s",
+@@ -201,11 +201,11 @@ ssl_load_key(const char *name, off_t *len, char *pass, mode_t perm, const char *
+
+ if (fstat(fileno(fp), &st) != 0)
+ goto fail;
+- if (st.st_uid != 0) {
+- log_warnx("warn: %s: not owned by uid 0", name);
+- errno = EACCES;
+- goto fail;
+- }
++ //if (st.st_uid != 0) {
++ // log_warnx("warn: %s: not owned by uid 0", name);
++ // errno = EACCES;
++ // goto fail;
++ //}
+ if (st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO) & ~perm) {
+ strmode(perm, mode);
+ log_warnx("warn: %s: insecure permissions: must be at most %s",
diff --git a/patches/media-gfx/inkscape.old/inkscape-0.91-no-date.patch b/patches/media-gfx/inkscape.old/inkscape-0.91-no-date.patch
@@ -0,0 +1,26 @@
+diff --git a/src/main.cpp.old b/src/main.cpp
+index 517ba05..fc8c4ad 100644
+--- a/src/main.cpp.old
++++ b/src/main.cpp
+@@ -2178,7 +2178,7 @@ sp_process_args(poptContext ctx)
+ break;
+ }
+ case SP_ARG_VERSION: {
+- printf("Inkscape %s (%s)\n", Inkscape::version_string, __DATE__);
++ printf("Inkscape %s\n", Inkscape::version_string);
+ exit(0);
+ break;
+ }
+diff --git a/./src/extension/internal/emf-print.cpp.old b/./src/extension/internal/emf-print.cpp
+index f7b6626..da047f6 100644
+--- a/./src/extension/internal/emf-print.cpp.old
++++ b/./src/extension/internal/emf-print.cpp
+@@ -205,7 +205,7 @@ unsigned int PrintEmf::begin(Inkscape::Extension::Print *mod, SPDocument *doc)
+ } else {
+ p = ansi_uri;
+ }
+- snprintf(buff, sizeof(buff) - 1, "Inkscape %s (%s)\1%s\1", Inkscape::version_string, __DATE__, p);
++ snprintf(buff, sizeof(buff) - 1, "Inkscape %s\1%s\1", Inkscape::version_string, p);
+ uint16_t *Description = U_Utf8ToUtf16le(buff, 0, NULL);
+ int cbDesc = 2 + wchar16len(Description); // also count the final terminator
+ (void) U_Utf16leEdit(Description, '\1', '\0'); // swap the temporary \1 characters for nulls
diff --git a/patches/media-libs/shaderc/shaderc-2018.0_remove_Werror.patch b/patches/media-libs/shaderc/shaderc-2018.0_remove_Werror.patch
@@ -0,0 +1,13 @@
+diff --git a/cmake/utils.cmake.old b/cmake/utils.cmake
+index ed3c733..965c546 100644
+--- a/cmake/utils.cmake.old
++++ b/cmake/utils.cmake
+@@ -9,7 +9,7 @@ endfunction(shaderc_use_gmock)
+
+ function(shaderc_default_c_compile_options TARGET)
+ if (NOT "${MSVC}")
+- target_compile_options(${TARGET} PRIVATE -Wall -Werror -fvisibility=hidden)
++ target_compile_options(${TARGET} PRIVATE -Wall -fvisibility=hidden)
+ if (NOT "${MINGW}")
+ target_compile_options(${TARGET} PRIVATE -fPIC)
+ endif()
diff --git a/patches/media-sound/audacity/enchant-1.6.1-Add-tag=CC.patch b/patches/media-sound/audacity/enchant-1.6.1-Add-tag=CC.patch
@@ -0,0 +1,9 @@
+diff -u enchant-1.6.1.orig/configure enchant-1.6.1/configure
+--- enchant-1.6.1.orig/configure 2017-12-17 16:56:55.527440216 -0600
++++ enchant-1.6.1/configure 2017-12-17 16:56:28.533441941 -0600
+@@ -11038,7 +11038,7 @@
+ LIBTOOL_DEPS=$ltmain
+
+ # Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++LIBTOOL='$(SHELL) $(top_builddir)/libtool --tag=CC'
diff --git a/patches/net-analyzer/nettop/nettop-0.2.3-no-datetime.patch b/patches/net-analyzer/nettop/nettop-0.2.3-no-datetime.patch
@@ -0,0 +1,13 @@
+diff --git a/nettop.c.old b/nettop.c
+index ffcb507..be2f37b 100644
+--- a/nettop.c.old
++++ b/nettop.c
+@@ -839,7 +839,7 @@ show_help()
+ SLsmg_gotorc(y++, 0);
+ SLsmg_printf("Written by Scott Parish, copyright 2001, BSD");
+ SLsmg_gotorc(y++, 0);
+- SLsmg_printf("Compiled at %s, %s", __TIME__, __DATE__);
++ SLsmg_printf("Compiled at %s, %s", "12:30:30", "Jan 13 1984");
+ y += 2;
+ SLsmg_gotorc(y++, 0);
+
diff --git a/patches/net-analyzer/nmap-7.70/nmap-7.70_nmap_error_h-time_h.patch b/patches/net-analyzer/nmap-7.70/nmap-7.70_nmap_error_h-time_h.patch
@@ -0,0 +1,13 @@
+diff --git a/nmap_error.h.old b/nmap_error.h
+index f6df970..c47dcce 100644
+--- a/nmap_error.h.old
++++ b/nmap_error.h
+@@ -132,6 +132,8 @@
+ #ifndef NMAP_ERROR_H
+ #define NMAP_ERROR_H
+
++#include <time.h>
++
+ #ifdef WIN32
+ #include "mswin32\winclude.h"
+ #endif
diff --git a/patches/net-libs/patch-webkit-2.22.6/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch b/patches/net-libs/patch-webkit-2.22.6/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch
@@ -0,0 +1,56 @@
+From 9c4baaec2f310d43011ec3835e0fbaf585ed583c Mon Sep 17 00:00:00 2001
+Message-Id: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 17:59:57 +0100
+Subject: [PATCH 1/6]
+ Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js: Remove %c
+ support in the console
+
+---
+ .../UserInterface/Views/ConsoleMessageView.js | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+index 7aecedb8d8..01890f02e6 100644
+--- a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
++++ b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+@@ -674,26 +674,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ }
+
+ var currentStyle = null;
+- function styleFormatter(obj)
+- {
+- currentStyle = {};
+- var buffer = document.createElement("span");
+- buffer.setAttribute("style", obj.description);
+- for (var i = 0; i < buffer.style.length; i++) {
+- var property = buffer.style[i];
+- if (isWhitelistedProperty(property))
+- currentStyle[property] = buffer.style[property];
+- }
+- }
+-
+- function isWhitelistedProperty(property)
+- {
+- for (var prefix of ["background", "border", "color", "font", "line", "margin", "padding", "text"]) {
+- if (property.startsWith(prefix) || property.startsWith("-webkit-" + prefix))
+- return true;
+- }
+- return false;
+- }
+
+ // Firebug uses %o for formatting objects.
+ var formatters = {};
+@@ -705,9 +685,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+- // Firebug uses %c for styling the message.
+- formatters.c = styleFormatter;
+-
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+--
+2.20.1
+
diff --git a/patches/net-libs/patch-webkit-2.22.6/0002-Remove-support-for-PING-in-HTML-anchors-privacy.patch b/patches/net-libs/patch-webkit-2.22.6/0002-Remove-support-for-PING-in-HTML-anchors-privacy.patch
@@ -0,0 +1,411 @@
+From baf0c7c97905fe9226ea097535a07c9a15d8fb18 Mon Sep 17 00:00:00 2001
+Message-Id: <baf0c7c97905fe9226ea097535a07c9a15d8fb18.1550728895.git.contact@hacktivis.me>
+In-Reply-To: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+References: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 18:14:21 +0100
+Subject: [PATCH 2/6] Remove support for PING in HTML anchors [privacy]
+
+---
+ Source/WebCore/Sources.txt | 1 -
+ Source/WebCore/html/HTMLAnchorElement.cpp | 16 --
+ .../html/parser/XSSAuditorDelegate.cpp | 4 -
+ Source/WebCore/loader/DocumentLoader.cpp | 6 -
+ Source/WebCore/loader/PingLoader.cpp | 218 ------------------
+ .../loader/cache/CachedResourceLoader.cpp | 3 -
+ .../page/csp/ContentSecurityPolicy.cpp | 5 -
+ Source/WebKit/WebProcess/WebPage/WebPage.cpp | 3 -
+ 8 files changed, 256 deletions(-)
+ delete mode 100644 Source/WebCore/loader/PingLoader.cpp
+
+diff --git a/Source/WebCore/Sources.txt b/Source/WebCore/Sources.txt
+index 704e50c773..bbee4a0695 100644
+--- a/Source/WebCore/Sources.txt
++++ b/Source/WebCore/Sources.txt
+@@ -1276,7 +1276,6 @@ loader/NavigationAction.cpp
+ loader/NavigationScheduler.cpp
+ loader/NetscapePlugInStreamLoader.cpp
+ loader/ServerTimingParser.cpp
+-loader/PingLoader.cpp
+ loader/PolicyChecker.cpp
+ loader/ProgressTracker.cpp
+ loader/ResourceCryptographicDigest.cpp
+diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp
+index 0155fc70a1..e53302748d 100644
+--- a/Source/WebCore/html/HTMLAnchorElement.cpp
++++ b/Source/WebCore/html/HTMLAnchorElement.cpp
+@@ -39,7 +39,6 @@
+ #include "HTMLPictureElement.h"
+ #include "KeyboardEvent.h"
+ #include "MouseEvent.h"
+-#include "PingLoader.h"
+ #include "PlatformMouseEvent.h"
+ #include "RenderImage.h"
+ #include "ResourceRequest.h"
+@@ -364,19 +363,6 @@ bool HTMLAnchorElement::isLiveLink() const
+ return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey);
+ }
+
+-void HTMLAnchorElement::sendPings(const URL& destinationURL)
+-{
+- if (!document().frame())
+- return;
+-
+- if (!hasAttributeWithoutSynchronization(pingAttr) || !document().settings().hyperlinkAuditingEnabled())
+- return;
+-
+- SpaceSplitString pingURLs(attributeWithoutSynchronization(pingAttr), false);
+- for (unsigned i = 0; i < pingURLs.size(); i++)
+- PingLoader::sendPing(*document().frame(), document().completeURL(pingURLs[i]), destinationURL);
+-}
+-
+ #if USE(SYSTEM_PREVIEW)
+ bool HTMLAnchorElement::isSystemPreviewLink() const
+ {
+@@ -442,8 +428,6 @@ void HTMLAnchorElement::handleClick(Event& event)
+ ShouldSendReferrer shouldSendReferrer = hasRel(Relation::NoReferrer) ? NeverSendReferrer : MaybeSendReferrer;
+ auto newFrameOpenerPolicy = hasRel(Relation::NoOpener) ? std::make_optional(NewFrameOpenerPolicy::Suppress) : std::nullopt;
+ frame->loader().urlSelected(completedURL, target(), &event, LockHistory::No, LockBackForwardList::No, shouldSendReferrer, document().shouldOpenExternalURLsPolicyToPropagate(), newFrameOpenerPolicy, downloadAttribute, systemPreviewInfo);
+-
+- sendPings(completedURL);
+ }
+
+ HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event& event)
+diff --git a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+index 80b4213669..e8c69162aa 100644
+--- a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
++++ b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+@@ -35,7 +35,6 @@
+ #include "FrameLoaderClient.h"
+ #include "HTMLParserIdioms.h"
+ #include "NavigationScheduler.h"
+-#include "PingLoader.h"
+ #include <wtf/JSONValues.h>
+ #include <wtf/text/StringBuilder.h>
+ #include <wtf/text/CString.h>
+@@ -104,9 +103,6 @@ void XSSAuditorDelegate::didBlockScript(const XSSInfo& xssInfo)
+ m_didSendNotifications = true;
+
+ frameLoader.client().didDetectXSS(m_document.url(), xssInfo.m_didBlockEntirePage);
+-
+- if (!m_reportURL.isEmpty())
+- PingLoader::sendViolationReport(*m_document.frame(), m_reportURL, generateViolationReport(xssInfo), ViolationReportType::XSSAuditor);
+ }
+
+ if (xssInfo.m_didBlockEntirePage)
+diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp
+index 9b5aecc05f..ee80d8c118 100644
+--- a/Source/WebCore/loader/DocumentLoader.cpp
++++ b/Source/WebCore/loader/DocumentLoader.cpp
+@@ -65,7 +65,6 @@
+ #include "MemoryCache.h"
+ #include "NetworkLoadMetrics.h"
+ #include "Page.h"
+-#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "PolicyChecker.h"
+ #include "ProgressTracker.h"
+@@ -2055,11 +2054,6 @@ void DocumentLoader::addConsoleMessage(MessageSource messageSource, MessageLevel
+ static_cast<ScriptExecutionContext*>(m_frame->document())->addConsoleMessage(messageSource, messageLevel, message, requestIdentifier);
+ }
+
+-void DocumentLoader::sendCSPViolationReport(URL&& reportURL, Ref<FormData>&& report)
+-{
+- PingLoader::sendViolationReport(*m_frame, WTFMove(reportURL), WTFMove(report), ViolationReportType::ContentSecurityPolicy);
+-}
+-
+ void DocumentLoader::enqueueSecurityPolicyViolationEvent(SecurityPolicyViolationEvent::Init&& eventInit)
+ {
+ m_frame->document()->enqueueSecurityPolicyViolationEvent(WTFMove(eventInit));
+diff --git a/Source/WebCore/loader/PingLoader.cpp b/Source/WebCore/loader/PingLoader.cpp
+deleted file mode 100644
+index 134e5560e6..0000000000
+--- a/Source/WebCore/loader/PingLoader.cpp
++++ /dev/null
+@@ -1,218 +0,0 @@
+-/*
+- * Copyright (C) 2010 Google Inc. All rights reserved.
+- * Copyright (C) 2015 Roopesh Chander (roop@roopc.net)
+- * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions are
+- * met:
+- *
+- * * Redistributions of source code must retain the above copyright
+- * notice, this list of conditions and the following disclaimer.
+- * * Redistributions in binary form must reproduce the above
+- * copyright notice, this list of conditions and the following disclaimer
+- * in the documentation and/or other materials provided with the
+- * distribution.
+- * * Neither the name of Google Inc. nor the names of its
+- * contributors may be used to endorse or promote products derived from
+- * this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- */
+-
+-#include "config.h"
+-#include "PingLoader.h"
+-
+-#include "ContentSecurityPolicy.h"
+-#include "Document.h"
+-#include "Frame.h"
+-#include "FrameLoader.h"
+-#include "FrameLoaderClient.h"
+-#include "InspectorInstrumentation.h"
+-#include "LoaderStrategy.h"
+-#include "NetworkLoadMetrics.h"
+-#include "Page.h"
+-#include "PlatformStrategies.h"
+-#include "ProgressTracker.h"
+-#include "ResourceHandle.h"
+-#include "ResourceLoadInfo.h"
+-#include "ResourceRequest.h"
+-#include "ResourceResponse.h"
+-#include "SecurityOrigin.h"
+-#include "SecurityPolicy.h"
+-#include "UserContentController.h"
+-#include <wtf/text/CString.h>
+-
+-namespace WebCore {
+-
+-#if !ENABLE(CONTENT_EXTENSIONS)
+-
+-// Returns true if we should block the load.
+-static inline bool processContentExtensionRulesForLoad(const Frame&, ResourceRequest&, ResourceType)
+-{
+- return false;
+-}
+-
+-#else
+-
+-// Returns true if we should block the load.
+-static bool processContentExtensionRulesForLoad(const Frame& frame, ResourceRequest& request, ResourceType resourceType)
+-{
+- auto* documentLoader = frame.loader().documentLoader();
+- if (!documentLoader)
+- return false;
+- auto* page = frame.page();
+- if (!page)
+- return false;
+- auto status = page->userContentProvider().processContentExtensionRulesForLoad(request.url(), resourceType, *documentLoader);
+- applyBlockedStatusToRequest(status, page, request);
+- return status.blockedLoad;
+-}
+-
+-#endif
+-
+-void PingLoader::loadImage(Frame& frame, const URL& url)
+-{
+- ASSERT(frame.document());
+- auto& document = *frame.document();
+-
+- if (!document.securityOrigin().canDisplay(url)) {
+- FrameLoader::reportLocalLoadFailed(&frame, url);
+- return;
+- }
+-
+- ResourceRequest request(url);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Image))
+- return;
+-
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), request.url(), frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
+-}
+-
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing
+-void PingLoader::sendPing(Frame& frame, const URL& pingURL, const URL& destinationURL)
+-{
+- ASSERT(frame.document());
+-
+- if (!pingURL.protocolIsInHTTPFamily())
+- return;
+-
+- ResourceRequest request(pingURL);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
+- return;
+-
+- auto& document = *frame.document();
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPMethod("POST");
+- request.setHTTPContentType("text/ping");
+- request.setHTTPBody(FormData::create("PING"));
+- request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- auto& sourceOrigin = document.securityOrigin();
+- FrameLoader::addHTTPOriginIfNeeded(request, sourceOrigin.toString());
+- request.setHTTPHeaderField(HTTPHeaderName::PingTo, destinationURL);
+- if (!SecurityPolicy::shouldHideReferrer(pingURL, frame.loader().outgoingReferrer())) {
+- request.setHTTPHeaderField(HTTPHeaderName::PingFrom, document.url());
+- if (!sourceOrigin.isSameSchemeHostPort(SecurityOrigin::create(pingURL).get())) {
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), pingURL, frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+- }
+- }
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
+-}
+-
+-void PingLoader::sendViolationReport(Frame& frame, const URL& reportURL, Ref<FormData>&& report, ViolationReportType reportType)
+-{
+- ASSERT(frame.document());
+-
+- ResourceRequest request(reportURL);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
+- return;
+-
+- auto& document = *frame.document();
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPMethod("POST"_s);
+- request.setHTTPBody(WTFMove(report));
+- switch (reportType) {
+- case ViolationReportType::ContentSecurityPolicy:
+- request.setHTTPContentType("application/csp-report"_s);
+- break;
+- case ViolationReportType::XSSAuditor:
+- request.setHTTPContentType("application/json"_s);
+- break;
+- }
+-
+- bool removeCookies = true;
+- if (document.securityOrigin().isSameSchemeHostPort(SecurityOrigin::create(reportURL).get()))
+- removeCookies = false;
+- if (removeCookies)
+- request.setAllowCookies(false);
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), reportURL, frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::No);
+-}
+-
+-void PingLoader::startPingLoad(Frame& frame, ResourceRequest& request, HTTPHeaderMap&& originalRequestHeaders, ShouldFollowRedirects shouldFollowRedirects)
+-{
+- unsigned long identifier = frame.page()->progress().createUniqueIdentifier();
+- // FIXME: Why activeDocumentLoader? I would have expected documentLoader().
+- // It seems like the PingLoader should be associated with the current
+- // Document in the Frame, but the activeDocumentLoader will be associated
+- // with the provisional DocumentLoader if there is a provisional
+- // DocumentLoader.
+- bool shouldUseCredentialStorage = frame.loader().client().shouldUseCredentialStorage(frame.loader().activeDocumentLoader(), identifier);
+- FetchOptions options;
+- options.credentials = shouldUseCredentialStorage ? FetchOptions::Credentials::Include : FetchOptions::Credentials::Omit;
+- options.redirect = shouldFollowRedirects == ShouldFollowRedirects::Yes ? FetchOptions::Redirect::Follow : FetchOptions::Redirect::Error;
+-
+- // FIXME: Move ping loads to normal subresource loading to get normal inspector request instrumentation hooks.
+- InspectorInstrumentation::willSendRequestOfType(&frame, identifier, frame.loader().activeDocumentLoader(), request, InspectorInstrumentation::LoadType::Ping);
+-
+- platformStrategies()->loaderStrategy()->startPingLoad(frame, request, WTFMove(originalRequestHeaders), options, [protectedFrame = makeRef(frame), identifier] (const ResourceError& error, const ResourceResponse& response) {
+- if (!response.isNull())
+- InspectorInstrumentation::didReceiveResourceResponse(protectedFrame, identifier, protectedFrame->loader().activeDocumentLoader(), response, nullptr);
+- if (error.isNull()) {
+- NetworkLoadMetrics emptyMetrics;
+- InspectorInstrumentation::didFinishLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, emptyMetrics, nullptr);
+- } else
+- InspectorInstrumentation::didFailLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, error);
+- });
+-}
+-
+-}
+diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+index 9d3d108113..614cfee9b5 100644
+--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
++++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+@@ -57,7 +57,6 @@
+ #include "Logging.h"
+ #include "MemoryCache.h"
+ #include "Page.h"
+-#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "RenderElement.h"
+ #include "ResourceLoadInfo.h"
+@@ -202,8 +201,6 @@ ResourceErrorOr<CachedResourceHandle<CachedImage>> CachedResourceLoader::request
+ if (Document* document = frame->document())
+ request.upgradeInsecureRequestIfNeeded(*document);
+ URL requestURL = request.resourceRequest().url();
+- if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request, ForPreload::No))
+- PingLoader::loadImage(*frame, requestURL);
+ return CachedResourceHandle<CachedImage> { };
+ }
+ }
+diff --git a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+index 9b966fa02b..f1b1b51da1 100644
+--- a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
++++ b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+@@ -45,7 +45,6 @@
+ #include "JSExecState.h"
+ #include "JSWindowProxy.h"
+ #include "ParsingUtilities.h"
+-#include "PingLoader.h"
+ #include "ResourceRequest.h"
+ #include "RuntimeEnabledFeatures.h"
+ #include "SchemeRegistry.h"
+@@ -759,10 +758,6 @@ void ContentSecurityPolicy::reportViolation(const String& effectiveViolatedDirec
+ if (m_client) {
+ for (const auto& url : reportURIs)
+ m_client->sendCSPViolationReport(URL { m_protectedURL, url }, report.copyRef());
+- } else {
+- auto& document = downcast<Document>(*m_scriptExecutionContext);
+- for (const auto& url : reportURIs)
+- PingLoader::sendViolationReport(*document.frame(), URL { m_protectedURL, url }, report.copyRef(), ViolationReportType::ContentSecurityPolicy);
+ }
+ }
+
+diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+index 5aa26e75b2..bae31537b3 100644
+--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp
++++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+@@ -181,7 +181,6 @@
+ #include <WebCore/NotImplemented.h>
+ #include <WebCore/Page.h>
+ #include <WebCore/PageConfiguration.h>
+-#include <WebCore/PingLoader.h>
+ #include <WebCore/PlatformKeyboardEvent.h>
+ #include <WebCore/PluginDocument.h>
+ #include <WebCore/PrintContext.h>
+@@ -3358,8 +3357,6 @@ void WebPage::sendCSPViolationReport(uint64_t frameID, const WebCore::URL& repor
+ auto report = reportData.takeData();
+ if (!report)
+ return;
+- if (auto* frame = WebProcess::singleton().webFrame(frameID))
+- PingLoader::sendViolationReport(*frame->coreFrame(), reportURL, report.releaseNonNull(), ViolationReportType::ContentSecurityPolicy);
+ }
+
+ void WebPage::enqueueSecurityPolicyViolationEvent(uint64_t frameID, SecurityPolicyViolationEvent::Init&& eventInit)
+--
+2.20.1
+
diff --git a/patches/net-libs/patch-webkit-2.22.6/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch b/patches/net-libs/patch-webkit-2.22.6/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch
@@ -0,0 +1,29 @@
+From 486a527f1391aeb2cd0fa40f7f1a1e180cd90abf Mon Sep 17 00:00:00 2001
+Message-Id: <486a527f1391aeb2cd0fa40f7f1a1e180cd90abf.1550728895.git.contact@hacktivis.me>
+In-Reply-To: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+References: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:09:22 +0100
+Subject: [PATCH 3/6] CMakeLists.txt: Explain which variable is used to define
+ a port if undefined
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ae5c7b7613..39f398f8dd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -47,7 +47,7 @@ set(PORT "NOPORT" CACHE STRING "choose which WebKit port to build (one of ${ALL_
+
+ list(FIND ALL_PORTS ${PORT} RET)
+ if (${RET} EQUAL -1)
+- message(FATAL_ERROR "Please choose which WebKit port to build (one of ${ALL_PORTS})")
++ message(FATAL_ERROR "Please define a PORT to build with (one of ${ALL_PORTS})")
+ endif ()
+
+ string(TOLOWER ${PORT} WEBKIT_PORT_DIR)
+--
+2.20.1
+
diff --git a/patches/net-libs/patch-webkit-2.22.6/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch b/patches/net-libs/patch-webkit-2.22.6/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch
@@ -0,0 +1,28 @@
+From d3be03eeea129d19ef204cf5365ead5bc71e3f7a Mon Sep 17 00:00:00 2001
+Message-Id: <d3be03eeea129d19ef204cf5365ead5bc71e3f7a.1550728895.git.contact@hacktivis.me>
+In-Reply-To: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+References: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:13:28 +0100
+Subject: [PATCH 4/6] Source/cmake/OptionsGTK.cmake: Add note on fixing CMake
+ defaults
+
+---
+ Source/cmake/OptionsGTK.cmake | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
+index a87177d0d7..098e371983 100644
+--- a/Source/cmake/OptionsGTK.cmake
++++ b/Source/cmake/OptionsGTK.cmake
+@@ -72,6 +72,7 @@ endif ()
+ # Public options specific to the GTK+ port. Do not add any options here unless
+ # there is a strong reason we should support changing the value of the option,
+ # and the option is not relevant to any other WebKit ports.
++# XXX: Do not default to optionnal stuff like USE_LIBSECRET to REQUIRED
+ WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC ${ENABLE_GLES2_DEFAULT})
+ WEBKIT_OPTION_DEFINE(ENABLE_GTKDOC "Whether or not to use generate gtkdoc." PUBLIC OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_INTROSPECTION "Whether to enable GObject introspection." PUBLIC ON)
+--
+2.20.1
+
diff --git a/patches/net-libs/patch-webkit-2.22.6/0005-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch b/patches/net-libs/patch-webkit-2.22.6/0005-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch
@@ -0,0 +1,75 @@
+From fff385e3380f086faa50f9b2d1d0863822214f9e Mon Sep 17 00:00:00 2001
+Message-Id: <fff385e3380f086faa50f9b2d1d0863822214f9e.1550728895.git.contact@hacktivis.me>
+In-Reply-To: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+References: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 2 Dec 2018 02:33:31 +0100
+Subject: [PATCH 5/6] Source/WebCore/page/RuntimeEnabledFeatures.h:
+ hard-disable some features
+
+---
+ Source/WebCore/page/RuntimeEnabledFeatures.h | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h
+index 0e645b341d..be81cfd188 100644
+--- a/Source/WebCore/page/RuntimeEnabledFeatures.h
++++ b/Source/WebCore/page/RuntimeEnabledFeatures.h
+@@ -47,13 +47,13 @@ public:
+ bool displayContentsEnabled() const { return m_isDisplayContentsEnabled; }
+
+ void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
+- bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
++ bool linkPreloadEnabled() const { return false; }
+
+ void setLinkPrefetchEnabled(bool isEnabled) { m_isLinkPrefetchEnabled = isEnabled; }
+- bool linkPrefetchEnabled() const { return m_isLinkPrefetchEnabled; }
++ bool linkPrefetchEnabled() const { return false; }
+
+ void setMediaPreloadingEnabled(bool isEnabled) { m_isMediaPreloadingEnabled = isEnabled; }
+- bool mediaPreloadingEnabled() const { return m_isMediaPreloadingEnabled; }
++ bool mediaPreloadingEnabled() const { return false; }
+
+ void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
+ bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
+@@ -67,19 +67,19 @@ public:
+ bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
+
+ void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
+- bool inputEventsEnabled() const { return m_inputEventsEnabled; }
++ bool inputEventsEnabled() const { return false; }
+
+ void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
+ bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
+
+ void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
+- bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
++ bool customElementsEnabled() const { return false; }
+
+ void setMenuItemElementEnabled(bool isEnabled) { m_isMenuItemElementEnabled = isEnabled; }
+ bool menuItemElementEnabled() const { return m_isMenuItemElementEnabled; }
+
+ void setDirectoryUploadEnabled(bool isEnabled) { m_isDirectoryUploadEnabled = isEnabled; }
+- bool directoryUploadEnabled() const { return m_isDirectoryUploadEnabled; }
++ bool directoryUploadEnabled() const { return false; }
+
+ void setDataTransferItemsEnabled(bool areEnabled) { m_areDataTransferItemsEnabled = areEnabled; }
+ bool dataTransferItemsEnabled() const { return m_areDataTransferItemsEnabled; }
+@@ -217,12 +217,12 @@ public:
+
+ #if ENABLE(ENCRYPTED_MEDIA)
+ void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
+- bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
++ bool encryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+ void setLegacyEncryptedMediaAPIEnabled(bool isEnabled) { m_legacyEncryptedMediaAPIEnabled = isEnabled; }
+- bool legacyEncryptedMediaAPIEnabled() const { return m_legacyEncryptedMediaAPIEnabled; }
++ bool legacyEncryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(SERVICE_WORKER)
+--
+2.20.1
+
diff --git a/patches/net-libs/patch-webkit-2.22.6/0006-lanodan-TODO-New.patch b/patches/net-libs/patch-webkit-2.22.6/0006-lanodan-TODO-New.patch
@@ -0,0 +1,87 @@
+From 389d26ae38d2770daa9b4b07281a58f84200f6b2 Mon Sep 17 00:00:00 2001
+Message-Id: <389d26ae38d2770daa9b4b07281a58f84200f6b2.1550728895.git.contact@hacktivis.me>
+In-Reply-To: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+References: <9c4baaec2f310d43011ec3835e0fbaf585ed583c.1550728895.git.contact@hacktivis.me>
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 2 Dec 2018 11:11:22 +0100
+Subject: [PATCH 6/6] lanodan-TODO: New
+
+---
+ lanodan-TODO | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 65 insertions(+)
+ create mode 100644 lanodan-TODO
+
+diff --git a/lanodan-TODO b/lanodan-TODO
+new file mode 100644
+index 0000000000..d8acc42c6d
+--- /dev/null
++++ b/lanodan-TODO
+@@ -0,0 +1,65 @@
++## Javascript
++- [x] Console Styling (%c)
++- [ ] GeoLocation
++- [ ] AudioAPI
++- [ ] Gamepad (runtime, off by default): https://www.w3.org/TR/gamepad/
++- [ ] Service Workers (runtime, off by default)
++- [ ] IndexedDB (runtime, off by default)
++- [ ] Object Storage (runtime, off by default)
++- [ ] canvas (runtime, off by default)
++- [ ] WebGL (runtime, off by default)
++- [ ] Sensors
++ - [x] Battery (WebKit: Not Considering)
++ - [ ] microphone (runtime, off by default)
++ - [ ] video(webcam, screen, …) (runtime, off by default)
++ - …
++- [x] Web Bluetooth (WebKit: Not Considering)
++- [x] Web MIDI (WebKit: Not Considering)
++- [x] Web USB (WebKit: Not Considering)
++- [ ] Input Events
++ - [ ] Pointer Events
++ - [ ] Scroll Events
++ - [ ] Focus Events
++ - …
++- [ ] Timings
++ - Navigation Timing
++ - Resource Timing
++ - Performance Timeline: https://w3c.github.io/performance-timeline/
++ - High Resolution Time
++ - …
++- [ ] Viewport size
++- [ ] Elements size
++- [ ] multimedia player stats (FPS, caching, …)
++- [ ] Payment Request: https://www.w3.org/TR/payment-request/
++- [ ] Encoding Standard (explore): https://encoding.spec.whatwg.org/
++
++## Headers
++- [ ] referer
++- [ ] user-agent (spoof Intel Apple one?)
++- [ ] Cookies (runtime, off by default)
++
++## HTML
++- [ ] noscript
++- [x] Link ping
++- [x] Link prefetch
++- [x] Link preloading
++- [x] Media preloading
++- [x] custom elements
++- [ ] DNS prefetch
++- [ ] srcset (images)
++
++## CSS
++- [ ] Engine-specific extensions
++- [ ] WebFont (runtime, off by default)
++
++## TLS
++- [ ] Disable known-bad ciphers
++- [ ] TOFU?
++- [ ] DANE
++
++## Codebase
++- [ ] Remove Third-Party directory
++
++
++- https://webkit.org/status/
++- https://github.com/WICG
+--
+2.20.1
+
diff --git a/patches/net-libs/serf-1.3.9/serf-1.3.9-openssl_malloc_init.patch b/patches/net-libs/serf-1.3.9/serf-1.3.9-openssl_malloc_init.patch
@@ -0,0 +1,13 @@
+diff --git a/./buckets/ssl_buckets.c b/./buckets/ssl_buckets.c.new
+index b01e535..c64295d 100644
+--- a/./buckets/ssl_buckets.c
++++ b/./buckets/ssl_buckets.c.new
+@@ -1156,7 +1156,7 @@ static void init_ssl_libraries(void)
+ }
+ #endif
+
+-#ifdef USE_OPENSSL_1_1_API
++#ifdef USE_OPENSSL_1_1_API && !defined(LIBRESSL_VERSION_NUMBER)
+ OPENSSL_malloc_init();
+ #else
+ CRYPTO_malloc_init();
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch b/patches/net-libs/webkit-gtk-2.22.6/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch
@@ -0,0 +1,55 @@
+From 686141ae059a54da7148642b136e3f1f1f1a4d64 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 17:59:57 +0100
+Subject: [PATCH 1/8]
+ Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js: Remove %c
+ support in the console
+
+---
+ .../UserInterface/Views/ConsoleMessageView.js | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+index 7aecedb8d8..01890f02e6 100644
+--- a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
++++ b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+@@ -674,26 +674,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ }
+
+ var currentStyle = null;
+- function styleFormatter(obj)
+- {
+- currentStyle = {};
+- var buffer = document.createElement("span");
+- buffer.setAttribute("style", obj.description);
+- for (var i = 0; i < buffer.style.length; i++) {
+- var property = buffer.style[i];
+- if (isWhitelistedProperty(property))
+- currentStyle[property] = buffer.style[property];
+- }
+- }
+-
+- function isWhitelistedProperty(property)
+- {
+- for (var prefix of ["background", "border", "color", "font", "line", "margin", "padding", "text"]) {
+- if (property.startsWith(prefix) || property.startsWith("-webkit-" + prefix))
+- return true;
+- }
+- return false;
+- }
+
+ // Firebug uses %o for formatting objects.
+ var formatters = {};
+@@ -705,9 +685,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+- // Firebug uses %c for styling the message.
+- formatters.c = styleFormatter;
+-
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0002-Remove-support-for-PING-in-HTML-anchors-privacy.patch b/patches/net-libs/webkit-gtk-2.22.6/0002-Remove-support-for-PING-in-HTML-anchors-privacy.patch
@@ -0,0 +1,478 @@
+From 84921f7b5e96acf31472acd7752ca77158b4c657 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 18:14:21 +0100
+Subject: [PATCH 2/8] Remove support for PING in HTML anchors [privacy]
+
+---
+ Source/WebCore/Sources.txt | 1 -
+ Source/WebCore/html/HTMLAnchorElement.cpp | 16 --
+ .../html/parser/XSSAuditorDelegate.cpp | 4 -
+ Source/WebCore/loader/DocumentLoader.cpp | 6 -
+ Source/WebCore/loader/PingLoader.cpp | 218 ------------------
+ Source/WebCore/loader/PingLoader.h | 62 -----
+ .../loader/cache/CachedResourceLoader.cpp | 3 -
+ .../page/csp/ContentSecurityPolicy.cpp | 5 -
+ Source/WebKit/WebProcess/WebPage/WebPage.cpp | 3 -
+ 9 files changed, 318 deletions(-)
+ delete mode 100644 Source/WebCore/loader/PingLoader.cpp
+ delete mode 100644 Source/WebCore/loader/PingLoader.h
+
+diff --git a/Source/WebCore/Sources.txt b/Source/WebCore/Sources.txt
+index 704e50c773..bbee4a0695 100644
+--- a/Source/WebCore/Sources.txt
++++ b/Source/WebCore/Sources.txt
+@@ -1276,7 +1276,6 @@ loader/NavigationAction.cpp
+ loader/NavigationScheduler.cpp
+ loader/NetscapePlugInStreamLoader.cpp
+ loader/ServerTimingParser.cpp
+-loader/PingLoader.cpp
+ loader/PolicyChecker.cpp
+ loader/ProgressTracker.cpp
+ loader/ResourceCryptographicDigest.cpp
+diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp
+index 0155fc70a1..e53302748d 100644
+--- a/Source/WebCore/html/HTMLAnchorElement.cpp
++++ b/Source/WebCore/html/HTMLAnchorElement.cpp
+@@ -39,7 +39,6 @@
+ #include "HTMLPictureElement.h"
+ #include "KeyboardEvent.h"
+ #include "MouseEvent.h"
+-#include "PingLoader.h"
+ #include "PlatformMouseEvent.h"
+ #include "RenderImage.h"
+ #include "ResourceRequest.h"
+@@ -364,19 +363,6 @@ bool HTMLAnchorElement::isLiveLink() const
+ return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey);
+ }
+
+-void HTMLAnchorElement::sendPings(const URL& destinationURL)
+-{
+- if (!document().frame())
+- return;
+-
+- if (!hasAttributeWithoutSynchronization(pingAttr) || !document().settings().hyperlinkAuditingEnabled())
+- return;
+-
+- SpaceSplitString pingURLs(attributeWithoutSynchronization(pingAttr), false);
+- for (unsigned i = 0; i < pingURLs.size(); i++)
+- PingLoader::sendPing(*document().frame(), document().completeURL(pingURLs[i]), destinationURL);
+-}
+-
+ #if USE(SYSTEM_PREVIEW)
+ bool HTMLAnchorElement::isSystemPreviewLink() const
+ {
+@@ -442,8 +428,6 @@ void HTMLAnchorElement::handleClick(Event& event)
+ ShouldSendReferrer shouldSendReferrer = hasRel(Relation::NoReferrer) ? NeverSendReferrer : MaybeSendReferrer;
+ auto newFrameOpenerPolicy = hasRel(Relation::NoOpener) ? std::make_optional(NewFrameOpenerPolicy::Suppress) : std::nullopt;
+ frame->loader().urlSelected(completedURL, target(), &event, LockHistory::No, LockBackForwardList::No, shouldSendReferrer, document().shouldOpenExternalURLsPolicyToPropagate(), newFrameOpenerPolicy, downloadAttribute, systemPreviewInfo);
+-
+- sendPings(completedURL);
+ }
+
+ HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event& event)
+diff --git a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+index 80b4213669..e8c69162aa 100644
+--- a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
++++ b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+@@ -35,7 +35,6 @@
+ #include "FrameLoaderClient.h"
+ #include "HTMLParserIdioms.h"
+ #include "NavigationScheduler.h"
+-#include "PingLoader.h"
+ #include <wtf/JSONValues.h>
+ #include <wtf/text/StringBuilder.h>
+ #include <wtf/text/CString.h>
+@@ -104,9 +103,6 @@ void XSSAuditorDelegate::didBlockScript(const XSSInfo& xssInfo)
+ m_didSendNotifications = true;
+
+ frameLoader.client().didDetectXSS(m_document.url(), xssInfo.m_didBlockEntirePage);
+-
+- if (!m_reportURL.isEmpty())
+- PingLoader::sendViolationReport(*m_document.frame(), m_reportURL, generateViolationReport(xssInfo), ViolationReportType::XSSAuditor);
+ }
+
+ if (xssInfo.m_didBlockEntirePage)
+diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp
+index b9fc289660..37cf9602b2 100644
+--- a/Source/WebCore/loader/DocumentLoader.cpp
++++ b/Source/WebCore/loader/DocumentLoader.cpp
+@@ -65,7 +65,6 @@
+ #include "MemoryCache.h"
+ #include "NetworkLoadMetrics.h"
+ #include "Page.h"
+-#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "PolicyChecker.h"
+ #include "ProgressTracker.h"
+@@ -2058,11 +2057,6 @@ void DocumentLoader::addConsoleMessage(MessageSource messageSource, MessageLevel
+ static_cast<ScriptExecutionContext*>(m_frame->document())->addConsoleMessage(messageSource, messageLevel, message, requestIdentifier);
+ }
+
+-void DocumentLoader::sendCSPViolationReport(URL&& reportURL, Ref<FormData>&& report)
+-{
+- PingLoader::sendViolationReport(*m_frame, WTFMove(reportURL), WTFMove(report), ViolationReportType::ContentSecurityPolicy);
+-}
+-
+ void DocumentLoader::enqueueSecurityPolicyViolationEvent(SecurityPolicyViolationEvent::Init&& eventInit)
+ {
+ m_frame->document()->enqueueSecurityPolicyViolationEvent(WTFMove(eventInit));
+diff --git a/Source/WebCore/loader/PingLoader.cpp b/Source/WebCore/loader/PingLoader.cpp
+deleted file mode 100644
+index 134e5560e6..0000000000
+--- a/Source/WebCore/loader/PingLoader.cpp
++++ /dev/null
+@@ -1,218 +0,0 @@
+-/*
+- * Copyright (C) 2010 Google Inc. All rights reserved.
+- * Copyright (C) 2015 Roopesh Chander (roop@roopc.net)
+- * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions are
+- * met:
+- *
+- * * Redistributions of source code must retain the above copyright
+- * notice, this list of conditions and the following disclaimer.
+- * * Redistributions in binary form must reproduce the above
+- * copyright notice, this list of conditions and the following disclaimer
+- * in the documentation and/or other materials provided with the
+- * distribution.
+- * * Neither the name of Google Inc. nor the names of its
+- * contributors may be used to endorse or promote products derived from
+- * this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- */
+-
+-#include "config.h"
+-#include "PingLoader.h"
+-
+-#include "ContentSecurityPolicy.h"
+-#include "Document.h"
+-#include "Frame.h"
+-#include "FrameLoader.h"
+-#include "FrameLoaderClient.h"
+-#include "InspectorInstrumentation.h"
+-#include "LoaderStrategy.h"
+-#include "NetworkLoadMetrics.h"
+-#include "Page.h"
+-#include "PlatformStrategies.h"
+-#include "ProgressTracker.h"
+-#include "ResourceHandle.h"
+-#include "ResourceLoadInfo.h"
+-#include "ResourceRequest.h"
+-#include "ResourceResponse.h"
+-#include "SecurityOrigin.h"
+-#include "SecurityPolicy.h"
+-#include "UserContentController.h"
+-#include <wtf/text/CString.h>
+-
+-namespace WebCore {
+-
+-#if !ENABLE(CONTENT_EXTENSIONS)
+-
+-// Returns true if we should block the load.
+-static inline bool processContentExtensionRulesForLoad(const Frame&, ResourceRequest&, ResourceType)
+-{
+- return false;
+-}
+-
+-#else
+-
+-// Returns true if we should block the load.
+-static bool processContentExtensionRulesForLoad(const Frame& frame, ResourceRequest& request, ResourceType resourceType)
+-{
+- auto* documentLoader = frame.loader().documentLoader();
+- if (!documentLoader)
+- return false;
+- auto* page = frame.page();
+- if (!page)
+- return false;
+- auto status = page->userContentProvider().processContentExtensionRulesForLoad(request.url(), resourceType, *documentLoader);
+- applyBlockedStatusToRequest(status, page, request);
+- return status.blockedLoad;
+-}
+-
+-#endif
+-
+-void PingLoader::loadImage(Frame& frame, const URL& url)
+-{
+- ASSERT(frame.document());
+- auto& document = *frame.document();
+-
+- if (!document.securityOrigin().canDisplay(url)) {
+- FrameLoader::reportLocalLoadFailed(&frame, url);
+- return;
+- }
+-
+- ResourceRequest request(url);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Image))
+- return;
+-
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), request.url(), frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
+-}
+-
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing
+-void PingLoader::sendPing(Frame& frame, const URL& pingURL, const URL& destinationURL)
+-{
+- ASSERT(frame.document());
+-
+- if (!pingURL.protocolIsInHTTPFamily())
+- return;
+-
+- ResourceRequest request(pingURL);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
+- return;
+-
+- auto& document = *frame.document();
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPMethod("POST");
+- request.setHTTPContentType("text/ping");
+- request.setHTTPBody(FormData::create("PING"));
+- request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- auto& sourceOrigin = document.securityOrigin();
+- FrameLoader::addHTTPOriginIfNeeded(request, sourceOrigin.toString());
+- request.setHTTPHeaderField(HTTPHeaderName::PingTo, destinationURL);
+- if (!SecurityPolicy::shouldHideReferrer(pingURL, frame.loader().outgoingReferrer())) {
+- request.setHTTPHeaderField(HTTPHeaderName::PingFrom, document.url());
+- if (!sourceOrigin.isSameSchemeHostPort(SecurityOrigin::create(pingURL).get())) {
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), pingURL, frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+- }
+- }
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
+-}
+-
+-void PingLoader::sendViolationReport(Frame& frame, const URL& reportURL, Ref<FormData>&& report, ViolationReportType reportType)
+-{
+- ASSERT(frame.document());
+-
+- ResourceRequest request(reportURL);
+- if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
+- return;
+-
+- auto& document = *frame.document();
+- document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
+-
+- request.setHTTPMethod("POST"_s);
+- request.setHTTPBody(WTFMove(report));
+- switch (reportType) {
+- case ViolationReportType::ContentSecurityPolicy:
+- request.setHTTPContentType("application/csp-report"_s);
+- break;
+- case ViolationReportType::XSSAuditor:
+- request.setHTTPContentType("application/json"_s);
+- break;
+- }
+-
+- bool removeCookies = true;
+- if (document.securityOrigin().isSameSchemeHostPort(SecurityOrigin::create(reportURL).get()))
+- removeCookies = false;
+- if (removeCookies)
+- request.setAllowCookies(false);
+-
+- HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
+-
+- frame.loader().addExtraFieldsToSubresourceRequest(request);
+-
+- String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), reportURL, frame.loader().outgoingReferrer());
+- if (!referrer.isEmpty())
+- request.setHTTPReferrer(referrer);
+-
+- startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::No);
+-}
+-
+-void PingLoader::startPingLoad(Frame& frame, ResourceRequest& request, HTTPHeaderMap&& originalRequestHeaders, ShouldFollowRedirects shouldFollowRedirects)
+-{
+- unsigned long identifier = frame.page()->progress().createUniqueIdentifier();
+- // FIXME: Why activeDocumentLoader? I would have expected documentLoader().
+- // It seems like the PingLoader should be associated with the current
+- // Document in the Frame, but the activeDocumentLoader will be associated
+- // with the provisional DocumentLoader if there is a provisional
+- // DocumentLoader.
+- bool shouldUseCredentialStorage = frame.loader().client().shouldUseCredentialStorage(frame.loader().activeDocumentLoader(), identifier);
+- FetchOptions options;
+- options.credentials = shouldUseCredentialStorage ? FetchOptions::Credentials::Include : FetchOptions::Credentials::Omit;
+- options.redirect = shouldFollowRedirects == ShouldFollowRedirects::Yes ? FetchOptions::Redirect::Follow : FetchOptions::Redirect::Error;
+-
+- // FIXME: Move ping loads to normal subresource loading to get normal inspector request instrumentation hooks.
+- InspectorInstrumentation::willSendRequestOfType(&frame, identifier, frame.loader().activeDocumentLoader(), request, InspectorInstrumentation::LoadType::Ping);
+-
+- platformStrategies()->loaderStrategy()->startPingLoad(frame, request, WTFMove(originalRequestHeaders), options, [protectedFrame = makeRef(frame), identifier] (const ResourceError& error, const ResourceResponse& response) {
+- if (!response.isNull())
+- InspectorInstrumentation::didReceiveResourceResponse(protectedFrame, identifier, protectedFrame->loader().activeDocumentLoader(), response, nullptr);
+- if (error.isNull()) {
+- NetworkLoadMetrics emptyMetrics;
+- InspectorInstrumentation::didFinishLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, emptyMetrics, nullptr);
+- } else
+- InspectorInstrumentation::didFailLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, error);
+- });
+-}
+-
+-}
+diff --git a/Source/WebCore/loader/PingLoader.h b/Source/WebCore/loader/PingLoader.h
+deleted file mode 100644
+index 15489dcf04..0000000000
+--- a/Source/WebCore/loader/PingLoader.h
++++ /dev/null
+@@ -1,62 +0,0 @@
+-/*
+- * Copyright (C) 2010 Google Inc. All rights reserved.
+- * Copyright (C) 2017 Apple Inc. All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions are
+- * met:
+- *
+- * * Redistributions of source code must retain the above copyright
+- * notice, this list of conditions and the following disclaimer.
+- * * Redistributions in binary form must reproduce the above
+- * copyright notice, this list of conditions and the following disclaimer
+- * in the documentation and/or other materials provided with the
+- * distribution.
+- * * Neither the name of Google Inc. nor the names of its
+- * contributors may be used to endorse or promote products derived from
+- * this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- */
+-
+-#pragma once
+-
+-#include <wtf/Forward.h>
+-#include <wtf/Ref.h>
+-
+-namespace WebCore {
+-
+-class FormData;
+-class Frame;
+-class HTTPHeaderMap;
+-class URL;
+-class ResourceRequest;
+-
+-enum class ViolationReportType {
+- ContentSecurityPolicy,
+- XSSAuditor,
+-};
+-
+-class PingLoader {
+-public:
+- static void loadImage(Frame&, const URL&);
+- static void sendPing(Frame&, const URL& pingURL, const URL& destinationURL);
+- WEBCORE_EXPORT static void sendViolationReport(Frame&, const URL& reportURL, Ref<FormData>&& report, ViolationReportType);
+-
+-private:
+- enum class ShouldFollowRedirects { No, Yes };
+- static void startPingLoad(Frame&, ResourceRequest&, HTTPHeaderMap&& originalRequestHeaders, ShouldFollowRedirects);
+-};
+-
+-} // namespace WebCore
+diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+index 9d3d108113..614cfee9b5 100644
+--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
++++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+@@ -57,7 +57,6 @@
+ #include "Logging.h"
+ #include "MemoryCache.h"
+ #include "Page.h"
+-#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "RenderElement.h"
+ #include "ResourceLoadInfo.h"
+@@ -202,8 +201,6 @@ ResourceErrorOr<CachedResourceHandle<CachedImage>> CachedResourceLoader::request
+ if (Document* document = frame->document())
+ request.upgradeInsecureRequestIfNeeded(*document);
+ URL requestURL = request.resourceRequest().url();
+- if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request, ForPreload::No))
+- PingLoader::loadImage(*frame, requestURL);
+ return CachedResourceHandle<CachedImage> { };
+ }
+ }
+diff --git a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+index 9b966fa02b..f1b1b51da1 100644
+--- a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
++++ b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+@@ -45,7 +45,6 @@
+ #include "JSExecState.h"
+ #include "JSWindowProxy.h"
+ #include "ParsingUtilities.h"
+-#include "PingLoader.h"
+ #include "ResourceRequest.h"
+ #include "RuntimeEnabledFeatures.h"
+ #include "SchemeRegistry.h"
+@@ -759,10 +758,6 @@ void ContentSecurityPolicy::reportViolation(const String& effectiveViolatedDirec
+ if (m_client) {
+ for (const auto& url : reportURIs)
+ m_client->sendCSPViolationReport(URL { m_protectedURL, url }, report.copyRef());
+- } else {
+- auto& document = downcast<Document>(*m_scriptExecutionContext);
+- for (const auto& url : reportURIs)
+- PingLoader::sendViolationReport(*document.frame(), URL { m_protectedURL, url }, report.copyRef(), ViolationReportType::ContentSecurityPolicy);
+ }
+ }
+
+diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+index 5de12b10cc..e161de3599 100644
+--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp
++++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+@@ -181,7 +181,6 @@
+ #include <WebCore/NotImplemented.h>
+ #include <WebCore/Page.h>
+ #include <WebCore/PageConfiguration.h>
+-#include <WebCore/PingLoader.h>
+ #include <WebCore/PlatformKeyboardEvent.h>
+ #include <WebCore/PluginDocument.h>
+ #include <WebCore/PrintContext.h>
+@@ -3359,8 +3358,6 @@ void WebPage::sendCSPViolationReport(uint64_t frameID, const WebCore::URL& repor
+ auto report = reportData.takeData();
+ if (!report)
+ return;
+- if (auto* frame = WebProcess::singleton().webFrame(frameID))
+- PingLoader::sendViolationReport(*frame->coreFrame(), reportURL, report.releaseNonNull(), ViolationReportType::ContentSecurityPolicy);
+ }
+
+ void WebPage::enqueueSecurityPolicyViolationEvent(uint64_t frameID, SecurityPolicyViolationEvent::Init&& eventInit)
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch b/patches/net-libs/webkit-gtk-2.22.6/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch
@@ -0,0 +1,26 @@
+From 97043aced63189c0f9bcf78a3f590a766fb154fc Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:09:22 +0100
+Subject: [PATCH 3/8] CMakeLists.txt: Explain which variable is used to define
+ a port if undefined
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ae5c7b7613..39f398f8dd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -47,7 +47,7 @@ set(PORT "NOPORT" CACHE STRING "choose which WebKit port to build (one of ${ALL_
+
+ list(FIND ALL_PORTS ${PORT} RET)
+ if (${RET} EQUAL -1)
+- message(FATAL_ERROR "Please choose which WebKit port to build (one of ${ALL_PORTS})")
++ message(FATAL_ERROR "Please define a PORT to build with (one of ${ALL_PORTS})")
+ endif ()
+
+ string(TOLOWER ${PORT} WEBKIT_PORT_DIR)
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch b/patches/net-libs/webkit-gtk-2.22.6/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch
@@ -0,0 +1,25 @@
+From 025f12353ba233463e4f17e1729901d399974166 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:13:28 +0100
+Subject: [PATCH 4/8] Source/cmake/OptionsGTK.cmake: Add note on fixing CMake
+ defaults
+
+---
+ Source/cmake/OptionsGTK.cmake | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
+index 984a7d25ef..2bb73a078c 100644
+--- a/Source/cmake/OptionsGTK.cmake
++++ b/Source/cmake/OptionsGTK.cmake
+@@ -72,6 +72,7 @@ endif ()
+ # Public options specific to the GTK+ port. Do not add any options here unless
+ # there is a strong reason we should support changing the value of the option,
+ # and the option is not relevant to any other WebKit ports.
++# XXX: Do not default to optionnal stuff like USE_LIBSECRET to REQUIRED
+ WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC ${ENABLE_GLES2_DEFAULT})
+ WEBKIT_OPTION_DEFINE(ENABLE_GTKDOC "Whether or not to use generate gtkdoc." PUBLIC OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_INTROSPECTION "Whether to enable GObject introspection." PUBLIC ON)
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0005-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch b/patches/net-libs/webkit-gtk-2.22.6/0005-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch
@@ -0,0 +1,72 @@
+From 177a67dd37c335e9ffd75219bbd7c533fe3ffe63 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 2 Dec 2018 02:33:31 +0100
+Subject: [PATCH 5/8] Source/WebCore/page/RuntimeEnabledFeatures.h:
+ hard-disable some features
+
+---
+ Source/WebCore/page/RuntimeEnabledFeatures.h | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h
+index 0e645b341d..be81cfd188 100644
+--- a/Source/WebCore/page/RuntimeEnabledFeatures.h
++++ b/Source/WebCore/page/RuntimeEnabledFeatures.h
+@@ -47,13 +47,13 @@ public:
+ bool displayContentsEnabled() const { return m_isDisplayContentsEnabled; }
+
+ void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
+- bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
++ bool linkPreloadEnabled() const { return false; }
+
+ void setLinkPrefetchEnabled(bool isEnabled) { m_isLinkPrefetchEnabled = isEnabled; }
+- bool linkPrefetchEnabled() const { return m_isLinkPrefetchEnabled; }
++ bool linkPrefetchEnabled() const { return false; }
+
+ void setMediaPreloadingEnabled(bool isEnabled) { m_isMediaPreloadingEnabled = isEnabled; }
+- bool mediaPreloadingEnabled() const { return m_isMediaPreloadingEnabled; }
++ bool mediaPreloadingEnabled() const { return false; }
+
+ void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
+ bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
+@@ -67,19 +67,19 @@ public:
+ bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
+
+ void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
+- bool inputEventsEnabled() const { return m_inputEventsEnabled; }
++ bool inputEventsEnabled() const { return false; }
+
+ void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
+ bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
+
+ void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
+- bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
++ bool customElementsEnabled() const { return false; }
+
+ void setMenuItemElementEnabled(bool isEnabled) { m_isMenuItemElementEnabled = isEnabled; }
+ bool menuItemElementEnabled() const { return m_isMenuItemElementEnabled; }
+
+ void setDirectoryUploadEnabled(bool isEnabled) { m_isDirectoryUploadEnabled = isEnabled; }
+- bool directoryUploadEnabled() const { return m_isDirectoryUploadEnabled; }
++ bool directoryUploadEnabled() const { return false; }
+
+ void setDataTransferItemsEnabled(bool areEnabled) { m_areDataTransferItemsEnabled = areEnabled; }
+ bool dataTransferItemsEnabled() const { return m_areDataTransferItemsEnabled; }
+@@ -217,12 +217,12 @@ public:
+
+ #if ENABLE(ENCRYPTED_MEDIA)
+ void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
+- bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
++ bool encryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+ void setLegacyEncryptedMediaAPIEnabled(bool isEnabled) { m_legacyEncryptedMediaAPIEnabled = isEnabled; }
+- bool legacyEncryptedMediaAPIEnabled() const { return m_legacyEncryptedMediaAPIEnabled; }
++ bool legacyEncryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(SERVICE_WORKER)
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0006-lanodan-TODO-New.patch b/patches/net-libs/webkit-gtk-2.22.6/0006-lanodan-TODO-New.patch
@@ -0,0 +1,84 @@
+From 695ec156313a298b564406ee6fadb3bcbb6a2bd1 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 2 Dec 2018 11:11:22 +0100
+Subject: [PATCH 6/8] lanodan-TODO: New
+
+---
+ lanodan-TODO | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 65 insertions(+)
+ create mode 100644 lanodan-TODO
+
+diff --git a/lanodan-TODO b/lanodan-TODO
+new file mode 100644
+index 0000000000..d8acc42c6d
+--- /dev/null
++++ b/lanodan-TODO
+@@ -0,0 +1,65 @@
++## Javascript
++- [x] Console Styling (%c)
++- [ ] GeoLocation
++- [ ] AudioAPI
++- [ ] Gamepad (runtime, off by default): https://www.w3.org/TR/gamepad/
++- [ ] Service Workers (runtime, off by default)
++- [ ] IndexedDB (runtime, off by default)
++- [ ] Object Storage (runtime, off by default)
++- [ ] canvas (runtime, off by default)
++- [ ] WebGL (runtime, off by default)
++- [ ] Sensors
++ - [x] Battery (WebKit: Not Considering)
++ - [ ] microphone (runtime, off by default)
++ - [ ] video(webcam, screen, …) (runtime, off by default)
++ - …
++- [x] Web Bluetooth (WebKit: Not Considering)
++- [x] Web MIDI (WebKit: Not Considering)
++- [x] Web USB (WebKit: Not Considering)
++- [ ] Input Events
++ - [ ] Pointer Events
++ - [ ] Scroll Events
++ - [ ] Focus Events
++ - …
++- [ ] Timings
++ - Navigation Timing
++ - Resource Timing
++ - Performance Timeline: https://w3c.github.io/performance-timeline/
++ - High Resolution Time
++ - …
++- [ ] Viewport size
++- [ ] Elements size
++- [ ] multimedia player stats (FPS, caching, …)
++- [ ] Payment Request: https://www.w3.org/TR/payment-request/
++- [ ] Encoding Standard (explore): https://encoding.spec.whatwg.org/
++
++## Headers
++- [ ] referer
++- [ ] user-agent (spoof Intel Apple one?)
++- [ ] Cookies (runtime, off by default)
++
++## HTML
++- [ ] noscript
++- [x] Link ping
++- [x] Link prefetch
++- [x] Link preloading
++- [x] Media preloading
++- [x] custom elements
++- [ ] DNS prefetch
++- [ ] srcset (images)
++
++## CSS
++- [ ] Engine-specific extensions
++- [ ] WebFont (runtime, off by default)
++
++## TLS
++- [ ] Disable known-bad ciphers
++- [ ] TOFU?
++- [ ] DANE
++
++## Codebase
++- [ ] Remove Third-Party directory
++
++
++- https://webkit.org/status/
++- https://github.com/WICG
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0007-Revert-Remove-support-for-PING-in-HTML-anchors-priva.patch b/patches/net-libs/webkit-gtk-2.22.6/0007-Revert-Remove-support-for-PING-in-HTML-anchors-priva.patch
@@ -0,0 +1,480 @@
+From aa8f18d92cc4b753e1cdfe345b5bb0894bcdc2dc Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Wed, 13 Mar 2019 11:04:41 +0100
+Subject: [PATCH 7/8] Revert "Remove support for PING in HTML anchors
+ [privacy]"
+
+This reverts commit 84921f7b5e96acf31472acd7752ca77158b4c657.
+---
+ Source/WebCore/Sources.txt | 1 +
+ Source/WebCore/html/HTMLAnchorElement.cpp | 16 ++
+ .../html/parser/XSSAuditorDelegate.cpp | 4 +
+ Source/WebCore/loader/DocumentLoader.cpp | 6 +
+ Source/WebCore/loader/PingLoader.cpp | 218 ++++++++++++++++++
+ Source/WebCore/loader/PingLoader.h | 62 +++++
+ .../loader/cache/CachedResourceLoader.cpp | 3 +
+ .../page/csp/ContentSecurityPolicy.cpp | 5 +
+ Source/WebKit/WebProcess/WebPage/WebPage.cpp | 3 +
+ 9 files changed, 318 insertions(+)
+ create mode 100644 Source/WebCore/loader/PingLoader.cpp
+ create mode 100644 Source/WebCore/loader/PingLoader.h
+
+diff --git a/Source/WebCore/Sources.txt b/Source/WebCore/Sources.txt
+index bbee4a0695..704e50c773 100644
+--- a/Source/WebCore/Sources.txt
++++ b/Source/WebCore/Sources.txt
+@@ -1276,6 +1276,7 @@ loader/NavigationAction.cpp
+ loader/NavigationScheduler.cpp
+ loader/NetscapePlugInStreamLoader.cpp
+ loader/ServerTimingParser.cpp
++loader/PingLoader.cpp
+ loader/PolicyChecker.cpp
+ loader/ProgressTracker.cpp
+ loader/ResourceCryptographicDigest.cpp
+diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp
+index e53302748d..0155fc70a1 100644
+--- a/Source/WebCore/html/HTMLAnchorElement.cpp
++++ b/Source/WebCore/html/HTMLAnchorElement.cpp
+@@ -39,6 +39,7 @@
+ #include "HTMLPictureElement.h"
+ #include "KeyboardEvent.h"
+ #include "MouseEvent.h"
++#include "PingLoader.h"
+ #include "PlatformMouseEvent.h"
+ #include "RenderImage.h"
+ #include "ResourceRequest.h"
+@@ -363,6 +364,19 @@ bool HTMLAnchorElement::isLiveLink() const
+ return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey);
+ }
+
++void HTMLAnchorElement::sendPings(const URL& destinationURL)
++{
++ if (!document().frame())
++ return;
++
++ if (!hasAttributeWithoutSynchronization(pingAttr) || !document().settings().hyperlinkAuditingEnabled())
++ return;
++
++ SpaceSplitString pingURLs(attributeWithoutSynchronization(pingAttr), false);
++ for (unsigned i = 0; i < pingURLs.size(); i++)
++ PingLoader::sendPing(*document().frame(), document().completeURL(pingURLs[i]), destinationURL);
++}
++
+ #if USE(SYSTEM_PREVIEW)
+ bool HTMLAnchorElement::isSystemPreviewLink() const
+ {
+@@ -428,6 +442,8 @@ void HTMLAnchorElement::handleClick(Event& event)
+ ShouldSendReferrer shouldSendReferrer = hasRel(Relation::NoReferrer) ? NeverSendReferrer : MaybeSendReferrer;
+ auto newFrameOpenerPolicy = hasRel(Relation::NoOpener) ? std::make_optional(NewFrameOpenerPolicy::Suppress) : std::nullopt;
+ frame->loader().urlSelected(completedURL, target(), &event, LockHistory::No, LockBackForwardList::No, shouldSendReferrer, document().shouldOpenExternalURLsPolicyToPropagate(), newFrameOpenerPolicy, downloadAttribute, systemPreviewInfo);
++
++ sendPings(completedURL);
+ }
+
+ HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event& event)
+diff --git a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+index e8c69162aa..80b4213669 100644
+--- a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
++++ b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+@@ -35,6 +35,7 @@
+ #include "FrameLoaderClient.h"
+ #include "HTMLParserIdioms.h"
+ #include "NavigationScheduler.h"
++#include "PingLoader.h"
+ #include <wtf/JSONValues.h>
+ #include <wtf/text/StringBuilder.h>
+ #include <wtf/text/CString.h>
+@@ -103,6 +104,9 @@ void XSSAuditorDelegate::didBlockScript(const XSSInfo& xssInfo)
+ m_didSendNotifications = true;
+
+ frameLoader.client().didDetectXSS(m_document.url(), xssInfo.m_didBlockEntirePage);
++
++ if (!m_reportURL.isEmpty())
++ PingLoader::sendViolationReport(*m_document.frame(), m_reportURL, generateViolationReport(xssInfo), ViolationReportType::XSSAuditor);
+ }
+
+ if (xssInfo.m_didBlockEntirePage)
+diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp
+index 37cf9602b2..b9fc289660 100644
+--- a/Source/WebCore/loader/DocumentLoader.cpp
++++ b/Source/WebCore/loader/DocumentLoader.cpp
+@@ -65,6 +65,7 @@
+ #include "MemoryCache.h"
+ #include "NetworkLoadMetrics.h"
+ #include "Page.h"
++#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "PolicyChecker.h"
+ #include "ProgressTracker.h"
+@@ -2057,6 +2058,11 @@ void DocumentLoader::addConsoleMessage(MessageSource messageSource, MessageLevel
+ static_cast<ScriptExecutionContext*>(m_frame->document())->addConsoleMessage(messageSource, messageLevel, message, requestIdentifier);
+ }
+
++void DocumentLoader::sendCSPViolationReport(URL&& reportURL, Ref<FormData>&& report)
++{
++ PingLoader::sendViolationReport(*m_frame, WTFMove(reportURL), WTFMove(report), ViolationReportType::ContentSecurityPolicy);
++}
++
+ void DocumentLoader::enqueueSecurityPolicyViolationEvent(SecurityPolicyViolationEvent::Init&& eventInit)
+ {
+ m_frame->document()->enqueueSecurityPolicyViolationEvent(WTFMove(eventInit));
+diff --git a/Source/WebCore/loader/PingLoader.cpp b/Source/WebCore/loader/PingLoader.cpp
+new file mode 100644
+index 0000000000..134e5560e6
+--- /dev/null
++++ b/Source/WebCore/loader/PingLoader.cpp
+@@ -0,0 +1,218 @@
++/*
++ * Copyright (C) 2010 Google Inc. All rights reserved.
++ * Copyright (C) 2015 Roopesh Chander (roop@roopc.net)
++ * Copyright (C) 2015-2017 Apple Inc. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are
++ * met:
++ *
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following disclaimer
++ * in the documentation and/or other materials provided with the
++ * distribution.
++ * * Neither the name of Google Inc. nor the names of its
++ * contributors may be used to endorse or promote products derived from
++ * this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ */
++
++#include "config.h"
++#include "PingLoader.h"
++
++#include "ContentSecurityPolicy.h"
++#include "Document.h"
++#include "Frame.h"
++#include "FrameLoader.h"
++#include "FrameLoaderClient.h"
++#include "InspectorInstrumentation.h"
++#include "LoaderStrategy.h"
++#include "NetworkLoadMetrics.h"
++#include "Page.h"
++#include "PlatformStrategies.h"
++#include "ProgressTracker.h"
++#include "ResourceHandle.h"
++#include "ResourceLoadInfo.h"
++#include "ResourceRequest.h"
++#include "ResourceResponse.h"
++#include "SecurityOrigin.h"
++#include "SecurityPolicy.h"
++#include "UserContentController.h"
++#include <wtf/text/CString.h>
++
++namespace WebCore {
++
++#if !ENABLE(CONTENT_EXTENSIONS)
++
++// Returns true if we should block the load.
++static inline bool processContentExtensionRulesForLoad(const Frame&, ResourceRequest&, ResourceType)
++{
++ return false;
++}
++
++#else
++
++// Returns true if we should block the load.
++static bool processContentExtensionRulesForLoad(const Frame& frame, ResourceRequest& request, ResourceType resourceType)
++{
++ auto* documentLoader = frame.loader().documentLoader();
++ if (!documentLoader)
++ return false;
++ auto* page = frame.page();
++ if (!page)
++ return false;
++ auto status = page->userContentProvider().processContentExtensionRulesForLoad(request.url(), resourceType, *documentLoader);
++ applyBlockedStatusToRequest(status, page, request);
++ return status.blockedLoad;
++}
++
++#endif
++
++void PingLoader::loadImage(Frame& frame, const URL& url)
++{
++ ASSERT(frame.document());
++ auto& document = *frame.document();
++
++ if (!document.securityOrigin().canDisplay(url)) {
++ FrameLoader::reportLocalLoadFailed(&frame, url);
++ return;
++ }
++
++ ResourceRequest request(url);
++ if (processContentExtensionRulesForLoad(frame, request, ResourceType::Image))
++ return;
++
++ document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
++
++ request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
++
++ HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
++
++ String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), request.url(), frame.loader().outgoingReferrer());
++ if (!referrer.isEmpty())
++ request.setHTTPReferrer(referrer);
++ frame.loader().addExtraFieldsToSubresourceRequest(request);
++
++ startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
++}
++
++// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing
++void PingLoader::sendPing(Frame& frame, const URL& pingURL, const URL& destinationURL)
++{
++ ASSERT(frame.document());
++
++ if (!pingURL.protocolIsInHTTPFamily())
++ return;
++
++ ResourceRequest request(pingURL);
++ if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
++ return;
++
++ auto& document = *frame.document();
++ document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
++
++ request.setHTTPMethod("POST");
++ request.setHTTPContentType("text/ping");
++ request.setHTTPBody(FormData::create("PING"));
++ request.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
++
++ HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
++
++ frame.loader().addExtraFieldsToSubresourceRequest(request);
++
++ auto& sourceOrigin = document.securityOrigin();
++ FrameLoader::addHTTPOriginIfNeeded(request, sourceOrigin.toString());
++ request.setHTTPHeaderField(HTTPHeaderName::PingTo, destinationURL);
++ if (!SecurityPolicy::shouldHideReferrer(pingURL, frame.loader().outgoingReferrer())) {
++ request.setHTTPHeaderField(HTTPHeaderName::PingFrom, document.url());
++ if (!sourceOrigin.isSameSchemeHostPort(SecurityOrigin::create(pingURL).get())) {
++ String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), pingURL, frame.loader().outgoingReferrer());
++ if (!referrer.isEmpty())
++ request.setHTTPReferrer(referrer);
++ }
++ }
++
++ startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::Yes);
++}
++
++void PingLoader::sendViolationReport(Frame& frame, const URL& reportURL, Ref<FormData>&& report, ViolationReportType reportType)
++{
++ ASSERT(frame.document());
++
++ ResourceRequest request(reportURL);
++ if (processContentExtensionRulesForLoad(frame, request, ResourceType::Raw))
++ return;
++
++ auto& document = *frame.document();
++ document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request, ContentSecurityPolicy::InsecureRequestType::Load);
++
++ request.setHTTPMethod("POST"_s);
++ request.setHTTPBody(WTFMove(report));
++ switch (reportType) {
++ case ViolationReportType::ContentSecurityPolicy:
++ request.setHTTPContentType("application/csp-report"_s);
++ break;
++ case ViolationReportType::XSSAuditor:
++ request.setHTTPContentType("application/json"_s);
++ break;
++ }
++
++ bool removeCookies = true;
++ if (document.securityOrigin().isSameSchemeHostPort(SecurityOrigin::create(reportURL).get()))
++ removeCookies = false;
++ if (removeCookies)
++ request.setAllowCookies(false);
++
++ HTTPHeaderMap originalRequestHeader = request.httpHeaderFields();
++
++ frame.loader().addExtraFieldsToSubresourceRequest(request);
++
++ String referrer = SecurityPolicy::generateReferrerHeader(document.referrerPolicy(), reportURL, frame.loader().outgoingReferrer());
++ if (!referrer.isEmpty())
++ request.setHTTPReferrer(referrer);
++
++ startPingLoad(frame, request, WTFMove(originalRequestHeader), ShouldFollowRedirects::No);
++}
++
++void PingLoader::startPingLoad(Frame& frame, ResourceRequest& request, HTTPHeaderMap&& originalRequestHeaders, ShouldFollowRedirects shouldFollowRedirects)
++{
++ unsigned long identifier = frame.page()->progress().createUniqueIdentifier();
++ // FIXME: Why activeDocumentLoader? I would have expected documentLoader().
++ // It seems like the PingLoader should be associated with the current
++ // Document in the Frame, but the activeDocumentLoader will be associated
++ // with the provisional DocumentLoader if there is a provisional
++ // DocumentLoader.
++ bool shouldUseCredentialStorage = frame.loader().client().shouldUseCredentialStorage(frame.loader().activeDocumentLoader(), identifier);
++ FetchOptions options;
++ options.credentials = shouldUseCredentialStorage ? FetchOptions::Credentials::Include : FetchOptions::Credentials::Omit;
++ options.redirect = shouldFollowRedirects == ShouldFollowRedirects::Yes ? FetchOptions::Redirect::Follow : FetchOptions::Redirect::Error;
++
++ // FIXME: Move ping loads to normal subresource loading to get normal inspector request instrumentation hooks.
++ InspectorInstrumentation::willSendRequestOfType(&frame, identifier, frame.loader().activeDocumentLoader(), request, InspectorInstrumentation::LoadType::Ping);
++
++ platformStrategies()->loaderStrategy()->startPingLoad(frame, request, WTFMove(originalRequestHeaders), options, [protectedFrame = makeRef(frame), identifier] (const ResourceError& error, const ResourceResponse& response) {
++ if (!response.isNull())
++ InspectorInstrumentation::didReceiveResourceResponse(protectedFrame, identifier, protectedFrame->loader().activeDocumentLoader(), response, nullptr);
++ if (error.isNull()) {
++ NetworkLoadMetrics emptyMetrics;
++ InspectorInstrumentation::didFinishLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, emptyMetrics, nullptr);
++ } else
++ InspectorInstrumentation::didFailLoading(protectedFrame.ptr(), protectedFrame->loader().activeDocumentLoader(), identifier, error);
++ });
++}
++
++}
+diff --git a/Source/WebCore/loader/PingLoader.h b/Source/WebCore/loader/PingLoader.h
+new file mode 100644
+index 0000000000..15489dcf04
+--- /dev/null
++++ b/Source/WebCore/loader/PingLoader.h
+@@ -0,0 +1,62 @@
++/*
++ * Copyright (C) 2010 Google Inc. All rights reserved.
++ * Copyright (C) 2017 Apple Inc. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are
++ * met:
++ *
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following disclaimer
++ * in the documentation and/or other materials provided with the
++ * distribution.
++ * * Neither the name of Google Inc. nor the names of its
++ * contributors may be used to endorse or promote products derived from
++ * this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ */
++
++#pragma once
++
++#include <wtf/Forward.h>
++#include <wtf/Ref.h>
++
++namespace WebCore {
++
++class FormData;
++class Frame;
++class HTTPHeaderMap;
++class URL;
++class ResourceRequest;
++
++enum class ViolationReportType {
++ ContentSecurityPolicy,
++ XSSAuditor,
++};
++
++class PingLoader {
++public:
++ static void loadImage(Frame&, const URL&);
++ static void sendPing(Frame&, const URL& pingURL, const URL& destinationURL);
++ WEBCORE_EXPORT static void sendViolationReport(Frame&, const URL& reportURL, Ref<FormData>&& report, ViolationReportType);
++
++private:
++ enum class ShouldFollowRedirects { No, Yes };
++ static void startPingLoad(Frame&, ResourceRequest&, HTTPHeaderMap&& originalRequestHeaders, ShouldFollowRedirects);
++};
++
++} // namespace WebCore
+diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+index 614cfee9b5..9d3d108113 100644
+--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
++++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+@@ -57,6 +57,7 @@
+ #include "Logging.h"
+ #include "MemoryCache.h"
+ #include "Page.h"
++#include "PingLoader.h"
+ #include "PlatformStrategies.h"
+ #include "RenderElement.h"
+ #include "ResourceLoadInfo.h"
+@@ -201,6 +202,8 @@ ResourceErrorOr<CachedResourceHandle<CachedImage>> CachedResourceLoader::request
+ if (Document* document = frame->document())
+ request.upgradeInsecureRequestIfNeeded(*document);
+ URL requestURL = request.resourceRequest().url();
++ if (requestURL.isValid() && canRequest(CachedResource::Type::ImageResource, requestURL, request, ForPreload::No))
++ PingLoader::loadImage(*frame, requestURL);
+ return CachedResourceHandle<CachedImage> { };
+ }
+ }
+diff --git a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+index f1b1b51da1..9b966fa02b 100644
+--- a/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
++++ b/Source/WebCore/page/csp/ContentSecurityPolicy.cpp
+@@ -45,6 +45,7 @@
+ #include "JSExecState.h"
+ #include "JSWindowProxy.h"
+ #include "ParsingUtilities.h"
++#include "PingLoader.h"
+ #include "ResourceRequest.h"
+ #include "RuntimeEnabledFeatures.h"
+ #include "SchemeRegistry.h"
+@@ -758,6 +759,10 @@ void ContentSecurityPolicy::reportViolation(const String& effectiveViolatedDirec
+ if (m_client) {
+ for (const auto& url : reportURIs)
+ m_client->sendCSPViolationReport(URL { m_protectedURL, url }, report.copyRef());
++ } else {
++ auto& document = downcast<Document>(*m_scriptExecutionContext);
++ for (const auto& url : reportURIs)
++ PingLoader::sendViolationReport(*document.frame(), URL { m_protectedURL, url }, report.copyRef(), ViolationReportType::ContentSecurityPolicy);
+ }
+ }
+
+diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+index e161de3599..5de12b10cc 100644
+--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp
++++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+@@ -181,6 +181,7 @@
+ #include <WebCore/NotImplemented.h>
+ #include <WebCore/Page.h>
+ #include <WebCore/PageConfiguration.h>
++#include <WebCore/PingLoader.h>
+ #include <WebCore/PlatformKeyboardEvent.h>
+ #include <WebCore/PluginDocument.h>
+ #include <WebCore/PrintContext.h>
+@@ -3358,6 +3359,8 @@ void WebPage::sendCSPViolationReport(uint64_t frameID, const WebCore::URL& repor
+ auto report = reportData.takeData();
+ if (!report)
+ return;
++ if (auto* frame = WebProcess::singleton().webFrame(frameID))
++ PingLoader::sendViolationReport(*frame->coreFrame(), reportURL, report.releaseNonNull(), ViolationReportType::ContentSecurityPolicy);
+ }
+
+ void WebPage::enqueueSecurityPolicyViolationEvent(uint64_t frameID, SecurityPolicyViolationEvent::Init&& eventInit)
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.22.6/0008-WebCore-html-ImageDocument.cpp-Enhance-Image-Viewer.patch b/patches/net-libs/webkit-gtk-2.22.6/0008-WebCore-html-ImageDocument.cpp-Enhance-Image-Viewer.patch
@@ -0,0 +1,69 @@
+From 577a193afca81b7c367e84737efd39901f0cb136 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Wed, 13 Mar 2019 07:55:17 +0100
+Subject: [PATCH 8/8] WebCore/html/ImageDocument.cpp: Enhance Image Viewer
+
+The following chances allows to center the image when viewed and avoids
+setting the now useless width/height attributes.
+---
+ Source/WebCore/html/ImageDocument.cpp | 24 ++++++++++--------------
+ 1 file changed, 10 insertions(+), 14 deletions(-)
+
+diff --git a/Source/WebCore/html/ImageDocument.cpp b/Source/WebCore/html/ImageDocument.cpp
+index 0518ff867d..cd2a0c67aa 100644
+--- a/Source/WebCore/html/ImageDocument.cpp
++++ b/Source/WebCore/html/ImageDocument.cpp
+@@ -226,16 +226,17 @@ void ImageDocument::createDocumentStructure()
+ rootElement->appendChild(head);
+
+ auto body = HTMLBodyElement::create(*this);
+- body->setAttribute(styleAttr, "margin: 0px");
++ body->setAttribute(styleAttr, "margin: 0; display: flex;");
+ if (MIMETypeRegistry::isPDFMIMEType(document().loader()->responseMIMEType()))
+ body->setInlineStyleProperty(CSSPropertyBackgroundColor, "white");
+ rootElement->appendChild(body);
+
+ auto imageElement = ImageDocumentElement::create(*this);
+- if (m_shouldShrinkImage)
+- imageElement->setAttribute(styleAttr, "-webkit-user-select:none; display:block; margin:auto;");
+- else
+- imageElement->setAttribute(styleAttr, "-webkit-user-select:none;");
++ //imageElement->setAttribute(styleAttr, "-webkit-user-select:none; display:block; margin:auto; object-fit:contain;");
++ imageElement->setInlineStyleProperty(CSSPropertyWebkitUserSelect, "none");
++ imageElement->setInlineStyleProperty(CSSPropertyDisplay, "block");
++ imageElement->setInlineStyleProperty(CSSPropertyMargin, "auto");
++ imageElement->setInlineStyleProperty(CSSPropertyObjectFit, "contain");
+ imageElement->setLoadManually(true);
+ imageElement->setSrc(url().string());
+ imageElement->cachedImage()->setResponse(loader()->response());
+@@ -307,13 +308,9 @@ void ImageDocument::resizeImageToFit()
+ if (!m_imageElement)
+ return;
+
+- LayoutSize imageSize = this->imageSize();
+-
+- float scale = this->scale();
+- m_imageElement->setWidth(static_cast<int>(imageSize.width() * scale));
+- m_imageElement->setHeight(static_cast<int>(imageSize.height() * scale));
+-
+ m_imageElement->setInlineStyleProperty(CSSPropertyCursor, CSSValueZoomIn);
++ m_imageElement->setInlineStyleProperty(CSSPropertyMaxWidth, "100%");
++ m_imageElement->setInlineStyleProperty(CSSPropertyMaxHeight, "100%");
+ }
+
+ void ImageDocument::restoreImageSize()
+@@ -321,9 +318,8 @@ void ImageDocument::restoreImageSize()
+ if (!m_imageElement || !m_imageSizeIsKnown)
+ return;
+
+- LayoutSize imageSize = this->imageSize();
+- m_imageElement->setWidth(imageSize.width().toUnsigned());
+- m_imageElement->setHeight(imageSize.height().toUnsigned());
++ m_imageElement->removeInlineStyleProperty(CSSPropertyMaxWidth);
++ m_imageElement->removeInlineStyleProperty(CSSPropertyMaxHeight);
+
+ if (imageFitsInWindow())
+ m_imageElement->removeInlineStyleProperty(CSSPropertyCursor);
+--
+2.19.2
+
diff --git a/patches/net-libs/webkit-gtk-2.24.0/fix_textcodec_snprintf.patch b/patches/net-libs/webkit-gtk-2.24.0/fix_textcodec_snprintf.patch
@@ -0,0 +1,12 @@
+diff --git a/var/tmp/portage/net-libs/webkit-gtk-2.24.0/work/webkitgtk-2.24.0/Source/WebCore/platform/text/TextCodec.cpp.old b/var/tmp/portage/net-libs/webkit-gtk-2.24.0/work/webkitgtk-2.24.0/Source/WebCore/platform/text/TextCodec.cpp
+index 86b89cf..4be00ce 100644
+--- a/Source/WebCore/platform/text/TextCodec.cpp
++++ b/Source/WebCore/platform/text/TextCodec.cpp
+@@ -28,6 +28,7 @@
+ #include "TextCodec.h"
+
+ #include <array>
++#include <stdio.h>
+
+ namespace WebCore {
+
diff --git a/patches/net-libs/webkit-gtk-2.24.1/0001-TextCodec.cpp-Fix-snprintf.patch b/patches/net-libs/webkit-gtk-2.24.1/0001-TextCodec.cpp-Fix-snprintf.patch
@@ -0,0 +1,24 @@
+From 968941cb7388aca44881a5b88ee9c52fd9d1c0b3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 5 Apr 2019 04:08:33 +0200
+Subject: [PATCH] TextCodec.cpp: Fix snprintf
+
+---
+ Source/WebCore/platform/text/TextCodec.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/text/TextCodec.cpp b/Source/WebCore/platform/text/TextCodec.cpp
+index 86b89cfc4..4be00cee1 100644
+--- a/Source/WebCore/platform/text/TextCodec.cpp
++++ b/Source/WebCore/platform/text/TextCodec.cpp
+@@ -28,6 +28,7 @@
+ #include "TextCodec.h"
+
+ #include <array>
++#include <stdio.h>
+
+ namespace WebCore {
+
+--
+2.21.0
+
diff --git a/patches/net-libs/webkit-gtk-2.24.2/0001-TextCodec.cpp-Fix-snprintf.patch b/patches/net-libs/webkit-gtk-2.24.2/0001-TextCodec.cpp-Fix-snprintf.patch
@@ -0,0 +1,24 @@
+From 968941cb7388aca44881a5b88ee9c52fd9d1c0b3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 5 Apr 2019 04:08:33 +0200
+Subject: [PATCH] TextCodec.cpp: Fix snprintf
+
+---
+ Source/WebCore/platform/text/TextCodec.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/text/TextCodec.cpp b/Source/WebCore/platform/text/TextCodec.cpp
+index 86b89cfc4..4be00cee1 100644
+--- a/Source/WebCore/platform/text/TextCodec.cpp
++++ b/Source/WebCore/platform/text/TextCodec.cpp
+@@ -28,6 +28,7 @@
+ #include "TextCodec.h"
+
+ #include <array>
++#include <stdio.h>
+
+ namespace WebCore {
+
+--
+2.21.0
+
diff --git a/patches/net-libs/webkit-gtk-2.24.2/webkit-gtk-2.24.3-fix-glib-crash-js-object.patch b/patches/net-libs/webkit-gtk-2.24.2/webkit-gtk-2.24.3-fix-glib-crash-js-object.patch
@@ -0,0 +1,191 @@
+Index: trunk/Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp
+===================================================================
+--- trunk/Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp (revision 245513)
++++ trunk/Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp (revision 245514)
+@@ -208,5 +208,5 @@
+ case G_TYPE_OBJECT:
+ if (auto* ptr = returnValue.data[0].v_pointer)
+- return toRef(jscClassGetOrCreateJSWrapper(m_class.get(), ptr));
++ return toRef(jscClassGetOrCreateJSWrapper(m_class.get(), context.get(), ptr));
+ *exception = toRef(JSC::createTypeError(toJS(jsContext), "constructor returned null"_s));
+ break;
+Index: trunk/Source/JavaScriptCore/API/glib/JSCClass.cpp
+===================================================================
+--- trunk/Source/JavaScriptCore/API/glib/JSCClass.cpp (revision 245513)
++++ trunk/Source/JavaScriptCore/API/glib/JSCClass.cpp (revision 245514)
+@@ -57,5 +57,5 @@
+
+ typedef struct _JSCClassPrivate {
+- JSCContext* context;
++ JSGlobalContextRef context;
+ CString name;
+ JSClassRef jsClass;
+@@ -64,5 +64,4 @@
+ JSCClass* parentClass;
+ JSC::Weak<JSC::JSObject> prototype;
+- HashMap<CString, JSC::Weak<JSC::JSObject>> constructors;
+ } JSCClassPrivate;
+
+@@ -284,7 +283,4 @@
+
+ switch (propID) {
+- case PROP_CONTEXT:
+- g_value_set_object(value, jscClass->priv->context);
+- break;
+ case PROP_NAME:
+ g_value_set_string(value, jscClass->priv->name.data());
+@@ -304,5 +300,5 @@
+ switch (propID) {
+ case PROP_CONTEXT:
+- jscClass->priv->context = JSC_CONTEXT(g_value_get_object(value));
++ jscClass->priv->context = jscContextGetJSContext(JSC_CONTEXT(g_value_get_object(value)));
+ break;
+ case PROP_NAME:
+@@ -348,5 +344,5 @@
+ "JSC Context",
+ JSC_TYPE_CONTEXT,
+- static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
++ static_cast<GParamFlags>(WEBKIT_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+@@ -493,9 +489,9 @@
+ prototypeDefinition.className = prototypeName.get();
+ JSClassRef prototypeClass = JSClassCreate(&prototypeDefinition);
+- priv->prototype = jscContextGetOrCreateJSWrapper(priv->context, prototypeClass);
++ priv->prototype = jscContextGetOrCreateJSWrapper(context, prototypeClass);
+ JSClassRelease(prototypeClass);
+
+ if (priv->parentClass)
+- JSObjectSetPrototype(jscContextGetJSContext(priv->context), toRef(priv->prototype.get()), toRef(priv->parentClass->priv->prototype.get()));
++ JSObjectSetPrototype(jscContextGetJSContext(context), toRef(priv->prototype.get()), toRef(priv->parentClass->priv->prototype.get()));
+ return jscClass;
+ }
+@@ -506,14 +502,14 @@
+ }
+
+-JSC::JSObject* jscClassGetOrCreateJSWrapper(JSCClass* jscClass, gpointer wrappedObject)
++JSC::JSObject* jscClassGetOrCreateJSWrapper(JSCClass* jscClass, JSCContext* context, gpointer wrappedObject)
+ {
+ JSCClassPrivate* priv = jscClass->priv;
+- return jscContextGetOrCreateJSWrapper(priv->context, priv->jsClass, toRef(priv->prototype.get()), wrappedObject, priv->destroyFunction);
+-}
+-
+-JSGlobalContextRef jscClassCreateContextWithJSWrapper(JSCClass* jscClass, gpointer wrappedObject)
++ return jscContextGetOrCreateJSWrapper(context, priv->jsClass, toRef(priv->prototype.get()), wrappedObject, priv->destroyFunction);
++}
++
++JSGlobalContextRef jscClassCreateContextWithJSWrapper(JSCClass* jscClass, JSCContext* context, gpointer wrappedObject)
+ {
+ JSCClassPrivate* priv = jscClass->priv;
+- return jscContextCreateContextWithJSWrapper(priv->context, priv->jsClass, toRef(priv->prototype.get()), wrappedObject, priv->destroyFunction);
++ return jscContextCreateContextWithJSWrapper(context, priv->jsClass, toRef(priv->prototype.get()), wrappedObject, priv->destroyFunction);
+ }
+
+@@ -563,15 +559,15 @@
+ closure = adoptGRef(g_cclosure_new(callback, userData, reinterpret_cast<GClosureNotify>(reinterpret_cast<GCallback>(destroyNotify))));
+ JSCClassPrivate* priv = jscClass->priv;
+- JSC::ExecState* exec = toJS(jscContextGetJSContext(priv->context));
++ JSC::ExecState* exec = toJS(priv->context);
+ JSC::VM& vm = exec->vm();
+ JSC::JSLockHolder locker(vm);
+ auto* functionObject = JSC::JSCCallbackFunction::create(vm, exec->lexicalGlobalObject(), String::fromUTF8(name),
+ JSC::JSCCallbackFunction::Type::Constructor, jscClass, WTFMove(closure), returnType, WTFMove(parameters));
+- auto constructor = jscContextGetOrCreateValue(priv->context, toRef(functionObject));
+- GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(priv->context, toRef(priv->prototype.get()));
++ auto context = jscContextGetOrCreate(priv->context);
++ auto constructor = jscContextGetOrCreateValue(context.get(), toRef(functionObject));
++ GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(context.get(), toRef(priv->prototype.get()));
+ auto nonEnumerable = static_cast<JSCValuePropertyFlags>(JSC_VALUE_PROPERTY_CONFIGURABLE | JSC_VALUE_PROPERTY_WRITABLE);
+ jsc_value_object_define_property_data(constructor.get(), "prototype", nonEnumerable, prototype.get());
+ jsc_value_object_define_property_data(prototype.get(), "constructor", nonEnumerable, constructor.get());
+- priv->constructors.set(name, functionObject);
+ return constructor;
+ }
+@@ -712,11 +708,12 @@
+ JSCClassPrivate* priv = jscClass->priv;
+ GRefPtr<GClosure> closure = adoptGRef(g_cclosure_new(callback, userData, reinterpret_cast<GClosureNotify>(reinterpret_cast<GCallback>(destroyNotify))));
+- JSC::ExecState* exec = toJS(jscContextGetJSContext(priv->context));
++ JSC::ExecState* exec = toJS(priv->context);
+ JSC::VM& vm = exec->vm();
+ JSC::JSLockHolder locker(vm);
+ auto* functionObject = toRef(JSC::JSCCallbackFunction::create(vm, exec->lexicalGlobalObject(), String::fromUTF8(name),
+ JSC::JSCCallbackFunction::Type::Method, jscClass, WTFMove(closure), returnType, WTFMove(parameters)));
+- auto method = jscContextGetOrCreateValue(priv->context, functionObject);
+- GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(priv->context, toRef(priv->prototype.get()));
++ auto context = jscContextGetOrCreate(priv->context);
++ auto method = jscContextGetOrCreateValue(context.get(), functionObject);
++ GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(context.get(), toRef(priv->prototype.get()));
+ auto nonEnumerable = static_cast<JSCValuePropertyFlags>(JSC_VALUE_PROPERTY_CONFIGURABLE | JSC_VALUE_PROPERTY_WRITABLE);
+ jsc_value_object_define_property_data(prototype.get(), name, nonEnumerable, method.get());
+@@ -863,5 +860,6 @@
+ g_return_if_fail(priv->context);
+
+- GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(priv->context, toRef(priv->prototype.get()));
++ auto context = jscContextGetOrCreate(priv->context);
++ GRefPtr<JSCValue> prototype = jscContextGetOrCreateValue(context.get(), toRef(priv->prototype.get()));
+ jsc_value_object_define_property_accessor(prototype.get(), name, JSC_VALUE_PROPERTY_CONFIGURABLE, propertyType, getter, setter, userData, destroyNotify);
+ }
+Index: trunk/Source/JavaScriptCore/API/glib/JSCClassPrivate.h
+===================================================================
+--- trunk/Source/JavaScriptCore/API/glib/JSCClassPrivate.h (revision 245513)
++++ trunk/Source/JavaScriptCore/API/glib/JSCClassPrivate.h (revision 245514)
+@@ -28,5 +28,5 @@
+ GRefPtr<JSCClass> jscClassCreate(JSCContext*, const char*, JSCClass*, JSCClassVTable*, GDestroyNotify);
+ JSClassRef jscClassGetJSClass(JSCClass*);
+-JSC::JSObject* jscClassGetOrCreateJSWrapper(JSCClass*, gpointer);
+-JSGlobalContextRef jscClassCreateContextWithJSWrapper(JSCClass*, gpointer);
++JSC::JSObject* jscClassGetOrCreateJSWrapper(JSCClass*, JSCContext*, gpointer);
++JSGlobalContextRef jscClassCreateContextWithJSWrapper(JSCClass*, JSCContext*, gpointer);
+ void jscClassInvalidate(JSCClass*);
+Index: trunk/Source/JavaScriptCore/API/glib/JSCContext.cpp
+===================================================================
+--- trunk/Source/JavaScriptCore/API/glib/JSCContext.cpp (revision 245513)
++++ trunk/Source/JavaScriptCore/API/glib/JSCContext.cpp (revision 245514)
+@@ -879,5 +879,5 @@
+
+ JSRetainPtr<JSGlobalContextRef> objectContext(Adopt,
+- instance ? jscClassCreateContextWithJSWrapper(objectClass, instance) : JSGlobalContextCreateInGroup(jscVirtualMachineGetContextGroup(context->priv->vm.get()), nullptr));
++ instance ? jscClassCreateContextWithJSWrapper(objectClass, context, instance) : JSGlobalContextCreateInGroup(jscVirtualMachineGetContextGroup(context->priv->vm.get()), nullptr));
+ JSC::ExecState* exec = toJS(objectContext.get());
+ JSC::VM& vm = exec->vm();
+Index: trunk/Source/JavaScriptCore/API/glib/JSCValue.cpp
+===================================================================
+--- trunk/Source/JavaScriptCore/API/glib/JSCValue.cpp (revision 245513)
++++ trunk/Source/JavaScriptCore/API/glib/JSCValue.cpp (revision 245514)
+@@ -603,5 +603,5 @@
+ g_return_val_if_fail(!instance || JSC_IS_CLASS(jscClass), nullptr);
+
+- return jscContextGetOrCreateValue(context, instance ? toRef(jscClassGetOrCreateJSWrapper(jscClass, instance)) : JSObjectMake(jscContextGetJSContext(context), nullptr, nullptr)).leakRef();
++ return jscContextGetOrCreateValue(context, instance ? toRef(jscClassGetOrCreateJSWrapper(jscClass, context, instance)) : JSObjectMake(jscContextGetJSContext(context), nullptr, nullptr)).leakRef();
+ }
+
+Index: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp
+===================================================================
+--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp (revision 245513)
++++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp (revision 245514)
+@@ -180,4 +180,11 @@
+ GUniquePtr<char> valueString(WebViewTest::javascriptResultToCString(javascriptResult));
+ g_assert_cmpstr(valueString.get(), ==, "Foo");
++
++ javascriptResult = test->runJavaScriptAndWaitUntilFinished("var f = new GFile('.'); f.path();", &error.outPtr());
++ g_assert_nonnull(javascriptResult);
++ g_assert_no_error(error.get());
++ valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult));
++ GUniquePtr<char> currentDirectory(g_get_current_dir());
++ g_assert_cmpstr(valueString.get(), ==, currentDirectory.get());
+ }
+
+Index: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp
+===================================================================
+--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp (revision 245513)
++++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp (revision 245514)
+@@ -428,4 +428,9 @@
+ GRefPtr<JSCValue> function = adoptGRef(jsc_value_new_function(jsContext.get(), "echo", G_CALLBACK(echoCallback), NULL, NULL, G_TYPE_STRING, 1, G_TYPE_STRING));
+ jsc_context_set_value(jsContext.get(), "echo", function.get());
++
++ auto* fileClass = jsc_context_register_class(jsContext.get(), "GFile", nullptr, nullptr, static_cast<GDestroyNotify>(g_object_unref));
++ GRefPtr<JSCValue> constructor = adoptGRef(jsc_class_add_constructor(fileClass, "GFile", G_CALLBACK(g_file_new_for_path), nullptr, nullptr, G_TYPE_OBJECT, 1, G_TYPE_STRING));
++ jsc_class_add_method(fileClass, "path", G_CALLBACK(g_file_get_path), nullptr, nullptr, G_TYPE_STRING, 0, G_TYPE_NONE);
++ jsc_context_set_value(jsContext.get(), "GFile", constructor.get());
+ }
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0002-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch b/patches/net-libs/webkit-gtk-2.26.2/0002-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch
@@ -0,0 +1,55 @@
+From ae8bbb9f434b60643ce757ba02f5bc70f898016e Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 17:59:57 +0100
+Subject: [PATCH 02/14]
+ Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js: Remove %c
+ support in the console
+
+---
+ .../UserInterface/Views/ConsoleMessageView.js | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+index bbf8c38a2..839ad3011 100644
+--- a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
++++ b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+@@ -774,26 +774,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ }
+
+ var currentStyle = null;
+- function styleFormatter(obj)
+- {
+- currentStyle = {};
+- var buffer = document.createElement("span");
+- buffer.setAttribute("style", obj.description);
+- for (var i = 0; i < buffer.style.length; i++) {
+- var property = buffer.style[i];
+- if (isWhitelistedProperty(property))
+- currentStyle[property] = buffer.style[property];
+- }
+- }
+-
+- function isWhitelistedProperty(property)
+- {
+- for (var prefix of ["background", "border", "color", "font", "line", "margin", "padding", "text"]) {
+- if (property.startsWith(prefix) || property.startsWith("-webkit-" + prefix))
+- return true;
+- }
+- return false;
+- }
+
+ // Firebug uses %o for formatting objects.
+ var formatters = {};
+@@ -805,9 +785,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+- // Firebug uses %c for styling the message.
+- formatters.c = styleFormatter;
+-
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch b/patches/net-libs/webkit-gtk-2.26.2/0003-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch
@@ -0,0 +1,26 @@
+From d6550278f82b14c49724bd94c0472baa802bfce3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:09:22 +0100
+Subject: [PATCH 03/14] CMakeLists.txt: Explain which variable is used to
+ define a port if undefined
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9b5f7a782..6ead6bdcf 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -49,7 +49,7 @@ set(PORT "NOPORT" CACHE STRING "choose which WebKit port to build (one of ${ALL_
+
+ list(FIND ALL_PORTS ${PORT} RET)
+ if (${RET} EQUAL -1)
+- message(FATAL_ERROR "Please choose which WebKit port to build (one of ${ALL_PORTS})")
++ message(FATAL_ERROR "Please define a PORT to build with (one of ${ALL_PORTS})")
+ endif ()
+
+ string(TOLOWER ${PORT} WEBKIT_PORT_DIR)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch b/patches/net-libs/webkit-gtk-2.26.2/0004-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch
@@ -0,0 +1,25 @@
+From 37cab94ddd521ceb478f02ee81c2506bbf94f1a7 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:13:28 +0100
+Subject: [PATCH 04/14] Source/cmake/OptionsGTK.cmake: Add note on fixing CMake
+ defaults
+
+---
+ Source/cmake/OptionsGTK.cmake | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
+index 5f269e8b1..f9543f0e3 100644
+--- a/Source/cmake/OptionsGTK.cmake
++++ b/Source/cmake/OptionsGTK.cmake
+@@ -74,6 +74,7 @@ endif ()
+ # Public options specific to the GTK port. Do not add any options here unless
+ # there is a strong reason we should support changing the value of the option,
+ # and the option is not relevant to any other WebKit ports.
++# XXX: Do not default to optionnal stuff like USE_LIBSECRET to REQUIRED
+ WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC ${ENABLE_GLES2_DEFAULT})
+ WEBKIT_OPTION_DEFINE(ENABLE_GTKDOC "Whether or not to use generate gtkdoc." PUBLIC OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_INTROSPECTION "Whether to enable GObject introspection." PUBLIC ON)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0009-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch b/patches/net-libs/webkit-gtk-2.26.2/0009-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch
@@ -0,0 +1,26 @@
+From 1a56dc3d541fa01107f803350b09150e6960e95a Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Thu, 20 Jun 2019 23:31:40 +0200
+Subject: [PATCH 09/14] WebKitWebViewGtk.cpp: Allow the user to override the
+ advertised MIME filter
+
+---
+ Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+index af71e3b4d..55113c264 100644
+--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
++++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+@@ -79,7 +79,7 @@ gboolean webkitWebViewRunFileChooser(WebKitWebView* webView, WebKitFileChooserRe
+ gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), TRUE);
+
+ if (GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request))
+- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
++ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), allowsMultipleSelection);
+
+ if (const gchar* const* selectedFiles = webkit_file_chooser_request_get_selected_files(request))
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0011-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch b/patches/net-libs/webkit-gtk-2.26.2/0011-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch
@@ -0,0 +1,38 @@
+From 803634b6b013235898f47daa4020128cbb57ee4a Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 29 Jul 2019 16:41:43 +0200
+Subject: [PATCH 11/14] ProcessLauncher::launchProcess: Do not g_error() on me
+
+---
+ .../UIProcess/Launcher/glib/ProcessLauncherGLib.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+index da8ff67fe..06cf973ff 100644
+--- a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
++++ b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+@@ -33,6 +33,7 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <glib.h>
++#include <glib/gprintf.h>
+ #include <wtf/FileSystem.h>
+ #include <wtf/RunLoop.h>
+ #include <wtf/UniStdExtras.h>
+@@ -167,8 +168,11 @@ void ProcessLauncher::launchProcess()
+ #endif
+ process = adoptGRef(g_subprocess_launcher_spawnv(launcher.get(), argv, &error.outPtr()));
+
+- if (!process.get())
+- g_error("Unable to fork a new child process: %s", error->message);
++ if (!process.get()) {
++ g_fprintf(stderr, "WebKit: Unable to fork a new child process: %s", error->message);
++ //TODO: try to clean before returning
++ return;
++ }
+
+ const char* processIdStr = g_subprocess_get_identifier(process.get());
+ m_processIdentifier = g_ascii_strtoll(processIdStr, nullptr, 0);
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0013-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch b/patches/net-libs/webkit-gtk-2.26.2/0013-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch
@@ -0,0 +1,24 @@
+From 00ef6a74df92d31c2947d406a3ed3361f2166172 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 16 Dec 2019 19:24:28 +0100
+Subject: [PATCH 13/14] GStreamerRegistryScanner.cpp: register audio/x-mod
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index 84870ccc9..f69415a9a 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -204,6 +204,7 @@ void GStreamerRegistryScanner::initialize()
+ {AudioDecoder, "audio/x-sid", { }, { }},
+ {AudioDecoder, "audio/x-speex", {"audio/speex", "audio/x-speex"}, { }},
+ {AudioDecoder, "audio/x-wavpack", {"audio/x-wavpack"}, { }},
++ {AudioDecoder, "audio/x-mod", {"audio/x-mod"}, { }},
+ {VideoDecoder, "video/mpeg, mpegversion=(int){1,2}, systemstream=(boolean)false", {"video/mpeg"}, {"mpeg"}},
+ {VideoDecoder, "video/mpegts", { }, { }},
+ {VideoDecoder, "video/x-dirac", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.2/0014-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch b/patches/net-libs/webkit-gtk-2.26.2/0014-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch
@@ -0,0 +1,24 @@
+From 9dbdfaedbc2e1d67b0c4a9102151947bdeb2d9ff Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 6 Jan 2020 04:22:46 +0100
+Subject: [PATCH 14/14] GStreamerRegistryScanner.cpp: Add MPEG-DASH support
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index f69415a9a..7d06be495 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -213,6 +213,7 @@ void GStreamerRegistryScanner::initialize()
+ {VideoDecoder, "video/x-msvideocodec", {"video/x-msvideo"}, { }},
+ {Demuxer, "application/vnd.rn-realmedia", { }, { }},
+ {Demuxer, "application/x-3gp", { }, { }},
++ {Demuxer, "application/x-dash", {"application/dash+xml"}, { }},
+ {Demuxer, "application/x-hls", {"application/vnd.apple.mpegurl", "application/x-mpegurl"}, { }},
+ {Demuxer, "application/x-pn-realaudio", { }, { }},
+ {Demuxer, "audio/x-aiff", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0001-Fixes-for-musl.patch b/patches/net-libs/webkit-gtk-2.26.3/0001-Fixes-for-musl.patch
@@ -0,0 +1,165 @@
+From f9b0ff92a9c173e2b73f2cb897153b31e46e0276 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 28 Jan 2020 18:34:42 +0100
+Subject: [PATCH 01/15] Fixes for musl
+
+Grabbed from CarbsLinux
+
+Original upstream: Alpine Linux
+
+Source: @q66, @pullmoll
+Original upstream: Alpine Linux
+Reason: fixing machine context access for musl libc; reduce stack/heap usage for jsc; fix some overly restrictive __GLIBC__ checks
+
+Updated for latest webkit2gtk.
+---
+ Source/JavaScriptCore/runtime/MachineContext.h | 10 +++++-----
+ Source/JavaScriptCore/runtime/Options.h | 16 +++++++++++++---
+ .../compiler/preprocessor/ExpressionParser.cpp | 4 ++--
+ Source/WTF/wtf/Platform.h | 2 +-
+ Source/WebCore/xml/XPathGrammar.cpp | 4 ++--
+ 5 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/Source/JavaScriptCore/runtime/MachineContext.h b/Source/JavaScriptCore/runtime/MachineContext.h
+index 823964c2..e8062952 100644
+--- a/Source/JavaScriptCore/runtime/MachineContext.h
++++ b/Source/JavaScriptCore/runtime/MachineContext.h
+@@ -188,7 +188,7 @@ static inline void*& stackPointerImpl(mcontext_t& machineContext)
+ #error Unknown Architecture
+ #endif
+
+-#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
++#elif OS(FUCHSIA) || defined(__linux__)
+
+ #if CPU(X86)
+ return reinterpret_cast<void*&>((uintptr_t&) machineContext.gregs[REG_ESP]);
+@@ -335,7 +335,7 @@ static inline void*& framePointerImpl(mcontext_t& machineContext)
+ #error Unknown Architecture
+ #endif
+
+-#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
++#elif OS(FUCHSIA) || defined(__linux__)
+
+ // The following sequence depends on glibc's sys/ucontext.h.
+ #if CPU(X86)
+@@ -482,7 +482,7 @@ static inline void*& instructionPointerImpl(mcontext_t& machineContext)
+ #error Unknown Architecture
+ #endif
+
+-#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
++#elif OS(FUCHSIA) || defined(__linux__)
+
+ // The following sequence depends on glibc's sys/ucontext.h.
+ #if CPU(X86)
+@@ -639,7 +639,7 @@ inline void*& argumentPointer<1>(mcontext_t& machineContext)
+ #error Unknown Architecture
+ #endif
+
+-#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
++#elif OS(FUCHSIA) || defined(__linux__)
+
+ // The following sequence depends on glibc's sys/ucontext.h.
+ #if CPU(X86)
+@@ -756,7 +756,7 @@ inline void*& llintInstructionPointer(mcontext_t& machineContext)
+ #error Unknown Architecture
+ #endif
+
+-#elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
++#elif OS(FUCHSIA) || defined(__linux__)
+
+ // The following sequence depends on glibc's sys/ucontext.h.
+ #if CPU(X86)
+diff --git a/Source/JavaScriptCore/runtime/Options.h b/Source/JavaScriptCore/runtime/Options.h
+index 44fbc30c..271e0652 100644
+--- a/Source/JavaScriptCore/runtime/Options.h
++++ b/Source/JavaScriptCore/runtime/Options.h
+@@ -112,6 +112,16 @@ constexpr bool enableWebAssemblyStreamingApi = true;
+ constexpr bool enableWebAssemblyStreamingApi = false;
+ #endif
+
++#if defined(__GLIBC__)
++constexpr unsigned jscMaxPerThreadStack = 4 * MB;
++constexpr unsigned jscSoftReservedZoneSize = 128 * KB;
++constexpr unsigned jscReservedZoneSize = 64 * KB;
++#else
++constexpr unsigned jscMaxPerThreadStack = 80 * KB;
++constexpr unsigned jscSoftReservedZoneSize = 32 * KB;
++constexpr unsigned jscReservedZoneSize = 16 * KB;
++#endif
++
+ #define JSC_OPTIONS(v) \
+ v(bool, useKernTCSM, true, Normal, "Note: this needs to go before other options since they depend on this value.") \
+ v(bool, validateOptions, false, Normal, "crashes if mis-typed JSC options were passed to the VM") \
+@@ -127,9 +137,9 @@ constexpr bool enableWebAssemblyStreamingApi = false;
+ \
+ v(bool, reportMustSucceedExecutableAllocations, false, Normal, nullptr) \
+ \
+- v(unsigned, maxPerThreadStackUsage, 4 * MB, Normal, "Max allowed stack usage by the VM") \
+- v(unsigned, softReservedZoneSize, 128 * KB, Normal, "A buffer greater than reservedZoneSize that reserves space for stringifying exceptions.") \
+- v(unsigned, reservedZoneSize, 64 * KB, Normal, "The amount of stack space we guarantee to our clients (and to interal VM code that does not call out to clients).") \
++ v(unsigned, maxPerThreadStackUsage, jscMaxPerThreadStack, Normal, "Max allowed stack usage by the VM") \
++ v(unsigned, softReservedZoneSize, jscSoftReservedZoneSize, Normal, "A buffer greater than reservedZoneSize that reserves space for stringifying exceptions.") \
++ v(unsigned, reservedZoneSize, jscReservedZoneSize, Normal, "The amount of stack space we guarantee to our clients (and to interal VM code that does not call out to clients).") \
+ \
+ v(bool, crashIfCantAllocateJITMemory, false, Normal, nullptr) \
+ v(unsigned, jitMemoryReservationSize, 0, Normal, "Set this number to change the executable allocation size in ExecutableAllocatorFixedVMPool. (In bytes.)") \
+diff --git a/Source/ThirdParty/ANGLE/src/compiler/preprocessor/ExpressionParser.cpp b/Source/ThirdParty/ANGLE/src/compiler/preprocessor/ExpressionParser.cpp
+index 5da6a22d..b380fb71 100644
+--- a/Source/ThirdParty/ANGLE/src/compiler/preprocessor/ExpressionParser.cpp
++++ b/Source/ThirdParty/ANGLE/src/compiler/preprocessor/ExpressionParser.cpp
+@@ -728,7 +728,7 @@ int yydebug;
+ #if YYERROR_VERBOSE
+
+ # ifndef yystrlen
+-# if defined __GLIBC__ && defined _STRING_H
++# if defined __linux__ && defined _STRING_H
+ # define yystrlen strlen
+ # else
+ /* Return the length of YYSTR. */
+@@ -743,7 +743,7 @@ static YYSIZE_T yystrlen(const char *yystr)
+ # endif
+
+ # ifndef yystpcpy
+-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
++# if defined __linux__ && defined _STRING_H && defined _GNU_SOURCE
+ # define yystpcpy stpcpy
+ # else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
+index 0e6faaa8..f8c6d684 100644
+--- a/Source/WTF/wtf/Platform.h
++++ b/Source/WTF/wtf/Platform.h
+@@ -707,7 +707,7 @@
+
+ #endif /* OS(DARWIN) */
+
+-#if OS(DARWIN) || OS(FUCHSIA) || ((OS(FREEBSD) || defined(__GLIBC__) || defined(__BIONIC__)) && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS)))
++#if OS(DARWIN) || OS(FUCHSIA) || ((OS(FREEBSD) || defined(__linux__)) && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS)))
+ #define HAVE_MACHINE_CONTEXT 1
+ #endif
+
+diff --git a/Source/WebCore/xml/XPathGrammar.cpp b/Source/WebCore/xml/XPathGrammar.cpp
+index 5e069d79..c58413c8 100644
+--- a/Source/WebCore/xml/XPathGrammar.cpp
++++ b/Source/WebCore/xml/XPathGrammar.cpp
+@@ -966,7 +966,7 @@ int yydebug;
+ #if YYERROR_VERBOSE
+
+ # ifndef yystrlen
+-# if defined __GLIBC__ && defined _STRING_H
++# if defined __linux__ && defined _STRING_H
+ # define yystrlen strlen
+ # else
+ /* Return the length of YYSTR. */
+@@ -989,7 +989,7 @@ yystrlen (yystr)
+ # endif
+
+ # ifndef yystpcpy
+-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
++# if defined __linux__ && defined _STRING_H && defined _GNU_SOURCE
+ # define yystpcpy stpcpy
+ # else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0003-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch b/patches/net-libs/webkit-gtk-2.26.3/0003-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch
@@ -0,0 +1,55 @@
+From a6b51c5b59e46aeb9a527c855d22d7e8f27b45f8 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 17:59:57 +0100
+Subject: [PATCH 03/15]
+ Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js: Remove %c
+ support in the console
+
+---
+ .../UserInterface/Views/ConsoleMessageView.js | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+index bbf8c38a..839ad301 100644
+--- a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
++++ b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+@@ -774,26 +774,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ }
+
+ var currentStyle = null;
+- function styleFormatter(obj)
+- {
+- currentStyle = {};
+- var buffer = document.createElement("span");
+- buffer.setAttribute("style", obj.description);
+- for (var i = 0; i < buffer.style.length; i++) {
+- var property = buffer.style[i];
+- if (isWhitelistedProperty(property))
+- currentStyle[property] = buffer.style[property];
+- }
+- }
+-
+- function isWhitelistedProperty(property)
+- {
+- for (var prefix of ["background", "border", "color", "font", "line", "margin", "padding", "text"]) {
+- if (property.startsWith(prefix) || property.startsWith("-webkit-" + prefix))
+- return true;
+- }
+- return false;
+- }
+
+ // Firebug uses %o for formatting objects.
+ var formatters = {};
+@@ -805,9 +785,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+- // Firebug uses %c for styling the message.
+- formatters.c = styleFormatter;
+-
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0004-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch b/patches/net-libs/webkit-gtk-2.26.3/0004-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch
@@ -0,0 +1,26 @@
+From 0fc5b398c15d6b051f6acf873c76e650bede29aa Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:09:22 +0100
+Subject: [PATCH 04/15] CMakeLists.txt: Explain which variable is used to
+ define a port if undefined
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9b5f7a78..6ead6bdc 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -49,7 +49,7 @@ set(PORT "NOPORT" CACHE STRING "choose which WebKit port to build (one of ${ALL_
+
+ list(FIND ALL_PORTS ${PORT} RET)
+ if (${RET} EQUAL -1)
+- message(FATAL_ERROR "Please choose which WebKit port to build (one of ${ALL_PORTS})")
++ message(FATAL_ERROR "Please define a PORT to build with (one of ${ALL_PORTS})")
+ endif ()
+
+ string(TOLOWER ${PORT} WEBKIT_PORT_DIR)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0005-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch b/patches/net-libs/webkit-gtk-2.26.3/0005-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch
@@ -0,0 +1,25 @@
+From 98bdef76f9fbce2bc8a7bf43b803a3750bbaa358 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:13:28 +0100
+Subject: [PATCH 05/15] Source/cmake/OptionsGTK.cmake: Add note on fixing CMake
+ defaults
+
+---
+ Source/cmake/OptionsGTK.cmake | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
+index 0db51e8a..c9ef7e79 100644
+--- a/Source/cmake/OptionsGTK.cmake
++++ b/Source/cmake/OptionsGTK.cmake
+@@ -74,6 +74,7 @@ endif ()
+ # Public options specific to the GTK port. Do not add any options here unless
+ # there is a strong reason we should support changing the value of the option,
+ # and the option is not relevant to any other WebKit ports.
++# XXX: Do not default to optionnal stuff like USE_LIBSECRET to REQUIRED
+ WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC ${ENABLE_GLES2_DEFAULT})
+ WEBKIT_OPTION_DEFINE(ENABLE_GTKDOC "Whether or not to use generate gtkdoc." PUBLIC OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_INTROSPECTION "Whether to enable GObject introspection." PUBLIC ON)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0010-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch b/patches/net-libs/webkit-gtk-2.26.3/0010-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch
@@ -0,0 +1,26 @@
+From b3c55b5250e62660411bdb6ba738c63e7adde0b3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Thu, 20 Jun 2019 23:31:40 +0200
+Subject: [PATCH 10/15] WebKitWebViewGtk.cpp: Allow the user to override the
+ advertised MIME filter
+
+---
+ Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+index af71e3b4..55113c26 100644
+--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
++++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+@@ -79,7 +79,7 @@ gboolean webkitWebViewRunFileChooser(WebKitWebView* webView, WebKitFileChooserRe
+ gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), TRUE);
+
+ if (GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request))
+- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
++ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), allowsMultipleSelection);
+
+ if (const gchar* const* selectedFiles = webkit_file_chooser_request_get_selected_files(request))
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0013-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch b/patches/net-libs/webkit-gtk-2.26.3/0013-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch
@@ -0,0 +1,38 @@
+From 1b29d6a4eadfc9e9d466f39461710502e67778bd Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 29 Jul 2019 16:41:43 +0200
+Subject: [PATCH 13/15] ProcessLauncher::launchProcess: Do not g_error() on me
+
+---
+ .../UIProcess/Launcher/glib/ProcessLauncherGLib.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+index da8ff67f..06cf973f 100644
+--- a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
++++ b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+@@ -33,6 +33,7 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <glib.h>
++#include <glib/gprintf.h>
+ #include <wtf/FileSystem.h>
+ #include <wtf/RunLoop.h>
+ #include <wtf/UniStdExtras.h>
+@@ -167,8 +168,11 @@ void ProcessLauncher::launchProcess()
+ #endif
+ process = adoptGRef(g_subprocess_launcher_spawnv(launcher.get(), argv, &error.outPtr()));
+
+- if (!process.get())
+- g_error("Unable to fork a new child process: %s", error->message);
++ if (!process.get()) {
++ g_fprintf(stderr, "WebKit: Unable to fork a new child process: %s", error->message);
++ //TODO: try to clean before returning
++ return;
++ }
+
+ const char* processIdStr = g_subprocess_get_identifier(process.get());
+ m_processIdentifier = g_ascii_strtoll(processIdStr, nullptr, 0);
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0014-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch b/patches/net-libs/webkit-gtk-2.26.3/0014-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch
@@ -0,0 +1,24 @@
+From 12f2af3954251d9467a6da5ef1af35225ca8f86d Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 16 Dec 2019 19:24:28 +0100
+Subject: [PATCH 14/15] GStreamerRegistryScanner.cpp: register audio/x-mod
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index 84870ccc..f69415a9 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -204,6 +204,7 @@ void GStreamerRegistryScanner::initialize()
+ {AudioDecoder, "audio/x-sid", { }, { }},
+ {AudioDecoder, "audio/x-speex", {"audio/speex", "audio/x-speex"}, { }},
+ {AudioDecoder, "audio/x-wavpack", {"audio/x-wavpack"}, { }},
++ {AudioDecoder, "audio/x-mod", {"audio/x-mod"}, { }},
+ {VideoDecoder, "video/mpeg, mpegversion=(int){1,2}, systemstream=(boolean)false", {"video/mpeg"}, {"mpeg"}},
+ {VideoDecoder, "video/mpegts", { }, { }},
+ {VideoDecoder, "video/x-dirac", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.26.3/0015-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch b/patches/net-libs/webkit-gtk-2.26.3/0015-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch
@@ -0,0 +1,24 @@
+From ac97701316d5c50f57f1b437a019c0ffa276f48b Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 6 Jan 2020 04:22:46 +0100
+Subject: [PATCH 15/15] GStreamerRegistryScanner.cpp: Add MPEG-DASH support
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index f69415a9..7d06be49 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -213,6 +213,7 @@ void GStreamerRegistryScanner::initialize()
+ {VideoDecoder, "video/x-msvideocodec", {"video/x-msvideo"}, { }},
+ {Demuxer, "application/vnd.rn-realmedia", { }, { }},
+ {Demuxer, "application/x-3gp", { }, { }},
++ {Demuxer, "application/x-dash", {"application/dash+xml"}, { }},
+ {Demuxer, "application/x-hls", {"application/vnd.apple.mpegurl", "application/x-mpegurl"}, { }},
+ {Demuxer, "application/x-pn-realaudio", { }, { }},
+ {Demuxer, "audio/x-aiff", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch b/patches/net-libs/webkit-gtk-2.28.0/0001-Source-WebInspectorUI-UserInterface-Views-ConsoleMes.patch
@@ -0,0 +1,55 @@
+From a4835c11f19b23a26dd005e12140ce1423ee6dc3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Fri, 2 Nov 2018 17:59:57 +0100
+Subject: [PATCH 1/8]
+ Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js: Remove %c
+ support in the console
+
+---
+ .../UserInterface/Views/ConsoleMessageView.js | 23 -------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+index 93b6106c..4b512a6d 100644
+--- a/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
++++ b/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js
+@@ -791,26 +791,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ }
+
+ var currentStyle = null;
+- function styleFormatter(obj)
+- {
+- currentStyle = {};
+- var buffer = document.createElement("span");
+- buffer.setAttribute("style", obj.description);
+- for (var i = 0; i < buffer.style.length; i++) {
+- var property = buffer.style[i];
+- if (isWhitelistedProperty(property))
+- currentStyle[property] = buffer.style[property];
+- }
+- }
+-
+- function isWhitelistedProperty(property)
+- {
+- for (var prefix of ["background", "border", "color", "font", "line", "margin", "padding", "text"]) {
+- if (property.startsWith(prefix) || property.startsWith("-webkit-" + prefix))
+- return true;
+- }
+- return false;
+- }
+
+ // Firebug uses %o for formatting objects.
+ var formatters = {};
+@@ -822,9 +802,6 @@ WI.ConsoleMessageView = class ConsoleMessageView extends WI.Object
+ formatters.i = integerFormatter;
+ formatters.d = integerFormatter;
+
+- // Firebug uses %c for styling the message.
+- formatters.c = styleFormatter;
+-
+ // Support %O to force object formatting, instead of the type-based %o formatting.
+ formatters.O = parameterFormatter.bind(this, true);
+
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0002-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch b/patches/net-libs/webkit-gtk-2.28.0/0002-CMakeLists.txt-Explain-which-variable-is-used-to-def.patch
@@ -0,0 +1,26 @@
+From af330123af933d829594ff32fac44e0217324350 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:09:22 +0100
+Subject: [PATCH 2/8] CMakeLists.txt: Explain which variable is used to define
+ a port if undefined
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9b5f7a78..6ead6bdc 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -49,7 +49,7 @@ set(PORT "NOPORT" CACHE STRING "choose which WebKit port to build (one of ${ALL_
+
+ list(FIND ALL_PORTS ${PORT} RET)
+ if (${RET} EQUAL -1)
+- message(FATAL_ERROR "Please choose which WebKit port to build (one of ${ALL_PORTS})")
++ message(FATAL_ERROR "Please define a PORT to build with (one of ${ALL_PORTS})")
+ endif ()
+
+ string(TOLOWER ${PORT} WEBKIT_PORT_DIR)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0003-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch b/patches/net-libs/webkit-gtk-2.28.0/0003-Source-cmake-OptionsGTK.cmake-Add-note-on-fixing-CMa.patch
@@ -0,0 +1,25 @@
+From a442e246242efa98f1f2e1e4efdbde48b4fb27a9 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 6 Nov 2018 15:13:28 +0100
+Subject: [PATCH 3/8] Source/cmake/OptionsGTK.cmake: Add note on fixing CMake
+ defaults
+
+---
+ Source/cmake/OptionsGTK.cmake | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake
+index e8d9d058..1cc433bc 100644
+--- a/Source/cmake/OptionsGTK.cmake
++++ b/Source/cmake/OptionsGTK.cmake
+@@ -74,6 +74,7 @@ endif ()
+ # Public options specific to the GTK port. Do not add any options here unless
+ # there is a strong reason we should support changing the value of the option,
+ # and the option is not relevant to any other WebKit ports.
++# XXX: Do not default to optionnal stuff like USE_LIBSECRET to REQUIRED
+ WEBKIT_OPTION_DEFINE(ENABLE_GLES2 "Whether to enable OpenGL ES 2.0." PUBLIC ${ENABLE_GLES2_DEFAULT})
+ WEBKIT_OPTION_DEFINE(ENABLE_GTKDOC "Whether or not to use generate gtkdoc." PUBLIC OFF)
+ WEBKIT_OPTION_DEFINE(ENABLE_INTROSPECTION "Whether to enable GObject introspection." PUBLIC ON)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0004-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch b/patches/net-libs/webkit-gtk-2.28.0/0004-Source-WebCore-page-RuntimeEnabledFeatures.h-hard-di.patch
@@ -0,0 +1,72 @@
+From 1644485ea3ecc9c935b444ec8b80bba23484a86c Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 2 Dec 2018 02:33:31 +0100
+Subject: [PATCH 4/8] Source/WebCore/page/RuntimeEnabledFeatures.h:
+ hard-disable some features
+
+---
+ Source/WebCore/page/RuntimeEnabledFeatures.h | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h
+index d5ef93a7..9a58b8a3 100644
+--- a/Source/WebCore/page/RuntimeEnabledFeatures.h
++++ b/Source/WebCore/page/RuntimeEnabledFeatures.h
+@@ -48,13 +48,13 @@ public:
+ bool blankAnchorTargetImpliesNoOpenerEnabled() const { return m_blankAnchorTargetImpliesNoOpenerEnabled; }
+
+ void setLinkPreloadEnabled(bool isEnabled) { m_isLinkPreloadEnabled = isEnabled; }
+- bool linkPreloadEnabled() const { return m_isLinkPreloadEnabled; }
++ bool linkPreloadEnabled() const { return false; }
+
+ void setLinkPrefetchEnabled(bool isEnabled) { m_isLinkPrefetchEnabled = isEnabled; }
+- bool linkPrefetchEnabled() const { return m_isLinkPrefetchEnabled; }
++ bool linkPrefetchEnabled() const { return false; }
+
+ void setMediaPreloadingEnabled(bool isEnabled) { m_isMediaPreloadingEnabled = isEnabled; }
+- bool mediaPreloadingEnabled() const { return m_isMediaPreloadingEnabled; }
++ bool mediaPreloadingEnabled() const { return false; }
+
+ void setResourceTimingEnabled(bool isEnabled) { m_isResourceTimingEnabled = isEnabled; }
+ bool resourceTimingEnabled() const { return m_isResourceTimingEnabled; }
+@@ -68,19 +68,19 @@ public:
+ bool shadowDOMEnabled() const { return m_isShadowDOMEnabled; }
+
+ void setInputEventsEnabled(bool isEnabled) { m_inputEventsEnabled = isEnabled; }
+- bool inputEventsEnabled() const { return m_inputEventsEnabled; }
++ bool inputEventsEnabled() const { return false; }
+
+ void setInteractiveFormValidationEnabled(bool isEnabled) { m_isInteractiveFormValidationEnabled = isEnabled; }
+ bool interactiveFormValidationEnabled() const { return m_isInteractiveFormValidationEnabled; }
+
+ void setCustomElementsEnabled(bool areEnabled) { m_areCustomElementsEnabled = areEnabled; }
+- bool customElementsEnabled() const { return m_areCustomElementsEnabled; }
++ bool customElementsEnabled() const { return false; }
+
+ void setMenuItemElementEnabled(bool isEnabled) { m_isMenuItemElementEnabled = isEnabled; }
+ bool menuItemElementEnabled() const { return m_isMenuItemElementEnabled; }
+
+ void setDirectoryUploadEnabled(bool isEnabled) { m_isDirectoryUploadEnabled = isEnabled; }
+- bool directoryUploadEnabled() const { return m_isDirectoryUploadEnabled; }
++ bool directoryUploadEnabled() const { return false; }
+
+ void setDataTransferItemsEnabled(bool areEnabled) { m_areDataTransferItemsEnabled = areEnabled; }
+ bool dataTransferItemsEnabled() const { return m_areDataTransferItemsEnabled; }
+@@ -326,12 +326,12 @@ public:
+
+ #if ENABLE(ENCRYPTED_MEDIA)
+ void setEncryptedMediaAPIEnabled(bool isEnabled) { m_encryptedMediaAPIEnabled = isEnabled; }
+- bool encryptedMediaAPIEnabled() const { return m_encryptedMediaAPIEnabled; }
++ bool encryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+ void setLegacyEncryptedMediaAPIEnabled(bool isEnabled) { m_legacyEncryptedMediaAPIEnabled = isEnabled; }
+- bool legacyEncryptedMediaAPIEnabled() const { return m_legacyEncryptedMediaAPIEnabled; }
++ bool legacyEncryptedMediaAPIEnabled() const { return false; }
+ #endif
+
+ #if ENABLE(SERVICE_WORKER)
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0005-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch b/patches/net-libs/webkit-gtk-2.28.0/0005-WebKitWebViewGtk.cpp-Allow-the-user-to-override-the-.patch
@@ -0,0 +1,26 @@
+From 0b88c6fd3fbdfcb50e1667cd1cbbfa307b1dee80 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Thu, 20 Jun 2019 23:31:40 +0200
+Subject: [PATCH 5/8] WebKitWebViewGtk.cpp: Allow the user to override the
+ advertised MIME filter
+
+---
+ Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+index af71e3b4..55113c26 100644
+--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
++++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp
+@@ -79,7 +79,7 @@ gboolean webkitWebViewRunFileChooser(WebKitWebView* webView, WebKitFileChooserRe
+ gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), TRUE);
+
+ if (GtkFileFilter* filter = webkit_file_chooser_request_get_mime_types_filter(request))
+- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
++ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), allowsMultipleSelection);
+
+ if (const gchar* const* selectedFiles = webkit_file_chooser_request_get_selected_files(request))
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0006-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch b/patches/net-libs/webkit-gtk-2.28.0/0006-ProcessLauncher-launchProcess-Do-not-g_error-on-me.patch
@@ -0,0 +1,38 @@
+From 92f36499c7188c6675b71e189028c3bbc8464e73 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 29 Jul 2019 16:41:43 +0200
+Subject: [PATCH 6/8] ProcessLauncher::launchProcess: Do not g_error() on me
+
+---
+ .../UIProcess/Launcher/glib/ProcessLauncherGLib.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+index 1986ffe4..0e452dac 100644
+--- a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
++++ b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
+@@ -34,6 +34,7 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <glib.h>
++#include <glib/gprintf.h>
+ #include <wtf/FileSystem.h>
+ #include <wtf/RunLoop.h>
+ #include <wtf/UniStdExtras.h>
+@@ -202,8 +203,11 @@ void ProcessLauncher::launchProcess()
+ #endif // OS(LINUX)
+ process = adoptGRef(g_subprocess_launcher_spawnv(launcher.get(), argv, &error.outPtr()));
+
+- if (!process.get())
+- g_error("Unable to fork a new child process: %s", error->message);
++ if (!process.get()) {
++ g_fprintf(stderr, "WebKit: Unable to fork a new child process: %s", error->message);
++ //TODO: try to clean before returning
++ return;
++ }
+
+ const char* processIdStr = g_subprocess_get_identifier(process.get());
+ m_processIdentifier = g_ascii_strtoll(processIdStr, nullptr, 0);
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0007-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch b/patches/net-libs/webkit-gtk-2.28.0/0007-GStreamerRegistryScanner.cpp-register-audio-x-mod.patch
@@ -0,0 +1,24 @@
+From 3edc26635daa3755fb2948de759a081af390720b Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 16 Dec 2019 19:24:28 +0100
+Subject: [PATCH 7/8] GStreamerRegistryScanner.cpp: register audio/x-mod
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index 1afcff0d..edee35ab 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -204,6 +204,7 @@ void GStreamerRegistryScanner::initialize()
+ {AudioDecoder, "audio/x-sid", { }, { }},
+ {AudioDecoder, "audio/x-speex", {"audio/speex", "audio/x-speex"}, { }},
+ {AudioDecoder, "audio/x-wavpack", {"audio/x-wavpack"}, { }},
++ {AudioDecoder, "audio/x-mod", {"audio/x-mod"}, { }},
+ {VideoDecoder, "video/mpeg, mpegversion=(int){1,2}, systemstream=(boolean)false", {"video/mpeg"}, {"mpeg"}},
+ {VideoDecoder, "video/mpegts", { }, { }},
+ {VideoDecoder, "video/x-dirac", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk-2.28.0/0008-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch b/patches/net-libs/webkit-gtk-2.28.0/0008-GStreamerRegistryScanner.cpp-Add-MPEG-DASH-support.patch
@@ -0,0 +1,24 @@
+From 1ddc916b3c62ab17bb211b7a013e4e5062e24310 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 6 Jan 2020 04:22:46 +0100
+Subject: [PATCH 8/8] GStreamerRegistryScanner.cpp: Add MPEG-DASH support
+
+---
+ .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+index edee35ab..dc906b1c 100644
+--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
++++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+@@ -213,6 +213,7 @@ void GStreamerRegistryScanner::initialize()
+ {VideoDecoder, "video/x-msvideocodec", {"video/x-msvideo"}, { }},
+ {Demuxer, "application/vnd.rn-realmedia", { }, { }},
+ {Demuxer, "application/x-3gp", { }, { }},
++ {Demuxer, "application/x-dash", {"application/dash+xml"}, { }},
+ {Demuxer, "application/x-hls", {"application/vnd.apple.mpegurl", "application/x-mpegurl"}, { }},
+ {Demuxer, "application/x-pn-realaudio", { }, { }},
+ {Demuxer, "audio/x-aiff", { }, { }},
+--
+2.24.1
+
diff --git a/patches/net-libs/webkit-gtk/webkit-gtk-2.28.1-bubblewrap_launcher-allow-sndio.patch b/patches/net-libs/webkit-gtk/webkit-gtk-2.28.1-bubblewrap_launcher-allow-sndio.patch
@@ -0,0 +1,37 @@
+commit bb27bdec2efb886c309144d3f755d1490c26dcfe
+Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
+Date: 2020-05-25T22:27:59 GMT
+
+ BubblewrapLauncher.cpp: Allows to use sndio
+
+diff --git a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
+index ad301ab2..06dcd41b 100644
+--- a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
++++ b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
+@@ -381,6 +381,18 @@ static void bindPulse(Vector<CString>& args)
+ bindIfExists(args, "/dev/snd", BindFlags::Device);
+ }
+
++static void bindSndio(Vector<CString>& args)
++{
++ bindIfExists(args, "/tmp/sndio", BindFlags::ReadWrite);
++
++ GUniquePtr<char> sndioUidDir(g_strdup_printf("/tmp/sndio-%d", getuid()));
++ bindIfExists(args, sndioUidDir.get(), BindFlags::ReadWrite);
++
++ const char* homeDir = g_get_home_dir();
++ GUniquePtr<char> sndioHomeDir(g_build_filename(homeDir, ".sndio", nullptr));
++ bindIfExists(args, sndioHomeDir.get(), BindFlags::ReadWrite);
++}
++
+ static void bindFonts(Vector<CString>& args)
+ {
+ const char* configDir = g_get_user_config_dir();
+@@ -807,6 +819,7 @@ GRefPtr<GSubprocess> bubblewrapSpawn(GSubprocessLauncher* launcher, const Proces
+ bindDBusSession(sandboxArgs, proxy);
+ // FIXME: We should move to Pipewire as soon as viable, Pulse doesn't restrict clients atm.
+ bindPulse(sandboxArgs);
++ bindSndio(sandboxArgs);
+ bindFonts(sandboxArgs);
+ bindGStreamerData(sandboxArgs);
+ bindOpenGL(sandboxArgs);
diff --git a/patches/net-vpn/tor-0.3.2.9/tor-0.3.2.9-fix redefinition of unsigned u.patch b/patches/net-vpn/tor-0.3.2.9/tor-0.3.2.9-fix redefinition of unsigned u.patch
@@ -0,0 +1,18 @@
+diff --git a/src/or/channeltls.c b/src/or/channeltls.c
+index 8277813..900bff9 100644
+--- a/src/or/channeltls.c
++++ b/src/or/channeltls.c
+@@ -2156,10 +2156,11 @@ channel_tls_process_certs_cell(var_cell_t *cell, channel_tls_t *chan)
+ }
+
+ err:
+- for (unsigned u = 0; u < ARRAY_LENGTH(x509_certs); ++u) {
++ unsigned u = 0;
++ for (u = 0; u < ARRAY_LENGTH(x509_certs); ++u) {
+ tor_x509_cert_free(x509_certs[u]);
+ }
+- for (unsigned u = 0; u < ARRAY_LENGTH(ed_certs); ++u) {
++ for (u = 0; u < ARRAY_LENGTH(ed_certs); ++u) {
+ tor_cert_free(ed_certs[u]);
+ }
+ tor_free(rsa_ed_cc_cert);
diff --git a/patches/sys-boot/grub/grub-2.02_tenshi.patch b/patches/sys-boot/grub/grub-2.02_tenshi.patch
@@ -0,0 +1,15 @@
+diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
+index 9cad0c4..65883f2 100644
+--- a/grub-core/kern/main.c
++++ b/grub-core/kern/main.c
+@@ -270,9 +270,8 @@ grub_main (void)
+ grub_boot_time ("After machine init.");
+
+ /* Hello. */
+- grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
+- grub_printf ("Welcome to GRUB!\n\n");
+ grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
++ grub_printf ("Why is tenshi eating a corndog so cute?\n\n");
+
+ grub_load_config ();
+
diff --git a/patches/sys-libs/glibc-2.27/glibc-c-utf8-locale.patch b/patches/sys-libs/glibc-2.27/glibc-c-utf8-locale.patch
@@ -0,0 +1,286 @@
+Short description: Add C.UTF-8 support.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-submitted
+
+This patch needs to upstream as part of Carlos O'Donell
+<carlos@redhat.com>'s work on enabling upstream C.UTF-8 support. This
+work is currently blocked on cleaning up the test results to prove that
+full code-point sorting is working as intended.
+
+Note that this patch does not provide full code-point sorting as
+expected.
+
+This patch needs to upstream as soon as possible since it would be nice
+to have this in F29 and fixed.
+
+From 2eda7b462b415105f5a05c1323372d4e39d46439 Mon Sep 17 00:00:00 2001
+From: Mike FABIAN <mfabian@redhat.com>
+Date: Mon, 10 Aug 2015 15:58:12 +0200
+Subject: [PATCH] Add a C.UTF-8 locale
+
+---
+ localedata/SUPPORTED | 1 +
+ localedata/locales/C | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 239 insertions(+)
+ create mode 100644 localedata/locales/C
+
+diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED
+index 8ca023e..2a78391 100644
+--- a/localedata/SUPPORTED
++++ b/localedata/SUPPORTED
+@@ -1,6 +1,7 @@
+ # This file names the currently supported and somewhat tested locales.
+ # If you have any additions please file a glibc bug report.
+ SUPPORTED-LOCALES=\
++C.UTF-8/UTF-8 \
+ aa_DJ.UTF-8/UTF-8 \
+ aa_DJ/ISO-8859-1 \
+ aa_ER/UTF-8 \
+diff --git a/localedata/locales/C b/localedata/locales/C
+new file mode 100644
+index 0000000..fdf460e
+--- /dev/null
++++ b/localedata/locales/C
+@@ -0,0 +1,238 @@
++escape_char /
++comment_char %
++% Locale for C locale in UTF-8
++
++LC_IDENTIFICATION
++title "C locale"
++source ""
++address ""
++contact ""
++email "mfabian@redhat.com"
++tel ""
++fax ""
++language "C"
++territory ""
++revision "1.0"
++date "2015-08-10"
++%
++category "i18n:2012";LC_IDENTIFICATION
++category "i18n:2012";LC_CTYPE
++category "i18n:2012";LC_COLLATE
++category "i18n:2012";LC_TIME
++category "i18n:2012";LC_NUMERIC
++category "i18n:2012";LC_MONETARY
++category "i18n:2012";LC_MESSAGES
++category "i18n:2012";LC_PAPER
++category "i18n:2012";LC_NAME
++category "i18n:2012";LC_ADDRESS
++category "i18n:2012";LC_TELEPHONE
++category "i18n:2012";LC_MEASUREMENT
++END LC_IDENTIFICATION
++
++LC_CTYPE
++copy "i18n"
++
++translit_start
++include "translit_combining";""
++translit_end
++
++END LC_CTYPE
++
++LC_COLLATE
++order_start forward
++<U0000>
++..
++<UFFFF>
++<U10000>
++..
++<U1FFFF>
++<U20000>
++..
++<U2FFFF>
++<UE0000>
++..
++<UEFFFF>
++<UF0000>
++..
++<UFFFFF>
++<U100000>
++..
++<U10FFFF>
++UNDEFINED
++order_end
++END LC_COLLATE
++
++LC_MONETARY
++% This is the 14652 i18n fdcc-set definition for
++% the LC_MONETARY category
++% (except for the int_curr_symbol and currency_symbol, they are empty in
++% the 14652 i18n fdcc-set definition and also empty in
++% glibc/locale/C-monetary.c. But localedef complains in that case).
++%
++% Using "USD" for int_curr_symbol. But maybe "XXX" would be better?
++% XXX is "No currency" (https://en.wikipedia.org/wiki/ISO_4217)
++int_curr_symbol "<U0055><U0053><U0044><U0020>"
++% Using "$" for currency_symbol. But maybe <U00A4> would be better?
++% U+00A4 is the "generic currency symbol"
++% (https://en.wikipedia.org/wiki/Currency_sign_%28typography%29)
++currency_symbol "<U0024>"
++mon_decimal_point "<U002E>"
++mon_thousands_sep ""
++mon_grouping -1
++positive_sign ""
++negative_sign "<U002D>"
++int_frac_digits -1
++frac_digits -1
++p_cs_precedes -1
++int_p_sep_by_space -1
++p_sep_by_space -1
++n_cs_precedes -1
++int_n_sep_by_space -1
++n_sep_by_space -1
++p_sign_posn -1
++n_sign_posn -1
++%
++END LC_MONETARY
++
++LC_NUMERIC
++% This is the POSIX Locale definition for
++% the LC_NUMERIC category.
++%
++decimal_point "<U002E>"
++thousands_sep ""
++grouping -1
++END LC_NUMERIC
++
++LC_TIME
++% This is the POSIX Locale definition for
++% the LC_TIME category.
++%
++% Abbreviated weekday names (%a)
++abday "<U0053><U0075><U006E>";"<U004D><U006F><U006E>";/
++ "<U0054><U0075><U0065>";"<U0057><U0065><U0064>";/
++ "<U0054><U0068><U0075>";"<U0046><U0072><U0069>";/
++ "<U0053><U0061><U0074>"
++
++% Full weekday names (%A)
++day "<U0053><U0075><U006E><U0064><U0061><U0079>";/
++ "<U004D><U006F><U006E><U0064><U0061><U0079>";/
++ "<U0054><U0075><U0065><U0073><U0064><U0061><U0079>";/
++ "<U0057><U0065><U0064><U006E><U0065><U0073><U0064><U0061><U0079>";/
++ "<U0054><U0068><U0075><U0072><U0073><U0064><U0061><U0079>";/
++ "<U0046><U0072><U0069><U0064><U0061><U0079>";/
++ "<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>"
++
++% Abbreviated month names (%b)
++abmon "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
++ "<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/
++ "<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/
++ "<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
++ "<U0053><U0065><U0070>";"<U004F><U0063><U0074>";/
++ "<U004E><U006F><U0076>";"<U0044><U0065><U0063>"
++
++% Full month names (%B)
++mon "<U004A><U0061><U006E><U0075><U0061><U0072><U0079>";/
++ "<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0079>";/
++ "<U004D><U0061><U0072><U0063><U0068>";/
++ "<U0041><U0070><U0072><U0069><U006C>";/
++ "<U004D><U0061><U0079>";/
++ "<U004A><U0075><U006E><U0065>";/
++ "<U004A><U0075><U006C><U0079>";/
++ "<U0041><U0075><U0067><U0075><U0073><U0074>";/
++ "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/
++ "<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/
++ "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
++ "<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
++
++% Week description, consists of three fields:
++% 1. Number of days in a week.
++% 2. Gregorian date that is a first weekday (19971130 for Sunday, 19971201 for Monday).
++% 3. The weekday number to be contained in the first week of the year.
++%
++% ISO 8601 conforming applications should use the values 7, 19971201 (a
++% Monday), and 4 (Thursday), respectively.
++week 7;19971201;4
++first_weekday 1
++first_workday 1
++
++% Appropriate date and time representation (%c)
++% "%a %b %e %H:%M:%S %Y"
++d_t_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0059>"
++
++% Appropriate date representation (%x)
++% "%m/%d/%y"
++d_fmt "<U0025><U006D><U002F><U0025><U0064><U002F><U0025><U0079>"
++
++% Appropriate time representation (%X)
++% "%H:%M:%S"
++t_fmt "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
++
++% Appropriate AM/PM time representation (%r)
++% "%I:%M:%S %p"
++t_fmt_ampm "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0070>"
++
++% Equivalent of AM/PM (%p) "AM"/"PM"
++%
++am_pm "<U0041><U004D>";"<U0050><U004D>"
++
++% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y"
++date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U0020><U0025><U0059>"
++END LC_TIME
++
++LC_MESSAGES
++% This is the POSIX Locale definition for
++% the LC_NUMERIC category.
++%
++yesexpr "<U005E><U005B><U0079><U0059><U005D>"
++noexpr "<U005E><U005B><U006E><U004E><U005D>"
++yesstr "<U0059><U0065><U0073>"
++nostr "<U004E><U006F>"
++END LC_MESSAGES
++
++LC_PAPER
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_PAPER category.
++% (A4 paper, this is also used in the built in C/POSIX
++% locale in glibc/locale/C-paper.c)
++height 297
++width 210
++END LC_PAPER
++
++LC_NAME
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_NAME category.
++% "%p%t%g%t%m%t%f"
++% (also used in the built in C/POSIX locale in glibc/locale/C-name.c)
++name_fmt "<U0025><U0070><U0025><U0074><U0025><U0067><U0025><U0074>/
++<U0025><U006D><U0025><U0074><U0025><U0066>"
++END LC_NAME
++
++LC_ADDRESS
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_ADDRESS category.
++% "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N"
++% (also used in the built in C/POSIX locale in glibc/locale/C-address.c)
++postal_fmt "<U0025><U0061><U0025><U004E><U0025><U0066><U0025><U004E>/
++<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/
++<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
++<U004E><U0025><U0043><U002D><U0025><U007A><U0020><U0025><U0054><U0025>/
++<U004E><U0025><U0063><U0025><U004E>"
++END LC_ADDRESS
++
++LC_TELEPHONE
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_TELEPHONE category.
++% "+%c %a %l"
++tel_int_fmt "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
++<U006C>"
++% (also used in the built in C/POSIX locale in glibc/locale/C-telephone.c)
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_MEASUREMENT category.
++% (same as in the built in C/POSIX locale in glibc/locale/C-measurement.c)
++%metric
++measurement 1
++END LC_MEASUREMENT
++
+--
+2.4.3
+
diff --git a/patches/sys-libs/glibc/glibc-2.27-meme-sigsegv-message.patch b/patches/sys-libs/glibc/glibc-2.27-meme-sigsegv-message.patch
@@ -0,0 +1,13 @@
+diff --git a/sysdeps/generic/siglist.h.old b/sysdeps/generic/siglist.h
+index 99d05b2..fc46574 100644
+--- a/sysdeps/generic/siglist.h.old
++++ b/sysdeps/generic/siglist.h
+@@ -36,7 +36,7 @@
+ init_sig (SIGKILL, "KILL", N_("Killed"))
+ init_sig (SIGBUS, "BUS", N_("Bus error"))
+ init_sig (SIGSYS, "SYS", N_("Bad system call"))
+- init_sig (SIGSEGV, "SEGV", N_("Segmentation fault"))
++ init_sig (SIGSEGV, "SEGV", N_("it done did a broke (SEGV)"))
+ init_sig (SIGPIPE, "PIPE", N_("Broken pipe"))
+ init_sig (SIGALRM, "ALRM", N_("Alarm clock"))
+ init_sig (SIGTERM, "TERM", N_("Terminated"))
diff --git a/patches/sys-libs/glibc/stfu-rms-on-abort.patch b/patches/sys-libs/glibc/stfu-rms-on-abort.patch
@@ -0,0 +1,21 @@
+X-Git-Url: https://sourceware.org/git/?p=glibc.git;a=blobdiff_plain;f=manual%2Fstartup.texi;h=21c48cd0374dcc906c33165267412081fc7de2dc;hp=7395d32dd0c877487938857fd432650e87fe7bb2;hb=340d9652b9d0e1d4136588f18b726662d195777c;hpb=c57bf7c15ba179168d01f7c6acde7ecbf5dd9cd8
+
+diff --git a/manual/startup.texi b/manual/startup.texi
+index 7395d32..21c48cd 100644
+--- a/manual/startup.texi
++++ b/manual/startup.texi
+@@ -1005,14 +1005,6 @@ This function actually terminates the process by raising a
+ intercept this signal; see @ref{Signal Handling}.
+ @end deftypefun
+
+-@c Put in by rms. Don't remove.
+-@cartouche
+-@strong{Future Change Warning:} Proposed Federal censorship regulations
+-may prohibit us from giving you information about the possibility of
+-calling this function. We would be required to say that this is not an
+-acceptable way of terminating a program.
+-@end cartouche
+-
+ @node Termination Internals
+ @subsection Termination Internals
+
diff --git a/patches/sys-libs/libomp-7.1.0/FreeBSD_bug32279.patch b/patches/sys-libs/libomp-7.1.0/FreeBSD_bug32279.patch
@@ -0,0 +1,16 @@
+diff --git a/runtime/cmake/LibompHandleFlags.cmake.old b/runtime/cmake/LibompHandleFlags.cmake
+index 4bdbf8f..a411119 100644
+--- a/runtime/cmake/LibompHandleFlags.cmake.old
++++ b/runtime/cmake/LibompHandleFlags.cmake
+@@ -152,6 +152,11 @@ function(libomp_get_libflags libflags)
+ if(${IA32})
+ libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
+ endif()
++ IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
++ libomp_append(libflags_local "-Wl,--no-as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ libomp_append(libflags_local -lm)
++ libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ libomp_append(libflags_local -lm)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
diff --git a/patches/sys-libs/libomp-8.0.1/FreeBSD_bug32279.patch b/patches/sys-libs/libomp-8.0.1/FreeBSD_bug32279.patch
@@ -0,0 +1,14 @@
+--- a/runtime/cmake/LibompHandleFlags.cmake
++++ b/runtime/cmake/LibompHandleFlags.cmake
+@@ -152,6 +152,11 @@ function(libomp_get_libflags libflags)
+ libomp_append(libflags_local "-lm")
+ libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
++ IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
++ libomp_append(libflags_local "-Wl,--no-as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ libomp_append(libflags_local -lm)
++ libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ libomp_append(libflags_local -lm)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
diff --git a/patches/sys-libs/libomp-9.0.0/FreeBSD_bug32279.patch b/patches/sys-libs/libomp-9.0.0/FreeBSD_bug32279.patch
@@ -0,0 +1,11 @@
+--- a/runtime/cmake/LibompHandleFlags.cmake
++++ b/runtime/cmake/LibompHandleFlags.cmake
+@@ -158,7 +158,7 @@ function(libomp_get_libflags libflags)
+ if(${IA32})
+ libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
+ endif()
+- if(${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
++ if(${CMAKE_SYSTEM_NAME} MATCHES "(DragonFly|Linux)")
+ libomp_append(libflags_local "-Wl,--no-as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
+ libomp_append(libflags_local "-lm")
+ libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
diff --git a/patches/sys-libs/musl/musl-1.1.20-meme-sigsegv-message.patch b/patches/sys-libs/musl/musl-1.1.20-meme-sigsegv-message.patch
@@ -0,0 +1,13 @@
+diff --git a/src/string/strsignal.c.old b/src/string/strsignal.c
+index 96bfe84..9237fc3 100644
+--- a/src/string/strsignal.c.old
++++ b/src/string/strsignal.c
+@@ -65,7 +65,7 @@ static const char strings[] =
+ "Arithmetic exception\0"
+ "Killed\0"
+ "User defined signal 1\0"
+- "Segmentation fault\0"
++ "it done did a broke (SEGV)\0"
+ "User defined signal 2\0"
+ "Broken pipe\0"
+ "Alarm clock\0"
diff --git a/patches/www-apps/stagit-0.8 b/patches/www-apps/stagit-0.8
@@ -0,0 +1 @@
+/seagate/sources/git/hacktivis.me/git/stagit-0.8+
\ No newline at end of file
diff --git a/patches/www-apps/stagit-0.9/0001-fix-compile-libgit2-0.28-changed-giterr_last-to-git_.patch b/patches/www-apps/stagit-0.9/0001-fix-compile-libgit2-0.28-changed-giterr_last-to-git_.patch
@@ -0,0 +1,60 @@
+From 583c44395ccc0e052c8db5217bd51fc21f7ffbb7 Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Sun, 3 Feb 2019 15:24:34 +0100
+Subject: [PATCH 01/22] fix compile: libgit2 0.28 changed giterr_last to
+ git_error_last
+
+libgit2 commit:
+https://github.com/libgit2/libgit2/commit/a27a4de6f8003961d38958893c6c637395c7cc04
+---
+ stagit-index.c | 4 +---
+ stagit.c | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/stagit-index.c b/stagit-index.c
+index e019793..ab47e48 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -147,7 +147,6 @@ err:
+ int
+ main(int argc, char *argv[])
+ {
+- const git_error *e = NULL;
+ FILE *fp;
+ char path[PATH_MAX], repodirabs[PATH_MAX + 1];
+ const char *repodir;
+@@ -174,8 +173,7 @@ main(int argc, char *argv[])
+
+ if (git_repository_open_ext(&repo, repodir,
+ GIT_REPOSITORY_OPEN_NO_SEARCH, NULL)) {
+- e = giterr_last();
+- fprintf(stderr, "%s: %s\n", argv[0], e->message);
++ fprintf(stderr, "%s: cannot open repository\n", argv[0]);
+ ret = 1;
+ continue;
+ }
+diff --git a/stagit.c b/stagit.c
+index 093cdab..c2b2f2c 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -1054,7 +1054,6 @@ main(int argc, char *argv[])
+ {
+ git_object *obj = NULL;
+ const git_oid *head = NULL;
+- const git_error *e = NULL;
+ mode_t mask;
+ FILE *fp, *fpread;
+ char path[PATH_MAX], repodirabs[PATH_MAX + 1], *p;
+@@ -1101,8 +1100,7 @@ main(int argc, char *argv[])
+
+ if (git_repository_open_ext(&repo, repodir,
+ GIT_REPOSITORY_OPEN_NO_SEARCH, NULL) < 0) {
+- e = giterr_last();
+- fprintf(stderr, "%s: %s\n", argv[0], e->message);
++ fprintf(stderr, "%s: cannot open repository\n", argv[0]);
+ return 1;
+ }
+
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0002-change-order-of-commits-in-log-from-most-recent-to-o.patch b/patches/www-apps/stagit-0.9/0002-change-order-of-commits-in-log-from-most-recent-to-o.patch
@@ -0,0 +1,81 @@
+From 3fbef5c9b0dee2106537a6718e2380eaa6e27f15 Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Thu, 7 Feb 2019 21:00:06 +0100
+Subject: [PATCH 02/22] change order of commits in log from most recent to old
+ to applied order
+
+---
+ LICENSE | 2 +-
+ stagit-index.c | 1 -
+ stagit.1 | 6 +++---
+ stagit.c | 2 --
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/LICENSE b/LICENSE
+index 3dc99fe..1305e35 100644
+--- a/LICENSE
++++ b/LICENSE
+@@ -1,6 +1,6 @@
+ MIT/X Consortium License
+
+-(c) 2015-2018 Hiltjo Posthuma <hiltjo@codemadness.org>
++(c) 2015-2019 Hiltjo Posthuma <hiltjo@codemadness.org>
+ (c) 2015-2016 Dimitris Papastamos <sin@2f30.org>
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+diff --git a/stagit-index.c b/stagit-index.c
+index ab47e48..accb1a5 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -105,7 +105,6 @@ writelog(FILE *fp)
+
+ git_revwalk_new(&w, repo);
+ git_revwalk_push_head(w);
+- git_revwalk_sorting(w, GIT_SORT_TIME);
+ git_revwalk_simplify_first_parent(w);
+
+ if (git_revwalk_next(&id, w) ||
+diff --git a/stagit.1 b/stagit.1
+index 3e9a77a..360f716 100644
+--- a/stagit.1
++++ b/stagit.1
+@@ -1,4 +1,4 @@
+-.Dd Januari 21, 2018
++.Dd February 6, 2019
+ .Dt STAGIT 1
+ .Os
+ .Sh NAME
+@@ -46,8 +46,8 @@ Atom XML feed
+ .It files.html
+ List of files in the latest tree, linking to the file.
+ .It log.html
+-List of commits in order of most recent to old of the commits (top to bottom),
+-each commit links to a page with a diffstat and diff of the commit.
++List of commits in reverse chronological applied commit order, each commit
++links to a page with a diffstat and diff of the commit.
+ .It refs.html
+ Lists references of the repository such as branches and tags.
+ .El
+diff --git a/stagit.c b/stagit.c
+index c2b2f2c..b8abea3 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -606,7 +606,6 @@ writelog(FILE *fp, const git_oid *oid)
+
+ git_revwalk_new(&w, repo);
+ git_revwalk_push(w, oid);
+- git_revwalk_sorting(w, GIT_SORT_TIME);
+ git_revwalk_simplify_first_parent(w);
+
+ while (!git_revwalk_next(&id, w)) {
+@@ -736,7 +735,6 @@ writeatom(FILE *fp)
+
+ git_revwalk_new(&w, repo);
+ git_revwalk_push_head(w);
+- git_revwalk_sorting(w, GIT_SORT_TIME);
+ git_revwalk_simplify_first_parent(w);
+
+ for (i = 0; i < m && !git_revwalk_next(&id, w); i++) {
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0003-Makefile-add-DOCPREFIX-for-installing-docs-in-ports.patch b/patches/www-apps/stagit-0.9/0003-Makefile-add-DOCPREFIX-for-installing-docs-in-ports.patch
@@ -0,0 +1,76 @@
+From 9224d31cf6fd63b6b0a29d43185ccc64035449ec Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Sat, 9 Feb 2019 15:02:38 +0100
+Subject: [PATCH 03/22] Makefile: add DOCPREFIX for installing docs in ports
+
+change installed doc from /usr/local/share/stagit to /usr/local/share/doc/stagit
+---
+ Makefile | 19 ++++++++++---------
+ config.mk | 1 +
+ 2 files changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 138dfc5..72e6213 100644
+--- a/Makefile
++++ b/Makefile
+@@ -2,6 +2,7 @@ include config.mk
+
+ NAME = stagit
+ VERSION = 0.9
++
+ SRC = \
+ stagit.c\
+ stagit-index.c
+@@ -64,14 +65,14 @@ install: all
+ cp -f ${BIN} ${DESTDIR}${PREFIX}/bin
+ for f in ${BIN}; do chmod 755 ${DESTDIR}${PREFIX}/bin/$$f; done
+ # installing example files.
+- mkdir -p ${DESTDIR}${PREFIX}/share/${NAME}
++ mkdir -p ${DESTDIR}${DOCPREFIX}
+ cp -f style.css\
+ favicon.png\
+ logo.png\
+ example_create.sh\
+ example_post-receive.sh\
+ README\
+- ${DESTDIR}${PREFIX}/share/${NAME}
++ ${DESTDIR}${DOCPREFIX}
+ # installing manual pages.
+ mkdir -p ${DESTDIR}${MANPREFIX}/man1
+ cp -f ${MAN1} ${DESTDIR}${MANPREFIX}/man1
+@@ -82,13 +83,13 @@ uninstall:
+ for f in ${BIN}; do rm -f ${DESTDIR}${PREFIX}/bin/$$f; done
+ # removing example files.
+ rm -f \
+- ${DESTDIR}${PREFIX}/share/${NAME}/style.css\
+- ${DESTDIR}${PREFIX}/share/${NAME}/favicon.png\
+- ${DESTDIR}${PREFIX}/share/${NAME}/logo.png\
+- ${DESTDIR}${PREFIX}/share/${NAME}/example_create.sh\
+- ${DESTDIR}${PREFIX}/share/${NAME}/example_post-receive.sh\
+- ${DESTDIR}${PREFIX}/share/${NAME}/README
+- -rmdir ${DESTDIR}${PREFIX}/share/${NAME}
++ ${DESTDIR}${DOCPREFIX}/style.css\
++ ${DESTDIR}${DOCPREFIX}/favicon.png\
++ ${DESTDIR}${DOCPREFIX}/logo.png\
++ ${DESTDIR}${DOCPREFIX}/example_create.sh\
++ ${DESTDIR}${DOCPREFIX}/example_post-receive.sh\
++ ${DESTDIR}${DOCPREFIX}/README
++ -rmdir ${DESTDIR}${DOCPREFIX}
+ # removing manual pages.
+ for m in ${MAN1}; do rm -f ${DESTDIR}${MANPREFIX}/man1/$$m; done
+
+diff --git a/config.mk b/config.mk
+index ac47e70..90419a0 100644
+--- a/config.mk
++++ b/config.mk
+@@ -3,6 +3,7 @@
+ # paths
+ PREFIX = /usr/local
+ MANPREFIX = ${PREFIX}/man
++DOCPREFIX = ${PREFIX}/share/doc/stagit
+
+ # compiler and linker
+ #CC = cc
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0004-bump-version-to-0.9.1.patch b/patches/www-apps/stagit-0.9/0004-bump-version-to-0.9.1.patch
@@ -0,0 +1,25 @@
+From 477d50169a42431d7fb0f939eb851ef6a2d80c3a Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Fri, 22 Feb 2019 11:13:44 +0100
+Subject: [PATCH 04/22] bump version to 0.9.1
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 72e6213..aca1353 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ include config.mk
+
+ NAME = stagit
+-VERSION = 0.9
++VERSION = 0.9.1
+
+ SRC = \
+ stagit.c\
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0005-fix-issues-in-example-scripts.patch b/patches/www-apps/stagit-0.9/0005-fix-issues-in-example-scripts.patch
@@ -0,0 +1,43 @@
+From 587b01428d6ec2be1ab6b468198663118d483990 Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Fri, 1 Mar 2019 11:49:29 +0100
+Subject: [PATCH 05/22] fix issues in example scripts
+
+- in case cd fails don't continue (don't write in previous directory).
+- post-receive: quote $(pwd) in case it has spaces.
+
+found by shellcheck tool.
+---
+ example_create.sh | 2 +-
+ example_post-receive.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/example_create.sh b/example_create.sh
+index aff7d54..cf16e1d 100755
+--- a/example_create.sh
++++ b/example_create.sh
+@@ -30,7 +30,7 @@ for dir in "${reposdir}/"*/; do
+ printf "%s... " "${d}"
+
+ mkdir -p "${curdir}/${d}"
+- cd "${curdir}/${d}"
++ cd "${curdir}/${d}" || continue
+ stagit -c ".cache" "${reposdir}/${r}"
+
+ # symlinks
+diff --git a/example_post-receive.sh b/example_post-receive.sh
+index 0655569..c9bcb5e 100755
+--- a/example_post-receive.sh
++++ b/example_post-receive.sh
+@@ -14,7 +14,7 @@ export LC_CTYPE="en_US.UTF-8"
+
+ name="$1"
+ if test "${name}" = ""; then
+- name=$(basename $(pwd))
++ name=$(basename "$(pwd)")
+ fi
+
+ # config
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0006-pedantic-snprintf-improvement.patch b/patches/www-apps/stagit-0.9/0006-pedantic-snprintf-improvement.patch
@@ -0,0 +1,60 @@
+From bb1d06eb204b1d1135fcddccd14f6306abcd7f72 Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Sat, 9 Mar 2019 12:39:10 +0100
+Subject: [PATCH 06/22] pedantic snprintf() improvement
+
+POSIX says:
+"If an output error was encountered, these functions shall return a negative
+value and set errno to indicate the error."
+---
+ stagit-index.c | 2 +-
+ stagit.c | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/stagit-index.c b/stagit-index.c
+index accb1a5..cc70e4d 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -28,7 +28,7 @@ joinpath(char *buf, size_t bufsiz, const char *path, const char *path2)
+
+ r = snprintf(buf, bufsiz, "%s%s%s",
+ path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2);
+- if (r == -1 || (size_t)r >= bufsiz)
++ if (r < 0 || (size_t)r >= bufsiz)
+ errx(1, "path truncated: '%s%s%s'",
+ path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2);
+ }
+diff --git a/stagit.c b/stagit.c
+index b8abea3..1fc6c1e 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -76,7 +76,7 @@ joinpath(char *buf, size_t bufsiz, const char *path, const char *path2)
+
+ r = snprintf(buf, bufsiz, "%s%s%s",
+ path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2);
+- if (r == -1 || (size_t)r >= bufsiz)
++ if (r < 0 || (size_t)r >= bufsiz)
+ errx(1, "path truncated: '%s%s%s'",
+ path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2);
+ }
+@@ -616,7 +616,7 @@ writelog(FILE *fp, const git_oid *oid)
+
+ git_oid_tostr(oidstr, sizeof(oidstr), &id);
+ r = snprintf(path, sizeof(path), "commit/%s.html", oidstr);
+- if (r == -1 || (size_t)r >= sizeof(path))
++ if (r < 0 || (size_t)r >= sizeof(path))
+ errx(1, "path truncated: 'commit/%s.html'", oidstr);
+ r = access(path, F_OK);
+
+@@ -856,7 +856,7 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
+
+ r = snprintf(filepath, sizeof(filepath), "file/%s.html",
+ entrypath);
+- if (r == -1 || (size_t)r >= sizeof(filepath))
++ if (r < 0 || (size_t)r >= sizeof(filepath))
+ errx(1, "path truncated: 'file/%s.html'", entrypath);
+
+ if (!git_tree_entry_to_object(&obj, repo, entry)) {
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0007-escape-HTML-in-paths.patch b/patches/www-apps/stagit-0.9/0007-escape-HTML-in-paths.patch
@@ -0,0 +1,48 @@
+From 028c7526bac907c91ef8afc6c3ae0f6d424bd229 Mon Sep 17 00:00:00 2001
+From: Hiltjo Posthuma <hiltjo@codemadness.org>
+Date: Sat, 16 Mar 2019 13:07:58 +0100
+Subject: [PATCH 07/22] escape HTML in paths
+
+- escape paths in diff line.
+- escape path in anchor href attribute in files.html
+---
+ stagit.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/stagit.c b/stagit.c
+index 1fc6c1e..a6cfebc 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -532,9 +532,15 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ for (i = 0; i < ci->ndeltas; i++) {
+ patch = ci->deltas[i]->patch;
+ delta = git_patch_get_delta(patch);
+- fprintf(fp, "<b>diff --git a/<a id=\"h%zu\" href=\"%sfile/%s.html\">%s</a> b/<a href=\"%sfile/%s.html\">%s</a></b>\n",
+- i, relpath, delta->old_file.path, delta->old_file.path,
+- relpath, delta->new_file.path, delta->new_file.path);
++ fprintf(fp, "<b>diff --git a/<a id=\"h%zu\" href=\"%sfile/", i, relpath);
++ xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path));
++ fputs(".html\">", fp);
++ xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path));
++ fprintf(fp, "</a> b/<a href=\"%sfile/", relpath);
++ xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path));
++ fprintf(fp, ".html\">");
++ xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path));
++ fprintf(fp, "</a></b>\n");
+
+ /* check binary data */
+ if (delta->flags & GIT_DIFF_FLAG_BINARY) {
+@@ -881,7 +887,9 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
+
+ fputs("<tr><td>", fp);
+ fputs(filemode(git_tree_entry_filemode(entry)), fp);
+- fprintf(fp, "</td><td><a href=\"%s%s\">", relpath, filepath);
++ fprintf(fp, "</td><td><a href=\"%s", relpath);
++ xmlencode(fp, filepath, strlen(filepath));
++ fputs("\">", fp);
+ xmlencode(fp, entrypath, strlen(entrypath));
+ fputs("</a></td><td class=\"num\" align=\"right\">", fp);
+ if (lc > 0)
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0008-stagit.c-Use-config.h.patch b/patches/www-apps/stagit-0.9/0008-stagit.c-Use-config.h.patch
@@ -0,0 +1,35 @@
+From ee392a131423e9b4cb6625cbba028fae2f5b9006 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 4 Apr 2017 19:06:27 +0200
+Subject: [PATCH 08/22] stagit.c: Use config.h
+
+---
+ config.h | 3 +++
+ stagit.c | 1 +
+ 2 files changed, 4 insertions(+)
+ create mode 100644 config.h
+
+diff --git a/config.h b/config.h
+new file mode 100644
+index 0000000..72da0f4
+--- /dev/null
++++ b/config.h
+@@ -0,0 +1,3 @@
++/* See LICENSE file for copyright and license details. */
++static const unsigned summarylen = 70; /* summary length in the log */
++static const int showlinecount = 1; /* display line count or file size in file tree index */
+diff --git a/stagit.c b/stagit.c
+index a6cfebc..78390c9 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -14,6 +14,7 @@
+ #include <git2.h>
+
+ #include "compat.h"
++#include "config.h"
+
+ struct deltainfo {
+ git_patch *patch;
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0009-Use-common-path-for-assets-style.css-logo.png.patch b/patches/www-apps/stagit-0.9/0009-Use-common-path-for-assets-style.css-logo.png.patch
@@ -0,0 +1,44 @@
+From 8c648491538dc93052127d352fc880996138eb05 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 4 Apr 2017 18:56:41 +0200
+Subject: [PATCH 09/22] Use common path for assets(style.css & logo.png)
+
+---
+ config.h | 1 +
+ stagit.c | 8 ++++----
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/config.h b/config.h
+index 72da0f4..09a5b79 100644
+--- a/config.h
++++ b/config.h
+@@ -1,3 +1,4 @@
+ /* See LICENSE file for copyright and license details. */
+ static const unsigned summarylen = 70; /* summary length in the log */
+ static const int showlinecount = 1; /* display line count or file size in file tree index */
++static const char *assetpath = "/git/"; /* Where are the assets (example: assetpath/style.css ) */
+diff --git a/stagit.c b/stagit.c
+index 78390c9..33edd82 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -352,13 +352,13 @@ writeheader(FILE *fp, const char *title)
+ if (description[0])
+ fputs(" - ", fp);
+ xmlencode(fp, description, strlen(description));
+- fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%sfavicon.png\" />\n", relpath);
++ fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%sfavicon.png\" />\n", assetpath);
+ fprintf(fp, "<link rel=\"alternate\" type=\"application/atom+xml\" title=\"%s Atom Feed\" href=\"%satom.xml\" />\n",
+ name, relpath);
+- fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", relpath);
++ fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", assetpath);
+ fputs("</head>\n<body>\n<table><tr><td>", fp);
+- fprintf(fp, "<a href=\"../%s\"><img src=\"%slogo.png\" alt=\"\" width=\"32\" height=\"32\" /></a>",
+- relpath, relpath);
++ fprintf(fp, "<a href=\"..\"><img src=\"%slogo.png\" alt=\"\" width=\"32\" height=\"32\" /></a>",
++ assetpath);
+ fputs("</td><td><h1>", fp);
+ xmlencode(fp, strippedname, strlen(strippedname));
+ fputs("</h1><span class=\"desc\">", fp);
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0010-stagit.c-Define-img-alt.patch b/patches/www-apps/stagit-0.9/0010-stagit.c-Define-img-alt.patch
@@ -0,0 +1,25 @@
+From b9eccfb4bb6cf33bbbe231c2d277af2a104d5d2b Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 4 Apr 2017 18:57:41 +0200
+Subject: [PATCH 10/22] stagit.c: Define <img alt="">
+
+---
+ stagit.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/stagit.c b/stagit.c
+index 33edd82..ee7ffe9 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -357,7 +357,7 @@ writeheader(FILE *fp, const char *title)
+ name, relpath);
+ fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", assetpath);
+ fputs("</head>\n<body>\n<table><tr><td>", fp);
+- fprintf(fp, "<a href=\"..\"><img src=\"%slogo.png\" alt=\"\" width=\"32\" height=\"32\" /></a>",
++ fprintf(fp, "<a href=\"..\"><img src=\"%slogo.png\" alt=\"logo\" width=\"32\" height=\"32\" /></a>",
+ assetpath);
+ fputs("</td><td><h1>", fp);
+ xmlencode(fp, strippedname, strlen(strippedname));
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0011-stagit-index.c-Let-HTTP-server-provide-default-index.patch b/patches/www-apps/stagit-0.9/0011-stagit-index.c-Let-HTTP-server-provide-default-index.patch
@@ -0,0 +1,26 @@
+From 10892ee7c67d59d809eb84fa88937a336635af5f Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sat, 8 Apr 2017 17:51:33 +0200
+Subject: [PATCH 11/22] stagit-index.c: Let HTTP server provide default index
+
+---
+ stagit-index.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/stagit-index.c b/stagit-index.c
+index cc70e4d..b4142ff 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -124,7 +124,8 @@ writelog(FILE *fp)
+
+ fputs("<tr><td><a href=\"", fp);
+ xmlencode(fp, stripped_name, strlen(stripped_name));
+- fputs("/log.html\">", fp);
++ /*fputs("/log.html\">", fp); Let http server set default index */
++ fputs("/\">", fp);
+ xmlencode(fp, stripped_name, strlen(stripped_name));
+ fputs("</a></td><td>", fp);
+ xmlencode(fp, description, strlen(description));
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0012-HTML5-faviconurl-Wall.patch b/patches/www-apps/stagit-0.9/0012-HTML5-faviconurl-Wall.patch
@@ -0,0 +1,98 @@
+From 5790cec7b177dfdda54f7b9ee0df4e1f1b5ed2c3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 30 Apr 2017 19:24:33 +0200
+Subject: [PATCH 12/22] HTML5, faviconurl, -Wall
+
+---
+ config.h | 1 +
+ config.mk | 2 +-
+ stagit.c | 26 ++++++++++++++------------
+ 3 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/config.h b/config.h
+index 09a5b79..ee798da 100644
+--- a/config.h
++++ b/config.h
+@@ -2,3 +2,4 @@
+ static const unsigned summarylen = 70; /* summary length in the log */
+ static const int showlinecount = 1; /* display line count or file size in file tree index */
+ static const char *assetpath = "/git/"; /* Where are the assets (example: assetpath/style.css ) */
++static const char *faviconurl = "/git/logo.png"; /* Where is the favicon (example: /favicon.png ) */
+diff --git a/config.mk b/config.mk
+index 90419a0..9a3cfe8 100644
+--- a/config.mk
++++ b/config.mk
+@@ -20,7 +20,7 @@ LIBS = -L${GITLIB} -lgit2
+ #LDFLAGS = ${LIBS}
+
+ # optimized
+-CFLAGS = -O2 -std=c99 ${INCS}
++CFLAGS = -O2 -std=c99 -Wall ${INCS}
+ LDFLAGS = -s ${LIBS}
+
+ # optimized static
+diff --git a/stagit.c b/stagit.c
+index ee7ffe9..2be3d6b 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -352,29 +352,31 @@ writeheader(FILE *fp, const char *title)
+ if (description[0])
+ fputs(" - ", fp);
+ xmlencode(fp, description, strlen(description));
+- fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%sfavicon.png\" />\n", assetpath);
++ if(strlen(faviconurl) > 0) {
++ fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%s\" />\n", faviconurl);
++ }
+ fprintf(fp, "<link rel=\"alternate\" type=\"application/atom+xml\" title=\"%s Atom Feed\" href=\"%satom.xml\" />\n",
+ name, relpath);
+ fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", assetpath);
+- fputs("</head>\n<body>\n<table><tr><td>", fp);
++ fputs("</head>\n<body>\n<header>", fp);
+ fprintf(fp, "<a href=\"..\"><img src=\"%slogo.png\" alt=\"logo\" width=\"32\" height=\"32\" /></a>",
+ assetpath);
+- fputs("</td><td><h1>", fp);
++ fputs("<h1>", fp);
+ xmlencode(fp, strippedname, strlen(strippedname));
+ fputs("</h1><span class=\"desc\">", fp);
+ xmlencode(fp, description, strlen(description));
+- fputs("</span></td></tr>", fp);
++ fputs("</span>", fp);
+ if (cloneurl[0]) {
+- fputs("<tr class=\"url\"><td></td><td>git clone <a href=\"", fp);
++ fputs("<code class=\"url\"><td></td><td>git clone <a rel=\"vcs-git\" href=\"", fp);
+ xmlencode(fp, cloneurl, strlen(cloneurl));
+ fputs("\">", fp);
+ xmlencode(fp, cloneurl, strlen(cloneurl));
+- fputs("</a></td></tr>", fp);
++ fputs("</a></code>", fp);
+ }
+- fputs("<tr><td></td><td>\n", fp);
+- fprintf(fp, "<a href=\"%slog.html\">Log</a> | ", relpath);
+- fprintf(fp, "<a href=\"%sfiles.html\">Files</a> | ", relpath);
+- fprintf(fp, "<a href=\"%srefs.html\">Refs</a>", relpath);
++ fputs("</header><nav>\n", fp);
++ fprintf(fp, " <a rel=\"version-history\" href=\"%slog.html\">Log</a>", relpath);
++ fprintf(fp, " <a rel=\"index\" href=\"%sfiles.html\">Files</a>", relpath);
++ fprintf(fp, " <a href=\"%srefs.html\">Refs</a>", relpath);
+ if (submodules)
+ fprintf(fp, " | <a href=\"%sfile/%s.html\">Submodules</a>",
+ relpath, submodules);
+@@ -384,13 +386,13 @@ writeheader(FILE *fp, const char *title)
+ if (license)
+ fprintf(fp, " | <a href=\"%sfile/%s.html\">LICENSE</a>",
+ relpath, license);
+- fputs("</td></tr></table>\n<hr/>\n<div id=\"content\">\n", fp);
++ fputs("</nav>\n<main>\n", fp);
+ }
+
+ void
+ writefooter(FILE *fp)
+ {
+- fputs("</div>\n</body>\n</html>\n", fp);
++ fputs("</main>\n</body>\n</html>\n", fp);
+ }
+
+ int
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0013-stagit.c-Remove-b-or-replace-to-strong.patch b/patches/www-apps/stagit-0.9/0013-stagit.c-Remove-b-or-replace-to-strong.patch
@@ -0,0 +1,109 @@
+From 0ab9f0759098f632528b605e35d8664eee7df305 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 31 Jul 2017 09:02:10 +0200
+Subject: [PATCH 13/22] stagit.c: Remove <b> (or replace to strong)
+
+---
+ stagit.c | 33 ++++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 17 deletions(-)
+
+diff --git a/stagit.c b/stagit.c
+index 2be3d6b..aa1ea11 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -430,21 +430,21 @@ writeblobhtml(FILE *fp, const git_blob *blob)
+ void
+ printcommit(FILE *fp, struct commitinfo *ci)
+ {
+- fprintf(fp, "<b>commit</b> <a href=\"%scommit/%s.html\">%s</a>\n",
++ fprintf(fp, "<strong>commit:</strong> <a href=\"%scommit/%s.html\">%s</a>\n",
+ relpath, ci->oid, ci->oid);
+
+ if (ci->parentoid[0])
+- fprintf(fp, "<b>parent</b> <a href=\"%scommit/%s.html\">%s</a>\n",
++ fprintf(fp, "<strong>parent:</strong> <a href=\"%scommit/%s.html\">%s</a>\n",
+ relpath, ci->parentoid, ci->parentoid);
+
+ if (ci->author) {
+- fputs("<b>Author:</b> ", fp);
++ fputs("<strong>Author:</strong> ", fp);
+ xmlencode(fp, ci->author->name, strlen(ci->author->name));
+ fputs(" <<a href=\"mailto:", fp);
+ xmlencode(fp, ci->author->email, strlen(ci->author->email));
+ fputs("\">", fp);
+ xmlencode(fp, ci->author->email, strlen(ci->author->email));
+- fputs("</a>>\n<b>Date:</b> ", fp);
++ fputs("</a>>\n<strong>Date:</strong> ", fp);
+ printtime(fp, &(ci->author->when));
+ fputc('\n', fp);
+ }
+@@ -480,7 +480,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ }
+
+ /* diff stat */
+- fputs("<b>Diffstat:</b>\n<table>", fp);
++ fputs("<h2>Diffstat:</h2>\n<table>", fp);
+ for (i = 0; i < ci->ndeltas; i++) {
+ delta = git_patch_get_delta(ci->deltas[i]->patch);
+
+@@ -535,7 +535,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ for (i = 0; i < ci->ndeltas; i++) {
+ patch = ci->deltas[i]->patch;
+ delta = git_patch_get_delta(patch);
+- fprintf(fp, "<b>diff --git a/<a id=\"h%zu\" href=\"%sfile/", i, relpath);
++ fprintf(fp, "<strong>diff --git a/<a id=\"h%zu\" href=\"%sfile/", i, relpath);
+ xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path));
+ fputs(".html\">", fp);
+ xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path));
+@@ -543,7 +543,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path));
+ fprintf(fp, ".html\">");
+ xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path));
+- fprintf(fp, "</a></b>\n");
++ fprintf(fp, "</a></strong>\n");
+
+ /* check binary data */
+ if (delta->flags & GIT_DIFF_FLAG_BINARY) {
+@@ -921,8 +921,7 @@ writefiles(FILE *fp, const git_oid *id)
+ int ret = -1;
+
+ fputs("<table id=\"files\"><thead>\n<tr>"
+- "<td><b>Mode</b></td><td><b>Name</b></td>"
+- "<td class=\"num\" align=\"right\"><b>Size</b></td>"
++ "<td>Mode</td><td>Name</td><td class=\"num\">Size</td>"
+ "</tr>\n</thead><tbody>\n", fp);
+
+ if (!git_commit_lookup(&commit, repo, id) &&
+@@ -1007,9 +1006,9 @@ writerefs(FILE *fp)
+ /* print header if it has an entry (first). */
+ if (++count == 1) {
+ fprintf(fp, "<h2>%s</h2><table id=\"%s\">"
+- "<thead>\n<tr><td><b>Name</b></td>"
+- "<td><b>Last commit date</b></td>"
+- "<td><b>Author</b></td>\n</tr>\n"
++ "<thead>\n<tr><td>Name</td>"
++ "<td>Last commit date</td>"
++ "<td>Author</td>\n</tr>\n"
+ "</thead><tbody>\n",
+ titles[j], ids[j]);
+ }
+@@ -1182,11 +1181,11 @@ main(int argc, char *argv[])
+ relpath = "";
+ mkdir("commit", S_IRWXU | S_IRWXG | S_IRWXO);
+ writeheader(fp, "Log");
+- fputs("<table id=\"log\"><thead>\n<tr><td><b>Date</b></td>"
+- "<td><b>Commit message</b></td>"
+- "<td><b>Author</b></td><td class=\"num\" align=\"right\"><b>Files</b></td>"
+- "<td class=\"num\" align=\"right\"><b>+</b></td>"
+- "<td class=\"num\" align=\"right\"><b>-</b></td></tr>\n</thead><tbody>\n", fp);
++ fputs("<table id=\"log\"><thead>\n<tr><td>Date</td>"
++ "<td>Commit message</td>"
++ "<td>Author</td><td class=\"num\" align=\"right\">Files</td>"
++ "<td class=\"num\" align=\"right\">+</td>"
++ "<td class=\"num\" align=\"right\">-</td></tr>\n</thead><tbody>\n", fp);
+
+ if (cachefile && head) {
+ /* read from cache file (does not need to exist) */
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0014-stagit-.c-Custom-footer.patch b/patches/www-apps/stagit-0.9/0014-stagit-.c-Custom-footer.patch
@@ -0,0 +1,43 @@
+From 36b1b10f3e1bd7dec5ba15c3928586a7544da7d3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sat, 21 Apr 2018 17:31:24 +0200
+Subject: [PATCH 14/22] stagit*.c: Custom footer
+
+---
+ stagit-index.c | 4 +++-
+ stagit.c | 4 +++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/stagit-index.c b/stagit-index.c
+index b4142ff..3d38142 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -90,7 +90,9 @@ writeheader(FILE *fp)
+ void
+ writefooter(FILE *fp)
+ {
+- fputs("</tbody>\n</table>\n</div>\n</body>\n</html>\n", fp);
++ fputs("</tbody>\n</table>\n</div>\n",fp);
++ fputs("\t<footer>Please <a href=\"https://hacktivis.me/about\">contact me</a> by any means for patches, issues(tracker will maybe be added oneday), thanks/donations, or whatever else.</footer>\n", fp);
++ fputs("</body>\n</html>\n", fp);
+ }
+
+ int
+diff --git a/stagit.c b/stagit.c
+index aa1ea11..a20d8f4 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -392,7 +392,9 @@ writeheader(FILE *fp, const char *title)
+ void
+ writefooter(FILE *fp)
+ {
+- fputs("</main>\n</body>\n</html>\n", fp);
++ fputs("</main>\n", fp);
++ fputs("\t<footer>Please <a href=\"https://hacktivis.me/about\">contact me</a> by any means for patches, issues(tracker will maybe be added oneday), thanks/donations, or whatever else.</footer>\n", fp);
++ fputs("</body>\n</html>\n", fp);
+ }
+
+ int
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0015-style.css-Replace-with-my-own.patch b/patches/www-apps/stagit-0.9/0015-style.css-Replace-with-my-own.patch
@@ -0,0 +1,162 @@
+From bbb1b0664c34bd7953f790f7a60e32821f7e9185 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 31 Jul 2017 09:12:55 +0200
+Subject: [PATCH 15/22] style.css: Replace with my own
+
+---
+ style.css | 100 +++++++++++++++++++++++-------------------------------
+ 1 file changed, 42 insertions(+), 58 deletions(-)
+
+diff --git a/style.css b/style.css
+index d8f9fff..167498a 100644
+--- a/style.css
++++ b/style.css
+@@ -1,102 +1,86 @@
+-body {
+- color: #000;
+- background-color: #fff;
+- font-family: monospace;
+-}
++@import '/css/colorscheme.css'; /* This makes it depend on blog.git at the root */
+
+-h1, h2, h3, h4, h5, h6 {
+- font-size: 1em;
++html, body {
++ background-color: var(--dark-ansi00-soft);
++ color: var(--dark-ansi15);
+ margin: 0;
++ padding: 0;
++ font-family: sans;
+ }
+
+-img, h1, h2 {
+- vertical-align: middle;
++header h1 {
++ display: inline;
++ margin: 0 1em;
+ }
+
+-img {
+- border: 0;
++header {
++ background-color: var(--dark-ansi00);
++ padding: 1ch 2em;
+ }
+
+-a.d,
+-a.h,
+-a.i,
+-a.line {
+- text-decoration: none;
++footer {
++ margin: 2ch 2em;
+ }
+
+-#blob a {
+- color: #777;
++main {
++ display: table;
++ margin: 0 auto;
+ }
+
+-#blob a:hover {
+- color: blue;
++a {
++ color: var(--dark-ansi04);
+ text-decoration: none;
+ }
+
+-table thead td {
+- font-weight: bold;
++h1,h2,h3,h4,h5,h6 { font-family: serif; }
++pre {
++ white-space: pre-wrap;
++ font-family: monospace;
+ }
+
+-table td {
+- padding: 0 0.4em;
++nav, .line, tr:nth-child(even) {
++ background-color: var(--dark-ansi00);
+ }
+
+-#content table td {
+- vertical-align: top;
+- white-space: nowrap;
++nav {
++ font-size: larger;
++ font-weight: bold;
++ padding: 0.25rem;
+ }
+
+-#branches tr:hover td,
+-#tags tr:hover td,
+-#index tr:hover td,
+-#log tr:hover td,
+-#files tr:hover td {
+- background-color: #eee;
++table thead td {
++ font-weight: bold;
+ }
+
+-#index tr td:nth-child(2),
+-#tags tr td:nth-child(3),
+-#branches tr td:nth-child(3),
+-#log tr td:nth-child(2) {
+- white-space: normal;
++table td {
++ padding: 0 0.4em;
+ }
+
+ td.num {
+ text-align: right;
+ }
+
+-.desc {
+- color: #777;
++td:nth-child(1) {
++ text-align: right;
++ min-width: 8em;
+ }
+
+-hr {
+- border: 0;
+- border-top: 1px solid #777;
+- height: 1px;
+-}
+-
+-pre {
+- font-family: monospace;
++tr td {
++ padding: 0.5em 1em;
+ }
+
+ pre a.h {
+- color: #00a;
++ color: var(--dark-ansi05);
+ }
+
+ .A,
+ span.i,
+ pre a.i {
+- color: #070;
++ color: var(--dark-ansi02);
+ }
+
+ .D,
+ span.d,
+ pre a.d {
+- color: #e00;
+-}
+-
+-pre a.h:hover,
+-pre a.i:hover,
+-pre a.d:hover {
+- text-decoration: none;
+-}
++ color: var(--dark-ansi01);
++}
+\ No newline at end of file
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0016-stagit-index.c-HTML5-it-Remove-Owner.patch b/patches/www-apps/stagit-0.9/0016-stagit-index.c-HTML5-it-Remove-Owner.patch
@@ -0,0 +1,87 @@
+From 0d1b8ab205d7474b23cb53c9eb2df386a5b1c50d Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Wed, 1 Aug 2018 00:44:21 +0200
+Subject: [PATCH 16/22] stagit-index.c: HTML5 it, Remove Owner
+
+---
+ config.h | 2 ++
+ stagit-index.c | 31 +++++++++++++++++++------------
+ 2 files changed, 21 insertions(+), 12 deletions(-)
+
+diff --git a/config.h b/config.h
+index ee798da..2be90bb 100644
+--- a/config.h
++++ b/config.h
+@@ -3,3 +3,5 @@ static const unsigned summarylen = 70; /* summary length in the log */
+ static const int showlinecount = 1; /* display line count or file size in file tree index */
+ static const char *assetpath = "/git/"; /* Where are the assets (example: assetpath/style.css ) */
+ static const char *faviconurl = "/git/logo.png"; /* Where is the favicon (example: /favicon.png ) */
++static const char *repo_name = "/git/";
++static const char *repo_description = "Lanodan’s git repositories";
+diff --git a/stagit-index.c b/stagit-index.c
+index 3d38142..19eb047 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -12,6 +12,7 @@
+ #include <git2.h>
+
+ #include "compat.h"
++#include "config.h"
+
+ static git_repository *repo;
+
+@@ -73,24 +74,32 @@ writeheader(FILE *fp)
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n"
+ "<title>", fp);
+ xmlencode(fp, description, strlen(description));
+- fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%sfavicon.png\" />\n", relpath);
++ if(strlen(faviconurl) > 0) {
++ fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%s\" />\n", faviconurl);
++ } else {
++ fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%sfavicon.png\" />\n", assetpath);
++ }
+ fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", relpath);
+- fputs("</head>\n<body>\n", fp);
+- fprintf(fp, "<table>\n<tr><td><img src=\"%slogo.png\" alt=\"\" width=\"32\" height=\"32\" /></td>\n"
+- "<td><span class=\"desc\">", relpath);
+- xmlencode(fp, description, strlen(description));
+- fputs("</span></td></tr><tr><td></td><td>\n"
+- "</td></tr>\n</table>\n<hr/>\n<div id=\"content\">\n"
++ fputs("</head>\n<body>\n<header>", fp);
++ fprintf(fp, "<img src=\"%slogo.png\" alt=\"logo\" width=\"32\" height=\"32\" />",
++ assetpath);
++ fputs("<h1>", fp);
++ xmlencode(fp, repo_name, strlen(repo_name));
++ fputs("</h1><span class=\"desc\">", fp);
++ xmlencode(fp, repo_description, strlen(repo_description));
++ fputs("</span></header>", fp);
++ fputs("<main>\n"
+ "<table id=\"index\"><thead>\n"
+- "<tr><td><b>Name</b></td><td><b>Description</b></td><td><b>Owner</b></td>"
+- "<td><b>Last commit</b></td></tr>"
++ "<tr><th>Name</th><th>Description</th>"
++ "<th>Last commit</th></tr>"
+ "</thead><tbody>\n", fp);
+ }
+
+ void
+ writefooter(FILE *fp)
+ {
+- fputs("</tbody>\n</table>\n</div>\n",fp);
++ fputs("</tbody>\n</table>\n",fp);
++ fputs("</main>\n", fp);
+ fputs("\t<footer>Please <a href=\"https://hacktivis.me/about\">contact me</a> by any means for patches, issues(tracker will maybe be added oneday), thanks/donations, or whatever else.</footer>\n", fp);
+ fputs("</body>\n</html>\n", fp);
+ }
+@@ -132,8 +141,6 @@ writelog(FILE *fp)
+ fputs("</a></td><td>", fp);
+ xmlencode(fp, description, strlen(description));
+ fputs("</td><td>", fp);
+- xmlencode(fp, owner, strlen(owner));
+- fputs("</td><td>", fp);
+ if (author)
+ printtimeshort(fp, &(author->when));
+ fputs("</td></tr>", fp);
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0017-stagit.c-fixup-HTML5.patch b/patches/www-apps/stagit-0.9/0017-stagit.c-fixup-HTML5.patch
@@ -0,0 +1,33 @@
+From bdafdb3ad828d9f6610ee832e000910629aca7e0 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 11 Feb 2019 03:09:41 +0100
+Subject: [PATCH 17/22] stagit.c: fixup HTML5
+
+---
+ stagit.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/stagit.c b/stagit.c
+index a20d8f4..d6d8b4b 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -378,13 +378,13 @@ writeheader(FILE *fp, const char *title)
+ fprintf(fp, " <a rel=\"index\" href=\"%sfiles.html\">Files</a>", relpath);
+ fprintf(fp, " <a href=\"%srefs.html\">Refs</a>", relpath);
+ if (submodules)
+- fprintf(fp, " | <a href=\"%sfile/%s.html\">Submodules</a>",
++ fprintf(fp, " <a href=\"%sfile/%s.html\">Submodules</a>",
+ relpath, submodules);
+ if (readme)
+- fprintf(fp, " | <a href=\"%sfile/%s.html\">README</a>",
++ fprintf(fp, " <a href=\"%sfile/%s.html\">README</a>",
+ relpath, readme);
+ if (license)
+- fprintf(fp, " | <a href=\"%sfile/%s.html\">LICENSE</a>",
++ fprintf(fp, " <a href=\"%sfile/%s.html\">LICENSE</a>",
+ relpath, license);
+ fputs("</nav>\n<main>\n", fp);
+ }
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0018-stagit.c-Remove-decorative-td-td.patch b/patches/www-apps/stagit-0.9/0018-stagit.c-Remove-decorative-td-td.patch
@@ -0,0 +1,25 @@
+From 7fa05aac02d1eedc2c0c2ba7cf9f3fd338dd55d6 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 11 Feb 2019 03:10:17 +0100
+Subject: [PATCH 18/22] stagit.c: Remove decorative <td> | </td>
+
+---
+ stagit.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/stagit.c b/stagit.c
+index d6d8b4b..fd5873a 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -520,7 +520,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ memset(&linestr, '+', add);
+ memset(&linestr[add], '-', del);
+
+- fprintf(fp, "</a></td><td> | </td><td class=\"num\">%zu</td><td><span class=\"i\">",
++ fprintf(fp, "</a></td><td class=\"num\">%zu</td><td><span class=\"i\">",
+ ci->deltas[i]->addcount + ci->deltas[i]->delcount);
+ fwrite(&linestr, 1, add, fp);
+ fputs("</span><span class=\"d\">", fp);
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0019-stagit-index-.c-Add-a-bunch-of-classes-for-styling.patch b/patches/www-apps/stagit-0.9/0019-stagit-index-.c-Add-a-bunch-of-classes-for-styling.patch
@@ -0,0 +1,69 @@
+From bdd0f2f3dee07deb3ab9b340335e1d3e70a38ebf Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 17 Mar 2019 01:20:06 +0100
+Subject: [PATCH 19/22] stagit{-index}.c: Add a bunch of classes for styling
+
+---
+ stagit-index.c | 6 +++---
+ stagit.c | 12 ++++++------
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/stagit-index.c b/stagit-index.c
+index 19eb047..b31b088 100644
+--- a/stagit-index.c
++++ b/stagit-index.c
+@@ -133,14 +133,14 @@ writelog(FILE *fp)
+ if (!strcmp(p, ".git"))
+ *p = '\0';
+
+- fputs("<tr><td><a href=\"", fp);
++ fputs("<tr><td class=\"text index-name\"><a href=\"", fp);
+ xmlencode(fp, stripped_name, strlen(stripped_name));
+ /*fputs("/log.html\">", fp); Let http server set default index */
+ fputs("/\">", fp);
+ xmlencode(fp, stripped_name, strlen(stripped_name));
+- fputs("</a></td><td>", fp);
++ fputs("</a></td><td class=\"text index-description\">", fp);
+ xmlencode(fp, description, strlen(description));
+- fputs("</td><td>", fp);
++ fputs("</td><td class=\"date index-author-date\">", fp);
+ if (author)
+ printtimeshort(fp, &(author->when));
+ fputs("</td></tr>", fp);
+diff --git a/stagit.c b/stagit.c
+index fd5873a..f6282fa 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -584,23 +584,23 @@ printshowfile(FILE *fp, struct commitinfo *ci)
+ void
+ writelogline(FILE *fp, struct commitinfo *ci)
+ {
+- fputs("<tr><td>", fp);
++ fputs("<tr><td class=\"date log-author-date\">", fp);
+ if (ci->author)
+ printtimeshort(fp, &(ci->author->when));
+- fputs("</td><td>", fp);
++ fputs("</td><td class=\"text log-summary\">", fp);
+ if (ci->summary) {
+ fprintf(fp, "<a href=\"%scommit/%s.html\">", relpath, ci->oid);
+ xmlencode(fp, ci->summary, strlen(ci->summary));
+ fputs("</a>", fp);
+ }
+- fputs("</td><td>", fp);
++ fputs("</td><td class=\"text log-author\">", fp);
+ if (ci->author)
+ xmlencode(fp, ci->author->name, strlen(ci->author->name));
+- fputs("</td><td class=\"num\" align=\"right\">", fp);
++ fputs("</td><td class=\"num log-filecount\">", fp);
+ fprintf(fp, "%zu", ci->filecount);
+- fputs("</td><td class=\"num\" align=\"right\">", fp);
++ fputs("</td><td class=\"num log-addcount\">", fp);
+ fprintf(fp, "+%zu", ci->addcount);
+- fputs("</td><td class=\"num\" align=\"right\">", fp);
++ fputs("</td><td class=\"num log-delcount\">", fp);
+ fprintf(fp, "-%zu", ci->delcount);
+ fputs("</td></tr>\n", fp);
+ }
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0020-style.css-Fix-overflows.patch b/patches/www-apps/stagit-0.9/0020-style.css-Fix-overflows.patch
@@ -0,0 +1,45 @@
+From 189b1ad74de4096a312d1d498bbff5ab1bcf0655 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Sun, 17 Mar 2019 01:27:24 +0100
+Subject: [PATCH 20/22] style.css: Fix overflows
+
+---
+ style.css | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/style.css b/style.css
+index 167498a..4d5e7a9 100644
+--- a/style.css
++++ b/style.css
+@@ -6,6 +6,7 @@ html, body {
+ margin: 0;
+ padding: 0;
+ font-family: sans;
++ overflow-wrap: break-word;
+ }
+
+ header h1 {
+@@ -60,9 +61,19 @@ td.num {
+ text-align: right;
+ }
+
++td.date {
++ min-width: 8em;
++}
++
++td.log-summary,
++td.index-name,
++td.index-description {
++ max-width: 50em;
++ break-word: break-all;
++}
++
+ td:nth-child(1) {
+ text-align: right;
+- min-width: 8em;
+ }
+
+ tr td {
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0021-stagit.c-Move-atom-link-next-to-Log-for-better-disco.patch b/patches/www-apps/stagit-0.9/0021-stagit.c-Move-atom-link-next-to-Log-for-better-disco.patch
@@ -0,0 +1,35 @@
+From 05d3fadaf9324a62c132c1514d1b456998e2dab0 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Thu, 21 Mar 2019 11:32:07 +0100
+Subject: [PATCH 21/22] stagit.c: Move atom link next to Log for better
+ discoverability
+
+---
+ stagit.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/stagit.c b/stagit.c
+index f6282fa..48d6d5c 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -355,8 +355,6 @@ writeheader(FILE *fp, const char *title)
+ if(strlen(faviconurl) > 0) {
+ fprintf(fp, "</title>\n<link rel=\"icon\" type=\"image/png\" href=\"%s\" />\n", faviconurl);
+ }
+- fprintf(fp, "<link rel=\"alternate\" type=\"application/atom+xml\" title=\"%s Atom Feed\" href=\"%satom.xml\" />\n",
+- name, relpath);
+ fprintf(fp, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%sstyle.css\" />\n", assetpath);
+ fputs("</head>\n<body>\n<header>", fp);
+ fprintf(fp, "<a href=\"..\"><img src=\"%slogo.png\" alt=\"logo\" width=\"32\" height=\"32\" /></a>",
+@@ -375,6 +373,8 @@ writeheader(FILE *fp, const char *title)
+ }
+ fputs("</header><nav>\n", fp);
+ fprintf(fp, " <a rel=\"version-history\" href=\"%slog.html\">Log</a>", relpath);
++ fprintf(fp, " (<a rel=\"alternate\" type=\"application/atom+xml\" title=\"%s Atom Feed\" href=\"%satom.xml\">atom</a>)",
++ name, relpath);
+ fprintf(fp, " <a rel=\"index\" href=\"%sfiles.html\">Files</a>", relpath);
+ fprintf(fp, " <a href=\"%srefs.html\">Refs</a>", relpath);
+ if (submodules)
+--
+2.26.2
+
diff --git a/patches/www-apps/stagit-0.9/0022-stagit.c-link-footer-to-git-send-email.io.patch b/patches/www-apps/stagit-0.9/0022-stagit.c-link-footer-to-git-send-email.io.patch
@@ -0,0 +1,25 @@
+From 380776fb8c5a9aa1c3bd799d2d60d8809eef6877 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Wed, 6 May 2020 12:40:06 +0200
+Subject: [PATCH 22/22] stagit.c: link footer to git-send-email.io
+
+---
+ stagit.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/stagit.c b/stagit.c
+index 48d6d5c..2688d58 100644
+--- a/stagit.c
++++ b/stagit.c
+@@ -393,7 +393,7 @@ void
+ writefooter(FILE *fp)
+ {
+ fputs("</main>\n", fp);
+- fputs("\t<footer>Please <a href=\"https://hacktivis.me/about\">contact me</a> by any means for patches, issues(tracker will maybe be added oneday), thanks/donations, or whatever else.</footer>\n", fp);
++ fputs("\t<footer>Please <a href=\"https://hacktivis.me/about\">contact me</a> by any means for <a href=\"https://git-send-email.io/\">patches</a>, issues(tracker will maybe be added oneday), or whatever else.</footer>\n", fp);
+ fputs("</body>\n</html>\n", fp);
+ }
+
+--
+2.26.2
+
diff --git a/patches/www-client/firefox/firefox-solarized-view-source.diff b/patches/www-client/firefox/firefox-solarized-view-source.diff
@@ -0,0 +1,70 @@
+--- firefox-52.2.0esr/layout/style/res/viewsource.css.old 2017-07-24 03:27:24.487605257 +0200
++++ firefox-52.2.0esr/layout/style/res/viewsource.css 2017-07-24 03:29:46.253217198 +0200
+@@ -6,8 +6,8 @@
+ @namespace url(http://www.w3.org/1999/xhtml); /* set default namespace to HTML */
+
+ *|*:root {
+- background-color: white;
+- color: black;
++ background-color: #002b36;
++ color: #839496;
+ direction: ltr;
+ -moz-control-character-visibility: visible;
+ height: 100%;
+@@ -20,7 +20,7 @@
+ height: 100%;
+ box-sizing: border-box;
+ margin: 0;
+- padding: 8px;
++ padding: 0;
+ }
+ #viewsource.wrap {
+ white-space: pre-wrap;
+@@ -41,20 +41,21 @@
+ width: 5ch;
+ margin: 0 0 0 -5ch;
+ text-align: right;
+- color: #ccc;
++ color: #93a1a1;
++ background-color: #073642;
+ font-weight: normal;
+ font-style: normal;
+ }
+ .highlight .start-tag {
+- color: purple;
++ color: #6c71c4;
+ font-weight: bold;
+ }
+ .highlight .end-tag {
+- color: purple;
++ color: #6c71c4;
+ font-weight: bold;
+ }
+ .highlight .comment {
+- color: green;
++ color: #586e75;
+ font-style: italic;
+ }
+ .highlight .cdata {
+@@ -76,11 +77,11 @@
+ font-weight: normal;
+ }
+ .highlight .attribute-name {
+- color: black;
++ color: #cb4b16;
+ font-weight: bold;
+ }
+ .highlight .attribute-value {
+- color: blue;
++ color: #2aa198;
+ font-weight: normal;
+ }
+ .highlight .markupdeclaration {
+@@ -96,6 +97,6 @@
+ .highlight .error,
+ .highlight .error > :-moz-any(.start-tag, .end-tag, .comment, .cdata, .doctype,
+ .pi, .entity, .attribute-name, .attribute-value) {
+- color: red;
++ color: #dc322f;
+ font-weight: bold;
+ }
diff --git a/patches/www-servers/nginx-1.14/00 no bgwhite.patch b/patches/www-servers/nginx-1.14/00 no bgwhite.patch
@@ -0,0 +1,11 @@
+--- nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c.old 2017-08-12 17:03:38.956602736 +0200
++++ nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c 2017-08-12 17:04:06.514291803 +0200
+@@ -446,7 +446,7 @@
+
+ static u_char header[] =
+ "</title></head>" CRLF
+- "<body bgcolor=\"white\">" CRLF
++ "<body>" CRLF
+ "<h1>Index of "
+ ;
+
diff --git a/patches/www-servers/nginx-1.14/01 ISO 8601.patch b/patches/www-servers/nginx-1.14/01 ISO 8601.patch
@@ -0,0 +1,24 @@
+--- nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c.old 2017-08-12 17:06:14.873525862 +0200
++++ nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c 2017-08-12 17:07:32.167042961 +0200
+@@ -455,9 +455,6 @@
+ "</html>" CRLF
+ ;
+
+- static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+-
+ if (r->headers_out.charset.len == 5
+ && ngx_strncasecmp(r->headers_out.charset.data, (u_char *) "utf-8", 5)
+ == 0)
+@@ -617,9 +614,9 @@
+
+ ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
+
+- b->last = ngx_sprintf(b->last, "%02d-%s-%d %02d:%02d ",
++ b->last = ngx_sprintf(b->last, "%02d-%02d-%02d %02d:%02d ",
+ tm.ngx_tm_mday,
+- months[tm.ngx_tm_mon - 1],
++ tm.ngx_tm_mon,
+ tm.ngx_tm_year,
+ tm.ngx_tm_hour,
+ tm.ngx_tm_min);
diff --git a/patches/www-servers/nginx-1.14/02 custom autoindex.patch b/patches/www-servers/nginx-1.14/02 custom autoindex.patch
@@ -0,0 +1,185 @@
+diff --git a/src/http/modules/ngx_http_autoindex_module.c.old b/src/http/modules/ngx_http_autoindex_module.c
+index 2af88a0..18c7570 100644
+--- a/src/http/modules/ngx_http_autoindex_module.c.old
++++ b/src/http/modules/ngx_http_autoindex_module.c
+@@ -52,9 +52,6 @@ typedef struct {
+
+ #define NGX_HTTP_AUTOINDEX_PREALLOCATE 50
+
+-#define NGX_HTTP_AUTOINDEX_NAME_LEN 50
+-
+-
+ static ngx_buf_t *ngx_http_autoindex_html(ngx_http_request_t *r,
+ ngx_array_t *entries);
+ static ngx_buf_t *ngx_http_autoindex_json(ngx_http_request_t *r,
+@@ -478,7 +475,8 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ + sizeof(header) - 1
+ + r->uri.len + escape_html
+ + sizeof("</h1>") - 1
+- + sizeof("<hr><pre><a href=\"../\">../</a>" CRLF) - 1
++ + sizeof("<table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF) - 1
++ + sizeof("<tr><td><a href=\"../\">../</a></td></tr>" CRLF) - 1
+ + sizeof("</pre><hr>") - 1
+ + sizeof(tail) - 1;
+
+@@ -499,15 +497,13 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ }
+
+ len += sizeof("<a href=\"") - 1
+- + entry[i].name.len + entry[i].escape
++ + entry[i].name.len
+ + 1 /* 1 is for "/" */
+ + sizeof("\">") - 1
+- + entry[i].name.len - entry[i].utf_len
+- + entry[i].escape_html
+- + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof(">") - 2
++ + entry[i].utf_len
+ + sizeof("</a>") - 1
+ + sizeof(" 28-Sep-1970 12:00 ") - 1
+- + 20 /* the file size */
++ + 256 /* the file size */
+ + 2;
+ }
+
+@@ -531,14 +527,14 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+
+ b->last = ngx_cpymem(b->last, "</h1>", sizeof("</h1>") - 1);
+
+- b->last = ngx_cpymem(b->last, "<hr><pre><a href=\"../\">../</a>" CRLF,
+- sizeof("<hr><pre><a href=\"../\">../</a>" CRLF) - 1);
++ b->last = ngx_cpymem(b->last, "<hr><table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF "<tr><td><a href=\"../\">../</a></td></tr>" CRLF,
++ sizeof("<hr><table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF "<tr><td><a href=\"../\">../</a></td></tr>" CRLF) - 1);
+
+ alcf = ngx_http_get_module_loc_conf(r, ngx_http_autoindex_module);
+ tp = ngx_timeofday();
+
+ for (i = 0; i < entries->nelts; i++) {
+- b->last = ngx_cpymem(b->last, "<a href=\"", sizeof("<a href=\"") - 1);
++ b->last = ngx_cpymem(b->last, "<tr><td><a href=\"", sizeof("<tr><td><a href=\"") - 1);
+
+ if (entry[i].escape) {
+ ngx_escape_uri(b->last, entry[i].name.data, entry[i].name.len,
+@@ -558,69 +554,19 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ *b->last++ = '"';
+ *b->last++ = '>';
+
+- len = entry[i].utf_len;
+-
+- if (entry[i].name.len != len) {
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1;
+-
+- } else {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1;
+- }
+-
+- last = b->last;
+- b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
+- char_len, entry[i].name.len + 1);
++ b->last = ngx_cpymem(b->last, entry[i].name.data,
++ entry[i].name.len);
+
+- if (entry[i].escape_html) {
+- b->last = (u_char *) ngx_escape_html(last, entry[i].name.data,
+- b->last - last);
+- }
+-
+- last = b->last;
+-
+- } else {
+- if (entry[i].escape_html) {
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3;
+-
+- } else {
+- char_len = len;
+- }
+-
+- b->last = (u_char *) ngx_escape_html(b->last,
+- entry[i].name.data, char_len);
+- last = b->last;
+-
+- } else {
+- b->last = ngx_cpystrn(b->last, entry[i].name.data,
+- NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
+- last = b->last - 3;
+- }
+- }
+-
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- b->last = ngx_cpymem(last, "..></a>", sizeof("..></a>") - 1);
+-
+- } else {
+- if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+- *b->last++ = '/';
+- len++;
+- }
+-
+- b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);
+-
+- if (NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+- ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len);
+- b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len;
+- }
++ if (entry[i].dir) {
++ *b->last++ = '/';
++ len++;
+ }
+
+- *b->last++ = ' ';
++ b->last = ngx_cpymem(b->last, "</a></td>", sizeof("</a></td>") - 1);
+
+ ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
+
+- b->last = ngx_sprintf(b->last, "%02d-%02d-%02d %02d:%02d ",
++ b->last = ngx_sprintf(b->last, "<td>%02d-%02d-%02d %02d:%02d</td>",
+ tm.ngx_tm_mday,
+ tm.ngx_tm_mon,
+ tm.ngx_tm_year,
+@@ -628,19 +574,12 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ tm.ngx_tm_min);
+
+ if (alcf->exact_size) {
+- if (entry[i].dir) {
+- b->last = ngx_cpymem(b->last, " -",
+- sizeof(" -") - 1);
+- } else {
+- b->last = ngx_sprintf(b->last, "%19O", entry[i].size);
++ if (!entry[i].dir) {
++ b->last = ngx_sprintf(b->last, "<td>%O</td>", entry[i].size);
+ }
+
+ } else {
+- if (entry[i].dir) {
+- b->last = ngx_cpymem(b->last, " -",
+- sizeof(" -") - 1);
+-
+- } else {
++ if (!entry[i].dir) {
+ length = entry[i].size;
+
+ if (length > 1024 * 1024 * 1024 - 1) {
+@@ -672,19 +611,18 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ }
+
+ if (scale) {
+- b->last = ngx_sprintf(b->last, "%6i%c", size, scale);
++ b->last = ngx_sprintf(b->last, "<td>%i%c</td>", size, scale);
+
+ } else {
+- b->last = ngx_sprintf(b->last, " %6i", size);
++ b->last = ngx_sprintf(b->last, "<td>%i</td>", size);
+ }
+ }
+ }
+
+- *b->last++ = CR;
+- *b->last++ = LF;
++ b->last = ngx_sprintf(b->last, "</tr>" CRLF);
+ }
+
+- b->last = ngx_cpymem(b->last, "</pre><hr>", sizeof("</pre><hr>") - 1);
++ b->last = ngx_cpymem(b->last, "</table>", sizeof("</table>") - 1);
+
+ b->last = ngx_cpymem(b->last, tail, sizeof(tail) - 1);
+
diff --git a/patches/www-servers/nginx-1.14/03 autoindex styling.patch b/patches/www-servers/nginx-1.14/03 autoindex styling.patch
@@ -0,0 +1,16 @@
+diff --git a/src/http/modules/ngx_http_autoindex_module.c.old b/src/http/modules/ngx_http_autoindex_module.c
+index 18c7570..94176b4 100644
+--- a/src/http/modules/ngx_http_autoindex_module.c.old
++++ b/src/http/modules/ngx_http_autoindex_module.c
+@@ -448,8 +448,9 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ ;
+
+ static u_char header[] =
+- "</title></head>" CRLF
+- "<body>" CRLF
++ "</title>" CRLF
++ "<style>td{font-family:monospace;}td:nth-child(3){text-align:right;}</style>" CRLF
++ "</head><body>" CRLF
+ "<h1>Index of "
+ ;
+
diff --git a/patches/www-servers/nginx/01 ISO 8601.patch b/patches/www-servers/nginx/01 ISO 8601.patch
@@ -0,0 +1,26 @@
+--- nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c.old 2017-08-12 17:06:14.873525862 +0200
++++ nginx-1.12.1/src/http/modules/ngx_http_autoindex_module.c 2017-08-12 17:07:32.167042961 +0200
+@@ -455,9 +455,6 @@
+ "</html>" CRLF
+ ;
+
+- static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+-
+ if (r->headers_out.charset.len == 5
+ && ngx_strncasecmp(r->headers_out.charset.data, (u_char *) "utf-8", 5)
+ == 0)
+@@ -617,9 +614,9 @@
+
+ ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
+
+- b->last = ngx_sprintf(b->last, "%02d-%s-%d %02d:%02d ",
++ b->last = ngx_sprintf(b->last, "%02d-%02d-%02d %02d:%02d ",
+- tm.ngx_tm_mday,
++ tm.ngx_tm_year,
+- months[tm.ngx_tm_mon - 1],
++ tm.ngx_tm_mon,
+- tm.ngx_tm_year,
++ tm.ngx_tm_mday,
+ tm.ngx_tm_hour,
+ tm.ngx_tm_min);
diff --git a/patches/www-servers/nginx/02 custom autoindex.patch b/patches/www-servers/nginx/02 custom autoindex.patch
@@ -0,0 +1,184 @@
+diff --git a/src/http/modules/ngx_http_autoindex_module.c.old b/src/http/modules/ngx_http_autoindex_module.c
+index 2af88a0..18c7570 100644
+--- a/src/http/modules/ngx_http_autoindex_module.c.old
++++ b/src/http/modules/ngx_http_autoindex_module.c
+@@ -52,9 +52,6 @@ typedef struct {
+
+ #define NGX_HTTP_AUTOINDEX_PREALLOCATE 50
+
+-#define NGX_HTTP_AUTOINDEX_NAME_LEN 50
+-
+-
+ static ngx_buf_t *ngx_http_autoindex_html(ngx_http_request_t *r,
+ ngx_array_t *entries);
+ static ngx_buf_t *ngx_http_autoindex_json(ngx_http_request_t *r,
+@@ -478,7 +475,8 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ + sizeof(header) - 1
+ + r->uri.len + escape_html
+ + sizeof("</h1>") - 1
+- + sizeof("<hr><pre><a href=\"../\">../</a>" CRLF) - 1
++ + sizeof("<table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF) - 1
++ + sizeof("<tr><td><a href=\"../\">../</a></td></tr>" CRLF) - 1
+ + sizeof("</pre><hr>") - 1
+ + sizeof(tail) - 1;
+
+@@ -499,14 +497,12 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ }
+
+ entry_len = sizeof("<a href=\"") - 1
+- + entry[i].name.len + entry[i].escape
++ + entry[i].name.len
+ + 1 /* 1 is for "/" */
+ + sizeof("\">") - 1
+- + entry[i].name.len - entry[i].utf_len
+- + entry[i].escape_html
+- + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof(">") - 2
++ + entry[i].utf_len
+ + sizeof("</a>") - 1
+ + sizeof(" 28-Sep-1970 12:00 ") - 1
+- + 20 /* the file size */
++ + 256 /* the file size */
+ + 2;
+
+@@ -531,14 +527,14 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+
+ b->last = ngx_cpymem(b->last, "</h1>", sizeof("</h1>") - 1);
+
+- b->last = ngx_cpymem(b->last, "<hr><pre><a href=\"../\">../</a>" CRLF,
+- sizeof("<hr><pre><a href=\"../\">../</a>" CRLF) - 1);
++ b->last = ngx_cpymem(b->last, "<hr><table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF "<tr><td><a href=\"../\">../</a></td></tr>" CRLF,
++ sizeof("<hr><table><tr><th>Name</th><th>Date</th><th>Size</th></tr>" CRLF "<tr><td><a href=\"../\">../</a></td></tr>" CRLF) - 1);
+
+ alcf = ngx_http_get_module_loc_conf(r, ngx_http_autoindex_module);
+ tp = ngx_timeofday();
+
+ for (i = 0; i < entries->nelts; i++) {
+- b->last = ngx_cpymem(b->last, "<a href=\"", sizeof("<a href=\"") - 1);
++ b->last = ngx_cpymem(b->last, "<tr><td><a href=\"", sizeof("<tr><td><a href=\"") - 1);
+
+ if (entry[i].escape) {
+ ngx_escape_uri(b->last, entry[i].name.data, entry[i].name.len,
+@@ -558,69 +554,19 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ *b->last++ = '"';
+ *b->last++ = '>';
+
+- len = entry[i].utf_len;
+-
+- if (entry[i].name.len != len) {
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1;
+-
+- } else {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1;
+- }
+-
+- last = b->last;
+- b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
+- char_len, entry[i].name.len + 1);
++ b->last = ngx_cpymem(b->last, entry[i].name.data,
++ entry[i].name.len);
+
+- if (entry[i].escape_html) {
+- b->last = (u_char *) ngx_escape_html(last, entry[i].name.data,
+- b->last - last);
+- }
+-
+- last = b->last;
+-
+- } else {
+- if (entry[i].escape_html) {
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3;
+-
+- } else {
+- char_len = len;
+- }
+-
+- b->last = (u_char *) ngx_escape_html(b->last,
+- entry[i].name.data, char_len);
+- last = b->last;
+-
+- } else {
+- b->last = ngx_cpystrn(b->last, entry[i].name.data,
+- NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
+- last = b->last - 3;
+- }
+- }
+-
+- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+- b->last = ngx_cpymem(last, "..></a>", sizeof("..></a>") - 1);
+-
+- } else {
+- if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+- *b->last++ = '/';
+- len++;
+- }
+-
+- b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);
+-
+- if (NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+- ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len);
+- b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len;
+- }
++ if (entry[i].dir) {
++ *b->last++ = '/';
++ len++;
+ }
+
+- *b->last++ = ' ';
++ b->last = ngx_cpymem(b->last, "</a></td>", sizeof("</a></td>") - 1);
+
+ ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
+
+- b->last = ngx_sprintf(b->last, "%02d-%02d-%02d %02d:%02d ",
++ b->last = ngx_sprintf(b->last, "<td>%02d-%02d-%02d %02d:%02d</td>",
+ tm.ngx_tm_year,
+ tm.ngx_tm_mon,
+ tm.ngx_tm_mday,
+@@ -628,19 +574,12 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ tm.ngx_tm_min);
+
+ if (alcf->exact_size) {
+- if (entry[i].dir) {
+- b->last = ngx_cpymem(b->last, " -",
+- sizeof(" -") - 1);
+- } else {
+- b->last = ngx_sprintf(b->last, "%19O", entry[i].size);
++ if (!entry[i].dir) {
++ b->last = ngx_sprintf(b->last, "<td>%O</td>", entry[i].size);
+ }
+
+ } else {
+- if (entry[i].dir) {
+- b->last = ngx_cpymem(b->last, " -",
+- sizeof(" -") - 1);
+-
+- } else {
++ if (!entry[i].dir) {
+ length = entry[i].size;
+
+ if (length > 1024 * 1024 * 1024 - 1) {
+@@ -672,19 +611,18 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ }
+
+ if (scale) {
+- b->last = ngx_sprintf(b->last, "%6i%c", size, scale);
++ b->last = ngx_sprintf(b->last, "<td>%i%c</td>", size, scale);
+
+ } else {
+- b->last = ngx_sprintf(b->last, " %6i", size);
++ b->last = ngx_sprintf(b->last, "<td>%i</td>", size);
+ }
+ }
+ }
+
+- *b->last++ = CR;
+- *b->last++ = LF;
++ b->last = ngx_sprintf(b->last, "</tr>" CRLF);
+ }
+
+- b->last = ngx_cpymem(b->last, "</pre><hr>", sizeof("</pre><hr>") - 1);
++ b->last = ngx_cpymem(b->last, "</table>", sizeof("</table>") - 1);
+
+ b->last = ngx_cpymem(b->last, tail, sizeof(tail) - 1);
+
diff --git a/patches/www-servers/nginx/03 autoindex styling.patch b/patches/www-servers/nginx/03 autoindex styling.patch
@@ -0,0 +1,16 @@
+diff --git a/src/http/modules/ngx_http_autoindex_module.c.old b/src/http/modules/ngx_http_autoindex_module.c
+index 18c7570..94176b4 100644
+--- a/src/http/modules/ngx_http_autoindex_module.c.old
++++ b/src/http/modules/ngx_http_autoindex_module.c
+@@ -448,8 +448,9 @@ ngx_http_autoindex_html(ngx_http_request_t *r, ngx_array_t *entries)
+ ;
+
+ static u_char header[] =
+- "</title></head>" CRLF
+- "<body>" CRLF
++ "</title>" CRLF
++ "<style>td{font-family:monospace;}td:nth-child(3){text-align:right;}</style>" CRLF
++ "</head><body>" CRLF
+ "<h1>Index of "
+ ;
+
diff --git a/patches/x11-libs/cairo-1.14.12/cairo-1.14.6-macos.patch b/patches/x11-libs/cairo-1.14.12/cairo-1.14.6-macos.patch
@@ -0,0 +1,103 @@
+diff --git a/configure b/configure
+index 6476db0..e1cbe17 100755
+--- a/configure
++++ b/configure
+@@ -19177,7 +19177,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -19224,7 +19224,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -19275,7 +19275,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -19322,7 +19322,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -19391,7 +19391,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -19447,7 +19447,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -20920,7 +20920,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -20967,7 +20967,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -34129,7 +34129,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -34248,7 +34248,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
+@@ -34329,7 +34329,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
diff --git a/patches/x11-libs/gtk+-3.24.1/gtk+-3.24.1_purple.patch b/patches/x11-libs/gtk+-3.24.1/gtk+-3.24.1_purple.patch
@@ -0,0 +1,913 @@
+grep -rl '#4a90d9' . | xargs sed -i 's/#4a90d9/#b16286/'
+
+diff --git a/demos/gtk-demo/cssview.css b/demos/gtk-demo/cssview.css
+index c4fe5ee..778aee8 100644
+--- a/demos/gtk-demo/cssview.css
++++ b/demos/gtk-demo/cssview.css
+@@ -7,7 +7,7 @@
+
+ .view:selected {
+ color: white;
+- background-color: #4a90d9;
++ background-color: #b16286;
+ }
+
+ scrollbar trough,
+diff --git a/gtk/gesture/gesture-pinch-symbolic.svg b/gtk/gesture/gesture-pinch-symbolic.svg
+index 408f809..344d8f7 100644
+--- a/gtk/gesture/gesture-pinch-symbolic.svg
++++ b/gtk/gesture/gesture-pinch-symbolic.svg
+@@ -71,7 +71,7 @@
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 40 8 C 37.784003 8 36 9.8667876 36 12.185547 L 36 36 L 35 36 L 35 29.185547 C 35 29.022886 34.97217 28.868661 34.955078 28.710938 A 4.0004 4.0004 0 0 0 32.398438 24.994141 L 27.960938 23.253906 C 27.578317 18.647747 23.701182 15 19 15 C 14.04721 15 10 19.0472 10 24 C 10 25.418791 10.341256 26.758764 10.931641 27.955078 C 6.0103696 27.99252 2 32.021431 2 36.951172 C 2 41.903972 6.04721 45.951172 11 45.951172 C 11.65701 45.951172 12.296258 45.87534 12.914062 45.740234 L 22 57 L 31 57 L 33.097656 57 L 58 57 C 60.215997 57 62 55.133212 62 52.814453 L 62 40.185547 L 62 31.185547 C 62 28.866788 60.215997 27 58 27 C 55.784003 27 54 28.866788 54 31.185547 L 54 36 L 53 36 L 53 25.185547 C 53 22.866788 51.215997 21 49 21 C 46.784003 21 45 22.866788 45 25.185547 L 45 36 L 44 36 L 44 12.185547 C 44 9.8667876 42.215997 8 40 8 z M 19 18 C 21.608824 18 23.804048 19.639507 24.636719 21.949219 L 20.414062 20.291016 A 4.0004 4.0004 0 0 0 18.851562 19.994141 A 4.0004 4.0004 0 0 0 17.492188 27.738281 L 21.666016 29.376953 C 20.863524 29.772856 19.960933 30 19 30 C 15.66853 30 13 27.33148 13 24 C 13 20.66852 15.66853 18 19 18 z M 24.996094 30.683594 L 27 31.470703 L 27 40.185547 L 27 42.535156 L 22.605469 44.484375 L 19.25 40.533203 C 19.730663 39.433901 20 38.223149 20 36.951172 C 20 35.532014 19.659028 34.192639 19.068359 32.996094 C 21.343367 32.978785 23.41661 32.101557 24.996094 30.683594 z M 11 30.951172 C 14.33147 30.951172 17 33.619692 17 36.951172 C 17 37.24237 16.97303 37.526912 16.933594 37.806641 L 14.105469 34.478516 C 13.349589 33.519886 12.197352 32.958868 10.976562 32.955078 C 7.575713 32.943978 5.7130814 36.912434 7.8945312 39.521484 L 10.648438 42.933594 C 7.4835407 42.75281 5 40.164051 5 36.951172 C 5 33.619692 7.66853 30.951172 11 30.951172 z "
+ transform="translate(-180,470.14793)"
+ id="rect6515" />
+@@ -83,9 +83,9 @@
+ height="32"
+ width="7.99999"
+ id="rect7304"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7306"
+ width="7.99999"
+ height="49.000015"
+@@ -101,9 +101,9 @@
+ height="36.000011"
+ width="7.99999"
+ id="rect7308"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7310"
+ width="7.99999"
+ height="30.000006"
+@@ -119,7 +119,7 @@
+ height="21"
+ width="34.999985"
+ id="rect7312"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <ellipse
+ cx="-269"
+ cy="507.09995"
+@@ -135,7 +135,7 @@
+ rx="7.4999938"
+ ry="7.5000024" />
+ <ellipse
+- style="opacity:1;fill:#4a90d9;fill-opacity:0.31564989;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
++ style="opacity:1;fill:#b16286;fill-opacity:0.31564989;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse7318"
+ cx="-261"
+ cy="494.14792"
+diff --git a/gtk/gesture/gesture-rotate-anticlockwise-symbolic.svg b/gtk/gesture/gesture-rotate-anticlockwise-symbolic.svg
+index 10f4e36..1932430 100644
+--- a/gtk/gesture/gesture-rotate-anticlockwise-symbolic.svg
++++ b/gtk/gesture/gesture-rotate-anticlockwise-symbolic.svg
+@@ -83,7 +83,7 @@
+ d=""
+ inkscape:connector-curvature="0" />
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 30.978516,13.310547 c -2.207639,0.03872 -3.966459,1.858733 -3.929688,4.066406 l 0.05273,22.876953 c 0,0.642649 -0.67295,0.87956 -0.910156,0.373047 L 18.742188,24.804688 c -0.621941,-1.370965 -1.960897,-2.276685 -3.464844,-2.34375 -3.031568,-0.134912 -5.103626,3.02251 -3.773438,5.75 l 8.003906,16.998046 c -0.773572,0.82429 -1.941423,1.030647 -3.832031,0.09961 L 12.714844,40.179688 C 11.555464,38.171583 9.0877248,37.440537 7.1816406,38.541016 l -0.3828125,0.220703 c -1.9060842,1.100478 -2.5070358,3.603224 -1.3476562,5.611328 l 6.3964841,11.080078 c 0.145898,0.252702 0.312481,0.484172 0.496094,0.695313 l 1.599609,3.548828 C 14.606259,61.127306 15.445616,62 17.478516,62 l 12.875,0 0.0098,0 17.94336,0 C 50.907298,62 53,59.866806 53,57.216797 L 53,42.783203 53,39 c 0,-2.215997 -1.784003,-4 -4,-4 -1.868548,0 -3.417636,1.273706 -3.861328,3 L 44,38 44,36 c 0,-2.215997 -1.682015,-4 -3.771484,-4 l -0.457032,0 C 37.682015,32 36,33.784003 36,36 l 0,2 -0.900391,0 -0.05078,-20.642578 c 0.02655,-2.255146 -1.815356,-4.086446 -4.070312,-4.046875 z"
+ transform="translate(-1077.1429,641.07582)"
+ id="rect4211"
+@@ -127,9 +127,9 @@
+ height="21.164835"
+ width="8.3888855"
+ id="rect7306"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7308"
+ width="8"
+ height="20.928894"
+@@ -145,15 +145,15 @@
+ height="18.381226"
+ width="8"
+ id="rect7310"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path7312"
+ d="m -1183.2276,685.33054 c 4.1113,2.85277 5.6524,1.6667 6.4893,-0.62598 l 15.1527,18.2581 -24.6089,-8.74318 c -0.4862,-1.41421 -0.6185,-2.72414 -0.6185,-4.23285 z"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7314"
+ width="27.331339"
+ height="24.00001"
+diff --git a/gtk/gesture/gesture-rotate-clockwise-symbolic.svg b/gtk/gesture/gesture-rotate-clockwise-symbolic.svg
+index 38c44dc..f249b5d 100644
+--- a/gtk/gesture/gesture-rotate-clockwise-symbolic.svg
++++ b/gtk/gesture/gesture-rotate-clockwise-symbolic.svg
+@@ -71,7 +71,7 @@
+ id="layer1"
+ transform="translate(1077.1429,-641.07582)">
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4211"
+ width="7.99999"
+ height="18.999975"
+@@ -87,10 +87,10 @@
+ height="27.193785"
+ width="8"
+ id="rect4215"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="matrix(0.8660254,0.5,-0.5,0.8660254,0,0)" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4217"
+ width="8"
+ height="24.624201"
+@@ -100,7 +100,7 @@
+ rx="3.999995"
+ transform="matrix(0.8660254,0.5,-0.5,0.8660254,0,0)" />
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m -983.2276,685.33054 31.238,17.58202 -9.596,0.0501 -24.6089,-8.74318 c -0.4862,-1.41421 -0.6185,-2.72414 -0.6185,-4.23285 z"
+ id="rect4219"
+ inkscape:connector-curvature="0"
+@@ -113,7 +113,7 @@
+ height="21"
+ width="22.205551"
+ id="rect4221"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="matrix(0.8660254,0.5,-0.5,0.8660254,0,0)" />
+ <ellipse
+ transform="matrix(-0.25881906,-0.96592582,-0.96592582,0.25881906,0,0)"
+diff --git a/gtk/gesture/gesture-stretch-symbolic.svg b/gtk/gesture/gesture-stretch-symbolic.svg
+index d783c20..bfb4dad 100644
+--- a/gtk/gesture/gesture-stretch-symbolic.svg
++++ b/gtk/gesture/gesture-stretch-symbolic.svg
+@@ -60,12 +60,12 @@
+ id="layer1"
+ transform="translate(0,-988.3622)">
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 25 8 C 20.047207 8 16 12.0472 16 17 C 16 21.849398 19.882333 25.820253 24.693359 25.984375 L 27 30.894531 L 27 41.185547 L 27 43.494141 L 20.464844 44.285156 L 19.414062 43.158203 C 19.786753 42.17281 20 41.112337 20 40 C 20 35.0472 15.952793 31 11 31 C 6.0472067 31 2 35.0472 2 40 C 2 44.9528 6.0472067 49 11 49 C 11.857115 49 12.684113 48.870665 13.470703 48.644531 L 22 58 L 31 58 L 35 58 L 58 58 C 60.215997 58 62 56.133212 62 53.814453 L 62 41.185547 L 62 32.185547 C 62 29.866788 60.215997 28 58 28 C 55.784003 28 54 29.866788 54 32.185547 L 54 37 L 53 37 L 53 26.185547 C 53 23.866788 51.215997 22 49 22 C 46.784003 22 45 23.866788 45 26.185547 L 45 37 L 44 37 L 44 13.185547 C 44 10.866788 42.215997 9 40 9 C 37.784003 9 36 10.866788 36 13.185547 L 36 37 L 35 37 L 35 30.185547 C 35 30.18084 34.998062 30.176578 34.998047 30.171875 A 4.0004 4.0004 0 0 0 34.621094 28.300781 L 31.974609 22.667969 C 33.238019 21.117771 34 19.145357 34 17 C 34 12.0472 29.952793 8 25 8 z M 25 11 C 28.331471 11 31 13.6686 31 17 C 31 17.882507 30.807929 18.714615 30.470703 19.466797 L 29.060547 16.462891 A 4.1028752 3.9987371 0 0 0 25 13.001953 A 4.1028752 3.9987371 0 0 0 24.826172 13.007812 A 4.0004 4.0004 0 0 0 20.896484 16.998047 A 4.1028752 3.9987371 0 0 1 20.896484 17 A 4.1028752 3.9987371 0 0 0 20.898438 17.027344 A 4.0004 4.0004 0 0 0 21.298828 18.755859 L 23.15625 22.710938 C 20.73678 21.938685 19 19.686937 19 17 C 19 13.6686 21.668529 11 25 11 z M 11 34 C 14.331471 34 17 36.6686 17 40 C 17 40.182439 16.988332 40.36093 16.972656 40.539062 L 13.964844 37.3125 C 13.238574 36.5117 12.219112 36.038953 11.138672 36.001953 C 7.5520017 35.879253 5.6304813 40.176278 8.1132812 42.767578 L 11.056641 45.998047 C 11.037592 45.998222 11.019093 46 11 46 C 7.6685289 46 5 43.3315 5 40 C 5 36.6686 7.6685289 34 11 34 z "
+ transform="translate(0,988.3622)"
+ id="rect4249" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7301"
+ width="7.99999"
+ height="32"
+@@ -81,9 +81,9 @@
+ height="49.000015"
+ width="7.99999"
+ id="rect7303"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7305"
+ width="7.99999"
+ height="36.000011"
+@@ -99,9 +99,9 @@
+ height="30.000006"
+ width="7.99999"
+ id="rect7307"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7309"
+ width="34.999985"
+ height="21"
+@@ -135,7 +135,7 @@
+ cy="1005.3622"
+ cx="-75.000008"
+ id="ellipse7317"
+- style="opacity:1;fill:#4a90d9;fill-opacity:0.31564989;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
++ style="opacity:1;fill:#b16286;fill-opacity:0.31564989;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+diff --git a/gtk/gesture/gesture-two-finger-swipe-left-symbolic.svg b/gtk/gesture/gesture-two-finger-swipe-left-symbolic.svg
+index e25947c..e3b5c7d 100644
+--- a/gtk/gesture/gesture-two-finger-swipe-left-symbolic.svg
++++ b/gtk/gesture/gesture-two-finger-swipe-left-symbolic.svg
+@@ -64,7 +64,7 @@
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 38.271484 6.0039062 C 37.981892 5.9956378 37.692703 6.0019094 37.40625 6.0214844 C 34.246377 6.2374271 31.332975 8.1249345 29.902344 11.082031 C 29.173793 10.990041 28.447857 10.978702 27.738281 11.0625 C 24.36672 11.460668 21.373919 13.762084 20.242188 17.148438 L 12 17.148438 L 12 10.148438 L 2 19.648438 L 12 29.148438 L 12 22.148438 L 20.048828 22.148438 C 20.694441 24.742195 22.473591 26.994506 25 28.162109 L 25 47 L 24 47 L 24 39.185547 C 24 36.866788 22.215997 35 20 35 C 17.784003 35 16 36.866788 16 39.185547 L 16 47 L 16 55.814453 L 16 60 L 20 60 L 45 60 L 56 60 C 58.215997 60 60 58.133212 60 55.814453 L 60 43.185547 L 60 34.185547 C 60 31.866788 58.215997 30 56 30 C 53.784003 30 52 31.866788 52 34.185547 L 52 39 L 51 39 L 51 28.185547 C 51 25.866788 49.215997 24 47 24 C 44.784003 24 43 25.866788 43 28.185547 L 43 39 L 42 39 L 42 23.042969 C 44.136586 21.978813 45.853243 20.084457 46.603516 17.640625 C 48.028796 12.998095 45.481769 8.0270562 40.880859 6.4726562 C 40.018187 6.1812063 39.140263 6.0287116 38.271484 6.0039062 z M 38.171875 8.9980469 C 38.752124 9.0164906 39.339992 9.1204781 39.919922 9.3164062 C 43.012882 10.361346 44.694478 13.640769 43.736328 16.761719 C 43.402083 17.85044 42.787396 18.769252 42 19.474609 L 42 15.185547 C 42 12.866788 40.215997 11 38 11 C 35.784003 11 34 12.866788 34 15.185547 L 34 22.945312 C 33.72503 23.436938 33.386634 23.876948 33 24.261719 L 33 20.185547 C 33 17.866788 31.215997 16 29 16 C 26.784003 16 25 17.866788 25 20.185547 L 25 24.666016 C 23.150282 23.179661 22.297135 20.683826 23.027344 18.265625 C 23.981604 15.105485 27.261604 13.320305 30.433594 14.234375 A 1.50015 1.50015 0 0 0 32.361328 12.945312 A 1.50015 1.50015 0 0 0 32.371094 12.921875 C 33.289974 10.433529 35.657461 8.9181241 38.171875 8.9980469 z M 34 27.302734 L 34 39 L 33 39 L 33 27.925781 C 33.346618 27.7409 33.679606 27.531269 34 27.302734 z "
+ transform="translate(-180,470.14793)"
+ id="rect7308" />
+@@ -82,9 +82,9 @@
+ height="24.999994"
+ width="7.99999"
+ id="rect7395"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7397"
+ width="7.99999"
+ height="43.999989"
+@@ -100,9 +100,9 @@
+ height="49.000015"
+ width="7.99999"
+ id="rect7399"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7401"
+ width="7.99999"
+ height="36.000011"
+@@ -118,16 +118,16 @@
+ height="30.000006"
+ width="7.99999"
+ id="rect7403"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7405"
+ width="28.999994"
+ height="12.99999"
+ x="-324"
+ y="403" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7407"
+ width="34.999985"
+ height="21"
+@@ -169,7 +169,7 @@
+ sodipodi:nodetypes="cccc" />
+ <rect
+ transform="scale(-1,-1)"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7415"
+ width="13.061281"
+ height="4.9999938"
+diff --git a/gtk/gesture/gesture-two-finger-swipe-right-symbolic.svg b/gtk/gesture/gesture-two-finger-swipe-right-symbolic.svg
+index e27b4b1..6e73fc8 100644
+--- a/gtk/gesture/gesture-two-finger-swipe-right-symbolic.svg
++++ b/gtk/gesture/gesture-two-finger-swipe-right-symbolic.svg
+@@ -64,7 +64,7 @@
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m -129,475.29637 0,7 -14.48047,0 c -0.8685,-2.58098 -2.88029,-4.74387 -5.63867,-5.67578 -1.15023,-0.3886 -2.3288,-0.52948 -3.47461,-0.45118 -3.16004,0.21596 -6.07335,2.10345 -7.50391,5.06055 -0.72859,-0.0926 -1.45444,-0.10529 -2.16406,-0.0215 -3.45482,0.40801 -6.51775,2.81143 -7.58203,6.33594 -1.30748,4.32992 0.83762,8.91584 4.84375,10.76757 l 0,18.83594 -1,0 0,-7.81445 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,7.81445 0,8.81445 0,4.18555 4,0 25,0 11,0 c 2.216,0 4,-1.86679 4,-4.18555 l 0,-12.6289 0,-9 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,4.81445 -1,0 0,-10.81445 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,10.81445 -1,0 0,-15.95703 c 2.13659,-1.06416 3.85324,-2.95852 4.60352,-5.40235 0.0502,-0.16362 0.0846,-0.32791 0.125,-0.49218 l 14.27148,0 0,7 10,-9.5 -10,-9.5 z m -22.82812,3.84961 c 0.58024,0.0183 1.16811,0.12047 1.74804,0.3164 2.47175,0.83508 4.03799,3.09857 4.08008,5.56641 l 0,0.23242 c -0.012,0.54544 -0.0952,1.09784 -0.26367,1.64649 -0.33419,1.08853 -0.94913,2.00757 -1.73633,2.71289 l 0,-4.28711 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,7.75976 c -0.27497,0.49163 -0.61337,0.93164 -1,1.31641 l 0,-4.07617 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,4.48242 c -1.84972,-1.48636 -2.70286,-3.98414 -1.97266,-6.40235 0.95426,-3.16014 4.23426,-4.94531 7.40625,-4.03125 a 1.50015,1.50015 0 0 0 1.92774,-1.28906 1.5004025,1.5004025 0 0 0 0.01,-0.0234 c 0.91888,-2.48834 3.28636,-4.00326 5.80078,-3.92383 z M -156,497.45066 l 0,11.69727 -1,0 0,-11.07227 c 0.34667,-0.1849 0.67956,-0.39643 1,-0.625 z"
+ id="rect6513"
+ inkscape:connector-curvature="0" />
+@@ -75,7 +75,7 @@
+ <g
+ id="g7306">
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7308"
+ width="7.99999"
+ height="24.999994"
+@@ -91,9 +91,9 @@
+ height="43.999989"
+ width="7.99999"
+ id="rect7310"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7312"
+ width="7.99999"
+ height="49.000015"
+@@ -109,9 +109,9 @@
+ height="36.000011"
+ width="7.99999"
+ id="rect7314"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7316"
+ width="7.99999"
+ height="30.000006"
+@@ -125,7 +125,7 @@
+ height="12.99999"
+ width="28.999994"
+ id="rect7318"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+@@ -134,7 +134,7 @@
+ height="21"
+ width="34.999985"
+ id="rect7320"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path7322"
+@@ -173,7 +173,7 @@
+ height="4.9999919"
+ width="20.686279"
+ id="rect7328"
+- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
++ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b16286;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ </g>
+ </svg>
+diff --git a/gtk/theme/Adwaita/_colors.scss b/gtk/theme/Adwaita/_colors.scss
+index 597f94f..617a51c 100644
+--- a/gtk/theme/Adwaita/_colors.scss
++++ b/gtk/theme/Adwaita/_colors.scss
+@@ -8,7 +8,7 @@ $bg_color: if($variant == 'light', #e8e8e7, #33393b);
+ $fg_color: if($variant == 'light', #2e3436, #eeeeec);
+
+ $selected_fg_color: #ffffff;
+-$selected_bg_color: if($variant == 'light', #4a90d9, darken(#4a90d9, 20%));
++$selected_bg_color: if($variant == 'light', #b16286, darken(#4a90d9, 20%));
+ $selected_borders_color: if($variant== 'light', darken($selected_bg_color, 30%), darken($selected_bg_color, 20%));
+ $borders_color: if($variant == 'light', darken($bg_color, 20%), darken($bg_color, 10%));
+ $alt_borders_color: if($variant == 'light', darken($bg_color, 35%), darken($bg_color, 17%));
+diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css
+index d8366cd..dd14f43 100644
+--- a/gtk/theme/Adwaita/gtk-contained-dark.css
++++ b/gtk/theme/Adwaita/gtk-contained-dark.css
+@@ -462,7 +462,7 @@ button.color { padding: 4px; }
+ button.color colorswatch:only-child, button.color colorswatch:only-child overlay { border-radius: 0; }
+
+ /********* Links * */
+-button:link > label, button:visited > label, *:link, button:link, button:visited { color: #4a90d9; }
++button:link > label, button:visited > label, *:link, button:link, button:visited { color: #b16286; }
+
+ button:link > label:visited, button:visited > label:visited, *:link:visited, button:visited { color: #2a76c6; }
+
+@@ -472,7 +472,7 @@ button:link > label:hover, button:visited > label:hover, *:link:hover, button:ho
+
+ *:selected button:link > label:hover, *:selected button:visited > label:hover, *:selected *:link:hover, *:selected button:hover:link, *:selected button:hover:visited { color: #e9eff5; }
+
+-button:link > label:active, button:visited > label:active, *:link:active, button:active:link, button:active:visited { color: #4a90d9; }
++button:link > label:active, button:visited > label:active, *:link:active, button:active:link, button:active:visited { color: #b16286; }
+
+ *:selected button:link > label:active, *:selected button:visited > label:active, *:selected *:link:active, *:selected button:active:link, *:selected button:active:visited { color: #d3dfeb; }
+
+@@ -785,7 +785,7 @@ menubar:backdrop, .menubar:backdrop { background-color: #33393b; }
+
+ menubar > menuitem, .menubar > menuitem { min-height: 16px; padding: 4px 8px; }
+
+-menubar > menuitem:hover, .menubar > menuitem:hover { box-shadow: inset 0 -3px #215d9c; color: #4a90d9; }
++menubar > menuitem:hover, .menubar > menuitem:hover { box-shadow: inset 0 -3px #215d9c; color: #b16286; }
+
+ menubar > menuitem:disabled, .menubar > menuitem:disabled { color: #919494; box-shadow: none; }
+
+diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css
+index cbb4e24..c40b1b1 100644
+--- a/gtk/theme/Adwaita/gtk-contained.css
++++ b/gtk/theme/Adwaita/gtk-contained.css
+@@ -1,4 +1,4 @@
+-* { padding: 0; -GtkToolButton-icon-spacing: 4; -GtkTextView-error-underline-color: #cc0000; -GtkScrolledWindow-scrollbar-spacing: 0; -GtkToolItemGroup-expander-size: 11; -GtkWidget-text-handle-width: 20; -GtkWidget-text-handle-height: 24; -GtkDialog-button-spacing: 4; -GtkDialog-action-area-border: 0; outline-color: alpha(currentColor,0.3); outline-style: dashed; outline-offset: -3px; outline-width: 1px; -gtk-outline-radius: 2px; -gtk-secondary-caret-color: #4a90d9; }
++* { padding: 0; -GtkToolButton-icon-spacing: 4; -GtkTextView-error-underline-color: #cc0000; -GtkScrolledWindow-scrollbar-spacing: 0; -GtkToolItemGroup-expander-size: 11; -GtkWidget-text-handle-width: 20; -GtkWidget-text-handle-height: 24; -GtkDialog-button-spacing: 4; -GtkDialog-action-area-border: 0; outline-color: alpha(currentColor,0.3); outline-style: dashed; outline-offset: -3px; outline-width: 1px; -gtk-outline-radius: 2px; -gtk-secondary-caret-color: #b16286; }
+
+ /*************** Base States * */
+ .background { color: #2e3436; background-color: #e8e8e7; }
+@@ -16,7 +16,7 @@
+
+ .gtkstyle-fallback:disabled { color: #8b8e8f; background-color: #f1f1f1; }
+
+-.gtkstyle-fallback:selected { color: #ffffff; background-color: #4a90d9; }
++.gtkstyle-fallback:selected { color: #ffffff; background-color: #b16286; }
+
+ .view, iconview, .view text, iconview text, textview text { color: black; background-color: #ffffff; }
+
+@@ -50,7 +50,7 @@ label.separator { color: #2e3436; }
+
+ label.separator:backdrop { color: #8b8e8f; }
+
+-label selection { background-color: #4a90d9; color: #ffffff; }
++label selection { background-color: #b16286; color: #ffffff; }
+
+ label:disabled { color: #8b8e8f; }
+
+@@ -96,7 +96,7 @@ spinbutton:not(.vertical) undershoot.right, entry undershoot.right { background-
+
+ spinbutton.flat:focus:not(.vertical), spinbutton.flat:backdrop:not(.vertical), spinbutton.flat:disabled:not(.vertical), spinbutton.flat:backdrop:disabled:not(.vertical), spinbutton.flat:not(.vertical), entry.flat:focus, entry.flat:backdrop, entry.flat:disabled, entry.flat:backdrop:disabled, entry.flat { min-height: 0; padding: 2px; background-color: transparent; border-color: transparent; border-radius: 0; }
+
+-spinbutton:focus:not(.vertical), entry:focus { box-shadow: inset 0 0 0 1px #4a90d9; border-color: #4a90d9; }
++spinbutton:focus:not(.vertical), entry:focus { box-shadow: inset 0 0 0 1px #b16286; border-color: #4a90d9; }
+
+ spinbutton:disabled:not(.vertical), entry:disabled { color: #8b8e8f; border-color: #b6b6b3; background-color: #f1f1f1; box-shadow: none; }
+
+@@ -120,7 +120,7 @@ spinbutton:not(.vertical) image, entry image { color: #585d5e; }
+
+ spinbutton:not(.vertical) image:hover, entry image:hover { color: #2e3436; }
+
+-spinbutton:not(.vertical) image:active, entry image:active { color: #4a90d9; }
++spinbutton:not(.vertical) image:active, entry image:active { color: #b16286; }
+
+ spinbutton:not(.vertical) image:backdrop, entry image:backdrop { color: #a2a4a5; }
+
+@@ -128,17 +128,17 @@ spinbutton:drop(active):focus:not(.vertical), spinbutton:drop(active):not(.verti
+
+ .osd spinbutton:not(.vertical), .osd entry { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: rgba(0, 0, 0, 0.5); background-clip: padding-box; box-shadow: none; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
+
+-.osd spinbutton:focus:not(.vertical), .osd entry:focus { color: white; border-color: #4a90d9; background-color: rgba(0, 0, 0, 0.5); background-clip: padding-box; box-shadow: inset 0 0 0 1px #4a90d9; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
++.osd spinbutton:focus:not(.vertical), .osd entry:focus { color: white; border-color: #b16286; background-color: rgba(0, 0, 0, 0.5); background-clip: padding-box; box-shadow: inset 0 0 0 1px #4a90d9; text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; }
+
+ .osd spinbutton:backdrop:not(.vertical), .osd entry:backdrop { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: rgba(0, 0, 0, 0.5); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+
+ .osd spinbutton:disabled:not(.vertical), .osd entry:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7); background-color: rgba(49, 52, 52, 0.5); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+
+-spinbutton:not(.vertical) progress, entry progress { margin: 2px -6px; background-color: transparent; background-image: none; border-radius: 0; border-width: 0 0 2px; border-color: #4a90d9; border-style: solid; box-shadow: none; }
++spinbutton:not(.vertical) progress, entry progress { margin: 2px -6px; background-color: transparent; background-image: none; border-radius: 0; border-width: 0 0 2px; border-color: #b16286; border-style: solid; box-shadow: none; }
+
+ spinbutton:not(.vertical) progress:backdrop, entry progress:backdrop { background-color: transparent; }
+
+-.linked:not(.vertical) > spinbutton:focus:not(.vertical) + spinbutton:not(.vertical), .linked:not(.vertical) > spinbutton:focus:not(.vertical) + button, .linked:not(.vertical) > spinbutton:focus:not(.vertical) + combobox > box > button.combo, .linked:not(.vertical) > entry:focus + spinbutton:not(.vertical), .linked:not(.vertical) > entry:focus + button, .linked:not(.vertical) > entry:focus + combobox > box > button.combo, .linked:not(.vertical) > spinbutton:focus:not(.vertical) + entry, .linked:not(.vertical) > entry:focus + entry { border-left-color: #4a90d9; }
++.linked:not(.vertical) > spinbutton:focus:not(.vertical) + spinbutton:not(.vertical), .linked:not(.vertical) > spinbutton:focus:not(.vertical) + button, .linked:not(.vertical) > spinbutton:focus:not(.vertical) + combobox > box > button.combo, .linked:not(.vertical) > entry:focus + spinbutton:not(.vertical), .linked:not(.vertical) > entry:focus + button, .linked:not(.vertical) > entry:focus + combobox > box > button.combo, .linked:not(.vertical) > spinbutton:focus:not(.vertical) + entry, .linked:not(.vertical) > entry:focus + entry { border-left-color: #b16286; }
+
+ .linked:not(.vertical) > spinbutton:focus.error:not(.vertical) + spinbutton:not(.vertical), .linked:not(.vertical) > spinbutton:focus.error:not(.vertical) + button, .linked:not(.vertical) > spinbutton:focus.error:not(.vertical) + combobox > box > button.combo, .linked:not(.vertical) > entry:focus.error + spinbutton:not(.vertical), .linked:not(.vertical) > entry:focus.error + button, .linked:not(.vertical) > entry:focus.error + combobox > box > button.combo, .linked:not(.vertical) > spinbutton:focus.error:not(.vertical) + entry, .linked:not(.vertical) > entry:focus.error + entry { border-left-color: #cc0000; }
+
+@@ -150,13 +150,13 @@ spinbutton:not(.vertical) progress:backdrop, entry progress:backdrop { backgroun
+
+ .linked.vertical > spinbutton:disabled:not(.vertical) + spinbutton:disabled:not(.vertical), .linked.vertical > spinbutton:disabled:not(.vertical) + entry:disabled, .linked.vertical > entry:disabled + spinbutton:disabled:not(.vertical), .linked.vertical > entry:disabled + entry:disabled { border-top-color: #e9e9e8; }
+
+-.linked.vertical > spinbutton:not(.vertical) + spinbutton:focus:not(:only-child):not(.vertical), .linked.vertical > spinbutton:not(.vertical) + entry:focus:not(:only-child), .linked.vertical > entry + spinbutton:focus:not(:only-child):not(.vertical), .linked.vertical > entry + entry:focus:not(:only-child) { border-top-color: #4a90d9; }
++.linked.vertical > spinbutton:not(.vertical) + spinbutton:focus:not(:only-child):not(.vertical), .linked.vertical > spinbutton:not(.vertical) + entry:focus:not(:only-child), .linked.vertical > entry + spinbutton:focus:not(:only-child):not(.vertical), .linked.vertical > entry + entry:focus:not(:only-child) { border-top-color: #b16286; }
+
+ .linked.vertical > spinbutton:not(.vertical) + spinbutton:focus.error:not(:only-child):not(.vertical), .linked.vertical > spinbutton:not(.vertical) + entry:focus.error:not(:only-child), .linked.vertical > entry + spinbutton:focus.error:not(:only-child):not(.vertical), .linked.vertical > entry + entry:focus.error:not(:only-child) { border-top-color: #cc0000; }
+
+ .linked.vertical > spinbutton:not(.vertical) + spinbutton:drop(active):not(:only-child):not(.vertical), .linked.vertical > spinbutton:not(.vertical) + entry:drop(active):not(:only-child), .linked.vertical > entry + spinbutton:drop(active):not(:only-child):not(.vertical), .linked.vertical > entry + entry:drop(active):not(:only-child) { border-top-color: #4e9a06; }
+
+-.linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + spinbutton:not(.vertical), .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + entry, .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + button, .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + combobox > box > button.combo, .linked.vertical > entry:focus:not(:only-child) + spinbutton:not(.vertical), .linked.vertical > entry:focus:not(:only-child) + entry, .linked.vertical > entry:focus:not(:only-child) + button, .linked.vertical > entry:focus:not(:only-child) + combobox > box > button.combo { border-top-color: #4a90d9; }
++.linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + spinbutton:not(.vertical), .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + entry, .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + button, .linked.vertical > spinbutton:focus:not(:only-child):not(.vertical) + combobox > box > button.combo, .linked.vertical > entry:focus:not(:only-child) + spinbutton:not(.vertical), .linked.vertical > entry:focus:not(:only-child) + entry, .linked.vertical > entry:focus:not(:only-child) + button, .linked.vertical > entry:focus:not(:only-child) + combobox > box > button.combo { border-top-color: #b16286; }
+
+ .linked.vertical > spinbutton:focus.error:not(:only-child):not(.vertical) + spinbutton:not(.vertical), .linked.vertical > spinbutton:focus.error:not(:only-child):not(.vertical) + entry, .linked.vertical > spinbutton:focus.error:not(:only-child):not(.vertical) + button, .linked.vertical > spinbutton:focus.error:not(:only-child):not(.vertical) + combobox > box > button.combo, .linked.vertical > entry:focus.error:not(:only-child) + spinbutton:not(.vertical), .linked.vertical > entry:focus.error:not(:only-child) + entry, .linked.vertical > entry:focus.error:not(:only-child) + button, .linked.vertical > entry:focus.error:not(:only-child) + combobox > box > button.combo { border-top-color: #cc0000; }
+
+@@ -166,9 +166,9 @@ treeview entry:focus:dir(rtl), treeview entry:focus:dir(ltr) { background-color:
+
+ treeview entry.flat, treeview entry { border-radius: 0; background-image: none; background-color: #ffffff; }
+
+-treeview entry.flat:focus, treeview entry:focus { border-color: #4a90d9; }
++treeview entry.flat:focus, treeview entry:focus { border-color: #b16286; }
+
+-.entry-tag { padding: 5px; margin-top: 2px; margin-bottom: 2px; border-style: none; color: #ffffff; background-color: #4a90d9; }
++.entry-tag { padding: 5px; margin-top: 2px; margin-bottom: 2px; border-style: none; color: #ffffff; background-color: #b16286; }
+
+ :dir(ltr) .entry-tag { margin-left: 8px; margin-right: -5px; }
+
+@@ -176,17 +176,17 @@ treeview entry.flat:focus, treeview entry:focus { border-color: #4a90d9; }
+
+ .entry-tag:hover { background-color: #74aae2; }
+
+-:backdrop .entry-tag { color: #fcfcfc; background-color: #4a90d9; }
++:backdrop .entry-tag { color: #fcfcfc; background-color: #b16286; }
+
+ .entry-tag.button { background-color: transparent; color: rgba(255, 255, 255, 0.7); }
+
+-:not(:backdrop) .entry-tag.button:hover { border: 1px solid #4a90d9; color: #ffffff; }
++:not(:backdrop) .entry-tag.button:hover { border: 1px solid #b16286; color: #ffffff; }
+
+-:not(:backdrop) .entry-tag.button:active { background-color: #4a90d9; color: rgba(255, 255, 255, 0.7); }
++:not(:backdrop) .entry-tag.button:active { background-color: #b16286; color: rgba(255, 255, 255, 0.7); }
+
+ /*********** Buttons * */
+-@keyframes needs_attention { from { background-image: -gtk-gradient(radial, center center, 0, center center, 0.01, to(#4a90d9), to(transparent)); }
+- to { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#4a90d9), to(transparent)); } }
++@keyframes needs_attention { from { background-image: -gtk-gradient(radial, center center, 0, center center, 0.01, to(#b16286), to(transparent)); }
++ to { background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#b16286), to(transparent)); } }
+
+ notebook > header > tabs > arrow, button.titlebutton, button { min-height: 24px; min-width: 16px; padding: 4px 8px; border: 1px solid; border-radius: 3px; transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94); color: #2e3436; outline-color: rgba(46, 52, 54, 0.3); border-color: #b6b6b3; border-bottom-color: #91918c; background-image: linear-gradient(to bottom, #e8e8e7, #dededd 60%, #cfcfcd); text-shadow: 0 1px rgba(255, 255, 255, 0.769231); -gtk-icon-shadow: 0 1px rgba(255, 255, 255, 0.769231); box-shadow: inset 0 1px rgba(255, 255, 255, 0.8); }
+
+@@ -274,15 +274,15 @@ popover.background.touch-selection button.flat:backdrop, popover.background.magn
+
+ popover.background.touch-selection button.flat:active, popover.background.magnifier button.flat:active, .app-notification button.flat:active, popover.background.touch-selection button.flat:checked, popover.background.magnifier button.flat:checked, .app-notification button.flat:checked, .osd button.flat:active, .osd button.flat:checked { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(0, 0, 0, 0.7)); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236, 0.3); }
+
+-button.suggested-action { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #4a90d9, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
++button.suggested-action { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #b16286, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
+
+-.selection-mode button.titlebutton, button.suggested-action.flat { border-color: transparent; background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; color: #4a90d9; }
++.selection-mode button.titlebutton, button.suggested-action.flat { border-color: transparent; background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; color: #b16286; }
+
+-button.suggested-action:hover { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #4a90d9 60%, #3986d5); }
++button.suggested-action:hover { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #b16286 60%, #3986d5); }
+
+ button.suggested-action:active, button.suggested-action:checked { color: white; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; background-image: image(#3180d4); box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; }
+
+-.selection-mode button.titlebutton:backdrop, button.suggested-action:backdrop, button.suggested-action.flat:backdrop { border-color: #4a90d9; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
++.selection-mode button.titlebutton:backdrop, button.suggested-action:backdrop, button.suggested-action.flat:backdrop { border-color: #b16286; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
+
+ .selection-mode button.titlebutton:backdrop label, .selection-mode button.titlebutton:backdrop, button.suggested-action:backdrop label, button.suggested-action:backdrop, button.suggested-action.flat:backdrop label, button.suggested-action.flat:backdrop { color: #dbe9f7; }
+
+@@ -312,7 +312,7 @@ button.suggested-action:disabled:active label, button.suggested-action:disabled:
+
+ .osd button.suggested-action:hover { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(74, 144, 217, 0.7)); background-clip: padding-box; box-shadow: inset 0 1px rgba(255, 255, 255, 0.1); text-shadow: 0 1px black; -gtk-icon-shadow: 0 1px black; outline-color: rgba(238, 238, 236, 0.3); }
+
+-.osd button.suggested-action:active:backdrop, .osd button.suggested-action:active, .osd button.suggested-action:checked:backdrop, .osd button.suggested-action:checked { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(#4a90d9); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236, 0.3); }
++.osd button.suggested-action:active:backdrop, .osd button.suggested-action:active, .osd button.suggested-action:checked:backdrop, .osd button.suggested-action:checked { color: white; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(#b16286); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; outline-color: rgba(238, 238, 236, 0.3); }
+
+ .osd button.suggested-action:disabled:backdrop, .osd button.suggested-action:disabled { color: #858786; border-color: rgba(0, 0, 0, 0.7); background-color: transparent; background-image: image(rgba(49, 52, 52, 0.5)); background-clip: padding-box; box-shadow: none; text-shadow: none; -gtk-icon-shadow: none; }
+
+@@ -390,7 +390,7 @@ button.circular:not(.flat):not(:checked):not(:active):not(:disabled):not(:backdr
+
+ button.circular:hover:not(:checked):not(:active):not(:disabled):not(:backdrop) { color: #2e3436; outline-color: rgba(46, 52, 54, 0.3); border-color: #b6b6b3; border-bottom-color: #91918c; text-shadow: 0 1px rgba(255, 255, 255, 0.769231); -gtk-icon-shadow: 0 1px rgba(255, 255, 255, 0.769231); box-shadow: inset 0 1px white; background-image: linear-gradient(to bottom, #f7f7f7, #e8e8e7 60%, #dededd); background-image: linear-gradient(to bottom, #f7f7f7, #e8e8e7 60%, #dededd), linear-gradient(to top, #91918c 25%, #b6b6b3 50%); border-color: transparent; }
+
+-.stack-switcher > button.needs-attention > label, .stack-switcher > button.needs-attention > image, stacksidebar row.needs-attention > label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#4a90d9), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 3px, right 4px; }
++.stack-switcher > button.needs-attention > label, .stack-switcher > button.needs-attention > image, stacksidebar row.needs-attention > label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#b16286), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 3px, right 4px; }
+
+ .stack-switcher > button.needs-attention > label:backdrop, .stack-switcher > button.needs-attention > image:backdrop, stacksidebar row.needs-attention > label:backdrop { background-size: 6px 6px, 0 0; }
+
+@@ -476,7 +476,7 @@ button:link > label:visited, button:visited > label:visited, *:link:visited, but
+
+ *:selected button:link > label:visited, *:selected button:visited > label:visited, *:selected *:link:visited, *:selected button:visited:link, *:selected button:visited { color: #b7d3f0; }
+
+-button:link > label:hover, button:visited > label:hover, *:link:hover, button:hover:link, button:hover:visited { color: #4a90d9; }
++button:link > label:hover, button:visited > label:hover, *:link:hover, button:hover:link, button:hover:visited { color: #b16286; }
+
+ *:selected button:link > label:hover, *:selected button:visited > label:hover, *:selected *:link:hover, *:selected button:hover:link, *:selected button:hover:visited { color: #edf4fb; }
+
+@@ -484,7 +484,7 @@ button:link > label:active, button:visited > label:active, *:link:active, button
+
+ *:selected button:link > label:active, *:selected button:visited > label:active, *:selected *:link:active, *:selected button:active:link, *:selected button:active:visited { color: #dbe9f7; }
+
+-button:link > label:backdrop:backdrop:hover, button:visited > label:backdrop:backdrop:hover, button:link > label:backdrop:backdrop:hover:selected, button:visited > label:backdrop:backdrop:hover:selected, button:link > label:backdrop, button:visited > label:backdrop, *:link:backdrop:backdrop:hover, button:backdrop:backdrop:hover:link, button:backdrop:backdrop:hover:visited, *:link:backdrop:backdrop:hover:selected, button:backdrop:backdrop:hover:selected:link, button:backdrop:backdrop:hover:selected:visited, .selection-mode .titlebar:not(headerbar) .subtitle:backdrop:backdrop:hover:link, .selection-mode.titlebar:not(headerbar) .subtitle:backdrop:backdrop:hover:link, .selection-mode headerbar .subtitle:backdrop:backdrop:hover:link, headerbar.selection-mode .subtitle:backdrop:backdrop:hover:link, *:link:backdrop, button:backdrop:link, button:backdrop:visited { color: #4a90d9; }
++button:link > label:backdrop:backdrop:hover, button:visited > label:backdrop:backdrop:hover, button:link > label:backdrop:backdrop:hover:selected, button:visited > label:backdrop:backdrop:hover:selected, button:link > label:backdrop, button:visited > label:backdrop, *:link:backdrop:backdrop:hover, button:backdrop:backdrop:hover:link, button:backdrop:backdrop:hover:visited, *:link:backdrop:backdrop:hover:selected, button:backdrop:backdrop:hover:selected:link, button:backdrop:backdrop:hover:selected:visited, .selection-mode .titlebar:not(headerbar) .subtitle:backdrop:backdrop:hover:link, .selection-mode.titlebar:not(headerbar) .subtitle:backdrop:backdrop:hover:link, .selection-mode headerbar .subtitle:backdrop:backdrop:hover:link, headerbar.selection-mode .subtitle:backdrop:backdrop:hover:link, *:link:backdrop, button:backdrop:link, button:backdrop:visited { color: #b16286; }
+
+ infobar.info *:link, infobar.info button:link, infobar.info button:visited, infobar.question *:link, infobar.question button:link, infobar.question button:visited, infobar.warning *:link, infobar.warning button:link, infobar.warning button:visited, infobar.error *:link, infobar.error button:link, infobar.error button:visited, button:link > label:selected, button:visited > label:selected, *:selected button:link > label, *:selected button:visited > label, *:link:selected, button:selected:link, button:selected:visited, .selection-mode .titlebar:not(headerbar) .subtitle:link, .selection-mode.titlebar:not(headerbar) .subtitle:link, .selection-mode headerbar .subtitle:link, headerbar.selection-mode .subtitle:link, *:selected *:link, *:selected button:link, *:selected button:visited { color: #dbe9f7; }
+
+@@ -604,19 +604,19 @@ searchbar > revealer > box { margin: -6px; padding: 6px; }
+
+ .titlebar:not(headerbar) .subtitle, headerbar .subtitle { font-size: smaller; padding-left: 12px; padding-right: 12px; }
+
+-.selection-mode .titlebar:not(headerbar), .selection-mode.titlebar:not(headerbar), .selection-mode headerbar, headerbar.selection-mode { color: #ffffff; border-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.5); background: #4a90d9 linear-gradient(to top, #276fba, #428bd7 2px, #4a90d9 3px); box-shadow: inset 0 1px rgba(146, 188, 232, 0.9); }
++.selection-mode .titlebar:not(headerbar), .selection-mode.titlebar:not(headerbar), .selection-mode headerbar, headerbar.selection-mode { color: #ffffff; border-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.5); background: #b16286 linear-gradient(to top, #276fba, #428bd7 2px, #4a90d9 3px); box-shadow: inset 0 1px rgba(146, 188, 232, 0.9); }
+
+-.selection-mode .titlebar:backdrop:not(headerbar), .selection-mode.titlebar:backdrop:not(headerbar), .selection-mode headerbar:backdrop, headerbar.selection-mode:backdrop { background-color: #4a90d9; background-image: none; box-shadow: inset 0 1px rgba(165, 200, 236, 0.88); }
++.selection-mode .titlebar:backdrop:not(headerbar), .selection-mode.titlebar:backdrop:not(headerbar), .selection-mode headerbar:backdrop, headerbar.selection-mode:backdrop { background-color: #b16286; background-image: none; box-shadow: inset 0 1px rgba(165, 200, 236, 0.88); }
+
+-.selection-mode .titlebar:not(headerbar) button, .selection-mode.titlebar:not(headerbar) button, .selection-mode headerbar button, headerbar.selection-mode button { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #4a90d9, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
++.selection-mode .titlebar:not(headerbar) button, .selection-mode.titlebar:not(headerbar) button, .selection-mode headerbar button, headerbar.selection-mode button { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #b16286, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
+
+ .selection-mode .titlebar:not(headerbar) button.flat, .selection-mode.titlebar:not(headerbar) button.flat, .selection-mode headerbar button.flat, headerbar.selection-mode button.flat { border-color: transparent; background-color: transparent; background-image: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; }
+
+-.selection-mode .titlebar:not(headerbar) button:hover, .selection-mode.titlebar:not(headerbar) button:hover, .selection-mode headerbar button:hover, headerbar.selection-mode button:hover { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #4a90d9 60%, #3986d5); }
++.selection-mode .titlebar:not(headerbar) button:hover, .selection-mode.titlebar:not(headerbar) button:hover, .selection-mode headerbar button:hover, headerbar.selection-mode button:hover { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #b16286 60%, #3986d5); }
+
+ .selection-mode .titlebar:not(headerbar) button:active, .selection-mode .titlebar:not(headerbar) button:checked, .selection-mode.titlebar:not(headerbar) button:active, .selection-mode.titlebar:not(headerbar) button:checked, .selection-mode headerbar button:active, .selection-mode headerbar button:checked, headerbar.selection-mode button:active, headerbar.selection-mode button:checked { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; background-image: image(#3180d4); box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; }
+
+-.selection-mode .titlebar:not(headerbar) button:backdrop.flat, .selection-mode .titlebar:not(headerbar) button:backdrop, .selection-mode.titlebar:not(headerbar) button:backdrop.flat, .selection-mode.titlebar:not(headerbar) button:backdrop, .selection-mode headerbar button:backdrop.flat, .selection-mode headerbar button:backdrop, headerbar.selection-mode button:backdrop.flat, headerbar.selection-mode button:backdrop { border-color: #4a90d9; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); -gtk-icon-effect: none; border-color: #184472; }
++.selection-mode .titlebar:not(headerbar) button:backdrop.flat, .selection-mode .titlebar:not(headerbar) button:backdrop, .selection-mode.titlebar:not(headerbar) button:backdrop.flat, .selection-mode.titlebar:not(headerbar) button:backdrop, .selection-mode headerbar button:backdrop.flat, .selection-mode headerbar button:backdrop, headerbar.selection-mode button:backdrop.flat, headerbar.selection-mode button:backdrop { border-color: #b16286; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); -gtk-icon-effect: none; border-color: #184472; }
+
+ .selection-mode .titlebar:not(headerbar) button:backdrop.flat label, .selection-mode .titlebar:not(headerbar) button:backdrop.flat, .selection-mode .titlebar:not(headerbar) button:backdrop label, .selection-mode .titlebar:not(headerbar) button:backdrop, .selection-mode.titlebar:not(headerbar) button:backdrop.flat label, .selection-mode.titlebar:not(headerbar) button:backdrop.flat, .selection-mode.titlebar:not(headerbar) button:backdrop label, .selection-mode.titlebar:not(headerbar) button:backdrop, .selection-mode headerbar button:backdrop.flat label, .selection-mode headerbar button:backdrop.flat, .selection-mode headerbar button:backdrop label, .selection-mode headerbar button:backdrop, headerbar.selection-mode button:backdrop.flat label, headerbar.selection-mode button:backdrop.flat, headerbar.selection-mode button:backdrop label, headerbar.selection-mode button:backdrop { color: #dbe9f7; }
+
+@@ -754,17 +754,17 @@ treeview.view.expander:checked { -gtk-icon-source: -gtk-icontheme("pan-down-symb
+
+ treeview.view.expander:backdrop { color: #adafb0; }
+
+-treeview.view.progressbar { color: #ffffff; border: 1px solid #184472; border-radius: 4px; background-color: #4a90d9; background-image: linear-gradient(to bottom, #4a90d9, #2a76c6); box-shadow: inset 0 1px rgba(255, 255, 255, 0.3), 0 1px rgba(0, 0, 0, 0.2); }
++treeview.view.progressbar { color: #ffffff; border: 1px solid #184472; border-radius: 4px; background-color: #b16286; background-image: linear-gradient(to bottom, #4a90d9, #2a76c6); box-shadow: inset 0 1px rgba(255, 255, 255, 0.3), 0 1px rgba(0, 0, 0, 0.2); }
+
+-treeview.view.progressbar:selected:focus, treeview.view.progressbar:selected { border-radius: 4px; color: #4a90d9; box-shadow: none; background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); }
++treeview.view.progressbar:selected:focus, treeview.view.progressbar:selected { border-radius: 4px; color: #b16286; box-shadow: none; background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); }
+
+-treeview.view.progressbar:selected:focus:backdrop, treeview.view.progressbar:selected:backdrop { color: #4a90d9; border-color: #184472; background-color: #fcfcfc; }
++treeview.view.progressbar:selected:focus:backdrop, treeview.view.progressbar:selected:backdrop { color: #b16286; border-color: #184472; background-color: #fcfcfc; }
+
+ treeview.view.progressbar:backdrop { color: #fcfcfc; background-image: none; box-shadow: none; }
+
+ treeview.view.trough { background-color: rgba(46, 52, 54, 0.1); border-radius: 4px; }
+
+-treeview.view.trough:selected:focus, treeview.view.trough:selected { background-color: rgba(255, 255, 255, 0.3); border-radius: 4px; border-width: 1px 0; border-style: solid; border-color: #4a90d9; }
++treeview.view.trough:selected:focus, treeview.view.trough:selected { background-color: rgba(255, 255, 255, 0.3); border-radius: 4px; border-width: 1px 0; border-style: solid; border-color: #b16286; }
+
+ treeview.view header button { color: #979a9b; background-color: #ffffff; font-weight: bold; text-shadow: none; box-shadow: none; }
+
+@@ -772,9 +772,9 @@ treeview.view header button:hover { color: #636769; box-shadow: none; transition
+
+ treeview.view header button:active { color: #2e3436; transition: none; }
+
+-treeview.view button.dnd:active, treeview.view button.dnd:selected, treeview.view button.dnd:hover, treeview.view button.dnd, treeview.view header.button.dnd:active, treeview.view header.button.dnd:selected, treeview.view header.button.dnd:hover, treeview.view header.button.dnd { padding: 0 6px; color: #ffffff; background-image: none; background-color: #4a90d9; border-style: none; border-radius: 0; box-shadow: inset 0 0 0 1px #ffffff; text-shadow: none; transition: none; }
++treeview.view button.dnd:active, treeview.view button.dnd:selected, treeview.view button.dnd:hover, treeview.view button.dnd, treeview.view header.button.dnd:active, treeview.view header.button.dnd:selected, treeview.view header.button.dnd:hover, treeview.view header.button.dnd { padding: 0 6px; color: #ffffff; background-image: none; background-color: #b16286; border-style: none; border-radius: 0; box-shadow: inset 0 0 0 1px #ffffff; text-shadow: none; transition: none; }
+
+-treeview.view acceleditor > label { background-color: #4a90d9; }
++treeview.view acceleditor > label { background-color: #b16286; }
+
+ treeview.view header button, treeview.view header button:hover, treeview.view header button:active { padding: 0 6px; background-image: none; border-style: none solid solid none; border-color: #e8e8e7; border-radius: 0; text-shadow: none; }
+
+@@ -793,7 +793,7 @@ menubar:backdrop, .menubar:backdrop { background-color: #e8e8e7; }
+
+ menubar > menuitem, .menubar > menuitem { min-height: 16px; padding: 4px 8px; }
+
+-menubar > menuitem:hover, .menubar > menuitem:hover { box-shadow: inset 0 -3px #4a90d9; color: #2a76c6; }
++menubar > menuitem:hover, .menubar > menuitem:hover { box-shadow: inset 0 -3px #b16286; color: #2a76c6; }
+
+ menubar > menuitem:disabled, .menubar > menuitem:disabled { color: #8b8e8f; box-shadow: none; }
+
+@@ -805,7 +805,7 @@ menu:backdrop, .menu:backdrop, .context-menu:backdrop { background-color: #fcfcf
+
+ menu menuitem, .menu menuitem, .context-menu menuitem { min-height: 16px; min-width: 40px; padding: 4px 6px; text-shadow: none; }
+
+-menu menuitem:hover, .menu menuitem:hover, .context-menu menuitem:hover { color: #ffffff; background-color: #4a90d9; }
++menu menuitem:hover, .menu menuitem:hover, .context-menu menuitem:hover { color: #ffffff; background-color: #b16286; }
+
+ menu menuitem:disabled, .menu menuitem:disabled, .context-menu menuitem:disabled { color: #8b8e8f; }
+
+@@ -871,7 +871,7 @@ notebook > header.top > tabs > tab:hover { box-shadow: inset 0 -3px #b6b6b3; }
+
+ notebook > header.top > tabs > tab:backdrop { box-shadow: none; }
+
+-notebook > header.top > tabs > tab:checked { box-shadow: inset 0 -3px #4a90d9; }
++notebook > header.top > tabs > tab:checked { box-shadow: inset 0 -3px #b16286; }
+
+ notebook > header.bottom { border-top-style: solid; }
+
+@@ -881,7 +881,7 @@ notebook > header.bottom > tabs > tab:hover { box-shadow: inset 0 3px #b6b6b3; }
+
+ notebook > header.bottom > tabs > tab:backdrop { box-shadow: none; }
+
+-notebook > header.bottom > tabs > tab:checked { box-shadow: inset 0 3px #4a90d9; }
++notebook > header.bottom > tabs > tab:checked { box-shadow: inset 0 3px #b16286; }
+
+ notebook > header.left { border-right-style: solid; }
+
+@@ -891,7 +891,7 @@ notebook > header.left > tabs > tab:hover { box-shadow: inset -3px 0 #b6b6b3; }
+
+ notebook > header.left > tabs > tab:backdrop { box-shadow: none; }
+
+-notebook > header.left > tabs > tab:checked { box-shadow: inset -3px 0 #4a90d9; }
++notebook > header.left > tabs > tab:checked { box-shadow: inset -3px 0 #b16286; }
+
+ notebook > header.right { border-left-style: solid; }
+
+@@ -901,7 +901,7 @@ notebook > header.right > tabs > tab:hover { box-shadow: inset 3px 0 #b6b6b3; }
+
+ notebook > header.right > tabs > tab:backdrop { box-shadow: none; }
+
+-notebook > header.right > tabs > tab:checked { box-shadow: inset 3px 0 #4a90d9; }
++notebook > header.right > tabs > tab:checked { box-shadow: inset 3px 0 #b16286; }
+
+ notebook > header.top > tabs > arrow { border-top-style: none; }
+
+@@ -1067,13 +1067,13 @@ treeview ~ scrollbar.vertical { border-top: 1px solid #b6b6b3; margin-top: -1px;
+ /********** Switch * */
+ switch { font-weight: bold; font-size: smaller; outline-offset: -4px; border: 1px solid #b6b6b3; border-radius: 3px; color: #2e3436; background-color: #cfcfcd; text-shadow: 0 1px rgba(0, 0, 0, 0.1); }
+
+-switch:checked { color: #ffffff; border-color: #184472; background-color: #4a90d9; text-shadow: 0 1px rgba(24, 68, 114, 0.5), 0 0 2px rgba(255, 255, 255, 0.6); }
++switch:checked { color: #ffffff; border-color: #184472; background-color: #b16286; text-shadow: 0 1px rgba(24, 68, 114, 0.5), 0 0 2px rgba(255, 255, 255, 0.6); }
+
+ switch:disabled { color: #8b8e8f; border-color: #b6b6b3; background-color: #f1f1f1; text-shadow: none; }
+
+ switch:backdrop { color: #8b8e8f; border-color: #c0c0bd; background-color: #dadad8; text-shadow: none; transition: 200ms ease-out; }
+
+-switch:backdrop:checked { color: #e8e8e7; border-color: #4a90d9; background-color: #4a90d9; }
++switch:backdrop:checked { color: #e8e8e7; border-color: #b16286; background-color: #4a90d9; }
+
+ switch:backdrop:disabled { color: #c3c3c0; border-color: #c0c0bd; background-color: #f1f1f1; }
+
+@@ -1091,7 +1091,7 @@ switch:backdrop slider { transition: 200ms ease-out; border-color: #c0c0bd; back
+
+ switch:backdrop slider label, switch:backdrop slider { color: #8b8e8f; }
+
+-switch:backdrop:checked slider { border-color: #4a90d9; }
++switch:backdrop:checked slider { border-color: #b16286; }
+
+ switch:backdrop:disabled slider { border-color: #c0c0bd; background-image: image(#f1f1f1); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); }
+
+@@ -1215,11 +1215,11 @@ row:selected scale trough:disabled, scale row:selected trough:disabled, row:sele
+
+ .osd scale trough:disabled, scale .osd trough:disabled, .osd scale fill:disabled, scale .osd fill:disabled, .osd progressbar trough:disabled, progressbar .osd trough:disabled { background-color: rgba(49, 52, 52, 0.5); }
+
+-scale highlight, progressbar progress { border: 1px solid #184472; border-radius: 3px; background-color: #4a90d9; }
++scale highlight, progressbar progress { border: 1px solid #184472; border-radius: 3px; background-color: #b16286; }
+
+ scale highlight:disabled, progressbar progress:disabled { background-color: transparent; border-color: transparent; }
+
+-scale highlight:backdrop, progressbar progress:backdrop { border-color: #4a90d9; }
++scale highlight:backdrop, progressbar progress:backdrop { border-color: #b16286; }
+
+ scale highlight:backdrop:disabled, progressbar progress:backdrop:disabled { background-color: transparent; border-color: transparent; }
+
+@@ -1501,9 +1501,9 @@ levelbar block.low { border-color: #8f4700; background-color: #f57900; }
+
+ levelbar block.low:backdrop { border-color: #f57900; }
+
+-levelbar block.high, levelbar block:not(.empty) { border-color: #215d9c; background-color: #4a90d9; }
++levelbar block.high, levelbar block:not(.empty) { border-color: #215d9c; background-color: #b16286; }
+
+-levelbar block.high:backdrop, levelbar block:not(.empty):backdrop { border-color: #4a90d9; }
++levelbar block.high:backdrop, levelbar block:not(.empty):backdrop { border-color: #b16286; }
+
+ levelbar block.full { border-color: #40760c; background-color: #73d216; }
+
+@@ -1588,7 +1588,7 @@ row.activatable:selected:active { box-shadow: inset 0 2px 3px -1px rgba(0, 0, 0,
+
+ row.activatable:selected.has-open-popup, row.activatable:selected:hover { background-color: #4787c9; }
+
+-row.activatable:selected:backdrop { background-color: #4a90d9; }
++row.activatable:selected:backdrop { background-color: #b16286; }
+
+ /********************* App Notifications * */
+ .app-notification, .app-notification.frame { padding: 10px; border-radius: 0 0 5px 5px; background-color: rgba(28, 31, 32, 0.7); background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.2), transparent 2px); background-clip: padding-box; }
+@@ -1714,7 +1714,7 @@ placessidebar row:selected:active { box-shadow: none; }
+
+ placessidebar row.sidebar-placeholder-row { padding: 0 8px; min-height: 2px; background-image: image(#4e9a06); background-clip: content-box; }
+
+-placessidebar row.sidebar-new-bookmark-row { color: #4a90d9; }
++placessidebar row.sidebar-new-bookmark-row { color: #b16286; }
+
+ placessidebar row:drop(active):not(:disabled) { color: #4e9a06; box-shadow: inset 0 1px #4e9a06, inset 0 -1px #4e9a06; }
+
+@@ -1731,7 +1731,7 @@ placesview > actionbar > revealer > box > label { padding-left: 8px; padding-rig
+ /********* Paned * */
+ paned > separator { min-width: 1px; min-height: 1px; -gtk-icon-source: none; border-style: none; background-color: transparent; background-image: image(#b6b6b3); background-size: 1px 1px; }
+
+-paned > separator:selected { background-image: image(#4a90d9); }
++paned > separator:selected { background-image: image(#b16286); }
+
+ paned > separator:backdrop { background-image: image(#c0c0bd); }
+
+@@ -1756,15 +1756,15 @@ infobar { border-style: none; }
+
+ infobar.info, infobar.question, infobar.warning, infobar.error { text-shadow: 0 1px #2a76c6; }
+
+-infobar.info:backdrop, infobar.info, infobar.question:backdrop, infobar.question, infobar.warning:backdrop, infobar.warning, infobar.error:backdrop, infobar.error { background-color: #4a90d9; border-color: #2a76c6; }
++infobar.info:backdrop, infobar.info, infobar.question:backdrop, infobar.question, infobar.warning:backdrop, infobar.warning, infobar.error:backdrop, infobar.error { background-color: #b16286; border-color: #2a76c6; }
+
+ infobar.info:backdrop label, infobar.info:backdrop, infobar.info label, infobar.info, infobar.question:backdrop label, infobar.question:backdrop, infobar.question label, infobar.question, infobar.warning:backdrop label, infobar.warning:backdrop, infobar.warning label, infobar.warning, infobar.error:backdrop label, infobar.error:backdrop, infobar.error label, infobar.error { color: #ffffff; }
+
+ infobar.info:backdrop, infobar.question:backdrop, infobar.warning:backdrop, infobar.error:backdrop { text-shadow: none; }
+
+-infobar.info button, infobar.question button, infobar.warning button, infobar.error button { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #4a90d9, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
++infobar.info button, infobar.question button, infobar.warning button, infobar.error button { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; background-image: linear-gradient(to bottom, #b16286, #3986d5 60%, #2a76c6); text-shadow: 0 -1px rgba(0, 0, 0, 0.543529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.543529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); }
+
+-infobar.info button:hover, infobar.question button:hover, infobar.warning button:hover, infobar.error button:hover { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #4a90d9 60%, #3986d5); }
++infobar.info button:hover, infobar.question button:hover, infobar.warning button:hover, infobar.error button:hover { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; border-bottom-color: #184472; text-shadow: 0 -1px rgba(0, 0, 0, 0.495529); -gtk-icon-shadow: 0 -1px rgba(0, 0, 0, 0.495529); box-shadow: inset 0 1px rgba(255, 255, 255, 0.4); background-image: linear-gradient(to bottom, #63a0de, #b16286 60%, #3986d5); }
+
+ infobar.info button:active, infobar.info button:checked, infobar.question button:active, infobar.question button:checked, infobar.warning button:active, infobar.warning button:checked, infobar.error button:active, infobar.error button:checked { color: #ffffff; outline-color: rgba(255, 255, 255, 0.3); border-color: #215d9c; background-image: image(#3180d4); box-shadow: inset 0 1px rgba(255, 255, 255, 0); text-shadow: none; -gtk-icon-shadow: none; }
+
+@@ -1772,7 +1772,7 @@ infobar.info button:disabled, infobar.question button:disabled, infobar.warning
+
+ infobar.info button:disabled label, infobar.info button:disabled, infobar.question button:disabled label, infobar.question button:disabled, infobar.warning button:disabled label, infobar.warning button:disabled, infobar.error button:disabled label, infobar.error button:disabled { color: #b2d0ef; }
+
+-infobar.info button:backdrop, infobar.question button:backdrop, infobar.warning button:backdrop, infobar.error button:backdrop { border-color: #4a90d9; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); border-color: #215d9c; }
++infobar.info button:backdrop, infobar.question button:backdrop, infobar.warning button:backdrop, infobar.error button:backdrop { border-color: #b16286; background-image: image(#4a90d9); text-shadow: none; -gtk-icon-shadow: none; box-shadow: inset 0 1px rgba(255, 255, 255, 0); border-color: #215d9c; }
+
+ infobar.info button:backdrop label, infobar.info button:backdrop, infobar.question button:backdrop label, infobar.question button:backdrop, infobar.warning button:backdrop label, infobar.warning button:backdrop, infobar.error button:backdrop label, infobar.error button:backdrop { color: #dbe9f7; }
+
+@@ -1902,7 +1902,7 @@ button.titlebutton:backdrop { -gtk-icon-shadow: none; }
+
+ .selection-mode headerbar button.titlebutton:backdrop, .selection-mode .titlebar button.titlebutton:backdrop, headerbar.selection-mode button.titlebutton:backdrop, .titlebar.selection-mode button.titlebutton:backdrop { -gtk-icon-shadow: none; }
+
+-.view:selected:focus, .view:selected, iconview:selected, .view text:selected, iconview text:selected, textview text:selected, .view text selection:focus, iconview text selection:focus, .view text selection, iconview text selection, textview text selection:focus, textview text selection, flowbox flowboxchild:selected, spinbutton:not(.vertical) selection, entry selection, modelbutton.flat:selected, .menuitem.button.flat:selected, treeview.view:selected:focus, treeview.view:selected, row:selected, calendar:selected { background-color: #4a90d9; }
++.view:selected:focus, .view:selected, iconview:selected, .view text:selected, iconview text:selected, textview text:selected, .view text selection:focus, iconview text selection:focus, .view text selection, iconview text selection, textview text selection:focus, textview text selection, flowbox flowboxchild:selected, spinbutton:not(.vertical) selection, entry selection, modelbutton.flat:selected, .menuitem.button.flat:selected, treeview.view:selected:focus, treeview.view:selected, row:selected, calendar:selected { background-color: #b16286; }
+
+ row:selected label, label:selected, .selection-mode button.titlebutton, .view:selected:focus, .view:selected, iconview:selected, .view text:selected, iconview text:selected, textview text:selected, .view text selection:focus, iconview text selection:focus, .view text selection, iconview text selection, textview text selection:focus, textview text selection, flowbox flowboxchild:selected, spinbutton:not(.vertical) selection, entry selection, modelbutton.flat:selected, .menuitem.button.flat:selected, treeview.view:selected:focus, treeview.view:selected, row:selected, calendar:selected { color: #ffffff; }
+
+@@ -1956,7 +1956,7 @@ button.emoji-section:backdrop:not(:checked) { border-color: transparent; }
+
+ button.emoji-section:hover { border-color: #b6b6b3; }
+
+-button.emoji-section:checked { border-color: #4a90d9; }
++button.emoji-section:checked { border-color: #b16286; }
+
+ button.emoji-section label { padding: 0; opacity: 0.55; }
+
+@@ -1966,7 +1966,7 @@ button.emoji-section:checked label { opacity: 1; }
+
+ popover.emoji-picker .emoji { font-size: x-large; padding: 6px; border-radius: 6px; }
+
+-popover.emoji-picker .emoji :hover { background: #4a90d9; }
++popover.emoji-picker .emoji :hover { background: #b16286; }
+
+ popover.emoji-completion arrow { border: none; background: none; }
+
+@@ -1989,7 +1989,7 @@ text widgets and the like base background color */
+ @define-color theme_base_color #ffffff;
+ /*
+ base background color of selections */
+-@define-color theme_selected_bg_color #4a90d9;
++@define-color theme_selected_bg_color #b16286;
+ /*
+ text/foreground color of selections */
+ @define-color theme_selected_fg_color #ffffff;
+@@ -2016,7 +2016,7 @@ text widgets and the like base background color on backdrop windows */
+ @define-color theme_unfocused_base_color #fcfcfc;
+ /*
+ base background color of selections on backdrop windows */
+-@define-color theme_unfocused_selected_bg_color #4a90d9;
++@define-color theme_unfocused_selected_bg_color #b16286;
+ /*
+ text/foreground color of selections on backdrop windows */
+ @define-color theme_unfocused_selected_fg_color #ffffff;
+diff --git a/gtk/theme/HighContrast/_colors.scss b/gtk/theme/HighContrast/_colors.scss
+index ac9ba03..df79d00 100644
+--- a/gtk/theme/HighContrast/_colors.scss
++++ b/gtk/theme/HighContrast/_colors.scss
+@@ -7,7 +7,7 @@ $bg_color: if($variant == 'light', #fff, #000);
+ $fg_color: if($variant == 'light', #000, #fff);
+
+ $selected_fg_color: if($variant == 'light', #fff, #000);
+-$selected_bg_color: if($variant == 'light', #000, #ddd); //#4a90d9;
++$selected_bg_color: if($variant == 'light', #000, #ddd); //#b16286;
+ $selected_borders_color: if($variant == 'light', #000, #aaa);
+ $popover_bg_color: $bg_color;
+ $popover_hover_color: lighten($bg_color, 5%);
+@@ -21,7 +21,7 @@ $scrollbar_slider_color: mix($fg_color, $bg_color, 60%);
+ $scrollbar_slider_hover_color: mix($fg_color, $bg_color, 80%);
+ $scrollbar_slider_active_color: if($variant=='light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 10%));
+
+-$suggested_color: #4a90d9;
++$suggested_color: #b16286;
+ $warning_color: #f57900;
+ $error_color: #cc0000;
+ $success_color: #73d216;
+diff --git a/gtk/theme/HighContrast/gtk-contained-inverse.css b/gtk/theme/HighContrast/gtk-contained-inverse.css
+index fadb1ce..e24aa43 100644
+--- a/gtk/theme/HighContrast/gtk-contained-inverse.css
++++ b/gtk/theme/HighContrast/gtk-contained-inverse.css
+@@ -388,7 +388,7 @@ button.color colorswatch:only-child, button.color colorswatch:only-child overlay
+
+ *:link:backdrop, *:link:backdrop:hover { color: #ddd; }
+
+-button:link, button:visited { color: #4a90d9; font-weight: bold; text-shadow: none; }
++button:link, button:visited { color: #b16286; font-weight: bold; text-shadow: none; }
+
+ button:link:hover, button:link:active, button:visited:hover, button:visited:active { color: #ebebeb; text-shadow: none; }
+
+@@ -1294,13 +1294,13 @@ messagedialog.csd .dialog-action-area button:backdrop { border-width: 2px; borde
+
+ messagedialog.csd .dialog-action-area button:backdrop:disabled { border-width: 2px; border-style: solid; color: gray; background-color: #070707; border-color: #494949; background-image: none; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action { border-width: 2px; border-style: solid; color: white; background-image: none; background-color: #4a90d9; border-color: #1c5187; }
++messagedialog.csd .dialog-action-area button.suggested-action { border-width: 2px; border-style: solid; color: white; background-image: none; background-color: #b16286; border-color: #1c5187; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action:hover { border-width: 2px; border-style: solid; color: white; background-color: #4a90d9; border-color: #1c5187; background-image: none; }
++messagedialog.csd .dialog-action-area button.suggested-action:hover { border-width: 2px; border-style: solid; color: white; background-color: #b16286; border-color: #1c5187; background-image: none; }
+
+ messagedialog.csd .dialog-action-area button.suggested-action:active { border-width: 2px; border-style: solid; background-image: none; color: black; background-color: #b56f26; border-color: #1c5187; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action:backdrop { border-width: 2px; border-style: solid; color: white; background-color: #4a90d9; border-color: #4a90d9; background-image: none; }
++messagedialog.csd .dialog-action-area button.suggested-action:backdrop { border-width: 2px; border-style: solid; color: white; background-color: #b16286; border-color: #4a90d9; background-image: none; }
+
+ messagedialog.csd .dialog-action-area button.suggested-action:backdrop:disabled { border-width: 2px; border-style: solid; color: gray; background-color: #070707; border-color: #494949; background-image: none; }
+
+diff --git a/gtk/theme/HighContrast/gtk-contained.css b/gtk/theme/HighContrast/gtk-contained.css
+index e0e6a58..1ed100e 100644
+--- a/gtk/theme/HighContrast/gtk-contained.css
++++ b/gtk/theme/HighContrast/gtk-contained.css
+@@ -392,7 +392,7 @@ button.color colorswatch:only-child:disabled, button.color colorswatch:only-chil
+
+ *:link:backdrop, *:link:backdrop:hover { color: #000; }
+
+-button:link, button:visited { color: #4a90d9; font-weight: bold; text-shadow: none; }
++button:link, button:visited { color: #b16286; font-weight: bold; text-shadow: none; }
+
+ button:link:hover, button:link:active, button:visited:hover, button:visited:active { color: black; text-shadow: none; }
+
+@@ -1300,13 +1300,13 @@ messagedialog.csd .dialog-action-area button:backdrop { border-width: 2px; borde
+
+ messagedialog.csd .dialog-action-area button:backdrop:disabled { border-width: 2px; border-style: solid; color: gray; background-color: white; border-color: silver; background-image: none; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action { border-width: 2px; border-style: solid; color: white; background-image: none; background-color: #4a90d9; border-color: #1c5187; }
++messagedialog.csd .dialog-action-area button.suggested-action { border-width: 2px; border-style: solid; color: white; background-image: none; background-color: #b16286; border-color: #1c5187; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action:hover { border-width: 2px; border-style: solid; color: white; background-color: #4a90d9; border-color: #1c5187; background-image: none; }
++messagedialog.csd .dialog-action-area button.suggested-action:hover { border-width: 2px; border-style: solid; color: white; background-color: #b16286; border-color: #1c5187; background-image: none; }
+
+ messagedialog.csd .dialog-action-area button.suggested-action:active { border-width: 2px; border-style: solid; background-image: none; color: black; background-color: #b56f26; border-color: #1c5187; }
+
+-messagedialog.csd .dialog-action-area button.suggested-action:backdrop { border-width: 2px; border-style: solid; color: white; background-color: #4a90d9; border-color: #4a90d9; background-image: none; }
++messagedialog.csd .dialog-action-area button.suggested-action:backdrop { border-width: 2px; border-style: solid; color: white; background-color: #b16286; border-color: #4a90d9; background-image: none; }
+
+ messagedialog.csd .dialog-action-area button.suggested-action:backdrop:disabled { border-width: 2px; border-style: solid; color: gray; background-color: white; border-color: silver; background-image: none; }
+
diff --git a/patches/x11-libs/libXfont2-2.0.4/libXfont2-2.0.4_define_have_libbsd.patch b/patches/x11-libs/libXfont2-2.0.4/libXfont2-2.0.4_define_have_libbsd.patch
@@ -0,0 +1,26 @@
+From 5fceeeb0d1cdccdb2870f65444f2965344f3b8b9 Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd.kuhls@t-online.de>
+Date: Sat, 19 Oct 2019 09:32:41 +0200
+Subject: [PATCH] configure: define HAVE_LIBBSD when libbsd was found
+
+---
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index f507c28..cc7ca91 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,9 @@ AC_CHECK_HEADERS([endian.h poll.h sys/poll.h])
+ # Checks for library functions.
+ AC_CHECK_FUNCS([poll readlink])
+ AC_SEARCH_LIBS([strlcat], [bsd])
++if test "$ac_cv_search_strlcat" = "-lbsd"; then
++ AC_DEFINE(HAVE_LIBBSD,1,[Has libbsd])
++fi
+ AC_CONFIG_LIBOBJ_DIR([src/util])
+ AC_REPLACE_FUNCS([reallocarray strlcat strlcpy])
+
+--
+2.26.2
+
diff --git a/patches/x11-libs/libXft/1.patch b/patches/x11-libs/libXft/1.patch
@@ -0,0 +1,738 @@
+From 7808631e7a9a605d5fe7a1077129c658d9ec47fc Mon Sep 17 00:00:00 2001
+From: Maxime Coste <mawww@kakoune.org>
+Date: Tue, 22 Oct 2019 22:46:49 +1100
+Subject: [PATCH] Add support for BGRA glyphs display and scaling
+
+Display is done using an XRender Picture, as XRender
+glyphs are incompatible with BGRA rendering due to
+their use of the glyph bitmap as a mask.
+
+Scaling is done by averaging all relevant pixel, which gives
+much better result than nearest pixel sampling while staying
+simple enough and not too computationally expensive.
+
+This enables color emoji rendering support.
+
+Fixes: #6
+
+Signed-off-by: Maxime Coste <mawww@kakoune.org>
+---
+ src/xftfreetype.c | 18 ++++-
+ src/xftglyphs.c | 200 ++++++++++++++++++++++++++++++++++++++++++----
+ src/xftint.h | 2 +
+ src/xftrender.c | 168 ++++++++++++++++++++++++--------------
+ 4 files changed, 307 insertions(+), 81 deletions(-)
+
+diff --git a/src/xftfreetype.c b/src/xftfreetype.c
+index a3b8332..a639a03 100644
+--- a/src/xftfreetype.c
++++ b/src/xftfreetype.c
+@@ -514,7 +514,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi)
+ /*
+ * Compute glyph load flags
+ */
+- fi->load_flags = FT_LOAD_DEFAULT;
++ fi->load_flags = FT_LOAD_DEFAULT | FT_LOAD_COLOR;
+
+ #ifndef XFT_EMBEDDED_BITMAP
+ #define XFT_EMBEDDED_BITMAP "embeddedbitmap"
+@@ -766,6 +766,7 @@ XftFontOpenInfo (Display *dpy,
+ FcChar32 hash_value;
+ FcChar32 rehash_value;
+ FcBool antialias;
++ FcBool color;
+ int max_glyph_memory;
+ int alloc_size;
+ int ascent, descent, height;
+@@ -822,12 +823,16 @@ XftFontOpenInfo (Display *dpy,
+ if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
+ antialias = FcFalse;
+
++ color = FT_HAS_COLOR(face) ? FcTrue : FcFalse;
++
+ /*
+ * Find the appropriate picture format
+ */
+ if (fi->render)
+ {
+- if (antialias)
++ if (color)
++ format = XRenderFindStandardFormat (dpy, PictStandardARGB32);
++ else if (antialias)
+ {
+ switch (fi->rgba) {
+ case FC_RGBA_RGB:
+@@ -842,9 +847,7 @@ XftFontOpenInfo (Display *dpy,
+ }
+ }
+ else
+- {
+ format = XRenderFindStandardFormat (dpy, PictStandardA1);
+- }
+
+ if (!format)
+ goto bail2;
+@@ -959,6 +962,13 @@ XftFontOpenInfo (Display *dpy,
+ * which doesn't happen in XftFontInfoFill
+ */
+ font->info.antialias = antialias;
++
++ /*
++ * Set color value, which is only known once the
++ * font was loaded
++ */
++ font->info.color = color;
++
+ /*
+ * bump XftFile reference count
+ */
+diff --git a/src/xftglyphs.c b/src/xftglyphs.c
+index 4b5fb82..af2e3c1 100644
+--- a/src/xftglyphs.c
++++ b/src/xftglyphs.c
+@@ -26,6 +26,8 @@
+
+ #include FT_SYNTHESIS_H
+
++#include FT_GLYPH_H
++
+ /*
+ * Validate the memory info for a font
+ */
+@@ -78,9 +80,11 @@ _XftFontValidateMemory (Display *dpy, XftFont *public)
+ static int
+ _compute_xrender_bitmap_size( FT_Bitmap* target,
+ FT_GlyphSlot slot,
+- FT_Render_Mode mode )
++ FT_Render_Mode mode,
++ FT_Matrix* matrix )
+ {
+ FT_Bitmap* ftbit;
++ FT_Vector vector;
+ int width, height, pitch;
+
+ if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
+@@ -88,9 +92,18 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
+
+ // compute the size of the final bitmap
+ ftbit = &slot->bitmap;
+-
+ width = ftbit->width;
+ height = ftbit->rows;
++
++ if ( matrix && mode == FT_RENDER_MODE_NORMAL )
++ {
++ vector.x = ftbit->width;
++ vector.y = ftbit->rows;
++ FT_Vector_Transform(&vector, matrix);
++
++ width = vector.x;
++ height = vector.y;
++ }
+ pitch = (width+3) & ~3;
+
+ switch ( ftbit->pixel_mode )
+@@ -112,6 +125,10 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
+ }
+ break;
+
++ case FT_PIXEL_MODE_BGRA:
++ pitch = width * 4;
++ break;
++
+ case FT_PIXEL_MODE_LCD:
+ if ( mode != FT_RENDER_MODE_LCD )
+ return -1;
+@@ -142,6 +159,105 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
+ return pitch * height;
+ }
+
++/* this functions converts the glyph bitmap found in a FT_GlyphSlot
++ * into a different format while scaling by applying the given matrix
++ * (see _compute_xrender_bitmap_size)
++ *
++ * you should call this function after _compute_xrender_bitmap_size
++ *
++ * target :: target bitmap descriptor. Note that its 'buffer' pointer
++ * must point to memory allocated by the caller
++ *
++ * source :: the source bitmap descriptor
++ *
++ * matrix :: the scaling matrix to apply
++ */
++static void
++_scaled_fill_xrender_bitmap( FT_Bitmap* target,
++ FT_Bitmap* source,
++ const FT_Matrix* matrix )
++{
++ unsigned char* src_buf = source->buffer;
++ unsigned char* dst_line = target->buffer;
++ int src_pitch = source->pitch;
++ int width = target->width;
++ int height = target->rows;
++ int pitch = target->pitch;
++ int h;
++ FT_Vector vector;
++ FT_Matrix inverse = *matrix;
++ int sampling_width;
++ int sampling_height;
++ int sample_count;
++
++ if ( src_pitch < 0 )
++ src_buf -= src_pitch*(source->rows-1);
++
++ FT_Matrix_Invert(&inverse);
++
++ /* compute how many source pixels a target pixel spans */
++ vector.x = 1;
++ vector.y = 1;
++ FT_Vector_Transform(&vector, &inverse);
++ sampling_width = vector.x / 2;
++ sampling_height = vector.y / 2;
++ sample_count = (2 * sampling_width + 1) * (2 * sampling_height + 1);
++
++ for ( h = height; h > 0; h--, dst_line += pitch )
++ {
++ int x;
++
++ for ( x = 0; x < width; x++ )
++ {
++ unsigned char* src;
++
++#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
++
++ /* compute target pixel location in source space */
++ vector.x = (x * 0x10000) + 0x10000 / 2;
++ vector.y = ((height - h) * 0x10000) + 0x10000 / 2;
++ FT_Vector_Transform(&vector, &inverse);
++ vector.x = CLAMP(FT_RoundFix(vector.x) / 0x10000, 0, source->width - 1);
++ vector.y = CLAMP(FT_RoundFix(vector.y) / 0x10000, 0, source->rows - 1);
++
++ switch ( source->pixel_mode )
++ {
++ case FT_PIXEL_MODE_MONO: /* convert mono to 8-bit gray, scale using nearest pixel */
++ src = src_buf + (vector.y * src_pitch);
++ if ( src[(vector.x >> 3)] & (0x80 >> (vector.x & 7)) )
++ dst_line[x] = 0xff;
++ break;
++
++ case FT_PIXEL_MODE_GRAY: /* scale using nearest pixel */
++ src = src_buf + (vector.y * src_pitch);
++ dst_line[x] = src[vector.x];
++ break;
++
++ case FT_PIXEL_MODE_BGRA: /* scale by averaging all relevant source pixels, keep BGRA format */
++ {
++ int sample_x, sample_y;
++ int bgra[4] = {};
++ for (sample_y = - sampling_height; sample_y < sampling_height + 1; ++sample_y)
++ {
++ int src_y = CLAMP(vector.y + sample_y, 0, source->rows - 1);
++ src = src_buf + (src_y * src_pitch);
++ for (sample_x = - sampling_width; sample_x < sampling_width + 1; ++sample_x)
++ {
++ int src_x = CLAMP(vector.x + sample_x, 0, source->width - 1);
++ for (int i = 0; i < 4; ++i)
++ bgra[i] += src[src_x * 4 + i];
++ }
++ }
++
++ for (int i = 0; i < 4; ++i)
++ dst_line[4 * x + i] = bgra[i] / sample_count;
++ break;
++ }
++ }
++ }
++ }
++}
++
+ /* this functions converts the glyph bitmap found in a FT_GlyphSlot
+ * into a different format (see _compute_xrender_bitmap_size)
+ *
+@@ -244,6 +360,11 @@ _fill_xrender_bitmap( FT_Bitmap* target,
+ }
+ break;
+
++ case FT_PIXEL_MODE_BGRA: /* Preserve BGRA format */
++ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
++ memcpy( dstLine, srcLine, width * 4 );
++ break;
++
+ case FT_PIXEL_MODE_LCD:
+ if ( !bgr )
+ {
+@@ -365,6 +486,8 @@ XftFontLoadGlyphs (Display *dpy,
+ FT_Vector vector;
+ FT_Face face;
+ FT_Render_Mode mode = FT_RENDER_MODE_MONO;
++ FcBool transform;
++ FcBool glyph_transform;
+
+ if (!info)
+ return;
+@@ -374,6 +497,8 @@ XftFontLoadGlyphs (Display *dpy,
+ if (!face)
+ return;
+
++ if (font->info.color)
++ mode = FT_RENDER_MODE_NORMAL;
+ if (font->info.antialias)
+ {
+ switch (font->info.rgba) {
+@@ -390,6 +515,8 @@ XftFontLoadGlyphs (Display *dpy,
+ }
+ }
+
++ transform = font->info.transform && mode != FT_RENDER_MODE_MONO;
++
+ while (nglyph--)
+ {
+ glyphindex = *glyphs++;
+@@ -440,7 +567,7 @@ XftFontLoadGlyphs (Display *dpy,
+ /*
+ * Compute glyph metrics from FreeType information
+ */
+- if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
++ if (transform)
+ {
+ /*
+ * calculate the true width by transforming all four corners.
+@@ -487,7 +614,7 @@ XftFontLoadGlyphs (Display *dpy,
+ * Clip charcell glyphs to the bounding box
+ * XXX transformed?
+ */
+- if (font->info.spacing >= FC_CHARCELL && !font->info.transform)
++ if (font->info.spacing >= FC_CHARCELL && !transform)
+ {
+ if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
+ {
+@@ -519,18 +646,20 @@ XftFontLoadGlyphs (Display *dpy,
+ }
+ }
+
++ glyph_transform = transform;
+ if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
+ {
+ error = FT_Render_Glyph( face->glyph, mode );
+ if (error)
+ continue;
++ glyph_transform = False;
+ }
+
+ FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
+
+ if (font->info.spacing >= FC_MONO)
+ {
+- if (font->info.transform)
++ if (transform)
+ {
+ if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
+ {
+@@ -613,14 +742,27 @@ XftFontLoadGlyphs (Display *dpy,
+ }
+ }
+
+- size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
++ size = _compute_xrender_bitmap_size( &local, glyphslot, mode, glyph_transform ? &font->info.matrix : NULL );
+ if ( size < 0 )
+ continue;
+
+ xftg->metrics.width = local.width;
+ xftg->metrics.height = local.rows;
+- xftg->metrics.x = - glyphslot->bitmap_left;
+- xftg->metrics.y = glyphslot->bitmap_top;
++ if (transform)
++ {
++ vector.x = - glyphslot->bitmap_left;
++ vector.y = glyphslot->bitmap_top;
++
++ FT_Vector_Transform(&vector, &font->info.matrix);
++
++ xftg->metrics.x = vector.x;
++ xftg->metrics.y = vector.y;
++ }
++ else
++ {
++ xftg->metrics.x = - glyphslot->bitmap_left;
++ xftg->metrics.y = glyphslot->bitmap_top;
++ }
+
+ /*
+ * If the glyph is relatively large (> 1% of server memory),
+@@ -645,9 +787,12 @@ XftFontLoadGlyphs (Display *dpy,
+
+ local.buffer = bufBitmap;
+
+- _fill_xrender_bitmap( &local, glyphslot, mode,
+- (font->info.rgba == FC_RGBA_BGR ||
+- font->info.rgba == FC_RGBA_VBGR ) );
++ if (mode == FT_RENDER_MODE_NORMAL && glyph_transform)
++ _scaled_fill_xrender_bitmap(&local, &glyphslot->bitmap, &font->info.matrix);
++ else
++ _fill_xrender_bitmap( &local, glyphslot, mode,
++ (font->info.rgba == FC_RGBA_BGR ||
++ font->info.rgba == FC_RGBA_VBGR ) );
+
+ /*
+ * Copy or convert into local buffer.
+@@ -662,6 +807,7 @@ XftFontLoadGlyphs (Display *dpy,
+ */
+ glyph = (Glyph) glyphindex;
+
++ xftg->picture = 0;
+ xftg->glyph_memory = size + sizeof (XftGlyph);
+ if (font->format)
+ {
+@@ -685,15 +831,35 @@ XftFontLoadGlyphs (Display *dpy,
+ }
+ }
+ }
+- else if ( mode != FT_RENDER_MODE_NORMAL )
++ else if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA || mode != FT_RENDER_MODE_NORMAL)
+ {
+ /* invert ARGB <=> BGRA */
+ if (ImageByteOrder (dpy) != XftNativeByteOrder ())
+ XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
+ }
+- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
+- &xftg->metrics, 1,
+- (char *) bufBitmap, size);
++
++ if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
++ {
++ Pixmap pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), local.width, local.rows, 32);
++ GC gc = XCreateGC(dpy, pixmap, 0, NULL);
++ XImage image = {
++ local.width, local.rows, 0, ZPixmap, (char *)bufBitmap,
++ dpy->byte_order, dpy->bitmap_unit, dpy->bitmap_bit_order, 32,
++ 32, local.width * 4 - local.pitch, 32,
++ 0, 0, 0
++ };
++
++ XInitImage(&image);
++ XPutImage(dpy, pixmap, gc, &image, 0, 0, 0, 0, local.width, local.rows);
++ xftg->picture = XRenderCreatePicture(dpy, pixmap, font->format, 0, NULL);
++
++ XFreeGC(dpy, gc);
++ XFreePixmap(dpy, pixmap);
++ }
++ else
++ XRenderAddGlyphs (dpy, font->glyphset, &glyph,
++ &xftg->metrics, 1,
++ (char *) bufBitmap, size);
+ }
+ else
+ {
+@@ -744,7 +910,9 @@ XftFontUnloadGlyphs (Display *dpy,
+ {
+ if (font->format)
+ {
+- if (font->glyphset)
++ if (xftg->picture)
++ XRenderFreePicture(dpy, xftg->picture);
++ else if (font->glyphset)
+ {
+ glyphBuf[nused++] = (Glyph) glyphindex;
+ if (nused == sizeof (glyphBuf) / sizeof (glyphBuf[0]))
+diff --git a/src/xftint.h b/src/xftint.h
+index c06ac3c..b263520 100644
+--- a/src/xftint.h
++++ b/src/xftint.h
+@@ -85,6 +85,7 @@ typedef struct _XftGlyph {
+ XGlyphInfo metrics;
+ void *bitmap;
+ unsigned long glyph_memory;
++ Picture picture;
+ } XftGlyph;
+
+ /*
+@@ -134,6 +135,7 @@ struct _XftFontInfo {
+ FT_F26Dot6 xsize, ysize; /* pixel size */
+ FcBool antialias; /* doing antialiasing */
+ FcBool embolden; /* force emboldening */
++ FcBool color; /* contains color glyphs */
+ int rgba; /* subpixel order */
+ int lcd_filter; /* lcd filter */
+ FT_Matrix matrix; /* glyph transformation matrix */
+diff --git a/src/xftrender.c b/src/xftrender.c
+index b280c03..9a789cb 100644
+--- a/src/xftrender.c
++++ b/src/xftrender.c
+@@ -25,6 +25,35 @@
+ #define NUM_LOCAL 1024
+ #define NUM_ELT_LOCAL 128
+
++/*
++ * Dispatch glyph drawing to the correct XRenderCompositeString function
++ */
++static void
++_XftCompositeString (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, GlyphSet glyphset, int srcx, int srcy, int dstx, int dsty, int charwidth, unsigned int* chars, int nchars)
++{
++ if (nchars == 0)
++ return;
++
++ switch (charwidth) {
++ case 1:
++ default:
++ XRenderCompositeString8 (dpy, op,
++ src, dst, format, glyphset,
++ srcx, srcy, dstx, dsty, (char*)chars, nchars);
++ break;
++ case 2:
++ XRenderCompositeString16(dpy, op,
++ src, dst, format, glyphset,
++ srcx, srcy, dstx, dsty, (unsigned short*)chars, nchars);
++ break;
++ case 4:
++ XRenderCompositeString32(dpy, op,
++ src, dst, format, glyphset,
++ srcx, srcy, dstx, dsty, (unsigned int*)chars, nchars);
++ break;
++ }
++}
++
+ /*
+ * Use the Render extension to draw the glyphs
+ */
+@@ -43,12 +72,14 @@ XftGlyphRender (Display *dpy,
+ int nglyphs)
+ {
+ XftFontInt *font = (XftFontInt *) pub;
+- int i;
++ int i, j;
+ FT_UInt missing[XFT_NMISSING];
+ int nmissing;
+ FT_UInt g, max;
+ int size, width;
++ int dstx, dsty;
+ Glyph wire;
++ XftGlyph* glyph;
+ char *char8;
+ unsigned short *char16;
+ unsigned int *char32;
+@@ -100,43 +131,75 @@ XftGlyphRender (Display *dpy,
+ if (!chars)
+ goto bail1;
+ }
++ dstx = x;
++ dsty = y;
+ char8 = (char *) chars;
+ char16 = (unsigned short *) chars;
+ char32 = (unsigned int *) chars;
+- for (i = 0; i < nglyphs; i++)
++ for (i = 0, j = 0; i < nglyphs; i++)
+ {
+ wire = (Glyph) glyphs[i];
+ if (wire >= font->num_glyphs || !font->glyphs[wire])
+ wire = 0;
+- switch (width) {
+- case 1: char8[i] = (char) wire; break;
+- case 2: char16[i] = (unsigned short) wire; break;
+- case 4: char32[i] = (unsigned long) wire; break;
++ glyph = font->glyphs[wire];
++ if (glyph->picture)
++ {
++ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
++ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, dstx, dsty - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
++ x = dstx = dstx + glyph->metrics.xOff;
++ x = dsty = dsty + glyph->metrics.yOff;
++ j = 0;
++ }
++ else
++ {
++ switch (width) {
++ case 1: char8[j] = (char) wire; break;
++ case 2: char16[j] = (unsigned short) wire; break;
++ case 4: char32[j] = (unsigned long) wire; break;
++ }
++ dstx += glyph->metrics.xOff;
++ dsty += glyph->metrics.yOff;
++ ++j;
+ }
+ }
+- switch (width) {
++ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
++ if (chars != char_local)
++ free (chars);
++bail1:
++ if (glyphs_loaded)
++ _XftFontManageMemory (dpy, pub);
++}
++
++/*
++ * Dispatch glyph drawing to the correct XRenderCompositeText function
++ */
++static void
++_XftCompositeText (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, int srcx, int srcy, int dstx, int dsty, int eltwidth, XGlyphElt8* elts, int nelt)
++{
++ if (nelt == 0)
++ return;
++
++ switch (eltwidth) {
+ case 1:
+ default:
+- XRenderCompositeString8 (dpy, op,
+- src, dst, font->format, font->glyphset,
+- srcx, srcy, x, y, char8, nglyphs);
++ XRenderCompositeText8 (dpy, op,
++ src, dst, format,
++ srcx, srcy, dstx, dsty,
++ (XGlyphElt8*)elts, nelt);
+ break;
+ case 2:
+- XRenderCompositeString16(dpy, op,
+- src, dst, font->format, font->glyphset,
+- srcx, srcy, x, y, char16, nglyphs);
++ XRenderCompositeText16(dpy, op,
++ src, dst, format,
++ srcx, srcy, dstx, dsty,
++ (XGlyphElt16*)elts, nelt);
+ break;
+ case 4:
+- XRenderCompositeString32(dpy, op,
+- src, dst, font->format, font->glyphset,
+- srcx, srcy, x, y, char32, nglyphs);
++ XRenderCompositeText32(dpy, op,
++ src, dst, format,
++ srcx, srcy, dstx, dsty,
++ (XGlyphElt32*)elts, nelt);
+ break;
+ }
+- if (chars != char_local)
+- free (chars);
+-bail1:
+- if (glyphs_loaded)
+- _XftFontManageMemory (dpy, pub);
+ }
+
+ _X_EXPORT void
+@@ -251,9 +314,10 @@ XftGlyphSpecRender (Display *dpy,
+ g = 0;
+ /*
+ * check to see if the glyph is placed where it would
+- * fall using the normal spacing
++ * fall using the normal spacing and if it would render
++ * as a XRender glyph
+ */
+- if ((glyph = font->glyphs[g]))
++ if ((glyph = font->glyphs[g]) && !glyph->picture)
+ {
+ if (x != glyphs[i].x || y != glyphs[i].y)
+ {
+@@ -267,7 +331,7 @@ XftGlyphSpecRender (Display *dpy,
+ }
+
+ elts = elts_local;
+- if (nelt > NUM_ELT_LOCAL)
++ if (!font->info.color && nelt > NUM_ELT_LOCAL)
+ {
+ elts = malloc (nelt * sizeof (XGlyphElt8));
+ if (!elts)
+@@ -275,7 +339,7 @@ XftGlyphSpecRender (Display *dpy,
+ }
+
+ /*
+- * Generate the list of glyph elts
++ * Generate the list of glyph elts or render color glyphs
+ */
+ nelt = 0;
+ x = y = 0;
+@@ -289,6 +353,11 @@ XftGlyphSpecRender (Display *dpy,
+ g = 0;
+ if ((glyph = font->glyphs[g]))
+ {
++ if (glyph->picture)
++ {
++ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
++ continue;
++ }
+ if (!i || x != glyphs[i].x || y != glyphs[i].y)
+ {
+ if (n)
+@@ -320,23 +389,9 @@ XftGlyphSpecRender (Display *dpy,
+ elts[nelt].nchars = n;
+ nelt++;
+ }
+- switch (width) {
+- case 1:
+- XRenderCompositeText8 (dpy, op, src, dst, font->format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- elts, nelt);
+- break;
+- case 2:
+- XRenderCompositeText16 (dpy, op, src, dst, font->format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- (XGlyphElt16 *) elts, nelt);
+- break;
+- case 4:
+- XRenderCompositeText32 (dpy, op, src, dst, font->format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- (XGlyphElt32 *) elts, nelt);
+- break;
+- }
++ _XftCompositeText(dpy, op, src, dst, font->format,
++ srcx, srcy, glyphs[0].x, glyphs[0].y,
++ width, elts, nelt);
+
+ if (elts != elts_local)
+ free (elts);
+@@ -535,7 +590,7 @@ XftGlyphFontSpecRender (Display *dpy,
+ * check to see if the glyph is placed where it would
+ * fall using the normal spacing
+ */
+- if ((glyph = font->glyphs[g]))
++ if ((glyph = font->glyphs[g]) && !glyph->picture)
+ {
+ if (pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
+ {
+@@ -560,7 +615,7 @@ XftGlyphFontSpecRender (Display *dpy,
+ }
+
+ /*
+- * Generate the list of glyph elts
++ * Generate the list of glyph elts and render color glyphs
+ */
+ nelt = 0;
+ x = y = 0;
+@@ -578,6 +633,11 @@ XftGlyphFontSpecRender (Display *dpy,
+ g = 0;
+ if ((glyph = font->glyphs[g]))
+ {
++ if (glyph->picture)
++ {
++ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
++ continue;
++ }
+ if (!i || pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
+ {
+ if (n)
+@@ -610,23 +670,9 @@ XftGlyphFontSpecRender (Display *dpy,
+ elts[nelt].nchars = n;
+ nelt++;
+ }
+- switch (width) {
+- case 1:
+- XRenderCompositeText8 (dpy, op, src, dst, format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- elts, nelt);
+- break;
+- case 2:
+- XRenderCompositeText16 (dpy, op, src, dst, format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- (XGlyphElt16 *) elts, nelt);
+- break;
+- case 4:
+- XRenderCompositeText32 (dpy, op, src, dst, format,
+- srcx, srcy, glyphs[0].x, glyphs[0].y,
+- (XGlyphElt32 *) elts, nelt);
+- break;
+- }
++ _XftCompositeText(dpy, op, src, dst, format,
++ srcx, srcy, glyphs[0].x, glyphs[0].y,
++ width, elts, nelt);
+
+ if (elts != elts_local)
+ free (elts);
+--
+2.24.1
+
diff --git a/patches/x11-libs/pango-1.42.4-r1/pango-CVE-2019-1010238.patch b/patches/x11-libs/pango-1.42.4-r1/pango-CVE-2019-1010238.patch
@@ -0,0 +1,34 @@
+From 490f8979a260c16b1df055eab386345da18a2d54 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen@redhat.com>
+Date: Wed, 10 Jul 2019 20:26:23 -0400
+Subject: [PATCH] bidi: Be safer against bad input
+
+Don't run off the end of an array that we
+allocated to certain length.
+
+Closes: https://gitlab.gnome.org/GNOME/pango/issues/342
+---
+ pango/pango-bidi-type.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
+index 3e46b66c..5c02dbbb 100644
+--- a/pango/pango-bidi-type.c
++++ b/pango/pango-bidi-type.c
+@@ -181,8 +181,11 @@ pango_log2vis_get_embedding_levels (const gchar *text,
+ for (i = 0, p = text; p < text + length; p = g_utf8_next_char(p), i++)
+ {
+ gunichar ch = g_utf8_get_char (p);
+- FriBidiCharType char_type;
+- char_type = fribidi_get_bidi_type (ch);
++ FriBidiCharType char_type = fribidi_get_bidi_type (ch);
++
++ if (i == n_chars)
++ break;
++
+ bidi_types[i] = char_type;
+ ored_types |= char_type;
+ if (FRIBIDI_IS_STRONG (char_type))
+--
+2.21.0
+
diff --git a/patches/x11-misc/redshift/redshift-1.12_no_objc.patch b/patches/x11-misc/redshift/redshift-1.12_no_objc.patch
@@ -0,0 +1,91 @@
+diff -udr ./configure.ac ../redshift-1.12.new/configure.ac
+--- ./configure.ac 2018-05-21 01:47:53.000000000 +0000
++++ ./configure.ac 2020-04-04 08:00:02.853123881 +0000
+@@ -13,7 +13,6 @@
+ # Checks for programs.
+ AC_PROG_CC_C99
+ AC_PROG_LIBTOOL
+-AC_PROG_OBJC # For macOS support modules
+ AC_LANG([C])
+
+ AC_PROG_INTLTOOL([0.50])
+@@ -39,18 +38,6 @@
+ [test "x$enable_windows_resource" = xyes])
+
+
+-# Test whether Objective C compiler works
+-AC_MSG_CHECKING([whether Objective C compiler works])
+-AC_LANG_PUSH([Objective C])
+-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [
+- AC_MSG_RESULT([yes])
+- have_objc_compiler=yes
+-], [
+- AC_MSG_RESULT([no])
+- have_objc_compiler=no
+-])
+-AC_LANG_POP([Objective C])
+-
+ # Checks for libraries.
+ AM_GNU_GETTEXT_VERSION([0.17])
+ AM_GNU_GETTEXT([external])
+@@ -74,25 +61,7 @@
+ # macOS headers
+ AC_CHECK_HEADER([ApplicationServices/ApplicationServices.h], [have_appserv_h=yes], [have_appserv_h=no])
+
+-# CoreLocation.h is an Objective C header. Only test if
+-# Objective C compiler works. AC_CHECK_HEADER does not
+-# appear to work if the Ojective C compiler is not
+-# available so we need a custom test.
+-AC_MSG_CHECKING([whether CoreLocation/CoreLocation.h is usable])
+-AS_IF([test "x$have_objc_compiler" = xyes], [
+- AC_LANG_PUSH([Objective C])
+- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#import <CoreLocation/CoreLocation.h>]],[[]])], [
+- AC_MSG_RESULT([yes])
+- have_corelocation_h=yes
+- ], [
+- AC_MSG_RESULT([no])
+- have_corelocation_h=no
+- ])
+- AC_LANG_POP([Objective C])
+-], [
+- AC_MSG_RESULT([no Objective C compiler available])
+- have_corelocation_h=no
+-])
++have_corelocation_h=no
+
+ # Windows header
+ AC_CHECK_HEADER([windows.h], [have_windows_h=yes], [have_windows_h=no])
+diff -udr ./src/Makefile.am ../redshift-1.12.new/src/Makefile.am
+--- ./src/Makefile.am 2018-05-21 01:47:53.000000000 +0000
++++ ./src/Makefile.am 2020-04-04 08:00:03.109117287 +0000
+@@ -28,7 +28,6 @@
+ gamma-quartz.c gamma-quartz.h \
+ gamma-w32gdi.c gamma-w32gdi.h \
+ location-geoclue2.c location-geoclue2.h \
+- location-corelocation.m location-corelocation.h \
+ windows/appicon.rc \
+ windows/versioninfo.rc
+
+@@ -80,22 +79,6 @@
+ $(GEOCLUE2_LIBS) $(GEOCLUE2_CFLAGS)
+ endif
+
+-# Build CoreLocation module as a separate convenience
+-# library since it is using a separate compiler
+-# (Objective C).
+-
+-if ENABLE_CORELOCATION
+-noinst_LTLIBRARIES = liblocation-corelocation.la
+-liblocation_corelocation_la_SOURCES = \
+- location-corelocation.m location-corelocation.h
+-liblocation_corelocation_la_OBJCFLAGS = \
+- $(CORELOCATION_CFLAGS)
+-liblocation_corelocation_la_LIBADD = \
+- $(CORELOCATION_CFLAGS) $(CORELOCATION_LIBS)
+-redshift_LDADD += liblocation-corelocation.la
+-endif
+-
+-
+ # Windows resources
+ if ENABLE_WINDOWS_RESOURCE
+ redshift_SOURCES += windows/appicon.rc windows/versioninfo.rc
diff --git a/patches/x11-misc/tabbed-0.6/tabbed-0.6-xft.diff b/patches/x11-misc/tabbed-0.6/tabbed-0.6-xft.diff
@@ -0,0 +1,233 @@
+diff --git a/config.def.h b/config.def.h
+index ceda9f7..bc7cfe2 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -1,7 +1,7 @@
+ /* See LICENSE file for copyright and license details. */
+
+ /* appearance */
+-static const char font[] = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
++static const char font[] = "monospace-9";
+ static const char* normbgcolor = "#222222";
+ static const char* normfgcolor = "#cccccc";
+ static const char* selbgcolor = "#555555";
+diff --git a/config.mk b/config.mk
+index 5279711..037f9d7 100644
+--- a/config.mk
++++ b/config.mk
+@@ -8,8 +8,8 @@ PREFIX = /usr/local
+ MANPREFIX = ${PREFIX}/share/man
+
+ # includes and libs
+-INCS = -I. -I/usr/include
+-LIBS = -lX11
++INCS = -I. -I/usr/include -I/usr/include/freetype2
++LIBS = -L/usr/lib -lc -lX11 -lfontconfig -lXft
+
+ # flags
+ CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE
+diff --git a/tabbed.c b/tabbed.c
+index d30206b..d08348c 100644
+--- a/tabbed.c
++++ b/tabbed.c
+@@ -15,6 +15,7 @@
+ #include <X11/Xproto.h>
+ #include <X11/Xutil.h>
+ #include <X11/XKBlib.h>
++#include <X11/Xft/Xft.h>
+
+ #include "arg.h"
+
+@@ -64,16 +65,15 @@ typedef struct {
+
+ typedef struct {
+ int x, y, w, h;
+- unsigned long norm[ColLast];
+- unsigned long sel[ColLast];
++ XftColor norm[ColLast];
++ XftColor sel[ColLast];
+ Drawable drawable;
+ GC gc;
+ struct {
+ int ascent;
+ int descent;
+ int height;
+- XFontSet set;
+- XFontStruct *xfont;
++ XftFont *xfont;
+ } font;
+ } DC; /* draw context */
+
+@@ -95,7 +95,7 @@ static void createnotify(const XEvent *e);
+ static void destroynotify(const XEvent *e);
+ static void die(const char *errstr, ...);
+ static void drawbar(void);
+-static void drawtext(const char *text, unsigned long col[ColLast]);
++static void drawtext(const char *text, XftColor col[ColLast]);
+ static void *emallocz(size_t size);
+ static void *erealloc(void *o, size_t size);
+ static void expose(const XEvent *e);
+@@ -105,7 +105,7 @@ static void focusonce(const Arg *arg);
+ static void fullscreen(const Arg *arg);
+ static char* getatom(int a);
+ static int getclient(Window w);
+-static unsigned long getcolor(const char *colstr);
++static XftColor getcolor(const char *colstr);
+ static int getfirsttab(void);
+ static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
+ static void initfont(const char *fontstr);
+@@ -219,12 +219,6 @@ cleanup(void) {
+ free(clients);
+ clients = NULL;
+
+- if(dc.font.set) {
+- XFreeFontSet(dpy, dc.font.set);
+- } else {
+- XFreeFont(dpy, dc.font.xfont);
+- }
+-
+ XFreePixmap(dpy, dc.drawable);
+ XFreeGC(dpy, dc.gc);
+ XDestroyWindow(dpy, win);
+@@ -305,7 +299,7 @@ die(const char *errstr, ...) {
+
+ void
+ drawbar(void) {
+- unsigned long *col;
++ XftColor *col;
+ int c, fc, width, n = 0;
+ char *name = NULL;
+
+@@ -362,12 +356,13 @@ drawbar(void) {
+ }
+
+ void
+-drawtext(const char *text, unsigned long col[ColLast]) {
++drawtext(const char *text, XftColor col[ColLast]) {
+ int i, x, y, h, len, olen;
+ char buf[256];
++ XftDraw *d;
+ XRectangle r = { dc.x, dc.y, dc.w, dc.h };
+
+- XSetForeground(dpy, dc.gc, col[ColBG]);
++ XSetForeground(dpy, dc.gc, col[ColBG].pixel);
+ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
+ if(!text)
+ return;
+@@ -388,13 +383,10 @@ drawtext(const char *text, unsigned long col[ColLast]) {
+ for(i = len; i && i > len - 3; buf[--i] = '.');
+ }
+
+- XSetForeground(dpy, dc.gc, col[ColFG]);
+- if(dc.font.set) {
+- XmbDrawString(dpy, dc.drawable, dc.font.set,
+- dc.gc, x, y, buf, len);
+- } else {
+- XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
+- }
++ d = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen));
++
++ XftDrawStringUtf8(d, &col[ColFG], dc.font.xfont, x, y, (XftChar8 *) buf, len);
++ XftDrawDestroy(d);
+ }
+
+ void *
+@@ -524,15 +516,14 @@ getclient(Window w) {
+ return -1;
+ }
+
+-unsigned long
++XftColor
+ getcolor(const char *colstr) {
+- Colormap cmap = DefaultColormap(dpy, screen);
+- XColor color;
++ XftColor color;
+
+- if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
++ if(!XftColorAllocName(dpy, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen), colstr, &color))
+ die("tabbed: cannot allocate color '%s'\n", colstr);
+
+- return color.pixel;
++ return color;
+ }
+
+ int
+@@ -585,41 +576,12 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) {
+
+ void
+ initfont(const char *fontstr) {
+- char *def, **missing, **font_names;
+- int i, n;
+- XFontStruct **xfonts;
+-
+- missing = NULL;
+- if(dc.font.set)
+- XFreeFontSet(dpy, dc.font.set);
+-
+- dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
+- if(missing) {
+- while(n--)
+- fprintf(stderr, "tabbed: missing fontset: %s\n", missing[n]);
+- XFreeStringList(missing);
+- }
++ if(!(dc.font.xfont = XftFontOpenName(dpy, screen, fontstr))
++ && !(dc.font.xfont = XftFontOpenName(dpy, screen, "fixed")))
++ die("error, cannot load font: '%s'\n", fontstr);
+
+- if(dc.font.set) {
+- dc.font.ascent = dc.font.descent = 0;
+- n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
+- for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
+- dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent);
+- dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent);
+- xfonts++;
+- }
+- } else {
+- if(dc.font.xfont)
+- XFreeFont(dpy, dc.font.xfont);
+- dc.font.xfont = NULL;
+- if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
+- && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) {
+- die("tabbed: cannot load font: '%s'\n", fontstr);
+- }
+-
+- dc.font.ascent = dc.font.xfont->ascent;
+- dc.font.descent = dc.font.xfont->descent;
+- }
++ dc.font.ascent = dc.font.xfont->ascent;
++ dc.font.descent = dc.font.xfont->descent;
+ dc.font.height = dc.font.ascent + dc.font.descent;
+ }
+
+@@ -972,11 +934,9 @@ setup(void) {
+ dc.drawable = XCreatePixmap(dpy, root, ww, wh,
+ DefaultDepth(dpy, screen));
+ dc.gc = XCreateGC(dpy, root, 0, 0);
+- if(!dc.font.set)
+- XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+
+ win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0,
+- dc.norm[ColFG], dc.norm[ColBG]);
++ dc.norm[ColFG].pixel, dc.norm[ColBG].pixel);
+ XMapRaised(dpy, win);
+ XSelectInput(dpy, win, SubstructureNotifyMask|FocusChangeMask|
+ ButtonPressMask|ExposureMask|KeyPressMask|PropertyChangeMask|
+@@ -1040,15 +1000,9 @@ spawn(const Arg *arg) {
+
+ int
+ textnw(const char *text, unsigned int len) {
+- XRectangle r;
+-
+- if(dc.font.set) {
+- XmbTextExtents(dc.font.set, text, len, NULL, &r);
+-
+- return r.width;
+- }
+-
+- return XTextWidth(dc.font.xfont, text, len);
++ XGlyphInfo ext;
++ XftTextExtentsUtf8(dpy, dc.font.xfont, (XftChar8 *) text, len, &ext);
++ return ext.xOff;
+ }
+
+ void
diff --git a/patches/x11-misc/xkeyboard-config/xkeyboard-config-2.26_custom-US-layout.patch b/patches/x11-misc/xkeyboard-config/xkeyboard-config-2.26_custom-US-layout.patch
@@ -0,0 +1,41 @@
+diff --git a/symbols/us.old b/symbols/us
+index 708a7ab..b7d3d22 100644
+--- a/symbols/us.old
++++ b/symbols/us
+@@ -56,6 +56,36 @@ xkb_symbols "basic" {
+ key <BKSL> { [ backslash, bar ] };
+ };
+
++partial alphanumeric_keys modifier_keys keypad_keys
++xkb_symbols "lanodan" {
++
++ include "us(basic)"
++ name[Group1]= "English (US; lanodan)";
++
++ key <AE11> { [ minus, underscore, U00B7 ] };
++
++ key <AD02> { [ w, W, Up ] };
++ key <AD03> { [ e, E, U00E6 ] };
++ key <AD10> { [ p, P, U2032 ] };
++ key <AD11> { [ bracketleft, braceleft, U2033 ] };
++ key <AD12> { [ bracketright, braceright, U2034 ] };
++
++ key <AC01> { [ a, A, Left ] };
++ key <AC02> { [ s, S, Down ] };
++ key <AC03> { [ d, D, Right ] };
++ key <AC06> { [ h, H, Left, Home ] };
++ key <AC07> { [ j, J, Down, Prior ] };
++ key <AC08> { [ k, K, Up, Next ] };
++ key <AC09> { [ l, L, Right, End ] };
++ key <AC11> { [ apostrophe, quotedbl, U2018, U201C ] };
++ key <BKSL> { [ backslash, bar, U2019, U201D ] };
++
++ key <AB08> { [ comma, less, U00AB ] };
++ key <AB09> { [ period, greater, U00BB ] };
++ key <AB10> { [ slash, question, UFFFD ] };
++ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
++};
++
+ partial alphanumeric_keys
+ xkb_symbols "euro" {
+
diff --git a/patches/x11-terms/st-0.8.1/0001-apply-01b-my-config.diff.patch b/patches/x11-terms/st-0.8.1/0001-apply-01b-my-config.diff.patch
@@ -0,0 +1,34 @@
+From 170a93a33ba5545aaab2d0a5b7aefe084b4af3cd Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 1 Oct 2018 01:08:20 +0200
+Subject: [PATCH 1/3] apply: 01b-my-config.diff
+
+---
+ config.def.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 82b1b09..3c587e2 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -5,7 +5,7 @@
+ *
+ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+ */
+-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
++static char *font = "monospace-7";
+ static int borderpx = 2;
+
+ /*
+@@ -32,7 +32,7 @@ static float chscale = 1.0;
+ *
+ * More advanced example: " `'\"()[]{}"
+ */
+-char *worddelimiters = " ";
++char *worddelimiters = " │`'\"()[]{}“”<>‘’\~\;";
+
+ /* selection timeouts (in milliseconds) */
+ static unsigned int doubleclicktimeout = 300;
+--
+2.19.1
+
diff --git a/patches/x11-terms/st-0.8.1/0002-Fix-keyboard-input-on-terminal.patch b/patches/x11-terms/st-0.8.1/0002-Fix-keyboard-input-on-terminal.patch
@@ -0,0 +1,770 @@
+From fa87c7afac1f0f1a866d7b7e1bb6f9d28ba97d37 Mon Sep 17 00:00:00 2001
+From: Jan Christoph Ebersbach <jceb@e-jc.de>
+Date: Mon, 1 Oct 2018 01:38:52 +0200
+Subject: [PATCH 2/3] Fix keyboard input on terminal
+
+URL: http://st.suckless.org/patches/fix_keyboard_input
+---
+ config.def.h | 691 +++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 641 insertions(+), 50 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 3c587e2..1ea6902 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -209,7 +209,80 @@ static Shortcut shortcuts[] = {
+ * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
+ * to be mapped below, add them to this array.
+ */
+-static KeySym mappedkeys[] = { -1 };
++static KeySym mappedkeys[] = {
++ XK_space,
++ XK_m,
++ XK_i,
++ XK_A,
++ XK_B,
++ XK_C,
++ XK_D,
++ XK_E,
++ XK_F,
++ XK_G,
++ XK_H,
++ XK_I,
++ XK_K,
++ XK_J,
++ XK_L,
++ XK_M,
++ XK_N,
++ XK_O,
++ XK_P,
++ XK_Q,
++ XK_R,
++ XK_S,
++ XK_T,
++ XK_U,
++ XK_V,
++ XK_W,
++ XK_X,
++ XK_Y,
++ XK_Z,
++ XK_Z,
++ XK_0,
++ XK_1,
++ XK_2,
++ XK_3,
++ XK_4,
++ XK_5,
++ XK_6,
++ XK_7,
++ XK_8,
++ XK_9,
++ XK_exclam,
++ XK_quotedbl,
++ XK_numbersign,
++ XK_dollar,
++ XK_percent,
++ XK_ampersand,
++ XK_apostrophe,
++ XK_parenleft,
++ XK_parenright,
++ XK_asterisk,
++ XK_plus,
++ XK_comma,
++ XK_minus,
++ XK_period,
++ XK_slash,
++ XK_colon,
++ XK_semicolon,
++ XK_less,
++ XK_equal,
++ XK_greater,
++ XK_question,
++ XK_at,
++ XK_bracketleft,
++ XK_backslash,
++ XK_bracketright,
++ XK_asciicircum,
++ XK_underscore,
++ XK_grave,
++ XK_braceleft,
++ XK_bar,
++ XK_braceright,
++ XK_asciitilde,
++};
+
+ /*
+ * State bits to ignore when matching key or button events. By default,
+@@ -232,59 +305,20 @@ static Key key[] = {
+ /* keysym mask string appkey appcursor */
+ { XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
+- { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
+- { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+- { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
+- { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
+- { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
+- { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
+- { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
+- { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
+- { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
+- { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
+- { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
+- { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
+- { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
+- { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
+- { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+- { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
+ { XK_KP_End, ControlMask, "\033[J", -1, 0},
+ { XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_KP_End, ShiftMask, "\033[K", -1, 0},
+ { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
+- { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
+- { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
+- { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+- { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_KP_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
+- { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+- { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+- { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
+- { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
+- { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
+- { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
+- { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
+- { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
+- { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
+- { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
+- { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
+- { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
+- { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
+- { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
+- { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
+- { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
+- { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
+- { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
+- { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
+ { XK_Up, ShiftMask, "\033[1;2A", 0, 0},
+ { XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
+ { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
+@@ -323,36 +357,27 @@ static Key key[] = {
+ { XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
+ { XK_Return, Mod1Mask, "\033\r", 0, 0},
+- { XK_Return, XK_ANY_MOD, "\r", 0, 0},
++ { XK_Return, XK_NO_MOD, "\r", 0, 0},
+ { XK_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_Insert, ControlMask, "\033[2;5~", +1, 0},
+- { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+- { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
+- { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+- { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
+ { XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
+ { XK_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_Home, ShiftMask, "\033[1;2H", 0, +1},
+- { XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
+- { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_End, ControlMask, "\033[J", -1, 0},
+ { XK_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_End, ShiftMask, "\033[K", -1, 0},
+ { XK_End, ShiftMask, "\033[1;2F", +1, 0},
+- { XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_Prior, ControlMask, "\033[5;5~", 0, 0},
+ { XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
+- { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_Next, ControlMask, "\033[6;5~", 0, 0},
+ { XK_Next, ShiftMask, "\033[6;2~", 0, 0},
+- { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
+ { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
+ { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
+@@ -439,6 +464,572 @@ static Key key[] = {
+ { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
+ { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
+ { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
++
++ // libtermkey compatible keyboard input
++ { XK_KP_Home, XK_NO_MOD, "\033[H", 0, -1},
++ { XK_KP_Home, XK_NO_MOD, "\033[1~", 0, +1},
++ { XK_KP_Home, ControlMask, "\033[149;5u", 0, 0},
++ { XK_KP_Home, ControlMask|ShiftMask, "\033[149;6u", 0, 0},
++ { XK_KP_Home, Mod1Mask, "\033[149;3u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ControlMask, "\033[149;7u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ControlMask|ShiftMask, "\033[149;8u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ShiftMask, "\033[149;4u", 0, 0},
++ { XK_KP_Home, ShiftMask, "\033[149;2u", 0, 0},
++ { XK_KP_Up, XK_NO_MOD, "\033Ox", +1, 0},
++ { XK_KP_Up, XK_NO_MOD, "\033[A", 0, -1},
++ { XK_KP_Up, XK_NO_MOD, "\033OA", 0, +1},
++ { XK_KP_Up, ControlMask, "\033[151;5u", 0, 0},
++ { XK_KP_Up, ControlMask|ShiftMask, "\033[151;6u", 0, 0},
++ { XK_KP_Up, Mod1Mask, "\033[151;3u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ControlMask, "\033[151;7u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ControlMask|ShiftMask, "\033[151;8u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ShiftMask, "\033[151;4u", 0, 0},
++ { XK_KP_Up, ShiftMask, "\033[151;2u", 0, 0},
++ { XK_KP_Down, XK_NO_MOD, "\033Or", +1, 0},
++ { XK_KP_Down, XK_NO_MOD, "\033[B", 0, -1},
++ { XK_KP_Down, XK_NO_MOD, "\033OB", 0, +1},
++ { XK_KP_Down, ControlMask, "\033[153;5u", 0, 0},
++ { XK_KP_Down, ControlMask|ShiftMask, "\033[153;6u", 0, 0},
++ { XK_KP_Down, Mod1Mask, "\033[153;3u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ControlMask, "\033[153;7u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ControlMask|ShiftMask, "\033[153;8u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ShiftMask, "\033[153;4u", 0, 0},
++ { XK_KP_Down, ShiftMask, "\033[153;2u", 0, 0},
++ { XK_KP_Left, XK_NO_MOD, "\033Ot", +1, 0},
++ { XK_KP_Left, XK_NO_MOD, "\033[D", 0, -1},
++ { XK_KP_Left, XK_NO_MOD, "\033OD", 0, +1},
++ { XK_KP_Left, ControlMask, "\033[150;5u", 0, 0},
++ { XK_KP_Left, ControlMask|ShiftMask, "\033[150;6u", 0, 0},
++ { XK_KP_Left, Mod1Mask, "\033[150;3u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ControlMask, "\033[150;7u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ControlMask|ShiftMask, "\033[150;8u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ShiftMask, "\033[150;4u", 0, 0},
++ { XK_KP_Left, ShiftMask, "\033[150;2u", 0, 0},
++ { XK_KP_Right, XK_NO_MOD, "\033Ov", +1, 0},
++ { XK_KP_Right, XK_NO_MOD, "\033[C", 0, -1},
++ { XK_KP_Right, XK_NO_MOD, "\033OC", 0, +1},
++ { XK_KP_Right, ControlMask, "\033[152;5u", 0, 0},
++ { XK_KP_Right, ControlMask|ShiftMask, "\033[152;6u", 0, 0},
++ { XK_KP_Right, Mod1Mask, "\033[152;3u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ControlMask, "\033[152;7u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ControlMask|ShiftMask, "\033[152;8u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ShiftMask, "\033[152;4u", 0, 0},
++ { XK_KP_Right, ShiftMask, "\033[152;2u", 0, 0},
++ { XK_KP_Prior, XK_NO_MOD, "\033[5~", 0, 0},
++ { XK_KP_Prior, ControlMask, "\033[154;5u", 0, 0},
++ { XK_KP_Prior, ControlMask|ShiftMask, "\033[154;6u", 0, 0},
++ { XK_KP_Prior, Mod1Mask, "\033[154;3u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ControlMask, "\033[154;7u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ControlMask|ShiftMask, "\033[154;8u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ShiftMask, "\033[154;4u", 0, 0},
++ { XK_KP_Begin, XK_NO_MOD, "\033[E", 0, 0},
++ { XK_KP_Begin, ControlMask, "\033[157;5u", 0, 0},
++ { XK_KP_Begin, ControlMask|ShiftMask, "\033[157;6u", 0, 0},
++ { XK_KP_Begin, Mod1Mask, "\033[157;3u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ControlMask, "\033[157;7u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ControlMask|ShiftMask, "\033[157;8u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ShiftMask, "\033[157;4u", 0, 0},
++ { XK_KP_Begin, ShiftMask, "\033[157;2u", 0, 0},
++ { XK_KP_End, XK_NO_MOD, "\033[4~", 0, 0},
++ { XK_KP_End, ControlMask|ShiftMask, "\033[156;6u", 0, 0},
++ { XK_KP_End, Mod1Mask, "\033[156;3u", 0, 0},
++ { XK_KP_End, Mod1Mask|ControlMask, "\033[156;7u", 0, 0},
++ { XK_KP_End, Mod1Mask|ControlMask|ShiftMask, "\033[156;8u", 0, 0},
++ { XK_KP_End, Mod1Mask|ShiftMask, "\033[156;4u", 0, 0},
++ { XK_KP_Next, XK_NO_MOD, "\033[6~", 0, 0},
++ { XK_KP_Next, ControlMask, "\033[155;5u", 0, 0},
++ { XK_KP_Next, ControlMask|ShiftMask, "\033[155;6u", 0, 0},
++ { XK_KP_Next, Mod1Mask, "\033[155;3u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ControlMask, "\033[155;7u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ControlMask|ShiftMask, "\033[155;8u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ShiftMask, "\033[155;4u", 0, 0},
++ { XK_KP_Insert, XK_NO_MOD, "\033[4h", -1, 0},
++ { XK_KP_Insert, XK_NO_MOD, "\033[2~", +1, 0},
++ { XK_KP_Insert, ControlMask|ShiftMask, "\033[158;6u", 0, 0},
++ { XK_KP_Insert, Mod1Mask, "\033[158;3u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ControlMask, "\033[158;7u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ControlMask|ShiftMask, "\033[158;8u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ShiftMask, "\033[158;4u", 0, 0},
++ { XK_KP_Delete, XK_NO_MOD, "\033[P", -1, 0},
++ { XK_KP_Delete, XK_NO_MOD, "\033[3~", +1, 0},
++ { XK_KP_Delete, ControlMask|ShiftMask, "\033[159;6u", 0, 0},
++ { XK_KP_Delete, Mod1Mask, "\033[159;3u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ControlMask, "\033[159;7u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ControlMask|ShiftMask, "\033[159;8u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ShiftMask, "\033[159;4u", 0, 0},
++ { XK_KP_Multiply, XK_NO_MOD, "\033Oj", +2, 0},
++ { XK_KP_Multiply, ControlMask, "\033[170;5u", 0, 0},
++ { XK_KP_Multiply, ControlMask|ShiftMask, "\033[170;6u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask, "\033[170;3u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ControlMask, "\033[170;7u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ControlMask|ShiftMask, "\033[170;8u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ShiftMask, "\033[170;4u", 0, 0},
++ { XK_KP_Multiply, ShiftMask, "\033[170;2u", 0, 0},
++ { XK_KP_Add, XK_NO_MOD, "\033Ok", +2, 0},
++ { XK_KP_Add, ControlMask, "\033[171;5u", 0, 0},
++ { XK_KP_Add, ControlMask|ShiftMask, "\033[171;6u", 0, 0},
++ { XK_KP_Add, Mod1Mask, "\033[171;3u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ControlMask, "\033[171;7u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ControlMask|ShiftMask, "\033[171;8u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ShiftMask, "\033[171;4u", 0, 0},
++ { XK_KP_Add, ShiftMask, "\033[171;2u", 0, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\033OM", +2, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\r", -1, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\r\n", -1, 0},
++ { XK_KP_Enter, ControlMask, "\033[141;5u", 0, 0},
++ { XK_KP_Enter, ControlMask|ShiftMask, "\033[141;6u", 0, 0},
++ { XK_KP_Enter, Mod1Mask, "\033[141;3u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ControlMask, "\033[141;7u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ControlMask|ShiftMask, "\033[141;8u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ShiftMask, "\033[141;4u", 0, 0},
++ { XK_KP_Enter, ShiftMask, "\033[141;2u", 0, 0},
++ { XK_KP_Subtract, XK_NO_MOD, "\033Om", +2, 0},
++ { XK_KP_Subtract, ControlMask, "\033[173;5u", 0, 0},
++ { XK_KP_Subtract, ControlMask|ShiftMask, "\033[173;6u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask, "\033[173;3u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ControlMask, "\033[173;7u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ControlMask|ShiftMask, "\033[173;8u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ShiftMask, "\033[173;4u", 0, 0},
++ { XK_KP_Subtract, ShiftMask, "\033[173;2u", 0, 0},
++ { XK_KP_Decimal, XK_NO_MOD, "\033On", +2, 0},
++ { XK_KP_Decimal, ControlMask, "\033[174;5u", 0, 0},
++ { XK_KP_Decimal, ControlMask|ShiftMask, "\033[174;6u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask, "\033[174;3u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ControlMask, "\033[174;7u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ControlMask|ShiftMask, "\033[174;8u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ShiftMask, "\033[174;4u", 0, 0},
++ { XK_KP_Decimal, ShiftMask, "\033[174;2u", 0, 0},
++ { XK_KP_Divide, XK_NO_MOD, "\033Oo", +2, 0},
++ { XK_KP_Divide, ControlMask, "\033[175;5u", 0, 0},
++ { XK_KP_Divide, ControlMask|ShiftMask, "\033[175;6u", 0, 0},
++ { XK_KP_Divide, Mod1Mask, "\033[175;3u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ControlMask, "\033[175;7u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ControlMask|ShiftMask, "\033[175;8u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ShiftMask, "\033[175;4u", 0, 0},
++ { XK_KP_Divide, ShiftMask, "\033[175;2u", 0, 0},
++ { XK_KP_0, XK_NO_MOD, "\033Op", +2, 0},
++ { XK_KP_0, ControlMask, "\033[176;5u", 0, 0},
++ { XK_KP_0, ControlMask|ShiftMask, "\033[176;6u", 0, 0},
++ { XK_KP_0, Mod1Mask, "\033[176;3u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask, "\033[176;7u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask|ShiftMask, "\033[176;8u", 0, 0},
++ { XK_KP_0, Mod1Mask|ShiftMask, "\033[176;4u", 0, 0},
++ { XK_KP_0, ShiftMask, "\033[176;2u", 0, 0},
++ { XK_KP_1, XK_NO_MOD, "\033Oq", +2, 0},
++ { XK_KP_0, ControlMask, "\033[177;5u", 0, 0},
++ { XK_KP_0, ControlMask|ShiftMask, "\033[177;6u", 0, 0},
++ { XK_KP_0, Mod1Mask, "\033[177;3u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask, "\033[177;7u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask|ShiftMask, "\033[177;8u", 0, 0},
++ { XK_KP_0, Mod1Mask|ShiftMask, "\033[177;4u", 0, 0},
++ { XK_KP_0, ShiftMask, "\033[177;2u", 0, 0},
++ { XK_KP_2, XK_NO_MOD, "\033Or", +2, 0},
++ { XK_KP_2, ControlMask, "\033[178;5u", 0, 0},
++ { XK_KP_2, ControlMask|ShiftMask, "\033[178;6u", 0, 0},
++ { XK_KP_2, Mod1Mask, "\033[178;3u", 0, 0},
++ { XK_KP_2, Mod1Mask|ControlMask, "\033[178;7u", 0, 0},
++ { XK_KP_2, Mod1Mask|ControlMask|ShiftMask, "\033[178;8u", 0, 0},
++ { XK_KP_2, Mod1Mask|ShiftMask, "\033[178;4u", 0, 0},
++ { XK_KP_2, ShiftMask, "\033[178;2u", 0, 0},
++ { XK_KP_3, XK_NO_MOD, "\033Os", +2, 0},
++ { XK_KP_3, ControlMask, "\033[179;5u", 0, 0},
++ { XK_KP_3, ControlMask|ShiftMask, "\033[179;6u", 0, 0},
++ { XK_KP_3, Mod1Mask, "\033[179;3u", 0, 0},
++ { XK_KP_3, Mod1Mask|ControlMask, "\033[179;7u", 0, 0},
++ { XK_KP_3, Mod1Mask|ControlMask|ShiftMask, "\033[179;8u", 0, 0},
++ { XK_KP_3, Mod1Mask|ShiftMask, "\033[179;4u", 0, 0},
++ { XK_KP_3, ShiftMask, "\033[179;2u", 0, 0},
++ { XK_KP_4, XK_NO_MOD, "\033Ot", +2, 0},
++ { XK_KP_4, ControlMask, "\033[180;5u", 0, 0},
++ { XK_KP_4, ControlMask|ShiftMask, "\033[180;6u", 0, 0},
++ { XK_KP_4, Mod1Mask, "\033[180;3u", 0, 0},
++ { XK_KP_4, Mod1Mask|ControlMask, "\033[180;7u", 0, 0},
++ { XK_KP_4, Mod1Mask|ControlMask|ShiftMask, "\033[180;8u", 0, 0},
++ { XK_KP_4, Mod1Mask|ShiftMask, "\033[180;4u", 0, 0},
++ { XK_KP_4, ShiftMask, "\033[180;2u", 0, 0},
++ { XK_KP_5, XK_NO_MOD, "\033Ou", +2, 0},
++ { XK_KP_5, ControlMask, "\033[181;5u", 0, 0},
++ { XK_KP_5, ControlMask|ShiftMask, "\033[181;6u", 0, 0},
++ { XK_KP_5, Mod1Mask, "\033[181;3u", 0, 0},
++ { XK_KP_5, Mod1Mask|ControlMask, "\033[181;7u", 0, 0},
++ { XK_KP_5, Mod1Mask|ControlMask|ShiftMask, "\033[181;8u", 0, 0},
++ { XK_KP_5, Mod1Mask|ShiftMask, "\033[181;4u", 0, 0},
++ { XK_KP_5, ShiftMask, "\033[181;2u", 0, 0},
++ { XK_KP_6, XK_NO_MOD, "\033Ov", +2, 0},
++ { XK_KP_6, ControlMask, "\033[182;5u", 0, 0},
++ { XK_KP_6, ControlMask|ShiftMask, "\033[182;6u", 0, 0},
++ { XK_KP_6, Mod1Mask, "\033[182;3u", 0, 0},
++ { XK_KP_6, Mod1Mask|ControlMask, "\033[182;7u", 0, 0},
++ { XK_KP_6, Mod1Mask|ControlMask|ShiftMask, "\033[182;8u", 0, 0},
++ { XK_KP_6, Mod1Mask|ShiftMask, "\033[182;4u", 0, 0},
++ { XK_KP_6, ShiftMask, "\033[182;2u", 0, 0},
++ { XK_KP_7, XK_NO_MOD, "\033Ow", +2, 0},
++ { XK_KP_7, ControlMask, "\033[183;5u", 0, 0},
++ { XK_KP_7, ControlMask|ShiftMask, "\033[183;6u", 0, 0},
++ { XK_KP_7, Mod1Mask, "\033[183;3u", 0, 0},
++ { XK_KP_7, Mod1Mask|ControlMask, "\033[183;7u", 0, 0},
++ { XK_KP_7, Mod1Mask|ControlMask|ShiftMask, "\033[183;8u", 0, 0},
++ { XK_KP_7, Mod1Mask|ShiftMask, "\033[183;4u", 0, 0},
++ { XK_KP_7, ShiftMask, "\033[183;2u", 0, 0},
++ { XK_KP_8, XK_NO_MOD, "\033Ox", +2, 0},
++ { XK_KP_8, ControlMask, "\033[184;5u", 0, 0},
++ { XK_KP_8, ControlMask|ShiftMask, "\033[184;6u", 0, 0},
++ { XK_KP_8, Mod1Mask, "\033[184;3u", 0, 0},
++ { XK_KP_8, Mod1Mask|ControlMask, "\033[184;7u", 0, 0},
++ { XK_KP_8, Mod1Mask|ControlMask|ShiftMask, "\033[184;8u", 0, 0},
++ { XK_KP_8, Mod1Mask|ShiftMask, "\033[184;4u", 0, 0},
++ { XK_KP_8, ShiftMask, "\033[184;2u", 0, 0},
++ { XK_KP_9, XK_NO_MOD, "\033Oy", +2, 0},
++ { XK_KP_9, ControlMask, "\033[185;5u", 0, 0},
++ { XK_KP_9, ControlMask|ShiftMask, "\033[185;6u", 0, 0},
++ { XK_KP_9, Mod1Mask, "\033[185;3u", 0, 0},
++ { XK_KP_9, Mod1Mask|ControlMask, "\033[185;7u", 0, 0},
++ { XK_KP_9, Mod1Mask|ControlMask|ShiftMask, "\033[185;8u", 0, 0},
++ { XK_KP_9, Mod1Mask|ShiftMask, "\033[185;4u", 0, 0},
++ { XK_KP_9, ShiftMask, "\033[185;2u", 0, 0},
++ { XK_BackSpace, ControlMask, "\033[127;5u", 0, 0},
++ { XK_BackSpace, ControlMask|ShiftMask, "\033[127;6u", 0, 0},
++ { XK_BackSpace, Mod1Mask, "\033[127;3u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ControlMask, "\033[127;7u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ControlMask|ShiftMask, "\033[127;8u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ShiftMask, "\033[127;4u", 0, 0},
++ { XK_BackSpace, ShiftMask, "\033[127;2u", 0, 0},
++ { XK_Tab, ControlMask, "\033[9;5u", 0, 0},
++ { XK_Tab, ControlMask|ShiftMask, "\033[1;5Z", 0, 0},
++ { XK_Tab, Mod1Mask, "\033[1;3Z", 0, 0},
++ { XK_Tab, Mod1Mask|ControlMask, "\033[1;7Z", 0, 0},
++ { XK_Tab, Mod1Mask|ControlMask|ShiftMask, "\033[1;8Z", 0, 0},
++ { XK_Tab, Mod1Mask|ShiftMask, "\033[1;4Z", 0, 0},
++ { XK_Return, ControlMask, "\033[13;5u", 0, 0},
++ { XK_Return, ControlMask|ShiftMask, "\033[13;6u", 0, 0},
++ { XK_Return, Mod1Mask, "\033[13;3u", 0, 0},
++ { XK_Return, Mod1Mask|ControlMask, "\033[13;7u", 0, 0},
++ { XK_Return, Mod1Mask|ControlMask|ShiftMask, "\033[13;8u", 0, 0},
++ { XK_Return, Mod1Mask|ShiftMask, "\033[13;4u", 0, 0},
++ { XK_Return, ShiftMask, "\033[13;2u", 0, 0},
++ { XK_Pause, ControlMask, "\033[18;5u", 0, 0},
++ { XK_Pause, ControlMask|ShiftMask, "\033[18;6u", 0, 0},
++ { XK_Pause, Mod1Mask, "\033[18;3u", 0, 0},
++ { XK_Pause, Mod1Mask|ControlMask, "\033[18;7u", 0, 0},
++ { XK_Pause, Mod1Mask|ControlMask|ShiftMask, "\033[18;8u", 0, 0},
++ { XK_Pause, Mod1Mask|ShiftMask, "\033[18;4u", 0, 0},
++ { XK_Pause, ShiftMask, "\033[18;2u", 0, 0},
++ { XK_Scroll_Lock, ControlMask, "\033[20;5u", 0, 0},
++ { XK_Scroll_Lock, ControlMask|ShiftMask, "\033[20;6u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask, "\033[20;3u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ControlMask, "\033[20;7u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ControlMask|ShiftMask, "\033[20;8u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ShiftMask, "\033[20;4u", 0, 0},
++ { XK_Scroll_Lock, ShiftMask, "\033[20;2u", 0, 0},
++ { XK_Escape, ControlMask, "\033[27;5u", 0, 0},
++ { XK_Escape, ControlMask|ShiftMask, "\033[27;6u", 0, 0},
++ { XK_Escape, Mod1Mask, "\033[27;3u", 0, 0},
++ { XK_Escape, Mod1Mask|ControlMask, "\033[27;7u", 0, 0},
++ { XK_Escape, Mod1Mask|ControlMask|ShiftMask, "\033[27;8u", 0, 0},
++ { XK_Escape, Mod1Mask|ShiftMask, "\033[27;4u", 0, 0},
++ { XK_Escape, ShiftMask, "\033[27;2u", 0, 0},
++ { XK_Home, XK_NO_MOD, "\033[H", 0, -1},
++ { XK_Home, XK_NO_MOD, "\033[1~", 0, +1},
++ { XK_Home, ControlMask|ShiftMask, "\033[80;6u", 0, 0},
++ { XK_Home, Mod1Mask, "\033[80;3u", 0, 0},
++ { XK_Home, Mod1Mask|ControlMask, "\033[80;7u", 0, 0},
++ { XK_Home, Mod1Mask|ControlMask|ShiftMask, "\033[80;8u", 0, 0},
++ { XK_Home, Mod1Mask|ShiftMask, "\033[80;4u", 0, 0},
++ { XK_End, XK_NO_MOD, "\033[4~", 0, 0},
++ { XK_End, ControlMask|ShiftMask, "\033[87;6u", 0, 0},
++ { XK_End, Mod1Mask, "\033[87;3u", 0, 0},
++ { XK_End, Mod1Mask|ControlMask, "\033[87;7u", 0, 0},
++ { XK_End, Mod1Mask|ControlMask|ShiftMask, "\033[87;8u", 0, 0},
++ { XK_End, Mod1Mask|ShiftMask, "\033[87;4u", 0, 0},
++ { XK_Prior, XK_NO_MOD, "\033[5~", 0, 0},
++ { XK_Prior, ControlMask|ShiftMask, "\033[85;6u", 0, 0},
++ { XK_Prior, Mod1Mask, "\033[85;3u", 0, 0},
++ { XK_Prior, Mod1Mask|ControlMask, "\033[85;7u", 0, 0},
++ { XK_Prior, Mod1Mask|ControlMask|ShiftMask, "\033[85;8u", 0, 0},
++ { XK_Prior, Mod1Mask|ShiftMask, "\033[85;4u", 0, 0},
++ { XK_Next, XK_NO_MOD, "\033[6~", 0, 0},
++ { XK_Next, ControlMask|ShiftMask, "\033[86;6u", 0, 0},
++ { XK_Next, Mod1Mask, "\033[86;3u", 0, 0},
++ { XK_Next, Mod1Mask|ControlMask, "\033[86;7u", 0, 0},
++ { XK_Next, Mod1Mask|ControlMask|ShiftMask, "\033[86;8u", 0, 0},
++ { XK_Next, Mod1Mask|ShiftMask, "\033[86;4u", 0, 0},
++ { XK_Print, ControlMask, "\033[97;5u", 0, 0},
++ { XK_Print, ControlMask|ShiftMask, "\033[97;6u", 0, 0},
++ { XK_Print, Mod1Mask, "\033[97;3u", 0, 0},
++ { XK_Print, Mod1Mask|ControlMask, "\033[97;7u", 0, 0},
++ { XK_Print, Mod1Mask|ControlMask|ShiftMask, "\033[97;8u", 0, 0},
++ { XK_Print, Mod1Mask|ShiftMask, "\033[97;4u", 0, 0},
++ { XK_Print, ShiftMask, "\033[97;2u", 0, 0},
++ { XK_Insert, XK_NO_MOD, "\033[4h", -1, 0},
++ { XK_Insert, XK_NO_MOD, "\033[2~", +1, 0},
++ { XK_Insert, ControlMask|ShiftMask, "\033[99;6u", 0, 0},
++ { XK_Insert, Mod1Mask, "\033[99;3u", 0, 0},
++ { XK_Insert, Mod1Mask|ControlMask, "\033[99;7u", 0, 0},
++ { XK_Insert, Mod1Mask|ControlMask|ShiftMask, "\033[99;8u", 0, 0},
++ { XK_Insert, Mod1Mask|ShiftMask, "\033[99;4u", 0, 0},
++ { XK_Menu, ControlMask, "\033[103;5u", 0, 0},
++ { XK_Menu, ControlMask|ShiftMask, "\033[103;6u", 0, 0},
++ { XK_Menu, Mod1Mask, "\033[103;3u", 0, 0},
++ { XK_Menu, Mod1Mask|ControlMask, "\033[103;7u", 0, 0},
++ { XK_Menu, Mod1Mask|ControlMask|ShiftMask, "\033[103;8u", 0, 0},
++ { XK_Menu, Mod1Mask|ShiftMask, "\033[103;4u", 0, 0},
++ { XK_Menu, ShiftMask, "\033[103;2u", 0, 0},
++ { XK_Delete, XK_NO_MOD, "\033[P", -1, 0},
++ { XK_Delete, XK_NO_MOD, "\033[3~", +1, 0},
++ { XK_Delete, ControlMask|ShiftMask, "\033[255;6u", 0, 0},
++ { XK_Delete, Mod1Mask, "\033[255;3u", 0, 0},
++ { XK_Delete, Mod1Mask|ControlMask, "\033[255;7u", 0, 0},
++ { XK_Delete, Mod1Mask|ControlMask|ShiftMask, "\033[255;8u", 0, 0},
++ { XK_Delete, Mod1Mask|ShiftMask, "\033[255;4u", 0, 0},
++ { XK_i, ControlMask, "\033[105;5u", 0, 0},
++ { XK_i, Mod1Mask|ControlMask, "\033[105;7u", 0, 0},
++ { XK_m, ControlMask, "\033[109;5u", 0, 0},
++ { XK_m, Mod1Mask|ControlMask, "\033[109;7u", 0, 0},
++ { XK_space, ControlMask|ShiftMask, "\033[32;6u", 0, 0},
++ { XK_space, Mod1Mask, "\033[32;3u", 0, 0},
++ { XK_space, Mod1Mask|ControlMask, "\033[32;7u", 0, 0},
++ { XK_space, Mod1Mask|ControlMask|ShiftMask, "\033[32;8u", 0, 0},
++ { XK_space, Mod1Mask|ShiftMask, "\033[32;4u", 0, 0},
++ { XK_space, ShiftMask, "\033[32;2u", 0, 0},
++ { XK_0, ControlMask, "\033[48;5u", 0, 0},
++ { XK_A, ControlMask|ShiftMask, "\033[65;6u", 0, 0},
++ { XK_B, ControlMask|ShiftMask, "\033[66;6u", 0, 0},
++ { XK_C, ControlMask|ShiftMask, "\033[67;6u", 0, 0},
++ { XK_D, ControlMask|ShiftMask, "\033[68;6u", 0, 0},
++ { XK_E, ControlMask|ShiftMask, "\033[69;6u", 0, 0},
++ { XK_F, ControlMask|ShiftMask, "\033[70;6u", 0, 0},
++ { XK_G, ControlMask|ShiftMask, "\033[71;6u", 0, 0},
++ { XK_H, ControlMask|ShiftMask, "\033[72;6u", 0, 0},
++ { XK_I, ControlMask|ShiftMask, "\033[73;6u", 0, 0},
++ { XK_I, Mod1Mask|ControlMask|ShiftMask, "\033[73;8u", 0, 0},
++ { XK_J, ControlMask|ShiftMask, "\033[75;6u", 0, 0},
++ { XK_K, ControlMask|ShiftMask, "\033[74;6u", 0, 0},
++ { XK_L, ControlMask|ShiftMask, "\033[76;6u", 0, 0},
++ { XK_M, ControlMask|ShiftMask, "\033[77;6u", 0, 0},
++ { XK_M, Mod1Mask|ControlMask|ShiftMask, "\033[77;8u", 0, 0},
++ { XK_N, ControlMask|ShiftMask, "\033[78;6u", 0, 0},
++ { XK_O, ControlMask|ShiftMask, "\033[79;6u", 0, 0},
++ { XK_P, ControlMask|ShiftMask, "\033[80;6u", 0, 0},
++ { XK_Q, ControlMask|ShiftMask, "\033[81;6u", 0, 0},
++ { XK_R, ControlMask|ShiftMask, "\033[82;6u", 0, 0},
++ { XK_S, ControlMask|ShiftMask, "\033[83;6u", 0, 0},
++ { XK_T, ControlMask|ShiftMask, "\033[84;6u", 0, 0},
++ { XK_U, ControlMask|ShiftMask, "\033[85;6u", 0, 0},
++ { XK_V, ControlMask|ShiftMask, "\033[86;6u", 0, 0},
++ { XK_W, ControlMask|ShiftMask, "\033[87;6u", 0, 0},
++ { XK_X, ControlMask|ShiftMask, "\033[88;6u", 0, 0},
++ { XK_Y, ControlMask|ShiftMask, "\033[89;6u", 0, 0},
++ { XK_Z, ControlMask|ShiftMask, "\033[90;6u", 0, 0},
++ { XK_Z, ControlMask|ShiftMask, "\033[90;6u", 0, 0},
++ { XK_0, Mod1Mask|ControlMask, "\033[48;7u", 0, 0},
++ { XK_1, ControlMask, "\033[49;5u", 0, 0},
++ { XK_1, Mod1Mask|ControlMask, "\033[49;7u", 0, 0},
++ { XK_2, ControlMask, "\033[50;5u", 0, 0},
++ { XK_2, Mod1Mask|ControlMask, "\033[50;7u", 0, 0},
++ { XK_3, ControlMask, "\033[51;5u", 0, 0},
++ { XK_3, Mod1Mask|ControlMask, "\033[51;7u", 0, 0},
++ { XK_4, ControlMask, "\033[52;5u", 0, 0},
++ { XK_4, Mod1Mask|ControlMask, "\033[52;7u", 0, 0},
++ { XK_5, ControlMask, "\033[53;5u", 0, 0},
++ { XK_5, Mod1Mask|ControlMask, "\033[53;7u", 0, 0},
++ { XK_6, ControlMask, "\033[54;5u", 0, 0},
++ { XK_6, Mod1Mask|ControlMask, "\033[54;7u", 0, 0},
++ { XK_7, ControlMask, "\033[55;5u", 0, 0},
++ { XK_7, Mod1Mask|ControlMask, "\033[55;7u", 0, 0},
++ { XK_8, ControlMask, "\033[56;5u", 0, 0},
++ { XK_8, Mod1Mask|ControlMask, "\033[56;7u", 0, 0},
++ { XK_9, ControlMask, "\033[57;5u", 0, 0},
++ { XK_9, Mod1Mask|ControlMask, "\033[57;7u", 0, 0},
++ { XK_ampersand, ControlMask, "\033[38;5u", 0, 0},
++ { XK_ampersand, ControlMask|ShiftMask, "\033[38;6u", 0, 0},
++ { XK_ampersand, Mod1Mask, "\033[38;3u", 0, 0},
++ { XK_ampersand, Mod1Mask|ControlMask, "\033[38;7u", 0, 0},
++ { XK_ampersand, Mod1Mask|ControlMask|ShiftMask, "\033[38;8u", 0, 0},
++ { XK_ampersand, Mod1Mask|ShiftMask, "\033[38;4u", 0, 0},
++ { XK_apostrophe, ControlMask, "\033[39;5u", 0, 0},
++ { XK_apostrophe, ControlMask|ShiftMask, "\033[39;6u", 0, 0},
++ { XK_apostrophe, Mod1Mask, "\033[39;3u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ControlMask, "\033[39;7u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ControlMask|ShiftMask, "\033[39;8u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ShiftMask, "\033[39;4u", 0, 0},
++ { XK_asciicircum, ControlMask, "\033[94;5u", 0, 0},
++ { XK_asciicircum, ControlMask|ShiftMask, "\033[94;6u", 0, 0},
++ { XK_asciicircum, Mod1Mask, "\033[94;3u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ControlMask, "\033[94;7u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ControlMask|ShiftMask, "\033[94;8u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ShiftMask, "\033[94;4u", 0, 0},
++ { XK_asciitilde, ControlMask, "\033[126;5u", 0, 0},
++ { XK_asciitilde, ControlMask|ShiftMask, "\033[126;6u", 0, 0},
++ { XK_asciitilde, Mod1Mask, "\033[126;3u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ControlMask, "\033[126;7u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ControlMask|ShiftMask, "\033[126;8u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ShiftMask, "\033[126;4u", 0, 0},
++ { XK_asterisk, ControlMask, "\033[42;5u", 0, 0},
++ { XK_asterisk, ControlMask|ShiftMask, "\033[42;6u", 0, 0},
++ { XK_asterisk, Mod1Mask, "\033[42;3u", 0, 0},
++ { XK_asterisk, Mod1Mask|ControlMask, "\033[42;7u", 0, 0},
++ { XK_asterisk, Mod1Mask|ControlMask|ShiftMask, "\033[42;8u", 0, 0},
++ { XK_asterisk, Mod1Mask|ShiftMask, "\033[42;4u", 0, 0},
++ { XK_at, ControlMask, "\033[64;5u", 0, 0},
++ { XK_at, ControlMask|ShiftMask, "\033[64;6u", 0, 0},
++ { XK_at, Mod1Mask, "\033[64;3u", 0, 0},
++ { XK_at, Mod1Mask|ControlMask, "\033[64;7u", 0, 0},
++ { XK_at, Mod1Mask|ControlMask|ShiftMask, "\033[64;8u", 0, 0},
++ { XK_at, Mod1Mask|ShiftMask, "\033[64;4u", 0, 0},
++ { XK_backslash, ControlMask, "\033[92;5u", 0, 0},
++ { XK_backslash, ControlMask|ShiftMask, "\033[92;6u", 0, 0},
++ { XK_backslash, Mod1Mask, "\033[92;3u", 0, 0},
++ { XK_backslash, Mod1Mask|ControlMask, "\033[92;7u", 0, 0},
++ { XK_backslash, Mod1Mask|ControlMask|ShiftMask, "\033[92;8u", 0, 0},
++ { XK_backslash, Mod1Mask|ShiftMask, "\033[92;4u", 0, 0},
++ { XK_bar, ControlMask, "\033[124;5u", 0, 0},
++ { XK_bar, ControlMask|ShiftMask, "\033[124;6u", 0, 0},
++ { XK_bar, Mod1Mask, "\033[124;3u", 0, 0},
++ { XK_bar, Mod1Mask|ControlMask, "\033[124;7u", 0, 0},
++ { XK_bar, Mod1Mask|ControlMask|ShiftMask, "\033[124;8u", 0, 0},
++ { XK_bar, Mod1Mask|ShiftMask, "\033[124;4u", 0, 0},
++ { XK_braceleft, ControlMask, "\033[123;5u", 0, 0},
++ { XK_braceleft, ControlMask|ShiftMask, "\033[123;6u", 0, 0},
++ { XK_braceleft, Mod1Mask, "\033[123;3u", 0, 0},
++ { XK_braceleft, Mod1Mask|ControlMask, "\033[123;7u", 0, 0},
++ { XK_braceleft, Mod1Mask|ControlMask|ShiftMask, "\033[123;8u", 0, 0},
++ { XK_braceleft, Mod1Mask|ShiftMask, "\033[123;4u", 0, 0},
++ { XK_braceright, ControlMask, "\033[125;5u", 0, 0},
++ { XK_braceright, ControlMask|ShiftMask, "\033[125;6u", 0, 0},
++ { XK_braceright, Mod1Mask, "\033[125;3u", 0, 0},
++ { XK_braceright, Mod1Mask|ControlMask, "\033[125;7u", 0, 0},
++ { XK_braceright, Mod1Mask|ControlMask|ShiftMask, "\033[125;8u", 0, 0},
++ { XK_braceright, Mod1Mask|ShiftMask, "\033[125;4u", 0, 0},
++ { XK_bracketleft, ControlMask, "\033[91;5u", 0, 0},
++ { XK_bracketleft, ControlMask|ShiftMask, "\033[91;6u", 0, 0},
++ { XK_bracketleft, Mod1Mask, "\033[91;3u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ControlMask, "\033[91;7u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ControlMask|ShiftMask, "\033[91;8u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ShiftMask, "\033[91;4u", 0, 0},
++ { XK_bracketright, ControlMask, "\033[93;5u", 0, 0},
++ { XK_bracketright, ControlMask|ShiftMask, "\033[93;6u", 0, 0},
++ { XK_bracketright, Mod1Mask, "\033[93;3u", 0, 0},
++ { XK_bracketright, Mod1Mask|ControlMask, "\033[93;7u", 0, 0},
++ { XK_bracketright, Mod1Mask|ControlMask|ShiftMask, "\033[93;8u", 0, 0},
++ { XK_bracketright, Mod1Mask|ShiftMask, "\033[93;4u", 0, 0},
++ { XK_colon, ControlMask, "\033[58;5u", 0, 0},
++ { XK_colon, ControlMask|ShiftMask, "\033[58;6u", 0, 0},
++ { XK_colon, Mod1Mask, "\033[58;3u", 0, 0},
++ { XK_colon, Mod1Mask|ControlMask, "\033[58;7u", 0, 0},
++ { XK_colon, Mod1Mask|ControlMask|ShiftMask, "\033[58;8u", 0, 0},
++ { XK_colon, Mod1Mask|ShiftMask, "\033[58;4u", 0, 0},
++ { XK_comma, ControlMask, "\033[44;5u", 0, 0},
++ { XK_comma, ControlMask|ShiftMask, "\033[44;6u", 0, 0},
++ { XK_comma, Mod1Mask, "\033[44;3u", 0, 0},
++ { XK_comma, Mod1Mask|ControlMask, "\033[44;7u", 0, 0},
++ { XK_comma, Mod1Mask|ControlMask|ShiftMask, "\033[44;8u", 0, 0},
++ { XK_comma, Mod1Mask|ShiftMask, "\033[44;4u", 0, 0},
++ { XK_dollar, ControlMask, "\033[36;5u", 0, 0},
++ { XK_dollar, ControlMask|ShiftMask, "\033[36;6u", 0, 0},
++ { XK_dollar, Mod1Mask, "\033[36;3u", 0, 0},
++ { XK_dollar, Mod1Mask|ControlMask, "\033[36;7u", 0, 0},
++ { XK_dollar, Mod1Mask|ControlMask|ShiftMask, "\033[36;8u", 0, 0},
++ { XK_dollar, Mod1Mask|ShiftMask, "\033[36;4u", 0, 0},
++ { XK_equal, ControlMask, "\033[61;5u", 0, 0},
++ { XK_equal, ControlMask|ShiftMask, "\033[61;6u", 0, 0},
++ { XK_equal, Mod1Mask, "\033[61;3u", 0, 0},
++ { XK_equal, Mod1Mask|ControlMask, "\033[61;7u", 0, 0},
++ { XK_equal, Mod1Mask|ControlMask|ShiftMask, "\033[61;8u", 0, 0},
++ { XK_equal, Mod1Mask|ShiftMask, "\033[61;4u", 0, 0},
++ { XK_exclam, ControlMask, "\033[33;5u", 0, 0},
++ { XK_exclam, ControlMask|ShiftMask, "\033[33;6u", 0, 0},
++ { XK_exclam, Mod1Mask, "\033[33;3u", 0, 0},
++ { XK_exclam, Mod1Mask|ControlMask, "\033[33;7u", 0, 0},
++ { XK_exclam, Mod1Mask|ControlMask|ShiftMask, "\033[33;8u", 0, 0},
++ { XK_exclam, Mod1Mask|ShiftMask, "\033[33;4u", 0, 0},
++ { XK_grave, ControlMask, "\033[96;5u", 0, 0},
++ { XK_grave, ControlMask|ShiftMask, "\033[96;6u", 0, 0},
++ { XK_grave, Mod1Mask, "\033[96;3u", 0, 0},
++ { XK_grave, Mod1Mask|ControlMask, "\033[96;7u", 0, 0},
++ { XK_grave, Mod1Mask|ControlMask|ShiftMask, "\033[96;8u", 0, 0},
++ { XK_grave, Mod1Mask|ShiftMask, "\033[96;4u", 0, 0},
++ { XK_greater, ControlMask, "\033[62;5u", 0, 0},
++ { XK_greater, ControlMask|ShiftMask, "\033[62;6u", 0, 0},
++ { XK_greater, Mod1Mask, "\033[62;3u", 0, 0},
++ { XK_greater, Mod1Mask|ControlMask, "\033[62;7u", 0, 0},
++ { XK_greater, Mod1Mask|ControlMask|ShiftMask, "\033[62;8u", 0, 0},
++ { XK_greater, Mod1Mask|ShiftMask, "\033[62;4u", 0, 0},
++ { XK_less, ControlMask, "\033[60;5u", 0, 0},
++ { XK_less, ControlMask|ShiftMask, "\033[60;6u", 0, 0},
++ { XK_less, Mod1Mask, "\033[60;3u", 0, 0},
++ { XK_less, Mod1Mask|ControlMask, "\033[60;7u", 0, 0},
++ { XK_less, Mod1Mask|ControlMask|ShiftMask, "\033[60;8u", 0, 0},
++ { XK_less, Mod1Mask|ShiftMask, "\033[60;4u", 0, 0},
++ { XK_minus, ControlMask, "\033[45;5u", 0, 0},
++ { XK_minus, ControlMask|ShiftMask, "\033[45;6u", 0, 0},
++ { XK_minus, Mod1Mask, "\033[45;3u", 0, 0},
++ { XK_minus, Mod1Mask|ControlMask, "\033[45;7u", 0, 0},
++ { XK_minus, Mod1Mask|ControlMask|ShiftMask, "\033[45;8u", 0, 0},
++ { XK_minus, Mod1Mask|ShiftMask, "\033[45;4u", 0, 0},
++ { XK_numbersign, ControlMask, "\033[35;5u", 0, 0},
++ { XK_numbersign, ControlMask|ShiftMask, "\033[35;6u", 0, 0},
++ { XK_numbersign, Mod1Mask, "\033[35;3u", 0, 0},
++ { XK_numbersign, Mod1Mask|ControlMask, "\033[35;7u", 0, 0},
++ { XK_numbersign, Mod1Mask|ControlMask|ShiftMask, "\033[35;8u", 0, 0},
++ { XK_numbersign, Mod1Mask|ShiftMask, "\033[35;4u", 0, 0},
++ { XK_parenleft, ControlMask, "\033[40;5u", 0, 0},
++ { XK_parenleft, ControlMask|ShiftMask, "\033[40;6u", 0, 0},
++ { XK_parenleft, Mod1Mask, "\033[40;3u", 0, 0},
++ { XK_parenleft, Mod1Mask|ControlMask, "\033[40;7u", 0, 0},
++ { XK_parenleft, Mod1Mask|ControlMask|ShiftMask, "\033[40;8u", 0, 0},
++ { XK_parenleft, Mod1Mask|ShiftMask, "\033[40;4u", 0, 0},
++ { XK_parenright, ControlMask, "\033[41;5u", 0, 0},
++ { XK_parenright, ControlMask|ShiftMask, "\033[41;6u", 0, 0},
++ { XK_parenright, Mod1Mask, "\033[41;3u", 0, 0},
++ { XK_parenright, Mod1Mask|ControlMask, "\033[41;7u", 0, 0},
++ { XK_parenright, Mod1Mask|ControlMask|ShiftMask, "\033[41;8u", 0, 0},
++ { XK_parenright, Mod1Mask|ShiftMask, "\033[41;4u", 0, 0},
++ { XK_percent, ControlMask, "\033[37;5u", 0, 0},
++ { XK_percent, ControlMask|ShiftMask, "\033[37;6u", 0, 0},
++ { XK_percent, Mod1Mask, "\033[37;3u", 0, 0},
++ { XK_percent, Mod1Mask|ControlMask, "\033[37;7u", 0, 0},
++ { XK_percent, Mod1Mask|ControlMask|ShiftMask, "\033[37;8u", 0, 0},
++ { XK_percent, Mod1Mask|ShiftMask, "\033[37;4u", 0, 0},
++ { XK_period, ControlMask, "\033[46;5u", 0, 0},
++ { XK_period, ControlMask|ShiftMask, "\033[46;6u", 0, 0},
++ { XK_period, Mod1Mask|ControlMask, "\033[46;7u", 0, 0},
++ { XK_period, Mod1Mask|ControlMask|ShiftMask, "\033[46;8u", 0, 0},
++ { XK_period, Mod1Mask|ShiftMask, "\033[46;4u", 0, 0},
++ { XK_plus, ControlMask, "\033[43;5u", 0, 0},
++ { XK_plus, ControlMask|ShiftMask, "\033[43;6u", 0, 0},
++ { XK_plus, Mod1Mask, "\033[43;3u", 0, 0},
++ { XK_plus, Mod1Mask|ControlMask, "\033[43;7u", 0, 0},
++ { XK_plus, Mod1Mask|ControlMask|ShiftMask, "\033[43;8u", 0, 0},
++ { XK_plus, Mod1Mask|ShiftMask, "\033[43;4u", 0, 0},
++ { XK_question, ControlMask, "\033[63;5u", 0, 0},
++ { XK_question, ControlMask|ShiftMask, "\033[63;6u", 0, 0},
++ { XK_question, Mod1Mask, "\033[63;3u", 0, 0},
++ { XK_question, Mod1Mask|ControlMask, "\033[63;7u", 0, 0},
++ { XK_question, Mod1Mask|ControlMask|ShiftMask, "\033[63;8u", 0, 0},
++ { XK_question, Mod1Mask|ShiftMask, "\033[63;4u", 0, 0},
++ { XK_quotedbl, ControlMask, "\033[34;5u", 0, 0},
++ { XK_quotedbl, ControlMask|ShiftMask, "\033[34;6u", 0, 0},
++ { XK_quotedbl, Mod1Mask, "\033[34;3u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ControlMask, "\033[34;7u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ControlMask|ShiftMask, "\033[34;8u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ShiftMask, "\033[34;4u", 0, 0},
++ { XK_semicolon, ControlMask, "\033[59;5u", 0, 0},
++ { XK_semicolon, ControlMask|ShiftMask, "\033[59;6u", 0, 0},
++ { XK_semicolon, Mod1Mask, "\033[59;3u", 0, 0},
++ { XK_semicolon, Mod1Mask|ControlMask, "\033[59;7u", 0, 0},
++ { XK_semicolon, Mod1Mask|ControlMask|ShiftMask, "\033[59;8u", 0, 0},
++ { XK_semicolon, Mod1Mask|ShiftMask, "\033[59;4u", 0, 0},
++ { XK_slash, ControlMask|ShiftMask, "\033[47;6u", 0, 0},
++ { XK_slash, Mod1Mask, "\033[47;3u", 0, 0},
++ { XK_slash, Mod1Mask|ControlMask, "\033[47;7u", 0, 0},
++ { XK_slash, Mod1Mask|ControlMask|ShiftMask, "\033[47;8u", 0, 0},
++ { XK_slash, Mod1Mask|ShiftMask, "\033[47;4u", 0, 0},
++ { XK_underscore, ControlMask, "\033[95;5u", 0, 0},
++ { XK_underscore, ControlMask|ShiftMask, "\033[95;6u", 0, 0},
++ { XK_underscore, Mod1Mask, "\033[95;3u", 0, 0},
++ { XK_underscore, Mod1Mask|ControlMask, "\033[95;7u", 0, 0},
++ { XK_underscore, Mod1Mask|ControlMask|ShiftMask, "\033[95;8u", 0, 0},
++ { XK_underscore, Mod1Mask|ShiftMask, "\033[95;4u", 0, 0},
+ };
+
+ /*
+--
+2.19.1
+
diff --git a/patches/x11-terms/st-0.8.1/0003-apply-st-gruvbox-both-0.8.1.diff.patch b/patches/x11-terms/st-0.8.1/0003-apply-st-gruvbox-both-0.8.1.diff.patch
@@ -0,0 +1,216 @@
+From e61affc3317385cdee0e749da20a2fbb22acb0f3 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 23 Oct 2018 02:39:08 +0200
+Subject: [PATCH 3/3] apply st-gruvbox-both-0.8.1.diff
+
+---
+ config.def.h | 68 +++++++++++++++++++++++++++++++++-------------------
+ st.h | 1 +
+ x.c | 28 +++++++++++++++++-----
+ 3 files changed, 66 insertions(+), 31 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 1ea6902..e1587ba 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -84,31 +84,48 @@ unsigned int tabspaces = 8;
+
+ /* Terminal colors (16 first used in escape sequence) */
+ static const char *colorname[] = {
+- /* 8 normal colors */
+- "black",
+- "red3",
+- "green3",
+- "yellow3",
+- "blue2",
+- "magenta3",
+- "cyan3",
+- "gray90",
+-
+- /* 8 bright colors */
+- "gray50",
+- "red",
+- "green",
+- "yellow",
+- "#5c5cff",
+- "magenta",
+- "cyan",
+- "white",
++ /* gruvbox dark */
++ "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f / normal: #282828 */
++ "#cc241d",
++ "#98971a",
++ "#d79921",
++ "#458588",
++ "#b16286",
++ "#689d6a",
++ "#a89984",
++ "#928374",
++ "#fb4934",
++ "#b8bb26",
++ "#fabd2f",
++ "#83a598",
++ "#d3869b",
++ "#8ec07c",
++ "#ebdbb2",
+
+ [255] = 0,
++};
+
+- /* more colors can be added after 255 to use with DefaultXX */
+- "#cccccc",
+- "#555555",
++/* Terminal colors for alternate (light) palette */
++static const char *altcolorname[] = {
++ /* gruvbox light */
++ "#fbf1c7", /* hard contrast: #f9f5d7 / soft contrast: #f2e5bc / normal: #fbf1c7 */
++ "#cc241d",
++ "#98971a",
++ "#d79921",
++ "#458588",
++ "#b16286",
++ "#689d6a",
++ "#7c6f64",
++ "#928374",
++ "#9d0006",
++ "#79740e",
++ "#b57614",
++ "#076678",
++ "#8f3f71",
++ "#427b58",
++ "#3c3836",
++
++ [255] = 0,
+ };
+
+
+@@ -116,10 +133,10 @@ static const char *colorname[] = {
+ * Default colors (colorname index)
+ * foreground, background, cursor, reverse cursor
+ */
+-unsigned int defaultfg = 7;
++unsigned int defaultfg = 15;
+ unsigned int defaultbg = 0;
+-static unsigned int defaultcs = 256;
+-static unsigned int defaultrcs = 257;
++static unsigned int defaultcs = 15;
++static unsigned int defaultrcs = 0;
+
+ /*
+ * Default shape of cursor
+@@ -178,6 +195,7 @@ static Shortcut shortcuts[] = {
+ { TERMMOD, XK_Y, selpaste, {.i = 0} },
+ { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
+ { TERMMOD, XK_I, iso14755, {.i = 0} },
++ { XK_ANY_MOD, XK_F6, swapcolors, {.i = 0} },
+ };
+
+ /*
+diff --git a/st.h b/st.h
+index dac64d8..7b0159d 100644
+--- a/st.h
++++ b/st.h
+@@ -118,6 +118,7 @@ extern char *vtiden;
+ extern char *worddelimiters;
+ extern int allowaltscreen;
+ extern char *termname;
++extern int usealtcolors;
+ extern unsigned int tabspaces;
+ extern unsigned int defaultfg;
+ extern unsigned int defaultbg;
+diff --git a/x.c b/x.c
+index c343ba2..47ef3e9 100644
+--- a/x.c
++++ b/x.c
+@@ -53,6 +53,7 @@ static void clipcopy(const Arg *);
+ static void clippaste(const Arg *);
+ static void numlock(const Arg *);
+ static void selpaste(const Arg *);
++static void swapcolors(const Arg *);
+ static void zoom(const Arg *);
+ static void zoomabs(const Arg *);
+ static void zoomreset(const Arg *);
+@@ -240,6 +241,8 @@ static char *opt_title = NULL;
+
+ static int oldbutton = 3; /* button event on startup: 3 = release */
+
++int usealtcolors = 0; /* 1 to use alternate palette */
++
+ void
+ clipcopy(const Arg *dummy)
+ {
+@@ -278,6 +281,14 @@ numlock(const Arg *dummy)
+ win.mode ^= MODE_NUMLOCK;
+ }
+
++void
++swapcolors(const Arg *dummy)
++{
++ usealtcolors = !usealtcolors;
++ xloadcols();
++ redraw();
++}
++
+ void
+ zoom(const Arg *arg)
+ {
+@@ -700,6 +711,11 @@ sixd_to_16bit(int x)
+ return x == 0 ? 0 : 0x3737 + 0x2828 * x;
+ }
+
++const char* getcolorname(int i)
++{
++ return (usealtcolors) ? altcolorname[i] : colorname[i];
++}
++
+ int
+ xloadcolor(int i, const char *name, Color *ncolor)
+ {
+@@ -718,7 +734,7 @@ xloadcolor(int i, const char *name, Color *ncolor)
+ return XftColorAllocValue(xw.dpy, xw.vis,
+ xw.cmap, &color, ncolor);
+ } else
+- name = colorname[i];
++ name = getcolorname(i);
+ }
+
+ return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor);
+@@ -731,7 +747,7 @@ xloadcols(void)
+ static int loaded;
+ Color *cp;
+
+- dc.collen = MAX(LEN(colorname), 256);
++ dc.collen = MAX(LEN(colorname), LEN(altcolorname));
+ dc.col = xmalloc(dc.collen * sizeof(Color));
+
+ if (loaded) {
+@@ -741,8 +757,8 @@ xloadcols(void)
+
+ for (i = 0; i < dc.collen; i++)
+ if (!xloadcolor(i, NULL, &dc.col[i])) {
+- if (colorname[i])
+- die("Could not allocate color '%s'\n", colorname[i]);
++ if (getcolorname(i))
++ die("Could not allocate color '%s'\n", getcolorname(i));
+ else
+ die("Could not allocate color %d\n", i);
+ }
+@@ -1079,13 +1095,13 @@ xinit(int cols, int rows)
+ cursor = XCreateFontCursor(xw.dpy, mouseshape);
+ XDefineCursor(xw.dpy, xw.win, cursor);
+
+- if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) {
++ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousefg), &xmousefg) == 0) {
+ xmousefg.red = 0xffff;
+ xmousefg.green = 0xffff;
+ xmousefg.blue = 0xffff;
+ }
+
+- if (XParseColor(xw.dpy, xw.cmap, colorname[mousebg], &xmousebg) == 0) {
++ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousebg), &xmousebg) == 0) {
+ xmousebg.red = 0x0000;
+ xmousebg.green = 0x0000;
+ xmousebg.blue = 0x0000;
+--
+2.19.1
+
diff --git a/patches/x11-terms/st-0.8.2/0001-better-Input-Method-Editor-IME-support.patch b/patches/x11-terms/st-0.8.2/0001-better-Input-Method-Editor-IME-support.patch
@@ -0,0 +1,152 @@
+From e85b6b64660214121164ea97fb098eaa4935f7db Mon Sep 17 00:00:00 2001
+From: Ivan Tham <pickfire@riseup.net>
+Date: Tue, 12 Feb 2019 18:41:41 +0100
+Subject: [PATCH 1/5] better Input Method Editor (IME) support
+
+Features:
+
+- Allow input methods swap with hotkey (E.g. left ctrl + left shift).
+- Over-the-spot pre-editing style, pre-edit data placed over insertion point.
+- Restart IME without segmentation fault.
+
+TODO:
+
+- Automatically pickup IME if st started before IME
+---
+ st.c | 1 +
+ win.h | 1 +
+ x.c | 69 ++++++++++++++++++++++++++++++++++++++++++++---------------
+ 3 files changed, 54 insertions(+), 17 deletions(-)
+
+diff --git a/st.c b/st.c
+index b8e6077..cf8687e 100644
+--- a/st.c
++++ b/st.c
+@@ -2594,6 +2594,7 @@ draw(void)
+ term.ocx, term.ocy, term.line[term.ocy][term.ocx]);
+ term.ocx = cx, term.ocy = term.c.y;
+ xfinishdraw();
++ xximspot(term.ocx, term.ocy);
+ }
+
+ void
+diff --git a/win.h b/win.h
+index 31f327d..a6ef1b9 100644
+--- a/win.h
++++ b/win.h
+@@ -36,3 +36,4 @@ void xsetmode(int, unsigned int);
+ void xsetpointermotion(int);
+ void xsetsel(char *);
+ int xstartdraw(void);
++void xximspot(int, int);
+diff --git a/x.c b/x.c
+index 0422421..865dacc 100644
+--- a/x.c
++++ b/x.c
+@@ -139,6 +139,9 @@ static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);
+ static void xdrawglyph(Glyph, int, int);
+ static void xclear(int, int, int, int);
+ static int xgeommasktogravity(int);
++static void ximopen(Display *);
++static void ximinstantiate(Display *, XPointer, XPointer);
++static void ximdestroy(XIM, XPointer, XPointer);
+ static void xinit(int, int);
+ static void cresize(int, int);
+ static void xresize(int, int);
+@@ -996,6 +999,43 @@ xunloadfonts(void)
+ xunloadfont(&dc.ibfont);
+ }
+
++void
++ximopen(Display *dpy)
++{
++ XIMCallback destroy = { .client_data = NULL, .callback = ximdestroy };
++
++ if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) {
++ XSetLocaleModifiers("@im=local");
++ if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) {
++ XSetLocaleModifiers("@im=");
++ if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL)
++ die("XOpenIM failed. Could not open input device.\n");
++ }
++ }
++ if (XSetIMValues(xw.xim, XNDestroyCallback, &destroy, NULL) != NULL)
++ die("XSetIMValues failed. Could not set input method value.\n");
++ xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
++ XNClientWindow, xw.win, XNFocusWindow, xw.win, NULL);
++ if (xw.xic == NULL)
++ die("XCreateIC failed. Could not obtain input method.\n");
++}
++
++void
++ximinstantiate(Display *dpy, XPointer client, XPointer call)
++{
++ ximopen(dpy);
++ XUnregisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL,
++ ximinstantiate, NULL);
++}
++
++void
++ximdestroy(XIM xim, XPointer client, XPointer call)
++{
++ xw.xim = NULL;
++ XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL,
++ ximinstantiate, NULL);
++}
++
+ void
+ xinit(int cols, int rows)
+ {
+@@ -1033,7 +1073,7 @@ xinit(int cols, int rows)
+ xw.attrs.background_pixel = dc.col[defaultbg].pixel;
+ xw.attrs.border_pixel = dc.col[defaultbg].pixel;
+ xw.attrs.bit_gravity = NorthWestGravity;
+- xw.attrs.event_mask = FocusChangeMask | KeyPressMask
++ xw.attrs.event_mask = FocusChangeMask | KeyPressMask | KeyReleaseMask
+ | ExposureMask | VisibilityChangeMask | StructureNotifyMask
+ | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
+ xw.attrs.colormap = xw.cmap;
+@@ -1061,22 +1101,7 @@ xinit(int cols, int rows)
+ xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
+
+ /* input methods */
+- if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) {
+- XSetLocaleModifiers("@im=local");
+- if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) {
+- XSetLocaleModifiers("@im=");
+- if ((xw.xim = XOpenIM(xw.dpy,
+- NULL, NULL, NULL)) == NULL) {
+- die("XOpenIM failed. Could not open input"
+- " device.\n");
+- }
+- }
+- }
+- xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing
+- | XIMStatusNothing, XNClientWindow, xw.win,
+- XNFocusWindow, xw.win, NULL);
+- if (xw.xic == NULL)
+- die("XCreateIC failed. Could not obtain input method.\n");
++ ximopen(xw.dpy);
+
+ /* white cursor, black outline */
+ cursor = XCreateFontCursor(xw.dpy, mouseshape);
+@@ -1554,6 +1579,16 @@ xfinishdraw(void)
+ defaultfg : defaultbg].pixel);
+ }
+
++void
++xximspot(int x, int y)
++{
++ XPoint spot = { borderpx + x * win.cw, borderpx + (y + 1) * win.ch };
++ XVaNestedList attr = XVaCreateNestedList(0, XNSpotLocation, &spot, NULL);
++
++ XSetICValues(xw.xic, XNPreeditAttributes, attr, NULL);
++ XFree(attr);
++}
++
+ void
+ expose(XEvent *ev)
+ {
+--
+2.21.0
+
diff --git a/patches/x11-terms/st-0.8.2/0002-fix-use-after-free-in-font-caching-algorithm.patch b/patches/x11-terms/st-0.8.2/0002-fix-use-after-free-in-font-caching-algorithm.patch
@@ -0,0 +1,62 @@
+From a8cb8e94547d7e31441d2444e8a196415e3e4c1f Mon Sep 17 00:00:00 2001
+From: magras <dr.magras@gmail.com>
+Date: Thu, 28 Feb 2019 04:56:01 +0300
+Subject: [PATCH 2/5] fix use after free in font caching algorithm
+
+Current font caching algorithm contains a use after free error. A font
+removed from `frc` might be still listed in `wx.specbuf`. It will lead
+to a crash inside `XftDrawGlyphFontSpec()`.
+
+Steps to reproduce:
+$ st -f 'Misc Tamsyn:scalable=false'
+$ curl https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt
+
+Of course, result depends on fonts installed on a system and fontconfig.
+In my case, I'm getting consistent segfaults with different fonts.
+
+I replaced a fixed array with a simple unbounded buffer with a constant
+growth rate. Cache starts with a capacity of 0, gets increments by 16,
+and never shrinks. On my machine after `cat UTF-8-demo.txt` buffer
+reaches a capacity of 192. During casual use capacity stays at 0.
+---
+ x.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/x.c b/x.c
+index 865dacc..2cd76d0 100644
+--- a/x.c
++++ b/x.c
+@@ -226,8 +226,9 @@ typedef struct {
+ } Fontcache;
+
+ /* Fontcache is an array now. A new font will be appended to the array. */
+-static Fontcache frc[16];
++static Fontcache *frc = NULL;
+ static int frclen = 0;
++static int frccap = 0;
+ static char *usedfont = NULL;
+ static double usedfontsize = 0;
+ static double defaultfontsize = 0;
+@@ -1244,12 +1245,14 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x
+ fcpattern, &fcres);
+
+ /*
+- * Overwrite or create the new cache entry.
++ * Allocate memory for the new cache entry.
+ */
+- if (frclen >= LEN(frc)) {
+- frclen = LEN(frc) - 1;
+- XftFontClose(xw.dpy, frc[frclen].font);
+- frc[frclen].unicodep = 0;
++ if (frclen >= frccap) {
++ frccap += 16;
++ if (!frc)
++ frc = xmalloc(frccap * sizeof(Fontcache));
++ else
++ frc = xrealloc(frc, frccap * sizeof(Fontcache));
+ }
+
+ frc[frclen].font = XftFontOpenPattern(xw.dpy,
+--
+2.21.0
+
diff --git a/patches/x11-terms/st-0.8.2/0003-apply-01b-my-config.diff.patch b/patches/x11-terms/st-0.8.2/0003-apply-01b-my-config.diff.patch
@@ -0,0 +1,34 @@
+From abeb13a8d0de88b7790d2f8343e83509eae404f8 Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Mon, 1 Oct 2018 01:08:20 +0200
+Subject: [PATCH 3/5] apply: 01b-my-config.diff
+
+---
+ config.def.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 0e01717..5c6944c 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -5,7 +5,7 @@
+ *
+ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+ */
+-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
++static char *font = "monospace-7";
+ static int borderpx = 2;
+
+ /*
+@@ -32,7 +32,7 @@ static float chscale = 1.0;
+ *
+ * More advanced example: " `'\"()[]{}"
+ */
+-char *worddelimiters = " ";
++char *worddelimiters = " │`'\"()[]{}“”<>‘’\~\;";
+
+ /* selection timeouts (in milliseconds) */
+ static unsigned int doubleclicktimeout = 300;
+--
+2.21.0
+
diff --git a/patches/x11-terms/st-0.8.2/0004-Fix-keyboard-input-on-terminal.louli b/patches/x11-terms/st-0.8.2/0004-Fix-keyboard-input-on-terminal.louli
@@ -0,0 +1,770 @@
+From 9b5498f1f279bf8c509939aa1bd460e5e325e41d Mon Sep 17 00:00:00 2001
+From: Jan Christoph Ebersbach <jceb@e-jc.de>
+Date: Mon, 1 Oct 2018 01:38:52 +0200
+Subject: [PATCH 4/5] Fix keyboard input on terminal
+
+URL: http://st.suckless.org/patches/fix_keyboard_input
+---
+ config.def.h | 691 +++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 641 insertions(+), 50 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 5c6944c..78ebbc5 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -209,7 +209,80 @@ static Shortcut shortcuts[] = {
+ * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
+ * to be mapped below, add them to this array.
+ */
+-static KeySym mappedkeys[] = { -1 };
++static KeySym mappedkeys[] = {
++ XK_space,
++ XK_m,
++ XK_i,
++ XK_A,
++ XK_B,
++ XK_C,
++ XK_D,
++ XK_E,
++ XK_F,
++ XK_G,
++ XK_H,
++ XK_I,
++ XK_K,
++ XK_J,
++ XK_L,
++ XK_M,
++ XK_N,
++ XK_O,
++ XK_P,
++ XK_Q,
++ XK_R,
++ XK_S,
++ XK_T,
++ XK_U,
++ XK_V,
++ XK_W,
++ XK_X,
++ XK_Y,
++ XK_Z,
++ XK_Z,
++ XK_0,
++ XK_1,
++ XK_2,
++ XK_3,
++ XK_4,
++ XK_5,
++ XK_6,
++ XK_7,
++ XK_8,
++ XK_9,
++ XK_exclam,
++ XK_quotedbl,
++ XK_numbersign,
++ XK_dollar,
++ XK_percent,
++ XK_ampersand,
++ XK_apostrophe,
++ XK_parenleft,
++ XK_parenright,
++ XK_asterisk,
++ XK_plus,
++ XK_comma,
++ XK_minus,
++ XK_period,
++ XK_slash,
++ XK_colon,
++ XK_semicolon,
++ XK_less,
++ XK_equal,
++ XK_greater,
++ XK_question,
++ XK_at,
++ XK_bracketleft,
++ XK_backslash,
++ XK_bracketright,
++ XK_asciicircum,
++ XK_underscore,
++ XK_grave,
++ XK_braceleft,
++ XK_bar,
++ XK_braceright,
++ XK_asciitilde,
++};
+
+ /*
+ * State bits to ignore when matching key or button events. By default,
+@@ -232,59 +305,20 @@ static Key key[] = {
+ /* keysym mask string appkey appcursor */
+ { XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
+- { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
+- { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+- { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
+- { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
+- { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
+- { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
+- { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
+- { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
+- { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
+- { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
+- { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
+- { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
+- { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
+- { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
+- { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+- { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
+ { XK_KP_End, ControlMask, "\033[J", -1, 0},
+ { XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_KP_End, ShiftMask, "\033[K", -1, 0},
+ { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
+- { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
+- { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
+- { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+- { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_KP_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
+- { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+- { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+- { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
+- { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
+- { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
+- { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
+- { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
+- { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
+- { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
+- { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
+- { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
+- { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
+- { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
+- { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
+- { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
+- { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
+- { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
+- { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
+- { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
+ { XK_Up, ShiftMask, "\033[1;2A", 0, 0},
+ { XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
+ { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
+@@ -323,36 +357,27 @@ static Key key[] = {
+ { XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
+ { XK_Return, Mod1Mask, "\033\r", 0, 0},
+- { XK_Return, XK_ANY_MOD, "\r", 0, 0},
++ { XK_Return, XK_NO_MOD, "\r", 0, 0},
+ { XK_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_Insert, ControlMask, "\033[2;5~", +1, 0},
+- { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+- { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
+- { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+- { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
+ { XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
+ { XK_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_Home, ShiftMask, "\033[1;2H", 0, +1},
+- { XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
+- { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_End, ControlMask, "\033[J", -1, 0},
+ { XK_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_End, ShiftMask, "\033[K", -1, 0},
+ { XK_End, ShiftMask, "\033[1;2F", +1, 0},
+- { XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_Prior, ControlMask, "\033[5;5~", 0, 0},
+ { XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
+- { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_Next, ControlMask, "\033[6;5~", 0, 0},
+ { XK_Next, ShiftMask, "\033[6;2~", 0, 0},
+- { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
+ { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
+ { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
+@@ -439,6 +464,572 @@ static Key key[] = {
+ { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
+ { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
+ { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
++
++ // libtermkey compatible keyboard input
++ { XK_KP_Home, XK_NO_MOD, "\033[H", 0, -1},
++ { XK_KP_Home, XK_NO_MOD, "\033[1~", 0, +1},
++ { XK_KP_Home, ControlMask, "\033[149;5u", 0, 0},
++ { XK_KP_Home, ControlMask|ShiftMask, "\033[149;6u", 0, 0},
++ { XK_KP_Home, Mod1Mask, "\033[149;3u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ControlMask, "\033[149;7u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ControlMask|ShiftMask, "\033[149;8u", 0, 0},
++ { XK_KP_Home, Mod1Mask|ShiftMask, "\033[149;4u", 0, 0},
++ { XK_KP_Home, ShiftMask, "\033[149;2u", 0, 0},
++ { XK_KP_Up, XK_NO_MOD, "\033Ox", +1, 0},
++ { XK_KP_Up, XK_NO_MOD, "\033[A", 0, -1},
++ { XK_KP_Up, XK_NO_MOD, "\033OA", 0, +1},
++ { XK_KP_Up, ControlMask, "\033[151;5u", 0, 0},
++ { XK_KP_Up, ControlMask|ShiftMask, "\033[151;6u", 0, 0},
++ { XK_KP_Up, Mod1Mask, "\033[151;3u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ControlMask, "\033[151;7u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ControlMask|ShiftMask, "\033[151;8u", 0, 0},
++ { XK_KP_Up, Mod1Mask|ShiftMask, "\033[151;4u", 0, 0},
++ { XK_KP_Up, ShiftMask, "\033[151;2u", 0, 0},
++ { XK_KP_Down, XK_NO_MOD, "\033Or", +1, 0},
++ { XK_KP_Down, XK_NO_MOD, "\033[B", 0, -1},
++ { XK_KP_Down, XK_NO_MOD, "\033OB", 0, +1},
++ { XK_KP_Down, ControlMask, "\033[153;5u", 0, 0},
++ { XK_KP_Down, ControlMask|ShiftMask, "\033[153;6u", 0, 0},
++ { XK_KP_Down, Mod1Mask, "\033[153;3u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ControlMask, "\033[153;7u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ControlMask|ShiftMask, "\033[153;8u", 0, 0},
++ { XK_KP_Down, Mod1Mask|ShiftMask, "\033[153;4u", 0, 0},
++ { XK_KP_Down, ShiftMask, "\033[153;2u", 0, 0},
++ { XK_KP_Left, XK_NO_MOD, "\033Ot", +1, 0},
++ { XK_KP_Left, XK_NO_MOD, "\033[D", 0, -1},
++ { XK_KP_Left, XK_NO_MOD, "\033OD", 0, +1},
++ { XK_KP_Left, ControlMask, "\033[150;5u", 0, 0},
++ { XK_KP_Left, ControlMask|ShiftMask, "\033[150;6u", 0, 0},
++ { XK_KP_Left, Mod1Mask, "\033[150;3u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ControlMask, "\033[150;7u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ControlMask|ShiftMask, "\033[150;8u", 0, 0},
++ { XK_KP_Left, Mod1Mask|ShiftMask, "\033[150;4u", 0, 0},
++ { XK_KP_Left, ShiftMask, "\033[150;2u", 0, 0},
++ { XK_KP_Right, XK_NO_MOD, "\033Ov", +1, 0},
++ { XK_KP_Right, XK_NO_MOD, "\033[C", 0, -1},
++ { XK_KP_Right, XK_NO_MOD, "\033OC", 0, +1},
++ { XK_KP_Right, ControlMask, "\033[152;5u", 0, 0},
++ { XK_KP_Right, ControlMask|ShiftMask, "\033[152;6u", 0, 0},
++ { XK_KP_Right, Mod1Mask, "\033[152;3u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ControlMask, "\033[152;7u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ControlMask|ShiftMask, "\033[152;8u", 0, 0},
++ { XK_KP_Right, Mod1Mask|ShiftMask, "\033[152;4u", 0, 0},
++ { XK_KP_Right, ShiftMask, "\033[152;2u", 0, 0},
++ { XK_KP_Prior, XK_NO_MOD, "\033[5~", 0, 0},
++ { XK_KP_Prior, ControlMask, "\033[154;5u", 0, 0},
++ { XK_KP_Prior, ControlMask|ShiftMask, "\033[154;6u", 0, 0},
++ { XK_KP_Prior, Mod1Mask, "\033[154;3u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ControlMask, "\033[154;7u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ControlMask|ShiftMask, "\033[154;8u", 0, 0},
++ { XK_KP_Prior, Mod1Mask|ShiftMask, "\033[154;4u", 0, 0},
++ { XK_KP_Begin, XK_NO_MOD, "\033[E", 0, 0},
++ { XK_KP_Begin, ControlMask, "\033[157;5u", 0, 0},
++ { XK_KP_Begin, ControlMask|ShiftMask, "\033[157;6u", 0, 0},
++ { XK_KP_Begin, Mod1Mask, "\033[157;3u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ControlMask, "\033[157;7u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ControlMask|ShiftMask, "\033[157;8u", 0, 0},
++ { XK_KP_Begin, Mod1Mask|ShiftMask, "\033[157;4u", 0, 0},
++ { XK_KP_Begin, ShiftMask, "\033[157;2u", 0, 0},
++ { XK_KP_End, XK_NO_MOD, "\033[4~", 0, 0},
++ { XK_KP_End, ControlMask|ShiftMask, "\033[156;6u", 0, 0},
++ { XK_KP_End, Mod1Mask, "\033[156;3u", 0, 0},
++ { XK_KP_End, Mod1Mask|ControlMask, "\033[156;7u", 0, 0},
++ { XK_KP_End, Mod1Mask|ControlMask|ShiftMask, "\033[156;8u", 0, 0},
++ { XK_KP_End, Mod1Mask|ShiftMask, "\033[156;4u", 0, 0},
++ { XK_KP_Next, XK_NO_MOD, "\033[6~", 0, 0},
++ { XK_KP_Next, ControlMask, "\033[155;5u", 0, 0},
++ { XK_KP_Next, ControlMask|ShiftMask, "\033[155;6u", 0, 0},
++ { XK_KP_Next, Mod1Mask, "\033[155;3u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ControlMask, "\033[155;7u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ControlMask|ShiftMask, "\033[155;8u", 0, 0},
++ { XK_KP_Next, Mod1Mask|ShiftMask, "\033[155;4u", 0, 0},
++ { XK_KP_Insert, XK_NO_MOD, "\033[4h", -1, 0},
++ { XK_KP_Insert, XK_NO_MOD, "\033[2~", +1, 0},
++ { XK_KP_Insert, ControlMask|ShiftMask, "\033[158;6u", 0, 0},
++ { XK_KP_Insert, Mod1Mask, "\033[158;3u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ControlMask, "\033[158;7u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ControlMask|ShiftMask, "\033[158;8u", 0, 0},
++ { XK_KP_Insert, Mod1Mask|ShiftMask, "\033[158;4u", 0, 0},
++ { XK_KP_Delete, XK_NO_MOD, "\033[P", -1, 0},
++ { XK_KP_Delete, XK_NO_MOD, "\033[3~", +1, 0},
++ { XK_KP_Delete, ControlMask|ShiftMask, "\033[159;6u", 0, 0},
++ { XK_KP_Delete, Mod1Mask, "\033[159;3u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ControlMask, "\033[159;7u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ControlMask|ShiftMask, "\033[159;8u", 0, 0},
++ { XK_KP_Delete, Mod1Mask|ShiftMask, "\033[159;4u", 0, 0},
++ { XK_KP_Multiply, XK_NO_MOD, "\033Oj", +2, 0},
++ { XK_KP_Multiply, ControlMask, "\033[170;5u", 0, 0},
++ { XK_KP_Multiply, ControlMask|ShiftMask, "\033[170;6u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask, "\033[170;3u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ControlMask, "\033[170;7u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ControlMask|ShiftMask, "\033[170;8u", 0, 0},
++ { XK_KP_Multiply, Mod1Mask|ShiftMask, "\033[170;4u", 0, 0},
++ { XK_KP_Multiply, ShiftMask, "\033[170;2u", 0, 0},
++ { XK_KP_Add, XK_NO_MOD, "\033Ok", +2, 0},
++ { XK_KP_Add, ControlMask, "\033[171;5u", 0, 0},
++ { XK_KP_Add, ControlMask|ShiftMask, "\033[171;6u", 0, 0},
++ { XK_KP_Add, Mod1Mask, "\033[171;3u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ControlMask, "\033[171;7u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ControlMask|ShiftMask, "\033[171;8u", 0, 0},
++ { XK_KP_Add, Mod1Mask|ShiftMask, "\033[171;4u", 0, 0},
++ { XK_KP_Add, ShiftMask, "\033[171;2u", 0, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\033OM", +2, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\r", -1, 0},
++ { XK_KP_Enter, XK_NO_MOD, "\r\n", -1, 0},
++ { XK_KP_Enter, ControlMask, "\033[141;5u", 0, 0},
++ { XK_KP_Enter, ControlMask|ShiftMask, "\033[141;6u", 0, 0},
++ { XK_KP_Enter, Mod1Mask, "\033[141;3u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ControlMask, "\033[141;7u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ControlMask|ShiftMask, "\033[141;8u", 0, 0},
++ { XK_KP_Enter, Mod1Mask|ShiftMask, "\033[141;4u", 0, 0},
++ { XK_KP_Enter, ShiftMask, "\033[141;2u", 0, 0},
++ { XK_KP_Subtract, XK_NO_MOD, "\033Om", +2, 0},
++ { XK_KP_Subtract, ControlMask, "\033[173;5u", 0, 0},
++ { XK_KP_Subtract, ControlMask|ShiftMask, "\033[173;6u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask, "\033[173;3u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ControlMask, "\033[173;7u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ControlMask|ShiftMask, "\033[173;8u", 0, 0},
++ { XK_KP_Subtract, Mod1Mask|ShiftMask, "\033[173;4u", 0, 0},
++ { XK_KP_Subtract, ShiftMask, "\033[173;2u", 0, 0},
++ { XK_KP_Decimal, XK_NO_MOD, "\033On", +2, 0},
++ { XK_KP_Decimal, ControlMask, "\033[174;5u", 0, 0},
++ { XK_KP_Decimal, ControlMask|ShiftMask, "\033[174;6u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask, "\033[174;3u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ControlMask, "\033[174;7u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ControlMask|ShiftMask, "\033[174;8u", 0, 0},
++ { XK_KP_Decimal, Mod1Mask|ShiftMask, "\033[174;4u", 0, 0},
++ { XK_KP_Decimal, ShiftMask, "\033[174;2u", 0, 0},
++ { XK_KP_Divide, XK_NO_MOD, "\033Oo", +2, 0},
++ { XK_KP_Divide, ControlMask, "\033[175;5u", 0, 0},
++ { XK_KP_Divide, ControlMask|ShiftMask, "\033[175;6u", 0, 0},
++ { XK_KP_Divide, Mod1Mask, "\033[175;3u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ControlMask, "\033[175;7u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ControlMask|ShiftMask, "\033[175;8u", 0, 0},
++ { XK_KP_Divide, Mod1Mask|ShiftMask, "\033[175;4u", 0, 0},
++ { XK_KP_Divide, ShiftMask, "\033[175;2u", 0, 0},
++ { XK_KP_0, XK_NO_MOD, "\033Op", +2, 0},
++ { XK_KP_0, ControlMask, "\033[176;5u", 0, 0},
++ { XK_KP_0, ControlMask|ShiftMask, "\033[176;6u", 0, 0},
++ { XK_KP_0, Mod1Mask, "\033[176;3u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask, "\033[176;7u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask|ShiftMask, "\033[176;8u", 0, 0},
++ { XK_KP_0, Mod1Mask|ShiftMask, "\033[176;4u", 0, 0},
++ { XK_KP_0, ShiftMask, "\033[176;2u", 0, 0},
++ { XK_KP_1, XK_NO_MOD, "\033Oq", +2, 0},
++ { XK_KP_0, ControlMask, "\033[177;5u", 0, 0},
++ { XK_KP_0, ControlMask|ShiftMask, "\033[177;6u", 0, 0},
++ { XK_KP_0, Mod1Mask, "\033[177;3u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask, "\033[177;7u", 0, 0},
++ { XK_KP_0, Mod1Mask|ControlMask|ShiftMask, "\033[177;8u", 0, 0},
++ { XK_KP_0, Mod1Mask|ShiftMask, "\033[177;4u", 0, 0},
++ { XK_KP_0, ShiftMask, "\033[177;2u", 0, 0},
++ { XK_KP_2, XK_NO_MOD, "\033Or", +2, 0},
++ { XK_KP_2, ControlMask, "\033[178;5u", 0, 0},
++ { XK_KP_2, ControlMask|ShiftMask, "\033[178;6u", 0, 0},
++ { XK_KP_2, Mod1Mask, "\033[178;3u", 0, 0},
++ { XK_KP_2, Mod1Mask|ControlMask, "\033[178;7u", 0, 0},
++ { XK_KP_2, Mod1Mask|ControlMask|ShiftMask, "\033[178;8u", 0, 0},
++ { XK_KP_2, Mod1Mask|ShiftMask, "\033[178;4u", 0, 0},
++ { XK_KP_2, ShiftMask, "\033[178;2u", 0, 0},
++ { XK_KP_3, XK_NO_MOD, "\033Os", +2, 0},
++ { XK_KP_3, ControlMask, "\033[179;5u", 0, 0},
++ { XK_KP_3, ControlMask|ShiftMask, "\033[179;6u", 0, 0},
++ { XK_KP_3, Mod1Mask, "\033[179;3u", 0, 0},
++ { XK_KP_3, Mod1Mask|ControlMask, "\033[179;7u", 0, 0},
++ { XK_KP_3, Mod1Mask|ControlMask|ShiftMask, "\033[179;8u", 0, 0},
++ { XK_KP_3, Mod1Mask|ShiftMask, "\033[179;4u", 0, 0},
++ { XK_KP_3, ShiftMask, "\033[179;2u", 0, 0},
++ { XK_KP_4, XK_NO_MOD, "\033Ot", +2, 0},
++ { XK_KP_4, ControlMask, "\033[180;5u", 0, 0},
++ { XK_KP_4, ControlMask|ShiftMask, "\033[180;6u", 0, 0},
++ { XK_KP_4, Mod1Mask, "\033[180;3u", 0, 0},
++ { XK_KP_4, Mod1Mask|ControlMask, "\033[180;7u", 0, 0},
++ { XK_KP_4, Mod1Mask|ControlMask|ShiftMask, "\033[180;8u", 0, 0},
++ { XK_KP_4, Mod1Mask|ShiftMask, "\033[180;4u", 0, 0},
++ { XK_KP_4, ShiftMask, "\033[180;2u", 0, 0},
++ { XK_KP_5, XK_NO_MOD, "\033Ou", +2, 0},
++ { XK_KP_5, ControlMask, "\033[181;5u", 0, 0},
++ { XK_KP_5, ControlMask|ShiftMask, "\033[181;6u", 0, 0},
++ { XK_KP_5, Mod1Mask, "\033[181;3u", 0, 0},
++ { XK_KP_5, Mod1Mask|ControlMask, "\033[181;7u", 0, 0},
++ { XK_KP_5, Mod1Mask|ControlMask|ShiftMask, "\033[181;8u", 0, 0},
++ { XK_KP_5, Mod1Mask|ShiftMask, "\033[181;4u", 0, 0},
++ { XK_KP_5, ShiftMask, "\033[181;2u", 0, 0},
++ { XK_KP_6, XK_NO_MOD, "\033Ov", +2, 0},
++ { XK_KP_6, ControlMask, "\033[182;5u", 0, 0},
++ { XK_KP_6, ControlMask|ShiftMask, "\033[182;6u", 0, 0},
++ { XK_KP_6, Mod1Mask, "\033[182;3u", 0, 0},
++ { XK_KP_6, Mod1Mask|ControlMask, "\033[182;7u", 0, 0},
++ { XK_KP_6, Mod1Mask|ControlMask|ShiftMask, "\033[182;8u", 0, 0},
++ { XK_KP_6, Mod1Mask|ShiftMask, "\033[182;4u", 0, 0},
++ { XK_KP_6, ShiftMask, "\033[182;2u", 0, 0},
++ { XK_KP_7, XK_NO_MOD, "\033Ow", +2, 0},
++ { XK_KP_7, ControlMask, "\033[183;5u", 0, 0},
++ { XK_KP_7, ControlMask|ShiftMask, "\033[183;6u", 0, 0},
++ { XK_KP_7, Mod1Mask, "\033[183;3u", 0, 0},
++ { XK_KP_7, Mod1Mask|ControlMask, "\033[183;7u", 0, 0},
++ { XK_KP_7, Mod1Mask|ControlMask|ShiftMask, "\033[183;8u", 0, 0},
++ { XK_KP_7, Mod1Mask|ShiftMask, "\033[183;4u", 0, 0},
++ { XK_KP_7, ShiftMask, "\033[183;2u", 0, 0},
++ { XK_KP_8, XK_NO_MOD, "\033Ox", +2, 0},
++ { XK_KP_8, ControlMask, "\033[184;5u", 0, 0},
++ { XK_KP_8, ControlMask|ShiftMask, "\033[184;6u", 0, 0},
++ { XK_KP_8, Mod1Mask, "\033[184;3u", 0, 0},
++ { XK_KP_8, Mod1Mask|ControlMask, "\033[184;7u", 0, 0},
++ { XK_KP_8, Mod1Mask|ControlMask|ShiftMask, "\033[184;8u", 0, 0},
++ { XK_KP_8, Mod1Mask|ShiftMask, "\033[184;4u", 0, 0},
++ { XK_KP_8, ShiftMask, "\033[184;2u", 0, 0},
++ { XK_KP_9, XK_NO_MOD, "\033Oy", +2, 0},
++ { XK_KP_9, ControlMask, "\033[185;5u", 0, 0},
++ { XK_KP_9, ControlMask|ShiftMask, "\033[185;6u", 0, 0},
++ { XK_KP_9, Mod1Mask, "\033[185;3u", 0, 0},
++ { XK_KP_9, Mod1Mask|ControlMask, "\033[185;7u", 0, 0},
++ { XK_KP_9, Mod1Mask|ControlMask|ShiftMask, "\033[185;8u", 0, 0},
++ { XK_KP_9, Mod1Mask|ShiftMask, "\033[185;4u", 0, 0},
++ { XK_KP_9, ShiftMask, "\033[185;2u", 0, 0},
++ { XK_BackSpace, ControlMask, "\033[127;5u", 0, 0},
++ { XK_BackSpace, ControlMask|ShiftMask, "\033[127;6u", 0, 0},
++ { XK_BackSpace, Mod1Mask, "\033[127;3u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ControlMask, "\033[127;7u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ControlMask|ShiftMask, "\033[127;8u", 0, 0},
++ { XK_BackSpace, Mod1Mask|ShiftMask, "\033[127;4u", 0, 0},
++ { XK_BackSpace, ShiftMask, "\033[127;2u", 0, 0},
++ { XK_Tab, ControlMask, "\033[9;5u", 0, 0},
++ { XK_Tab, ControlMask|ShiftMask, "\033[1;5Z", 0, 0},
++ { XK_Tab, Mod1Mask, "\033[1;3Z", 0, 0},
++ { XK_Tab, Mod1Mask|ControlMask, "\033[1;7Z", 0, 0},
++ { XK_Tab, Mod1Mask|ControlMask|ShiftMask, "\033[1;8Z", 0, 0},
++ { XK_Tab, Mod1Mask|ShiftMask, "\033[1;4Z", 0, 0},
++ { XK_Return, ControlMask, "\033[13;5u", 0, 0},
++ { XK_Return, ControlMask|ShiftMask, "\033[13;6u", 0, 0},
++ { XK_Return, Mod1Mask, "\033[13;3u", 0, 0},
++ { XK_Return, Mod1Mask|ControlMask, "\033[13;7u", 0, 0},
++ { XK_Return, Mod1Mask|ControlMask|ShiftMask, "\033[13;8u", 0, 0},
++ { XK_Return, Mod1Mask|ShiftMask, "\033[13;4u", 0, 0},
++ { XK_Return, ShiftMask, "\033[13;2u", 0, 0},
++ { XK_Pause, ControlMask, "\033[18;5u", 0, 0},
++ { XK_Pause, ControlMask|ShiftMask, "\033[18;6u", 0, 0},
++ { XK_Pause, Mod1Mask, "\033[18;3u", 0, 0},
++ { XK_Pause, Mod1Mask|ControlMask, "\033[18;7u", 0, 0},
++ { XK_Pause, Mod1Mask|ControlMask|ShiftMask, "\033[18;8u", 0, 0},
++ { XK_Pause, Mod1Mask|ShiftMask, "\033[18;4u", 0, 0},
++ { XK_Pause, ShiftMask, "\033[18;2u", 0, 0},
++ { XK_Scroll_Lock, ControlMask, "\033[20;5u", 0, 0},
++ { XK_Scroll_Lock, ControlMask|ShiftMask, "\033[20;6u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask, "\033[20;3u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ControlMask, "\033[20;7u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ControlMask|ShiftMask, "\033[20;8u", 0, 0},
++ { XK_Scroll_Lock, Mod1Mask|ShiftMask, "\033[20;4u", 0, 0},
++ { XK_Scroll_Lock, ShiftMask, "\033[20;2u", 0, 0},
++ { XK_Escape, ControlMask, "\033[27;5u", 0, 0},
++ { XK_Escape, ControlMask|ShiftMask, "\033[27;6u", 0, 0},
++ { XK_Escape, Mod1Mask, "\033[27;3u", 0, 0},
++ { XK_Escape, Mod1Mask|ControlMask, "\033[27;7u", 0, 0},
++ { XK_Escape, Mod1Mask|ControlMask|ShiftMask, "\033[27;8u", 0, 0},
++ { XK_Escape, Mod1Mask|ShiftMask, "\033[27;4u", 0, 0},
++ { XK_Escape, ShiftMask, "\033[27;2u", 0, 0},
++ { XK_Home, XK_NO_MOD, "\033[H", 0, -1},
++ { XK_Home, XK_NO_MOD, "\033[1~", 0, +1},
++ { XK_Home, ControlMask|ShiftMask, "\033[80;6u", 0, 0},
++ { XK_Home, Mod1Mask, "\033[80;3u", 0, 0},
++ { XK_Home, Mod1Mask|ControlMask, "\033[80;7u", 0, 0},
++ { XK_Home, Mod1Mask|ControlMask|ShiftMask, "\033[80;8u", 0, 0},
++ { XK_Home, Mod1Mask|ShiftMask, "\033[80;4u", 0, 0},
++ { XK_End, XK_NO_MOD, "\033[4~", 0, 0},
++ { XK_End, ControlMask|ShiftMask, "\033[87;6u", 0, 0},
++ { XK_End, Mod1Mask, "\033[87;3u", 0, 0},
++ { XK_End, Mod1Mask|ControlMask, "\033[87;7u", 0, 0},
++ { XK_End, Mod1Mask|ControlMask|ShiftMask, "\033[87;8u", 0, 0},
++ { XK_End, Mod1Mask|ShiftMask, "\033[87;4u", 0, 0},
++ { XK_Prior, XK_NO_MOD, "\033[5~", 0, 0},
++ { XK_Prior, ControlMask|ShiftMask, "\033[85;6u", 0, 0},
++ { XK_Prior, Mod1Mask, "\033[85;3u", 0, 0},
++ { XK_Prior, Mod1Mask|ControlMask, "\033[85;7u", 0, 0},
++ { XK_Prior, Mod1Mask|ControlMask|ShiftMask, "\033[85;8u", 0, 0},
++ { XK_Prior, Mod1Mask|ShiftMask, "\033[85;4u", 0, 0},
++ { XK_Next, XK_NO_MOD, "\033[6~", 0, 0},
++ { XK_Next, ControlMask|ShiftMask, "\033[86;6u", 0, 0},
++ { XK_Next, Mod1Mask, "\033[86;3u", 0, 0},
++ { XK_Next, Mod1Mask|ControlMask, "\033[86;7u", 0, 0},
++ { XK_Next, Mod1Mask|ControlMask|ShiftMask, "\033[86;8u", 0, 0},
++ { XK_Next, Mod1Mask|ShiftMask, "\033[86;4u", 0, 0},
++ { XK_Print, ControlMask, "\033[97;5u", 0, 0},
++ { XK_Print, ControlMask|ShiftMask, "\033[97;6u", 0, 0},
++ { XK_Print, Mod1Mask, "\033[97;3u", 0, 0},
++ { XK_Print, Mod1Mask|ControlMask, "\033[97;7u", 0, 0},
++ { XK_Print, Mod1Mask|ControlMask|ShiftMask, "\033[97;8u", 0, 0},
++ { XK_Print, Mod1Mask|ShiftMask, "\033[97;4u", 0, 0},
++ { XK_Print, ShiftMask, "\033[97;2u", 0, 0},
++ { XK_Insert, XK_NO_MOD, "\033[4h", -1, 0},
++ { XK_Insert, XK_NO_MOD, "\033[2~", +1, 0},
++ { XK_Insert, ControlMask|ShiftMask, "\033[99;6u", 0, 0},
++ { XK_Insert, Mod1Mask, "\033[99;3u", 0, 0},
++ { XK_Insert, Mod1Mask|ControlMask, "\033[99;7u", 0, 0},
++ { XK_Insert, Mod1Mask|ControlMask|ShiftMask, "\033[99;8u", 0, 0},
++ { XK_Insert, Mod1Mask|ShiftMask, "\033[99;4u", 0, 0},
++ { XK_Menu, ControlMask, "\033[103;5u", 0, 0},
++ { XK_Menu, ControlMask|ShiftMask, "\033[103;6u", 0, 0},
++ { XK_Menu, Mod1Mask, "\033[103;3u", 0, 0},
++ { XK_Menu, Mod1Mask|ControlMask, "\033[103;7u", 0, 0},
++ { XK_Menu, Mod1Mask|ControlMask|ShiftMask, "\033[103;8u", 0, 0},
++ { XK_Menu, Mod1Mask|ShiftMask, "\033[103;4u", 0, 0},
++ { XK_Menu, ShiftMask, "\033[103;2u", 0, 0},
++ { XK_Delete, XK_NO_MOD, "\033[P", -1, 0},
++ { XK_Delete, XK_NO_MOD, "\033[3~", +1, 0},
++ { XK_Delete, ControlMask|ShiftMask, "\033[255;6u", 0, 0},
++ { XK_Delete, Mod1Mask, "\033[255;3u", 0, 0},
++ { XK_Delete, Mod1Mask|ControlMask, "\033[255;7u", 0, 0},
++ { XK_Delete, Mod1Mask|ControlMask|ShiftMask, "\033[255;8u", 0, 0},
++ { XK_Delete, Mod1Mask|ShiftMask, "\033[255;4u", 0, 0},
++ { XK_i, ControlMask, "\033[105;5u", 0, 0},
++ { XK_i, Mod1Mask|ControlMask, "\033[105;7u", 0, 0},
++ { XK_m, ControlMask, "\033[109;5u", 0, 0},
++ { XK_m, Mod1Mask|ControlMask, "\033[109;7u", 0, 0},
++ { XK_space, ControlMask|ShiftMask, "\033[32;6u", 0, 0},
++ { XK_space, Mod1Mask, "\033[32;3u", 0, 0},
++ { XK_space, Mod1Mask|ControlMask, "\033[32;7u", 0, 0},
++ { XK_space, Mod1Mask|ControlMask|ShiftMask, "\033[32;8u", 0, 0},
++ { XK_space, Mod1Mask|ShiftMask, "\033[32;4u", 0, 0},
++ { XK_space, ShiftMask, "\033[32;2u", 0, 0},
++ { XK_0, ControlMask, "\033[48;5u", 0, 0},
++ { XK_A, ControlMask|ShiftMask, "\033[65;6u", 0, 0},
++ { XK_B, ControlMask|ShiftMask, "\033[66;6u", 0, 0},
++ { XK_C, ControlMask|ShiftMask, "\033[67;6u", 0, 0},
++ { XK_D, ControlMask|ShiftMask, "\033[68;6u", 0, 0},
++ { XK_E, ControlMask|ShiftMask, "\033[69;6u", 0, 0},
++ { XK_F, ControlMask|ShiftMask, "\033[70;6u", 0, 0},
++ { XK_G, ControlMask|ShiftMask, "\033[71;6u", 0, 0},
++ { XK_H, ControlMask|ShiftMask, "\033[72;6u", 0, 0},
++ { XK_I, ControlMask|ShiftMask, "\033[73;6u", 0, 0},
++ { XK_I, Mod1Mask|ControlMask|ShiftMask, "\033[73;8u", 0, 0},
++ { XK_J, ControlMask|ShiftMask, "\033[75;6u", 0, 0},
++ { XK_K, ControlMask|ShiftMask, "\033[74;6u", 0, 0},
++ { XK_L, ControlMask|ShiftMask, "\033[76;6u", 0, 0},
++ { XK_M, ControlMask|ShiftMask, "\033[77;6u", 0, 0},
++ { XK_M, Mod1Mask|ControlMask|ShiftMask, "\033[77;8u", 0, 0},
++ { XK_N, ControlMask|ShiftMask, "\033[78;6u", 0, 0},
++ { XK_O, ControlMask|ShiftMask, "\033[79;6u", 0, 0},
++ { XK_P, ControlMask|ShiftMask, "\033[80;6u", 0, 0},
++ { XK_Q, ControlMask|ShiftMask, "\033[81;6u", 0, 0},
++ { XK_R, ControlMask|ShiftMask, "\033[82;6u", 0, 0},
++ { XK_S, ControlMask|ShiftMask, "\033[83;6u", 0, 0},
++ { XK_T, ControlMask|ShiftMask, "\033[84;6u", 0, 0},
++ { XK_U, ControlMask|ShiftMask, "\033[85;6u", 0, 0},
++ { XK_V, ControlMask|ShiftMask, "\033[86;6u", 0, 0},
++ { XK_W, ControlMask|ShiftMask, "\033[87;6u", 0, 0},
++ { XK_X, ControlMask|ShiftMask, "\033[88;6u", 0, 0},
++ { XK_Y, ControlMask|ShiftMask, "\033[89;6u", 0, 0},
++ { XK_Z, ControlMask|ShiftMask, "\033[90;6u", 0, 0},
++ { XK_Z, ControlMask|ShiftMask, "\033[90;6u", 0, 0},
++ { XK_0, Mod1Mask|ControlMask, "\033[48;7u", 0, 0},
++ { XK_1, ControlMask, "\033[49;5u", 0, 0},
++ { XK_1, Mod1Mask|ControlMask, "\033[49;7u", 0, 0},
++ { XK_2, ControlMask, "\033[50;5u", 0, 0},
++ { XK_2, Mod1Mask|ControlMask, "\033[50;7u", 0, 0},
++ { XK_3, ControlMask, "\033[51;5u", 0, 0},
++ { XK_3, Mod1Mask|ControlMask, "\033[51;7u", 0, 0},
++ { XK_4, ControlMask, "\033[52;5u", 0, 0},
++ { XK_4, Mod1Mask|ControlMask, "\033[52;7u", 0, 0},
++ { XK_5, ControlMask, "\033[53;5u", 0, 0},
++ { XK_5, Mod1Mask|ControlMask, "\033[53;7u", 0, 0},
++ { XK_6, ControlMask, "\033[54;5u", 0, 0},
++ { XK_6, Mod1Mask|ControlMask, "\033[54;7u", 0, 0},
++ { XK_7, ControlMask, "\033[55;5u", 0, 0},
++ { XK_7, Mod1Mask|ControlMask, "\033[55;7u", 0, 0},
++ { XK_8, ControlMask, "\033[56;5u", 0, 0},
++ { XK_8, Mod1Mask|ControlMask, "\033[56;7u", 0, 0},
++ { XK_9, ControlMask, "\033[57;5u", 0, 0},
++ { XK_9, Mod1Mask|ControlMask, "\033[57;7u", 0, 0},
++ { XK_ampersand, ControlMask, "\033[38;5u", 0, 0},
++ { XK_ampersand, ControlMask|ShiftMask, "\033[38;6u", 0, 0},
++ { XK_ampersand, Mod1Mask, "\033[38;3u", 0, 0},
++ { XK_ampersand, Mod1Mask|ControlMask, "\033[38;7u", 0, 0},
++ { XK_ampersand, Mod1Mask|ControlMask|ShiftMask, "\033[38;8u", 0, 0},
++ { XK_ampersand, Mod1Mask|ShiftMask, "\033[38;4u", 0, 0},
++ { XK_apostrophe, ControlMask, "\033[39;5u", 0, 0},
++ { XK_apostrophe, ControlMask|ShiftMask, "\033[39;6u", 0, 0},
++ { XK_apostrophe, Mod1Mask, "\033[39;3u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ControlMask, "\033[39;7u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ControlMask|ShiftMask, "\033[39;8u", 0, 0},
++ { XK_apostrophe, Mod1Mask|ShiftMask, "\033[39;4u", 0, 0},
++ { XK_asciicircum, ControlMask, "\033[94;5u", 0, 0},
++ { XK_asciicircum, ControlMask|ShiftMask, "\033[94;6u", 0, 0},
++ { XK_asciicircum, Mod1Mask, "\033[94;3u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ControlMask, "\033[94;7u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ControlMask|ShiftMask, "\033[94;8u", 0, 0},
++ { XK_asciicircum, Mod1Mask|ShiftMask, "\033[94;4u", 0, 0},
++ { XK_asciitilde, ControlMask, "\033[126;5u", 0, 0},
++ { XK_asciitilde, ControlMask|ShiftMask, "\033[126;6u", 0, 0},
++ { XK_asciitilde, Mod1Mask, "\033[126;3u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ControlMask, "\033[126;7u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ControlMask|ShiftMask, "\033[126;8u", 0, 0},
++ { XK_asciitilde, Mod1Mask|ShiftMask, "\033[126;4u", 0, 0},
++ { XK_asterisk, ControlMask, "\033[42;5u", 0, 0},
++ { XK_asterisk, ControlMask|ShiftMask, "\033[42;6u", 0, 0},
++ { XK_asterisk, Mod1Mask, "\033[42;3u", 0, 0},
++ { XK_asterisk, Mod1Mask|ControlMask, "\033[42;7u", 0, 0},
++ { XK_asterisk, Mod1Mask|ControlMask|ShiftMask, "\033[42;8u", 0, 0},
++ { XK_asterisk, Mod1Mask|ShiftMask, "\033[42;4u", 0, 0},
++ { XK_at, ControlMask, "\033[64;5u", 0, 0},
++ { XK_at, ControlMask|ShiftMask, "\033[64;6u", 0, 0},
++ { XK_at, Mod1Mask, "\033[64;3u", 0, 0},
++ { XK_at, Mod1Mask|ControlMask, "\033[64;7u", 0, 0},
++ { XK_at, Mod1Mask|ControlMask|ShiftMask, "\033[64;8u", 0, 0},
++ { XK_at, Mod1Mask|ShiftMask, "\033[64;4u", 0, 0},
++ { XK_backslash, ControlMask, "\033[92;5u", 0, 0},
++ { XK_backslash, ControlMask|ShiftMask, "\033[92;6u", 0, 0},
++ { XK_backslash, Mod1Mask, "\033[92;3u", 0, 0},
++ { XK_backslash, Mod1Mask|ControlMask, "\033[92;7u", 0, 0},
++ { XK_backslash, Mod1Mask|ControlMask|ShiftMask, "\033[92;8u", 0, 0},
++ { XK_backslash, Mod1Mask|ShiftMask, "\033[92;4u", 0, 0},
++ { XK_bar, ControlMask, "\033[124;5u", 0, 0},
++ { XK_bar, ControlMask|ShiftMask, "\033[124;6u", 0, 0},
++ { XK_bar, Mod1Mask, "\033[124;3u", 0, 0},
++ { XK_bar, Mod1Mask|ControlMask, "\033[124;7u", 0, 0},
++ { XK_bar, Mod1Mask|ControlMask|ShiftMask, "\033[124;8u", 0, 0},
++ { XK_bar, Mod1Mask|ShiftMask, "\033[124;4u", 0, 0},
++ { XK_braceleft, ControlMask, "\033[123;5u", 0, 0},
++ { XK_braceleft, ControlMask|ShiftMask, "\033[123;6u", 0, 0},
++ { XK_braceleft, Mod1Mask, "\033[123;3u", 0, 0},
++ { XK_braceleft, Mod1Mask|ControlMask, "\033[123;7u", 0, 0},
++ { XK_braceleft, Mod1Mask|ControlMask|ShiftMask, "\033[123;8u", 0, 0},
++ { XK_braceleft, Mod1Mask|ShiftMask, "\033[123;4u", 0, 0},
++ { XK_braceright, ControlMask, "\033[125;5u", 0, 0},
++ { XK_braceright, ControlMask|ShiftMask, "\033[125;6u", 0, 0},
++ { XK_braceright, Mod1Mask, "\033[125;3u", 0, 0},
++ { XK_braceright, Mod1Mask|ControlMask, "\033[125;7u", 0, 0},
++ { XK_braceright, Mod1Mask|ControlMask|ShiftMask, "\033[125;8u", 0, 0},
++ { XK_braceright, Mod1Mask|ShiftMask, "\033[125;4u", 0, 0},
++ { XK_bracketleft, ControlMask, "\033[91;5u", 0, 0},
++ { XK_bracketleft, ControlMask|ShiftMask, "\033[91;6u", 0, 0},
++ { XK_bracketleft, Mod1Mask, "\033[91;3u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ControlMask, "\033[91;7u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ControlMask|ShiftMask, "\033[91;8u", 0, 0},
++ { XK_bracketleft, Mod1Mask|ShiftMask, "\033[91;4u", 0, 0},
++ { XK_bracketright, ControlMask, "\033[93;5u", 0, 0},
++ { XK_bracketright, ControlMask|ShiftMask, "\033[93;6u", 0, 0},
++ { XK_bracketright, Mod1Mask, "\033[93;3u", 0, 0},
++ { XK_bracketright, Mod1Mask|ControlMask, "\033[93;7u", 0, 0},
++ { XK_bracketright, Mod1Mask|ControlMask|ShiftMask, "\033[93;8u", 0, 0},
++ { XK_bracketright, Mod1Mask|ShiftMask, "\033[93;4u", 0, 0},
++ { XK_colon, ControlMask, "\033[58;5u", 0, 0},
++ { XK_colon, ControlMask|ShiftMask, "\033[58;6u", 0, 0},
++ { XK_colon, Mod1Mask, "\033[58;3u", 0, 0},
++ { XK_colon, Mod1Mask|ControlMask, "\033[58;7u", 0, 0},
++ { XK_colon, Mod1Mask|ControlMask|ShiftMask, "\033[58;8u", 0, 0},
++ { XK_colon, Mod1Mask|ShiftMask, "\033[58;4u", 0, 0},
++ { XK_comma, ControlMask, "\033[44;5u", 0, 0},
++ { XK_comma, ControlMask|ShiftMask, "\033[44;6u", 0, 0},
++ { XK_comma, Mod1Mask, "\033[44;3u", 0, 0},
++ { XK_comma, Mod1Mask|ControlMask, "\033[44;7u", 0, 0},
++ { XK_comma, Mod1Mask|ControlMask|ShiftMask, "\033[44;8u", 0, 0},
++ { XK_comma, Mod1Mask|ShiftMask, "\033[44;4u", 0, 0},
++ { XK_dollar, ControlMask, "\033[36;5u", 0, 0},
++ { XK_dollar, ControlMask|ShiftMask, "\033[36;6u", 0, 0},
++ { XK_dollar, Mod1Mask, "\033[36;3u", 0, 0},
++ { XK_dollar, Mod1Mask|ControlMask, "\033[36;7u", 0, 0},
++ { XK_dollar, Mod1Mask|ControlMask|ShiftMask, "\033[36;8u", 0, 0},
++ { XK_dollar, Mod1Mask|ShiftMask, "\033[36;4u", 0, 0},
++ { XK_equal, ControlMask, "\033[61;5u", 0, 0},
++ { XK_equal, ControlMask|ShiftMask, "\033[61;6u", 0, 0},
++ { XK_equal, Mod1Mask, "\033[61;3u", 0, 0},
++ { XK_equal, Mod1Mask|ControlMask, "\033[61;7u", 0, 0},
++ { XK_equal, Mod1Mask|ControlMask|ShiftMask, "\033[61;8u", 0, 0},
++ { XK_equal, Mod1Mask|ShiftMask, "\033[61;4u", 0, 0},
++ { XK_exclam, ControlMask, "\033[33;5u", 0, 0},
++ { XK_exclam, ControlMask|ShiftMask, "\033[33;6u", 0, 0},
++ { XK_exclam, Mod1Mask, "\033[33;3u", 0, 0},
++ { XK_exclam, Mod1Mask|ControlMask, "\033[33;7u", 0, 0},
++ { XK_exclam, Mod1Mask|ControlMask|ShiftMask, "\033[33;8u", 0, 0},
++ { XK_exclam, Mod1Mask|ShiftMask, "\033[33;4u", 0, 0},
++ { XK_grave, ControlMask, "\033[96;5u", 0, 0},
++ { XK_grave, ControlMask|ShiftMask, "\033[96;6u", 0, 0},
++ { XK_grave, Mod1Mask, "\033[96;3u", 0, 0},
++ { XK_grave, Mod1Mask|ControlMask, "\033[96;7u", 0, 0},
++ { XK_grave, Mod1Mask|ControlMask|ShiftMask, "\033[96;8u", 0, 0},
++ { XK_grave, Mod1Mask|ShiftMask, "\033[96;4u", 0, 0},
++ { XK_greater, ControlMask, "\033[62;5u", 0, 0},
++ { XK_greater, ControlMask|ShiftMask, "\033[62;6u", 0, 0},
++ { XK_greater, Mod1Mask, "\033[62;3u", 0, 0},
++ { XK_greater, Mod1Mask|ControlMask, "\033[62;7u", 0, 0},
++ { XK_greater, Mod1Mask|ControlMask|ShiftMask, "\033[62;8u", 0, 0},
++ { XK_greater, Mod1Mask|ShiftMask, "\033[62;4u", 0, 0},
++ { XK_less, ControlMask, "\033[60;5u", 0, 0},
++ { XK_less, ControlMask|ShiftMask, "\033[60;6u", 0, 0},
++ { XK_less, Mod1Mask, "\033[60;3u", 0, 0},
++ { XK_less, Mod1Mask|ControlMask, "\033[60;7u", 0, 0},
++ { XK_less, Mod1Mask|ControlMask|ShiftMask, "\033[60;8u", 0, 0},
++ { XK_less, Mod1Mask|ShiftMask, "\033[60;4u", 0, 0},
++ { XK_minus, ControlMask, "\033[45;5u", 0, 0},
++ { XK_minus, ControlMask|ShiftMask, "\033[45;6u", 0, 0},
++ { XK_minus, Mod1Mask, "\033[45;3u", 0, 0},
++ { XK_minus, Mod1Mask|ControlMask, "\033[45;7u", 0, 0},
++ { XK_minus, Mod1Mask|ControlMask|ShiftMask, "\033[45;8u", 0, 0},
++ { XK_minus, Mod1Mask|ShiftMask, "\033[45;4u", 0, 0},
++ { XK_numbersign, ControlMask, "\033[35;5u", 0, 0},
++ { XK_numbersign, ControlMask|ShiftMask, "\033[35;6u", 0, 0},
++ { XK_numbersign, Mod1Mask, "\033[35;3u", 0, 0},
++ { XK_numbersign, Mod1Mask|ControlMask, "\033[35;7u", 0, 0},
++ { XK_numbersign, Mod1Mask|ControlMask|ShiftMask, "\033[35;8u", 0, 0},
++ { XK_numbersign, Mod1Mask|ShiftMask, "\033[35;4u", 0, 0},
++ { XK_parenleft, ControlMask, "\033[40;5u", 0, 0},
++ { XK_parenleft, ControlMask|ShiftMask, "\033[40;6u", 0, 0},
++ { XK_parenleft, Mod1Mask, "\033[40;3u", 0, 0},
++ { XK_parenleft, Mod1Mask|ControlMask, "\033[40;7u", 0, 0},
++ { XK_parenleft, Mod1Mask|ControlMask|ShiftMask, "\033[40;8u", 0, 0},
++ { XK_parenleft, Mod1Mask|ShiftMask, "\033[40;4u", 0, 0},
++ { XK_parenright, ControlMask, "\033[41;5u", 0, 0},
++ { XK_parenright, ControlMask|ShiftMask, "\033[41;6u", 0, 0},
++ { XK_parenright, Mod1Mask, "\033[41;3u", 0, 0},
++ { XK_parenright, Mod1Mask|ControlMask, "\033[41;7u", 0, 0},
++ { XK_parenright, Mod1Mask|ControlMask|ShiftMask, "\033[41;8u", 0, 0},
++ { XK_parenright, Mod1Mask|ShiftMask, "\033[41;4u", 0, 0},
++ { XK_percent, ControlMask, "\033[37;5u", 0, 0},
++ { XK_percent, ControlMask|ShiftMask, "\033[37;6u", 0, 0},
++ { XK_percent, Mod1Mask, "\033[37;3u", 0, 0},
++ { XK_percent, Mod1Mask|ControlMask, "\033[37;7u", 0, 0},
++ { XK_percent, Mod1Mask|ControlMask|ShiftMask, "\033[37;8u", 0, 0},
++ { XK_percent, Mod1Mask|ShiftMask, "\033[37;4u", 0, 0},
++ { XK_period, ControlMask, "\033[46;5u", 0, 0},
++ { XK_period, ControlMask|ShiftMask, "\033[46;6u", 0, 0},
++ { XK_period, Mod1Mask|ControlMask, "\033[46;7u", 0, 0},
++ { XK_period, Mod1Mask|ControlMask|ShiftMask, "\033[46;8u", 0, 0},
++ { XK_period, Mod1Mask|ShiftMask, "\033[46;4u", 0, 0},
++ { XK_plus, ControlMask, "\033[43;5u", 0, 0},
++ { XK_plus, ControlMask|ShiftMask, "\033[43;6u", 0, 0},
++ { XK_plus, Mod1Mask, "\033[43;3u", 0, 0},
++ { XK_plus, Mod1Mask|ControlMask, "\033[43;7u", 0, 0},
++ { XK_plus, Mod1Mask|ControlMask|ShiftMask, "\033[43;8u", 0, 0},
++ { XK_plus, Mod1Mask|ShiftMask, "\033[43;4u", 0, 0},
++ { XK_question, ControlMask, "\033[63;5u", 0, 0},
++ { XK_question, ControlMask|ShiftMask, "\033[63;6u", 0, 0},
++ { XK_question, Mod1Mask, "\033[63;3u", 0, 0},
++ { XK_question, Mod1Mask|ControlMask, "\033[63;7u", 0, 0},
++ { XK_question, Mod1Mask|ControlMask|ShiftMask, "\033[63;8u", 0, 0},
++ { XK_question, Mod1Mask|ShiftMask, "\033[63;4u", 0, 0},
++ { XK_quotedbl, ControlMask, "\033[34;5u", 0, 0},
++ { XK_quotedbl, ControlMask|ShiftMask, "\033[34;6u", 0, 0},
++ { XK_quotedbl, Mod1Mask, "\033[34;3u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ControlMask, "\033[34;7u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ControlMask|ShiftMask, "\033[34;8u", 0, 0},
++ { XK_quotedbl, Mod1Mask|ShiftMask, "\033[34;4u", 0, 0},
++ { XK_semicolon, ControlMask, "\033[59;5u", 0, 0},
++ { XK_semicolon, ControlMask|ShiftMask, "\033[59;6u", 0, 0},
++ { XK_semicolon, Mod1Mask, "\033[59;3u", 0, 0},
++ { XK_semicolon, Mod1Mask|ControlMask, "\033[59;7u", 0, 0},
++ { XK_semicolon, Mod1Mask|ControlMask|ShiftMask, "\033[59;8u", 0, 0},
++ { XK_semicolon, Mod1Mask|ShiftMask, "\033[59;4u", 0, 0},
++ { XK_slash, ControlMask|ShiftMask, "\033[47;6u", 0, 0},
++ { XK_slash, Mod1Mask, "\033[47;3u", 0, 0},
++ { XK_slash, Mod1Mask|ControlMask, "\033[47;7u", 0, 0},
++ { XK_slash, Mod1Mask|ControlMask|ShiftMask, "\033[47;8u", 0, 0},
++ { XK_slash, Mod1Mask|ShiftMask, "\033[47;4u", 0, 0},
++ { XK_underscore, ControlMask, "\033[95;5u", 0, 0},
++ { XK_underscore, ControlMask|ShiftMask, "\033[95;6u", 0, 0},
++ { XK_underscore, Mod1Mask, "\033[95;3u", 0, 0},
++ { XK_underscore, Mod1Mask|ControlMask, "\033[95;7u", 0, 0},
++ { XK_underscore, Mod1Mask|ControlMask|ShiftMask, "\033[95;8u", 0, 0},
++ { XK_underscore, Mod1Mask|ShiftMask, "\033[95;4u", 0, 0},
+ };
+
+ /*
+--
+2.21.0
+
diff --git a/patches/x11-terms/st-0.8.2/0005-apply-st-gruvbox-both-0.8.1.diff.patch b/patches/x11-terms/st-0.8.2/0005-apply-st-gruvbox-both-0.8.1.diff.patch
@@ -0,0 +1,214 @@
+From a5f5407bbcaa7d232af0e43bcacaac39d9b871ea Mon Sep 17 00:00:00 2001
+From: "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>
+Date: Tue, 23 Oct 2018 02:39:08 +0200
+Subject: [PATCH 5/5] apply st-gruvbox-both-0.8.1.diff
+
+---
+ config.def.h | 68 +++++++++++++++++++++++++++++++++-------------------
+ st.h | 1 +
+ x.c | 28 +++++++++++++++++-----
+ 3 files changed, 66 insertions(+), 31 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 78ebbc5..5f9a078 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -84,31 +84,48 @@ unsigned int tabspaces = 8;
+
+ /* Terminal colors (16 first used in escape sequence) */
+ static const char *colorname[] = {
+- /* 8 normal colors */
+- "black",
+- "red3",
+- "green3",
+- "yellow3",
+- "blue2",
+- "magenta3",
+- "cyan3",
+- "gray90",
+-
+- /* 8 bright colors */
+- "gray50",
+- "red",
+- "green",
+- "yellow",
+- "#5c5cff",
+- "magenta",
+- "cyan",
+- "white",
++ /* gruvbox dark */
++ "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f / normal: #282828 */
++ "#cc241d",
++ "#98971a",
++ "#d79921",
++ "#458588",
++ "#b16286",
++ "#689d6a",
++ "#a89984",
++ "#928374",
++ "#fb4934",
++ "#b8bb26",
++ "#fabd2f",
++ "#83a598",
++ "#d3869b",
++ "#8ec07c",
++ "#ebdbb2",
+
+ [255] = 0,
++};
+
+- /* more colors can be added after 255 to use with DefaultXX */
+- "#cccccc",
+- "#555555",
++/* Terminal colors for alternate (light) palette */
++static const char *altcolorname[] = {
++ /* gruvbox light */
++ "#fbf1c7", /* hard contrast: #f9f5d7 / soft contrast: #f2e5bc / normal: #fbf1c7 */
++ "#cc241d",
++ "#98971a",
++ "#d79921",
++ "#458588",
++ "#b16286",
++ "#689d6a",
++ "#7c6f64",
++ "#928374",
++ "#9d0006",
++ "#79740e",
++ "#b57614",
++ "#076678",
++ "#8f3f71",
++ "#427b58",
++ "#3c3836",
++
++ [255] = 0,
+ };
+
+
+@@ -116,10 +133,10 @@ static const char *colorname[] = {
+ * Default colors (colorname index)
+ * foreground, background, cursor, reverse cursor
+ */
+-unsigned int defaultfg = 7;
++unsigned int defaultfg = 15;
+ unsigned int defaultbg = 0;
+-static unsigned int defaultcs = 256;
+-static unsigned int defaultrcs = 257;
++static unsigned int defaultcs = 15;
++static unsigned int defaultrcs = 0;
+
+ /*
+ * Default shape of cursor
+@@ -178,6 +195,7 @@ static Shortcut shortcuts[] = {
+ { TERMMOD, XK_Y, selpaste, {.i = 0} },
+ { ShiftMask, XK_Insert, selpaste, {.i = 0} },
+ { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
++ { TERMMOD, XK_F6, swapcolors, {.i = 0} },
+ };
+
+ /*
+diff --git a/st.h b/st.h
+index 38c61c4..941b5f8 100644
+--- a/st.h
++++ b/st.h
+@@ -117,6 +117,7 @@ extern char *vtiden;
+ extern char *worddelimiters;
+ extern int allowaltscreen;
+ extern char *termname;
++extern int usealtcolors;
+ extern unsigned int tabspaces;
+ extern unsigned int defaultfg;
+ extern unsigned int defaultbg;
+diff --git a/x.c b/x.c
+index 2cd76d0..5a54960 100644
+--- a/x.c
++++ b/x.c
+@@ -53,6 +53,7 @@ static void clipcopy(const Arg *);
+ static void clippaste(const Arg *);
+ static void numlock(const Arg *);
+ static void selpaste(const Arg *);
++static void swapcolors(const Arg *);
+ static void zoom(const Arg *);
+ static void zoomabs(const Arg *);
+ static void zoomreset(const Arg *);
+@@ -244,6 +245,8 @@ static char *opt_title = NULL;
+
+ static int oldbutton = 3; /* button event on startup: 3 = release */
+
++int usealtcolors = 0; /* 1 to use alternate palette */
++
+ void
+ clipcopy(const Arg *dummy)
+ {
+@@ -282,6 +285,14 @@ numlock(const Arg *dummy)
+ win.mode ^= MODE_NUMLOCK;
+ }
+
++void
++swapcolors(const Arg *dummy)
++{
++ usealtcolors = !usealtcolors;
++ xloadcols();
++ redraw();
++}
++
+ void
+ zoom(const Arg *arg)
+ {
+@@ -706,6 +717,11 @@ sixd_to_16bit(int x)
+ return x == 0 ? 0 : 0x3737 + 0x2828 * x;
+ }
+
++const char* getcolorname(int i)
++{
++ return (usealtcolors) ? altcolorname[i] : colorname[i];
++}
++
+ int
+ xloadcolor(int i, const char *name, Color *ncolor)
+ {
+@@ -724,7 +740,7 @@ xloadcolor(int i, const char *name, Color *ncolor)
+ return XftColorAllocValue(xw.dpy, xw.vis,
+ xw.cmap, &color, ncolor);
+ } else
+- name = colorname[i];
++ name = getcolorname(i);
+ }
+
+ return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor);
+@@ -741,14 +757,14 @@ xloadcols(void)
+ for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp)
+ XftColorFree(xw.dpy, xw.vis, xw.cmap, cp);
+ } else {
+- dc.collen = MAX(LEN(colorname), 256);
++ dc.collen = MAX(LEN(colorname), LEN(altcolorname));
+ dc.col = xmalloc(dc.collen * sizeof(Color));
+ }
+
+ for (i = 0; i < dc.collen; i++)
+ if (!xloadcolor(i, NULL, &dc.col[i])) {
+- if (colorname[i])
+- die("could not allocate color '%s'\n", colorname[i]);
++ if (getcolorname(i))
++ die("could not allocate color '%s'\n", getcolorname(i));
+ else
+ die("could not allocate color %d\n", i);
+ }
+@@ -1108,13 +1124,13 @@ xinit(int cols, int rows)
+ cursor = XCreateFontCursor(xw.dpy, mouseshape);
+ XDefineCursor(xw.dpy, xw.win, cursor);
+
+- if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) {
++ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousefg), &xmousefg) == 0) {
+ xmousefg.red = 0xffff;
+ xmousefg.green = 0xffff;
+ xmousefg.blue = 0xffff;
+ }
+
+- if (XParseColor(xw.dpy, xw.cmap, colorname[mousebg], &xmousebg) == 0) {
++ if (XParseColor(xw.dpy, xw.cmap, getcolorname(mousebg), &xmousebg) == 0) {
+ xmousebg.red = 0x0000;
+ xmousebg.green = 0x0000;
+ xmousebg.blue = 0x0000;
+--
+2.21.0
+
diff --git a/postsync.d/100-sync_system_flags b/postsync.d/100-sync_system_flags
@@ -0,0 +1,8 @@
+#!/bin/bash
+system_use_flags() {
+ echo -n 'USE="$USE'
+ sed -r 's;^.*/.*:(system-.*) - .+$; \1;' /var/db/repos/*/profiles/use.local.desc | grep '^ system-' | sort -u | tr -d '\n'
+ echo '"'
+}
+
+system_use_flags > /etc/portage/system-use-flags.txt
diff --git a/postsync.d/9998-eix b/postsync.d/9998-eix
@@ -0,0 +1,8 @@
+#!/bin/sh
+if [[ -e /var/cache/eix/portage.eix ]]; then
+ cp -a /var/cache/eix/portage.eix /var/cache/eix/previous.eix;
+fi
+eix-update
+if [[ -e /var/cache/eix/previous.eix ]]; then
+ eix-diff;
+fi
diff --git a/postsync.d/9999-eix-remote b/postsync.d/9999-eix-remote
@@ -0,0 +1,2 @@
+#!/bin/sh
+eix-remote update
diff --git a/repo.postsync.d/000-sync_gentoo_cache b/repo.postsync.d/000-sync_gentoo_cache
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+repository_name="${1}"
+repository_path="${3}"
+
+[[ "${repository_name}" == "gentoo" ]] || exit 0
+
+source /lib/gentoo/functions.sh
+
+# Number of jobs for egencache, default is number or processors.
+parallel_jobs="$(nproc)"
+
+if [[ -f ${repository_path}/metadata/timestamp.x ]]; then
+ portage_current_timestamp=$(cut -f 1 -d " " "${repository_path}/metadata/timestamp.x" )
+else
+ portage_current_timestamp=0
+fi
+
+ebegin "Fetching metadata timestamp for ${repository_name}"
+rsync -aq rsync://rsync.gentoo.org/gentoo-portage/metadata/timestamp.x "${repository_path}"/metadata/timestamp.x
+eend $?
+portage_new_timestamp=$(cut -f 1 -d " " "${repository_path}/metadata/timestamp.x" )
+
+if [[ ${portage_current_timestamp} -lt ${portage_new_timestamp} ]]; then
+ ebegin "Fetching pre-generated metadata cache for ${repository_name}"
+ rsync -aq rsync://rsync.gentoo.org/gentoo-portage/metadata/md5-cache/ "${repository_path}"/metadata/md5-cache/
+ eend $?
+else
+ einfo "Metadata cache for ${repository_name} already recent, no need to fetch it :-)"
+fi
+
+ebegin "Updating metadata cache for ${repository_name}"
+egencache --jobs="${parallel_jobs}" --repo="${repository_name}" --update --update-use-local-desc
+eend $?
diff --git a/repo.postsync.d/000-sync_gentoo_dtd b/repo.postsync.d/000-sync_gentoo_dtd
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+repository_name="${1}"
+repository_path="${3}"
+
+[[ ${repository_name} == "gentoo" ]] || exit 0
+
+source /lib/gentoo/functions.sh
+
+DTDDIR="${repository_path}"/metadata/dtd
+ebegin "Updating DTDs"
+if [[ -e ${DTDDIR} ]]; then
+ git -C "${DTDDIR}" pull -q --ff-only
+else
+ git clone -q https://anongit.gentoo.org/git/data/dtd.git "${DTDDIR}"
+fi
+eend "$?"
diff --git a/repo.postsync.d/000-sync_gentoo_glsa b/repo.postsync.d/000-sync_gentoo_glsa
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+repository_name="${1}"
+repository_path="${3}"
+
+[[ ${repository_name} == "gentoo" ]] || exit 0
+
+source /lib/gentoo/functions.sh
+
+GLSADIR="${repository_path}"/metadata/glsa
+ebegin "Updating GLSAs"
+if [[ -e ${GLSADIR} ]]; then
+ git -C "${GLSADIR}" pull -q --ff-only
+else
+ git clone -q https://anongit.gentoo.org/git/data/glsa.git "${GLSADIR}"
+fi
+eend "$?"
diff --git a/repo.postsync.d/000-sync_gentoo_news b/repo.postsync.d/000-sync_gentoo_news
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+repository_name="${1}"
+repository_path="${3}"
+
+[[ ${repository_name} == "gentoo" ]] || exit 0
+
+source /lib/gentoo/functions.sh
+
+NEWSDIR="${repository_path}"/metadata/news
+ebegin "Updating news items"
+if [[ -e ${NEWSDIR} ]]; then
+ git -C "${NEWSDIR}" pull -q --ff-only
+else
+ git clone -q https://anongit.gentoo.org/git/data/gentoo-news.git "${NEWSDIR}"
+fi
+eend $? "Try to remove ${NEWSDIR}"
diff --git a/repo.postsync.d/000-sync_gentoo_projects_xml b/repo.postsync.d/000-sync_gentoo_projects_xml
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+repository_name="${1}"
+repository_path="${3}"
+
+[[ ${repository_name} == "gentoo" ]] || exit 0
+
+source /lib/gentoo/functions.sh
+
+ebegin "Updating projects.xml"
+wget -q -P "${repository_path}"/metadata/ -N https://api.gentoo.org/metastructure/projects.xml
+eend $?
diff --git a/repo.postsync.d/000-sync_overlay_cache b/repo.postsync.d/000-sync_overlay_cache
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+repository_name="${1}"
+#sync_uri="${2}"
+repository_path="${3}"
+
+[[ -z ${repository_name} ]] && exit 0
+[[ ${repository_name} == "gentoo" ]] && exit 0
+
+source /lib/gentoo/functions.sh
+
+update_metadata() {
+ ebegin "Updating metadata cache for ${repository_name}"
+ egencache --jobs="${parallel_jobs}" --repo="${repository_name}" --update --update-use-local-desc --tolerant
+ eend $?
+}
+
+# Number of jobs for egencache, default is number or processors.
+parallel_jobs="$(nproc)"
+
+pushd "${repository_path}" >/dev/null
+if git status -s metadata/md5-cache | grep -E '^(\?\?|!!)' >/dev/null; then
+ update_metadata
+elif [ ! -e ./metadata/md5-cache ]; then
+ update_metadata
+else
+ einfo "Metadata cache is into git, not updating it ourselves"
+fi
+popd >/dev/null
diff --git a/repo.postsync.d/example b/repo.postsync.d/example
@@ -0,0 +1,51 @@
+#!/bin/sh
+# Example /etc/portage/repo.postsync.d script. Make it executable (chmod +x) for
+# Portage to process it.
+#
+# With portage-2.2.16 and newer, all repo.postsync.d hooks will be called multiple
+# times after syncing each repository.
+#
+# Older versions of Portage support syncing only one repository.
+# In those versions, the postsync.d hooks will be called only once,
+# and they will not be passed any parameters.
+
+# On a repo.postsync.d hook call, positional parameters contain
+# information about the just-synced repository.
+
+# Your hook can control it's actions depending on any of the three
+# parameters passed in to it.
+#
+# They are as follows:
+#
+# The repository name.
+repository_name=${1}
+# The URI to which the repository was synced.
+sync_uri=${2}
+# The path to the repository.
+repository_path=${3}
+
+# Portage assumes that a hook succeeded if it exits with 0 code. If no
+# explicit exit is done, the exit code is the exit code of last spawned
+# command. Since our script is a bit more complex, we want to control
+# the exit code explicitly.
+ret=0
+
+if [ -n "${repository_name}" ]; then
+ # Repository name was provided, so we're in a post-repository hook.
+ echo "* In post-repository hook for ${repository_name}"
+ echo "** synced from remote repository ${sync_uri}"
+ echo "** synced into ${repository_path}"
+
+ # Gentoo comes with pregenerated cache but the other repositories
+ # usually don't. Generate them to improve performance.
+ if [ "${repository_name}" != "gentoo" ]; then
+ if ! egencache --update --repo="${repository_name}" --jobs=4
+ then
+ echo "!!! egencache failed!"
+ ret=1
+ fi
+ fi
+fi
+
+# Return explicit status.
+exit "${ret}"
diff --git a/repos.conf/crossdev b/repos.conf/crossdev
@@ -0,0 +1,5 @@
+[crossdev]
+location = /usr/local/portage-crossdev
+priority = 10
+masters = gentoo
+auto-sync = no
diff --git a/repos.conf/eselect-repo.conf~ b/repos.conf/eselect-repo.conf~
@@ -0,0 +1,136 @@
+[poly-c]
+location = /var/db/repos/poly-c
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/poly-c.git
+auto-sync = Yes
+
+[4nykey]
+location = /var/db/repos/4nykey
+sync-type = git
+sync-uri = https://github.com/4nykey/4nykey.git
+auto-sync = Yes
+
+[audio-overlay]
+location = /var/db/repos/audio-overlay
+sync-type = git
+sync-uri = https://github.com/gentoo-audio/audio-overlay.git
+auto-sync = Yes
+
+[booboo]
+location = /var/db/repos/booboo
+sync-type = git
+sync-uri = https://github.com/l29ah/booboo.git
+auto-sync = Yes
+
+[chaoslab]
+location = /var/db/repos/chaoslab
+sync-type = git
+sync-uri = https://gitlab.com/chaoslab/chaoslab-overlay.git
+auto-sync = Yes
+
+[go-overlay]
+location = /var/db/repos/go-overlay
+sync-type = git
+sync-uri = https://github.com/Dr-Terrible/go-overlay.git
+auto-sync = Yes
+
+[haskell]
+priority = 50
+location = /var/db/repos/haskell
+sync-type = git
+sync-uri = https://github.com/gentoo-haskell/gentoo-haskell.git
+auto-sync = Yes
+
+[java]
+priority = 50
+location = /var/db/repos/java
+sync-type = git
+sync-uri = git://anongit.gentoo.org/proj/java.git
+auto-sync = Yes
+
+[jorgicio]
+location = /var/db/repos/jorgicio
+sync-type = git
+sync-uri = https://github.com/jorgicio/jorgicio-gentoo.git
+auto-sync = Yes
+
+[lanodanOverlay]
+priority = 200
+location = /var/db/repos/lanodanOverlay
+sync-type = git
+sync-uri = https://gitlab.com/lanodan/overlay.git
+auto-sync = Yes
+
+[laurentb]
+priority = -10
+location = /var/db/repos/laurentb
+sync-type = git
+sync-uri = git://github.com/laurentb/gentoo-overlay.git
+auto-sync = Yes
+
+[libressl]
+priority = 100
+location = /var/db/repos/libressl
+sync-type = git
+sync-uri = https://anongit.gentoo.org/git/repo/proj/libressl.git
+auto-sync = Yes
+
+[pentoo]
+location = /var/db/repos/pentoo
+sync-type = git
+sync-uri = git://github.com/pentoo/pentoo-overlay.git
+auto-sync = Yes
+
+[dotnet]
+location = /var/db/repos/dotnet
+sync-type = git
+sync-uri = https://github.com/gentoo/dotnet.git
+auto-sync = Yes
+
+[ArtSoftware]
+location = /var/db/repos/ArtSoftware
+sync-type = git
+sync-uri = http://git.art-software.fr/ArtSoftware/portageLocalRepo.git
+auto-sync = Yes
+
+[guru]
+priority = 50
+location = /var/db/repos/guru
+sync-type = git
+sync-uri = https://anongit.gentoo.org/git/repo/proj/guru.git
+auto-sync = Yes
+
+[steam-overlay]
+location = /var/db/repos/steam-overlay
+sync-type = git
+sync-uri = https://github.com/anyc/steam-overlay.git
+
+[lua]
+location = /var/db/repos/lua
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/lua.git
+
+[gamarouns]
+location = /var/db/repos/gamarouns
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/gamarouns.git
+
+[khoverlay]
+location = /var/db/repos/khoverlay
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/khoverlay.git
+
+[flussence]
+location = /var/db/repos/flussence
+sync-type = git
+sync-uri = https://repo.or.cz/flussence-overlay.git
+
+[vapoursynth]
+location = /var/db/repos/vapoursynth
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/vapoursynth.git
+
+[tastytea]
+location = /var/db/repos/tastytea
+sync-type = git
+sync-uri = https://github.com/gentoo-mirror/tastytea.git
diff --git a/repos.conf/gentoo.conf b/repos.conf/gentoo.conf
@@ -0,0 +1,13 @@
+[DEFAULT]
+main-repo = gentoo
+sync-depth = 1
+priority = 0
+
+[gentoo]
+sync-type = git
+sync-uri = https://anongit.gentoo.org/git/repo/gentoo.git
+sync-depth = 1
+auto-sync = yes
+priority = 100
+#sync-git-pull-extra-opts = --rebase --autostash
+location = /var/db/repos/gentoo
diff --git a/savedconfig/gui-wm/inaban-9999 b/savedconfig/gui-wm/inaban-9999
@@ -0,0 +1,21 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+static const char *menucmd[] = {"bemenu-run", NULL};
+static const char *termcmd[] = {"cage", "-d", "st", NULL};
+
+// See `enum wlr_keyboard_modifier` in `<wlr/types/wlr_keyboard.h>`
+#define MODKEY WLR_MODIFIER_ALT
+// clang-format off
+static Shortcut shortcuts[] = {
+ /* modifier, keysym, function, argument */
+ {MODKEY, XKB_KEY_p, spawn, {.v = menucmd}},
+ {MODKEY | ShiftMask, XKB_KEY_Return, spawn, {.v = termcmd}},
+ {MODKEY | ShiftMask, XKB_KEY_q, quit, {0}},
+ { 0, XKB_KEY_XF86AudioPause, spawn, {.v = { "mpc", "toggle", NULL } } },
+// {MODKEY | ShiftMask, XKB_KEY_c, killclient, {0}},
+// {MODKEY, XKB_KEY_j, focusstack, {.i = +1}},
+// {MODKEY, XKB_KEY_k, focusstack, {.i = -1}},
+};
+// clang-format on
+#endif /* CONFIG_H */
diff --git a/savedconfig/sys-apps/busybox-1.31.1-r2 b/savedconfig/sys-apps/busybox-1.31.1-r2
@@ -0,0 +1,1188 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.31.1
+# Wed Mar 25 16:32:35 2020
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Settings
+#
+CONFIG_DESKTOP=y
+CONFIG_EXTRA_COMPAT=y
+CONFIG_FEDORA_COMPAT=y
+CONFIG_INCLUDE_SUSv2=y
+CONFIG_LONG_OPTS=y
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+CONFIG_LFS=y
+# CONFIG_PAM is not set
+CONFIG_FEATURE_DEVPTS=y
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+CONFIG_FEATURE_PIDFILE=y
+CONFIG_PID_FILE_PATH="/run"
+CONFIG_BUSYBOX=y
+CONFIG_FEATURE_SHOW_SCRIPT=y
+CONFIG_FEATURE_INSTALLER=y
+CONFIG_INSTALL_NO_USR=y
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+CONFIG_FEATURE_PREFER_APPLETS=y
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SYSLOG_INFO=y
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_PLATFORM_LINUX=y
+
+#
+# Build Options
+#
+CONFIG_STATIC=y
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_CROSS_COMPILER_PREFIX=""
+CONFIG_SYSROOT=""
+CONFIG_EXTRA_CFLAGS=""
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_STACK_OPTIMIZATION_386=y
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_DEBUG_SANITIZE is not set
+CONFIG_UNIT_TEST=y
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Library Tuning
+#
+# CONFIG_FEATURE_USE_BSS_TAIL is not set
+CONFIG_FLOAT_DURATION=y
+CONFIG_FEATURE_RTMINMAX=y
+CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+CONFIG_SHA3_SMALL=1
+CONFIG_FEATURE_FAST_TOP=y
+CONFIG_FEATURE_ETC_NETWORKS=y
+CONFIG_FEATURE_ETC_SERVICES=y
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+CONFIG_FEATURE_EDITING_VI=y
+CONFIG_FEATURE_EDITING_HISTORY=255
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y
+CONFIG_FEATURE_REVERSE_SEARCH=y
+CONFIG_FEATURE_TAB_COMPLETION=y
+CONFIG_FEATURE_USERNAME_COMPLETION=y
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+CONFIG_FEATURE_EDITING_WINCH=y
+CONFIG_FEATURE_EDITING_ASK_TERMINAL=y
+# CONFIG_LOCALE_SUPPORT is not set
+CONFIG_UNICODE_SUPPORT=y
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=63
+CONFIG_LAST_SUPPORTED_WCHAR=767
+CONFIG_UNICODE_COMBINING_WCHARS=y
+CONFIG_UNICODE_WIDE_WCHARS=y
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+CONFIG_UNICODE_PRESERVE_BROKEN=y
+CONFIG_FEATURE_NON_POSIX_CP=y
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_USE_SENDFILE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_FEATURE_SKIP_ROOTFS=y
+# CONFIG_MONOTONIC_SYSCALL is not set
+CONFIG_IOCTL_HEX2STR_ERROR=y
+CONFIG_FEATURE_HWIB=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+CONFIG_FEATURE_AR_LONG_FILENAMES=y
+CONFIG_FEATURE_AR_CREATE=y
+CONFIG_UNCOMPRESS=y
+CONFIG_GUNZIP=y
+CONFIG_ZCAT=y
+CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
+CONFIG_BUNZIP2=y
+CONFIG_BZCAT=y
+CONFIG_UNLZMA=y
+CONFIG_LZCAT=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZCAT=y
+CONFIG_XZ=y
+CONFIG_BZIP2=y
+CONFIG_BZIP2_SMALL=8
+CONFIG_FEATURE_BZIP2_DECOMPRESS=y
+CONFIG_CPIO=y
+CONFIG_FEATURE_CPIO_O=y
+CONFIG_FEATURE_CPIO_P=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+CONFIG_GZIP=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_GZIP_FAST=0
+CONFIG_FEATURE_GZIP_LEVELS=y
+CONFIG_FEATURE_GZIP_DECOMPRESS=y
+CONFIG_LZOP=y
+CONFIG_UNLZOP=y
+CONFIG_LZOPCAT=y
+CONFIG_LZOP_COMPR_HIGH=y
+# CONFIG_RPM is not set
+# CONFIG_RPM2CPIO is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_TO_COMMAND=y
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
+# CONFIG_FEATURE_TAR_SELINUX is not set
+CONFIG_UNZIP=y
+CONFIG_FEATURE_UNZIP_CDF=y
+CONFIG_FEATURE_UNZIP_BZIP2=y
+CONFIG_FEATURE_UNZIP_LZMA=y
+CONFIG_FEATURE_UNZIP_XZ=y
+CONFIG_FEATURE_LZMA_FAST=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+CONFIG_FEATURE_CATN=y
+CONFIG_FEATURE_CATV=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
+CONFIG_CHROOT=y
+CONFIG_CKSUM=y
+CONFIG_COMM=y
+CONFIG_CP=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
+CONFIG_FEATURE_CP_REFLINK=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_FEATURE_DATE_NANO=y
+CONFIG_FEATURE_DATE_COMPAT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_FEATURE_DD_STATUS=y
+CONFIG_DF=y
+CONFIG_FEATURE_DF_FANCY=y
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_EXPAND=y
+CONFIG_UNEXPAND=y
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FACTOR=y
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+CONFIG_GROUPS=y
+CONFIG_INSTALL=y
+CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
+CONFIG_LINK=y
+CONFIG_LN=y
+# CONFIG_LOGNAME is not set
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_WIDTH=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_MD5SUM=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SHA3SUM=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+CONFIG_MKDIR=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MKTEMP=y
+CONFIG_MV=y
+CONFIG_NICE=y
+CONFIG_NL=y
+CONFIG_NOHUP=y
+CONFIG_NPROC=y
+# CONFIG_OD is not set
+CONFIG_PASTE=y
+CONFIG_PRINTENV=y
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+CONFIG_SHRED=y
+CONFIG_SHUF=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY=y
+CONFIG_SPLIT=y
+CONFIG_FEATURE_SPLIT_FANCY=y
+CONFIG_STAT=y
+CONFIG_FEATURE_STAT_FORMAT=y
+CONFIG_FEATURE_STAT_FILESYSTEM=y
+CONFIG_STTY=y
+CONFIG_SUM=y
+CONFIG_SYNC=y
+CONFIG_FEATURE_SYNC_FANCY=y
+CONFIG_FSYNC=y
+CONFIG_TAC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TEST=y
+CONFIG_TEST1=y
+CONFIG_TEST2=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TIMEOUT=y
+CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_NODEREF=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+CONFIG_FEATURE_TR_EQUIV=y
+CONFIG_TRUE=y
+CONFIG_TRUNCATE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNAME_OSNAME="GNU/Linux"
+CONFIG_BB_ARCH=y
+CONFIG_UNIQ=y
+CONFIG_UNLINK=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+CONFIG_BASE64=y
+# CONFIG_UUENCODE is not set
+CONFIG_WC=y
+CONFIG_FEATURE_WC_LARGE=y
+CONFIG_WHO=y
+CONFIG_W=y
+CONFIG_USERS=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options
+#
+CONFIG_FEATURE_VERBOSE=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_FGCONSOLE=y
+CONFIG_KBD_MODE=y
+CONFIG_LOADFONT=y
+CONFIG_SETFONT=y
+CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y
+CONFIG_DEFAULT_SETFONT_DIR=""
+
+#
+# Common options for loadfont and setfont
+#
+CONFIG_FEATURE_LOADFONT_PSF2=y
+CONFIG_FEATURE_LOADFONT_RAW=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_RESIZE=y
+CONFIG_FEATURE_RESIZE_PRINT=y
+CONFIG_SETCONSOLE=y
+CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+CONFIG_SHOWKEY=y
+
+#
+# Debian Utilities
+#
+CONFIG_PIPE_PROGRESS=y
+# CONFIG_RUN_PARTS is not set
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_WHICH=y
+
+#
+# klibc-utils
+#
+CONFIG_MINIPS=y
+CONFIG_NUKE=y
+CONFIG_RESUME=y
+CONFIG_RUN_INIT=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_ED=y
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_REGEX_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_VI_UNDO=y
+CONFIG_FEATURE_VI_UNDO_QUEUE=y
+CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_EXECUTABLE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_EXEC_PLUS=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_QUIT=y
+CONFIG_FEATURE_FIND_DELETE=y
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
+CONFIG_GREP=y
+CONFIG_EGREP=y
+CONFIG_FGREP=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
+CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y
+CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y
+
+#
+# Init Utilities
+#
+# CONFIG_BOOTCHARTD is not set
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+CONFIG_GINIT=y
+CONFIG_HALT=y
+CONFIG_POWEROFF=y
+CONFIG_REBOOT=y
+CONFIG_FEATURE_WAIT_FOR_INIT=y
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+CONFIG_INIT=y
+CONFIG_LINUXRC=y
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_KILL_REMOVED=y
+CONFIG_FEATURE_KILL_DELAY=0
+CONFIG_FEATURE_INIT_SCTTY=y
+CONFIG_FEATURE_INIT_SYSLOG=y
+CONFIG_FEATURE_INIT_QUIET=y
+CONFIG_FEATURE_INIT_COREDUMPS=y
+CONFIG_INIT_TERMINAL_TYPE="linux"
+CONFIG_FEATURE_INIT_MODIFY_CMDLINE=y
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+CONFIG_USE_BB_PWD_GRP=y
+CONFIG_USE_BB_SHADOW=y
+CONFIG_USE_BB_CRYPT=y
+CONFIG_USE_BB_CRYPT_SHA=y
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+CONFIG_ADDGROUP=y
+CONFIG_FEATURE_ADDUSER_TO_GROUP=y
+CONFIG_ADDUSER=y
+CONFIG_FEATURE_CHECK_NAMES=y
+CONFIG_LAST_ID=60000
+CONFIG_FIRST_SYSTEM_ID=100
+CONFIG_LAST_SYSTEM_ID=999
+CONFIG_CHPASSWD=y
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="des"
+CONFIG_CRYPTPW=y
+CONFIG_MKPASSWD=y
+CONFIG_DELUSER=y
+CONFIG_DELGROUP=y
+CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
+CONFIG_GETTY=y
+CONFIG_LOGIN=y
+CONFIG_LOGIN_SESSION_AS_CHILD=y
+CONFIG_LOGIN_SCRIPTS=y
+CONFIG_FEATURE_NOLOGIN=y
+CONFIG_FEATURE_SECURETTY=y
+CONFIG_PASSWD=y
+CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
+CONFIG_SU=y
+CONFIG_FEATURE_SU_SYSLOG=y
+CONFIG_FEATURE_SU_CHECKS_SHELLS=y
+CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY=y
+# CONFIG_SULOGIN is not set
+CONFIG_VLOCK=y
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+CONFIG_LSATTR=y
+CONFIG_TUNE2FS=y
+
+#
+# Linux Module Utilities
+#
+CONFIG_MODPROBE_SMALL=y
+CONFIG_DEPMOD=y
+CONFIG_INSMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODINFO=y
+CONFIG_MODPROBE=y
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_RMMOD=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS=y
+CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+# CONFIG_FEATURE_MODUTILS_ALIAS is not set
+# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+CONFIG_ACPID=y
+CONFIG_FEATURE_ACPID_COMPAT=y
+CONFIG_BLKDISCARD=y
+CONFIG_BLKID=y
+CONFIG_FEATURE_BLKID_TYPE=y
+CONFIG_BLOCKDEV=y
+CONFIG_CAL=y
+CONFIG_CHRT=y
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_EJECT=y
+CONFIG_FEATURE_EJECT_SCSI=y
+CONFIG_FALLOCATE=y
+CONFIG_FATATTR=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+CONFIG_FDFORMAT=y
+CONFIG_FDISK=y
+# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
+CONFIG_FEATURE_FDISK_WRITABLE=y
+CONFIG_FEATURE_AIX_LABEL=y
+CONFIG_FEATURE_SGI_LABEL=y
+CONFIG_FEATURE_SUN_LABEL=y
+CONFIG_FEATURE_OSF_LABEL=y
+CONFIG_FEATURE_GPT_LABEL=y
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
+CONFIG_FLOCK=y
+CONFIG_FDFLUSH=y
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+CONFIG_FSFREEZE=y
+CONFIG_FSTRIM=y
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+CONFIG_HEXDUMP=y
+CONFIG_FEATURE_HEXDUMP_REVERSE=y
+CONFIG_HD=y
+CONFIG_XXD=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+CONFIG_IONICE=y
+CONFIG_IPCRM=y
+CONFIG_IPCS=y
+CONFIG_LAST=y
+CONFIG_FEATURE_LAST_FANCY=y
+CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
+CONFIG_FEATURE_MDEV_DAEMON=y
+CONFIG_MESG=y
+CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+CONFIG_MKE2FS=y
+CONFIG_MKFS_EXT2=y
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+CONFIG_MKFS_REISER=y
+CONFIG_MKDOSFS=y
+CONFIG_MKFS_VFAT=y
+CONFIG_MKSWAP=y
+CONFIG_FEATURE_MKSWAP_UUID=y
+CONFIG_MORE=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_FAKE=y
+CONFIG_FEATURE_MOUNT_VERBOSE=y
+CONFIG_FEATURE_MOUNT_HELPERS=y
+CONFIG_FEATURE_MOUNT_LABEL=y
+# CONFIG_FEATURE_MOUNT_NFS is not set
+CONFIG_FEATURE_MOUNT_CIFS=y
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_FEATURE_MOUNT_OTHERTAB=y
+CONFIG_MOUNTPOINT=y
+CONFIG_NOLOGIN=y
+CONFIG_NOLOGIN_DEPENDENCIES=y
+CONFIG_NSENTER=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_RDEV is not set
+# CONFIG_READPROFILE is not set
+CONFIG_RENICE=y
+CONFIG_REV=y
+CONFIG_RTCWAKE=y
+CONFIG_SCRIPT=y
+CONFIG_SCRIPTREPLAY=y
+CONFIG_SETARCH=y
+CONFIG_LINUX32=y
+CONFIG_LINUX64=y
+CONFIG_SETPRIV=y
+CONFIG_FEATURE_SETPRIV_DUMP=y
+CONFIG_FEATURE_SETPRIV_CAPABILITIES=y
+CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y
+CONFIG_SETSID=y
+CONFIG_SWAPON=y
+CONFIG_FEATURE_SWAPON_DISCARD=y
+CONFIG_FEATURE_SWAPON_PRI=y
+CONFIG_SWAPOFF=y
+CONFIG_FEATURE_SWAPONOFF_LABEL=y
+CONFIG_SWITCH_ROOT=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_UEVENT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+CONFIG_UNSHARE=y
+CONFIG_WALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
+CONFIG_FEATURE_MTAB_SUPPORT=y
+CONFIG_VOLUMEID=y
+
+#
+# Filesystem/Volume identification
+#
+CONFIG_FEATURE_VOLUMEID_BCACHE=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_EXFAT=y
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_F2FS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
+CONFIG_FEATURE_VOLUMEID_JFS=y
+CONFIG_FEATURE_VOLUMEID_LFS=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
+CONFIG_FEATURE_VOLUMEID_MINIX=y
+CONFIG_FEATURE_VOLUMEID_NILFS=y
+CONFIG_FEATURE_VOLUMEID_NTFS=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
+CONFIG_FEATURE_VOLUMEID_ROMFS=y
+CONFIG_FEATURE_VOLUMEID_SQUASHFS=y
+CONFIG_FEATURE_VOLUMEID_SYSV=y
+CONFIG_FEATURE_VOLUMEID_UBIFS=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
+
+#
+# Miscellaneous Utilities
+#
+CONFIG_ADJTIMEX=y
+CONFIG_BBCONFIG=y
+CONFIG_FEATURE_COMPRESS_BBCONFIG=y
+CONFIG_BC=y
+# CONFIG_DC is not set
+CONFIG_FEATURE_DC_BIG=y
+# CONFIG_FEATURE_DC_LIBM is not set
+CONFIG_FEATURE_BC_INTERACTIVE=y
+CONFIG_FEATURE_BC_LONG_OPTIONS=y
+# CONFIG_BEEP is not set
+CONFIG_FEATURE_BEEP_FREQ=0
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
+CONFIG_CHAT=y
+CONFIG_FEATURE_CHAT_NOFAIL=y
+CONFIG_FEATURE_CHAT_TTY_HIFI=y
+CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
+CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
+CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
+CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
+CONFIG_FEATURE_CHAT_CLR_ABORT=y
+CONFIG_CONSPY=y
+CONFIG_CROND=y
+CONFIG_FEATURE_CROND_D=y
+CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
+CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
+# CONFIG_CRONTAB is not set
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+# CONFIG_FBSPLASH is not set
+CONFIG_FLASH_ERASEALL=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+CONFIG_FLASHCP=y
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
+CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
+CONFIG_HEXEDIT=y
+CONFIG_I2CGET=y
+CONFIG_I2CSET=y
+CONFIG_I2CDUMP=y
+CONFIG_I2CDETECT=y
+CONFIG_I2CTRANSFER=y
+# CONFIG_INOTIFYD is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_TRUNCATE=y
+CONFIG_FEATURE_LESS_MARKS=y
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_FEATURE_LESS_WINCH=y
+CONFIG_FEATURE_LESS_ASK_TERMINAL=y
+CONFIG_FEATURE_LESS_DASHCMD=y
+CONFIG_FEATURE_LESS_LINENUMS=y
+CONFIG_FEATURE_LESS_RAW=y
+CONFIG_FEATURE_LESS_ENV=y
+CONFIG_LSSCSI=y
+CONFIG_MAKEDEVS=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+CONFIG_MAN=y
+CONFIG_MICROCOM=y
+CONFIG_MT=y
+CONFIG_NANDWRITE=y
+CONFIG_NANDDUMP=y
+CONFIG_PARTPROBE=y
+CONFIG_RAIDAUTORUN=y
+CONFIG_READAHEAD=y
+# CONFIG_RFKILL is not set
+CONFIG_RUNLEVEL=y
+CONFIG_RX=y
+CONFIG_SETFATTR=y
+CONFIG_SETSERIAL=y
+CONFIG_STRINGS=y
+CONFIG_TIME=y
+CONFIG_TS=y
+CONFIG_TTYSIZE=y
+CONFIG_UBIATTACH=y
+CONFIG_UBIDETACH=y
+CONFIG_UBIMKVOL=y
+CONFIG_UBIRMVOL=y
+CONFIG_UBIRSVOL=y
+CONFIG_UBIUPDATEVOL=y
+CONFIG_UBIRENAME=y
+CONFIG_VOLNAME=y
+CONFIG_WATCHDOG=y
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+CONFIG_FEATURE_UNIX_LOCAL=y
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+CONFIG_VERBOSE_RESOLUTION_ERRORS=y
+CONFIG_FEATURE_TLS_SHA1=y
+CONFIG_ARP=y
+CONFIG_ARPING=y
+CONFIG_BRCTL=y
+CONFIG_FEATURE_BRCTL_FANCY=y
+CONFIG_FEATURE_BRCTL_SHOW=y
+# CONFIG_DNSD is not set
+CONFIG_ETHER_WAKE=y
+CONFIG_FTPD=y
+CONFIG_FEATURE_FTPD_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
+CONFIG_FEATURE_FTPD_AUTHENTICATION=y
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+CONFIG_DNSDOMAINNAME=y
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_RANGES=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+CONFIG_FEATURE_HTTPD_AUTH_MD5=y
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
+CONFIG_FEATURE_HTTPD_PROXY=y
+CONFIG_FEATURE_HTTPD_GZIP=y
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+CONFIG_FEATURE_IFCONFIG_SLIP=y
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+CONFIG_IFENSLAVE=y
+CONFIG_IFPLUGD=y
+CONFIG_IFUP=y
+CONFIG_IFDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_IPADDR=y
+CONFIG_IPLINK=y
+CONFIG_IPROUTE=y
+CONFIG_IPTUNNEL=y
+CONFIG_IPRULE=y
+CONFIG_IPNEIGH=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
+CONFIG_FEATURE_IP_TUNNEL=y
+CONFIG_FEATURE_IP_RULE=y
+CONFIG_FEATURE_IP_NEIGH=y
+CONFIG_FEATURE_IP_RARE_PROTOCOLS=y
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FAKEIDENTD is not set
+CONFIG_NAMEIF=y
+CONFIG_FEATURE_NAMEIF_EXTENDED=y
+CONFIG_NBDCLIENT=y
+CONFIG_NC=y
+CONFIG_NETCAT=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+CONFIG_NC_110_COMPAT=y
+CONFIG_NETSTAT=y
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
+CONFIG_NSLOOKUP=y
+CONFIG_FEATURE_NSLOOKUP_BIG=y
+CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS=y
+CONFIG_NTPD=y
+CONFIG_FEATURE_NTPD_SERVER=y
+CONFIG_FEATURE_NTPD_CONF=y
+CONFIG_FEATURE_NTP_AUTH=y
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PSCAN=y
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+CONFIG_SSL_CLIENT=y
+CONFIG_TC=y
+CONFIG_FEATURE_TC_INGRESS=y
+# CONFIG_TCPSVD is not set
+# CONFIG_UDPSVD is not set
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_FEATURE_TELNET_WIDTH=y
+CONFIG_TELNETD=y
+CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
+CONFIG_FEATURE_TFTP_HPA_COMPAT=y
+CONFIG_TFTPD=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+# CONFIG_TFTP_DEBUG is not set
+CONFIG_TLS=y
+CONFIG_TRACEROUTE=y
+CONFIG_TRACEROUTE6=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
+CONFIG_VCONFIG=y
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_TIMEOUT=y
+CONFIG_FEATURE_WGET_HTTPS=y
+CONFIG_FEATURE_WGET_OPENSSL=y
+CONFIG_WHOIS=y
+CONFIG_ZCIP=y
+CONFIG_UDHCPD=y
+CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC=y
+CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y
+CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
+CONFIG_DUMPLEASES=y
+CONFIG_DHCPRELAY=y
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC6=y
+CONFIG_FEATURE_UDHCPC6_RFC3646=y
+CONFIG_FEATURE_UDHCPC6_RFC4704=y
+CONFIG_FEATURE_UDHCPC6_RFC4833=y
+CONFIG_FEATURE_UDHCPC6_RFC5970=y
+
+#
+# Common options for DHCP applets
+#
+CONFIG_FEATURE_UDHCP_PORT=y
+CONFIG_UDHCP_DEBUG=2
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_FEATURE_UDHCP_RFC3397=y
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+CONFIG_LPR=y
+CONFIG_LPQ=y
+
+#
+# Mail Utilities
+#
+# CONFIG_MAKEMIME is not set
+CONFIG_POPMAILDIR=y
+CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
+# CONFIG_REFORMIME is not set
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
+CONFIG_SENDMAIL=y
+CONFIG_FEATURE_MIME_CHARSET="us-ascii"
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_IOSTAT=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_KILLALL5=y
+CONFIG_LSOF=y
+CONFIG_MPSTAT=y
+CONFIG_NMETER=y
+CONFIG_PGREP=y
+CONFIG_PKILL=y
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+CONFIG_PMAP=y
+CONFIG_POWERTOP=y
+CONFIG_FEATURE_POWERTOP_INTERACTIVE=y
+CONFIG_PS=y
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_LONG is not set
+CONFIG_FEATURE_PS_TIME=y
+CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS=y
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
+CONFIG_PSTREE=y
+CONFIG_PWDX=y
+# CONFIG_SMEMCAP is not set
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_INTERACTIVE=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+CONFIG_FEATURE_TOP_SMP_CPU=y
+CONFIG_FEATURE_TOP_DECIMALS=y
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
+CONFIG_FEATURE_TOPMEM=y
+CONFIG_UPTIME=y
+CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
+CONFIG_WATCH=y
+CONFIG_FEATURE_SHOW_THREADS=y
+
+#
+# Runit Utilities
+#
+CONFIG_CHPST=y
+CONFIG_SETUIDGID=y
+CONFIG_ENVUIDGID=y
+CONFIG_ENVDIR=y
+CONFIG_SOFTLIMIT=y
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+# CONFIG_SV is not set
+CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
+CONFIG_SVC=y
+CONFIG_SVOK=y
+# CONFIG_SVLOGD is not set
+# CONFIG_CHCON is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SESTATUS is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_SETSEBOOL is not set
+
+#
+# Shells
+#
+CONFIG_SH_IS_ASH=y
+# CONFIG_SH_IS_HUSH is not set
+# CONFIG_SH_IS_NONE is not set
+# CONFIG_BASH_IS_ASH is not set
+# CONFIG_BASH_IS_HUSH is not set
+CONFIG_BASH_IS_NONE=y
+CONFIG_ASH=y
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+CONFIG_ASH_INTERNAL_GLOB=y
+CONFIG_ASH_BASH_COMPAT=y
+# CONFIG_ASH_BASH_SOURCE_CURDIR is not set
+CONFIG_ASH_BASH_NOT_FOUND_HOOK=y
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_RANDOM_SUPPORT=y
+CONFIG_ASH_EXPAND_PRMT=y
+CONFIG_ASH_IDLE_TIMEOUT=y
+CONFIG_ASH_MAIL=y
+CONFIG_ASH_ECHO=y
+CONFIG_ASH_PRINTF=y
+CONFIG_ASH_TEST=y
+CONFIG_ASH_HELP=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_CMDCMD=y
+CONFIG_CTTYHACK=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_LINENO_VAR is not set
+# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_HUSH_ECHO is not set
+# CONFIG_HUSH_PRINTF is not set
+# CONFIG_HUSH_TEST is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_EXPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_READONLY is not set
+# CONFIG_HUSH_KILL is not set
+# CONFIG_HUSH_WAIT is not set
+# CONFIG_HUSH_COMMAND is not set
+# CONFIG_HUSH_TRAP is not set
+# CONFIG_HUSH_TYPE is not set
+# CONFIG_HUSH_TIMES is not set
+# CONFIG_HUSH_READ is not set
+# CONFIG_HUSH_SET is not set
+# CONFIG_HUSH_UNSET is not set
+# CONFIG_HUSH_ULIMIT is not set
+# CONFIG_HUSH_UMASK is not set
+# CONFIG_HUSH_GETOPTS is not set
+# CONFIG_HUSH_MEMLEAK is not set
+
+#
+# Options common to all shells
+#
+CONFIG_FEATURE_SH_MATH=y
+CONFIG_FEATURE_SH_MATH_64=y
+CONFIG_FEATURE_SH_MATH_BASE=y
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+CONFIG_FEATURE_SH_STANDALONE=y
+CONFIG_FEATURE_SH_NOFORK=y
+CONFIG_FEATURE_SH_READ_FRAC=y
+CONFIG_FEATURE_SH_HISTFILESIZE=y
+CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y
+
+#
+# System Logging Utilities
+#
+# CONFIG_KLOGD is not set
+# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
+# CONFIG_LOGGER is not set
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+# CONFIG_SYSLOGD is not set
+# CONFIG_FEATURE_ROTATE_LOGFILE is not set
+# CONFIG_FEATURE_REMOTE_LOG is not set
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
+# CONFIG_FEATURE_SYSLOGD_CFG is not set
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
+# CONFIG_FEATURE_IPC_SYSLOG is not set
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
+# CONFIG_FEATURE_KMSG_SYSLOG is not set
diff --git a/savedconfig/sys-firmware/ipxe-1.0.0_p20190728 b/savedconfig/sys-firmware/ipxe-1.0.0_p20190728
@@ -0,0 +1,3 @@
+#undef BANNER_TIMEOUT
+#define BANNER_TIMEOUT 0
+#define NET_PROTO_IPV6
diff --git a/savedconfig/sys-kernel/linux-firmware-20200316 b/savedconfig/sys-kernel/linux-firmware-20200316
@@ -0,0 +1,2052 @@
+# Remove files that shall not be installed from this list.
+3com/typhoon.bin
+RTL8192E/boot.img
+RTL8192E/main.img
+RTL8192E/data.img
+TDA7706_OM_v2.5.1_boot.txt
+TDA7706_OM_v3.0.2_boot.txt
+advansys/38C1600.bin
+advansys/3550.bin
+advansys/mcode.bin
+advansys/38C0800.bin
+agere_ap_fw.bin
+agere_sta_fw.bin
+amd/amd_sev_fam17h_model0xh.sbin
+amd-ucode/microcode_amd_fam16h.bin
+amd-ucode/microcode_amd_fam17h.bin
+amd-ucode/microcode_amd_fam15h.bin.asc
+amd-ucode/microcode_amd_fam15h.bin
+amd-ucode/microcode_amd.bin.asc
+amd-ucode/microcode_amd_fam16h.bin.asc
+amd-ucode/microcode_amd_fam17h.bin.asc
+amd-ucode/microcode_amd.bin
+amdgpu/mullins_pfp.bin
+amdgpu/navi10_ta.bin
+amdgpu/tahiti_k_smc.bin
+amdgpu/polaris10_mec2.bin
+amdgpu/tahiti_pfp.bin
+amdgpu/vega20_me.bin
+amdgpu/kaveri_pfp.bin
+amdgpu/kaveri_ce.bin
+amdgpu/tahiti_ce.bin
+amdgpu/renoir_ce.bin
+amdgpu/navi10_ce.bin
+amdgpu/kabini_uvd.bin
+amdgpu/hawaii_mec.bin
+amdgpu/pitcairn_smc.bin
+amdgpu/pitcairn_k_smc.bin
+amdgpu/raven_pfp.bin
+amdgpu/tonga_sdma.bin
+amdgpu/vegam_sdma.bin
+amdgpu/topaz_rlc.bin
+amdgpu/polaris12_mec2_2.bin
+amdgpu/navi10_sdma1.bin
+amdgpu/renoir_sdma.bin
+amdgpu/renoir_asd.bin
+amdgpu/verde_pfp.bin
+amdgpu/kabini_vce.bin
+amdgpu/raven_vcn.bin
+amdgpu/stoney_me.bin
+amdgpu/picasso_me.bin
+amdgpu/polaris11_mc.bin
+amdgpu/raven_gpu_info.bin
+amdgpu/polaris10_mec.bin
+amdgpu/vega12_mec.bin
+amdgpu/vegam_me.bin
+amdgpu/navi14_pfp_wks.bin
+amdgpu/carrizo_sdma1.bin
+amdgpu/bonaire_pfp.bin
+amdgpu/fiji_pfp.bin
+amdgpu/renoir_rlc.bin
+amdgpu/polaris11_pfp.bin
+amdgpu/vega20_mec.bin
+amdgpu/oland_mc.bin
+amdgpu/raven2_gpu_info.bin
+amdgpu/vega10_vce.bin
+amdgpu/carrizo_pfp.bin
+amdgpu/polaris10_sdma1.bin
+amdgpu/polaris12_vce.bin
+amdgpu/navi14_ce_wks.bin
+amdgpu/hawaii_mc.bin
+amdgpu/hainan_pfp.bin
+amdgpu/topaz_sdma1.bin
+amdgpu/polaris12_smc.bin
+amdgpu/vegam_pfp.bin
+amdgpu/navi10_pfp.bin
+amdgpu/oland_smc.bin
+amdgpu/navi14_pfp.bin
+amdgpu/picasso_mec2.bin
+amdgpu/hainan_me.bin
+amdgpu/stoney_mec.bin
+amdgpu/polaris11_sdma1.bin
+amdgpu/vega10_smc.bin
+amdgpu/tonga_rlc.bin
+amdgpu/navi14_sdma.bin
+amdgpu/navi14_vcn.bin
+amdgpu/topaz_sdma.bin
+amdgpu/navi10_vcn.bin
+amdgpu/tonga_mc.bin
+amdgpu/navi14_sdma1.bin
+amdgpu/vega12_sdma.bin
+amdgpu/polaris10_k2_smc.bin
+amdgpu/topaz_mc.bin
+amdgpu/polaris12_sdma1.bin
+amdgpu/tonga_sdma1.bin
+amdgpu/polaris12_uvd.bin
+amdgpu/bonaire_sdma1.bin
+amdgpu/navi10_mec2.bin
+amdgpu/verde_me.bin
+amdgpu/polaris10_smc_sk.bin
+amdgpu/fiji_sdma.bin
+amdgpu/polaris10_ce_2.bin
+amdgpu/polaris12_k_mc.bin
+amdgpu/kaveri_mec2.bin
+amdgpu/bonaire_mc.bin
+amdgpu/vega10_uvd.bin
+amdgpu/pitcairn_mc.bin
+amdgpu/bonaire_mec.bin
+amdgpu/polaris12_ce.bin
+amdgpu/vega20_mec2.bin
+amdgpu/vega10_sos.bin
+amdgpu/vega12_pfp.bin
+amdgpu/polaris11_me.bin
+amdgpu/kabini_ce.bin
+amdgpu/polaris10_pfp.bin
+amdgpu/raven2_sdma.bin
+amdgpu/carrizo_me.bin
+amdgpu/carrizo_mec2.bin
+amdgpu/navi14_ce.bin
+amdgpu/vega10_acg_smc.bin
+amdgpu/hawaii_k_smc.bin
+amdgpu/pitcairn_rlc.bin
+amdgpu/vega10_ce.bin
+amdgpu/polaris11_mec2.bin
+amdgpu/raven_mec.bin
+amdgpu/topaz_smc.bin
+amdgpu/fiji_ce.bin
+amdgpu/raven_me.bin
+amdgpu/hainan_k_smc.bin
+amdgpu/hawaii_pfp.bin
+amdgpu/picasso_asd.bin
+amdgpu/polaris10_mec2_2.bin
+amdgpu/vega10_asd.bin
+amdgpu/kaveri_mec.bin
+amdgpu/kabini_rlc.bin
+amdgpu/vega10_mec2.bin
+amdgpu/raven2_asd.bin
+amdgpu/renoir_gpu_info.bin
+amdgpu/mullins_mec.bin
+amdgpu/verde_mc.bin
+amdgpu/mullins_ce.bin
+amdgpu/tonga_vce.bin
+amdgpu/picasso_rlc.bin
+amdgpu/pitcairn_me.bin
+amdgpu/polaris10_ce.bin
+amdgpu/bonaire_me.bin
+amdgpu/raven2_rlc.bin
+amdgpu/tonga_me.bin
+amdgpu/oland_rlc.bin
+amdgpu/polaris12_rlc.bin
+amdgpu/raven2_ta.bin
+amdgpu/raven2_ce.bin
+amdgpu/vega10_rlc.bin
+amdgpu/verde_k_smc.bin
+amdgpu/topaz_me.bin
+amdgpu/polaris12_me_2.bin
+amdgpu/vega12_sdma1.bin
+amdgpu/tonga_smc.bin
+amdgpu/polaris12_sdma.bin
+amdgpu/polaris11_ce_2.bin
+amdgpu/banks_k_2_smc.bin
+amdgpu/hainan_mc.bin
+amdgpu/stoney_pfp.bin
+amdgpu/navi14_mec.bin
+amdgpu/navi10_mec.bin
+amdgpu/vega12_ce.bin
+amdgpu/vegam_mec.bin
+amdgpu/navi14_me_wks.bin
+amdgpu/oland_me.bin
+amdgpu/kabini_sdma1.bin
+amdgpu/mullins_sdma.bin
+amdgpu/carrizo_mec.bin
+amdgpu/hawaii_me.bin
+amdgpu/raven_mec2.bin
+amdgpu/tonga_uvd.bin
+amdgpu/vega20_pfp.bin
+amdgpu/vega10_sdma1.bin
+amdgpu/polaris11_mec.bin
+amdgpu/fiji_mec.bin
+amdgpu/vegam_vce.bin
+amdgpu/hawaii_ce.bin
+amdgpu/hainan_smc.bin
+amdgpu/carrizo_sdma.bin
+amdgpu/fiji_smc.bin
+amdgpu/picasso_pfp.bin
+amdgpu/polaris11_smc.bin
+amdgpu/oland_ce.bin
+amdgpu/vega12_me.bin
+amdgpu/fiji_vce.bin
+amdgpu/polaris12_mec_2.bin
+amdgpu/polaris11_vce.bin
+amdgpu/vega12_sos.bin
+amdgpu/vega10_pfp.bin
+amdgpu/vega20_sdma.bin
+amdgpu/polaris12_pfp.bin
+amdgpu/vegam_smc.bin
+amdgpu/carrizo_vce.bin
+amdgpu/navi10_smc.bin
+amdgpu/oland_pfp.bin
+amdgpu/navi14_smc.bin
+amdgpu/raven2_pfp.bin
+amdgpu/raven2_mec2.bin
+amdgpu/carrizo_uvd.bin
+amdgpu/vega12_asd.bin
+amdgpu/vega10_sdma.bin
+amdgpu/raven2_me.bin
+amdgpu/topaz_ce.bin
+amdgpu/polaris11_mec_2.bin
+amdgpu/stoney_rlc.bin
+amdgpu/fiji_uvd.bin
+amdgpu/raven2_vcn.bin
+amdgpu/polaris11_uvd.bin
+amdgpu/tonga_mec.bin
+amdgpu/tonga_ce.bin
+amdgpu/renoir_mec.bin
+amdgpu/vega20_rlc.bin
+amdgpu/bonaire_ce.bin
+amdgpu/polaris11_me_2.bin
+amdgpu/polaris10_me.bin
+amdgpu/polaris10_mec_2.bin
+amdgpu/pitcairn_ce.bin
+amdgpu/polaris11_sdma.bin
+amdgpu/polaris10_k_mc.bin
+amdgpu/polaris12_ce_2.bin
+amdgpu/vegam_uvd.bin
+amdgpu/navi14_mec2_wks.bin
+amdgpu/mullins_me.bin
+amdgpu/picasso_vcn.bin
+amdgpu/tahiti_mc.bin
+amdgpu/polaris10_rlc.bin
+amdgpu/polaris12_mec2.bin
+amdgpu/vega12_rlc.bin
+amdgpu/tahiti_smc.bin
+amdgpu/kabini_sdma.bin
+amdgpu/pitcairn_pfp.bin
+amdgpu/kaveri_sdma1.bin
+amdgpu/topaz_mec.bin
+amdgpu/mullins_vce.bin
+amdgpu/raven_ta.bin
+amdgpu/bonaire_uvd.bin
+amdgpu/kaveri_vce.bin
+amdgpu/si58_mc.bin
+amdgpu/fiji_me.bin
+amdgpu/raven_ce.bin
+amdgpu/vega20_asd.bin
+amdgpu/raven_kicker_rlc.bin
+amdgpu/vega10_me.bin
+amdgpu/verde_smc.bin
+amdgpu/kaveri_uvd.bin
+amdgpu/stoney_sdma.bin
+amdgpu/hawaii_rlc.bin
+amdgpu/navi14_mec_wks.bin
+amdgpu/mullins_uvd.bin
+amdgpu/polaris11_mec2_2.bin
+amdgpu/vega20_sos.bin
+amdgpu/raven_sdma.bin
+amdgpu/bonaire_vce.bin
+amdgpu/navi14_me.bin
+amdgpu/hawaii_sdma1.bin
+amdgpu/carrizo_ce.bin
+amdgpu/kabini_me.bin
+amdgpu/bonaire_smc.bin
+amdgpu/raven_dmcu.bin
+amdgpu/kabini_pfp.bin
+amdgpu/polaris11_ce.bin
+amdgpu/polaris12_me.bin
+amdgpu/polaris12_k_smc.bin
+amdgpu/tonga_k_smc.bin
+amdgpu/hainan_rlc.bin
+amdgpu/oland_k_smc.bin
+amdgpu/picasso_rlc_am4.bin
+amdgpu/bonaire_sdma.bin
+amdgpu/carrizo_rlc.bin
+amdgpu/polaris10_mc.bin
+amdgpu/tonga_mec2.bin
+amdgpu/verde_ce.bin
+amdgpu/vega10_gpu_info.bin
+amdgpu/vegam_mec2.bin
+amdgpu/renoir_pfp.bin
+amdgpu/stoney_uvd.bin
+amdgpu/fiji_rlc.bin
+amdgpu/polaris11_rlc.bin
+amdgpu/polaris11_k_mc.bin
+amdgpu/polaris10_sdma.bin
+amdgpu/tonga_pfp.bin
+amdgpu/vega20_uvd.bin
+amdgpu/polaris10_me_2.bin
+amdgpu/navi14_rlc.bin
+amdgpu/fiji_sdma1.bin
+amdgpu/vegam_rlc.bin
+amdgpu/bonaire_k_smc.bin
+amdgpu/navi10_rlc.bin
+amdgpu/navi14_gpu_info.bin
+amdgpu/raven2_mec.bin
+amdgpu/topaz_k_smc.bin
+amdgpu/polaris10_k_smc.bin
+amdgpu/polaris12_mec.bin
+amdgpu/hainan_ce.bin
+amdgpu/vega10_mec.bin
+amdgpu/polaris11_smc_sk.bin
+amdgpu/vega20_vce.bin
+amdgpu/vega20_sdma1.bin
+amdgpu/stoney_vce.bin
+amdgpu/vega20_smc.bin
+amdgpu/polaris11_k2_smc.bin
+amdgpu/picasso_mec.bin
+amdgpu/polaris11_k_smc.bin
+amdgpu/renoir_vcn.bin
+amdgpu/renoir_mec2.bin
+amdgpu/raven_asd.bin
+amdgpu/vega12_gpu_info.bin
+amdgpu/polaris10_smc.bin
+amdgpu/picasso_sdma.bin
+amdgpu/hawaii_uvd.bin
+amdgpu/picasso_ta.bin
+amdgpu/navi14_sos.bin
+amdgpu/kaveri_rlc.bin
+amdgpu/navi10_sos.bin
+amdgpu/kabini_mec.bin
+amdgpu/vegam_ce.bin
+amdgpu/polaris12_mc.bin
+amdgpu/tahiti_rlc.bin
+amdgpu/navi14_mec2.bin
+amdgpu/picasso_ce.bin
+amdgpu/vega12_smc.bin
+amdgpu/polaris12_pfp_2.bin
+amdgpu/mullins_rlc.bin
+amdgpu/stoney_ce.bin
+amdgpu/raven_rlc.bin
+amdgpu/vega12_vce.bin
+amdgpu/polaris10_vce.bin
+amdgpu/mullins_sdma1.bin
+amdgpu/polaris10_uvd.bin
+amdgpu/hawaii_sdma.bin
+amdgpu/fiji_mec2.bin
+amdgpu/hawaii_smc.bin
+amdgpu/verde_rlc.bin
+amdgpu/navi10_sdma.bin
+amdgpu/polaris10_pfp_2.bin
+amdgpu/vega12_uvd.bin
+amdgpu/topaz_pfp.bin
+amdgpu/fiji_mc.bin
+amdgpu/kaveri_sdma.bin
+amdgpu/tahiti_me.bin
+amdgpu/topaz_mec2.bin
+amdgpu/navi10_gpu_info.bin
+amdgpu/bonaire_rlc.bin
+amdgpu/renoir_me.bin
+amdgpu/navi10_me.bin
+amdgpu/navi14_asd.bin
+amdgpu/navi10_asd.bin
+amdgpu/renoir_dmcub.bin
+amdgpu/kaveri_me.bin
+amdgpu/vega12_mec2.bin
+amdgpu/picasso_gpu_info.bin
+amdgpu/polaris11_pfp_2.bin
+amdgpu/hawaii_vce.bin
+amdgpu/vega20_ce.bin
+amdgpu/vegam_sdma1.bin
+ar3k/ramps_0x01020201_40.dfu
+ar3k/30101coex/PS_ASIC_aclLowPri.pst
+ar3k/30101coex/PS_ASIC.pst
+ar3k/30101coex/ar3kbdaddr.pst
+ar3k/30101coex/PS_ASIC_aclHighPri.pst
+ar3k/30101coex/RamPatch.txt
+ar3k/AthrBT_0x11020100.dfu
+ar3k/ramps_0x31010100_40.dfu
+ar3k/AthrBT_0x11020000.dfu
+ar3k/ramps_0x01020001_26.dfu
+ar3k/30000/RamPatch.txt
+ar3k/30000/PS_ASIC.pst
+ar3k/30000/ar3kbdaddr.pst
+ar3k/1020200/RamPatch.txt
+ar3k/1020200/PS_ASIC.pst
+ar3k/1020200/ar3kbdaddr.pst
+ar3k/ramps_0x01020200_26.dfu
+ar3k/ramps_0x31010000_40.dfu
+ar3k/AthrBT_0x41020000.dfu
+ar3k/ramps_0x01020201_26.dfu
+ar3k/ramps_0x11020000_40.dfu
+ar3k/AthrBT_0x01020200.dfu
+ar3k/AthrBT_0x01020001.dfu
+ar3k/ramps_0x41020000_40.dfu
+ar3k/30101/PS_ASIC.pst
+ar3k/30101/RamPatch.txt
+ar3k/30101/ar3kbdaddr.pst
+ar3k/AthrBT_0x31010000.dfu
+ar3k/AthrBT_0x01020201.dfu
+ar3k/ramps_0x01020200_40.dfu
+ar3k/ramps_0x11020100_40.dfu
+ar3k/1020201/RamPatch.txt
+ar3k/1020201/PS_ASIC.pst
+ar3k/AthrBT_0x31010100.dfu
+ar3k/1020201coex/ramps_0x01020201_26_HighPriority.dfu
+ar5523.bin
+ar7010.fw
+ar7010_1_1.fw
+ar9170-1.fw
+ar9170-2.fw
+ar9271.fw
+as102_data1_st.hex
+as102_data2_st.hex
+ath10k/WCN3990/hw1.0/wlanmdsp.mbn
+ath10k/WCN3990/hw1.0/notice.txt_wlanmdsp
+ath10k/WCN3990/hw1.0/firmware-5.bin
+ath10k/QCA9887/hw1.0/firmware-5.bin
+ath10k/QCA9887/hw1.0/board.bin
+ath10k/QCA9887/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9377/hw1.0/firmware-6.bin
+ath10k/QCA9377/hw1.0/board.bin
+ath10k/QCA9377/hw1.0/notice_ath10k_firmware-6.txt
+ath10k/QCA9377/hw1.0/board-2.bin
+ath10k/QCA9377/hw1.0/firmware-5.bin
+ath10k/QCA9377/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA988X/hw2.0/firmware-4.bin
+ath10k/QCA988X/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA988X/hw2.0/firmware-5.bin
+ath10k/QCA988X/hw2.0/notice_ath10k_firmware-4.txt
+ath10k/QCA988X/hw2.0/board.bin
+ath10k/QCA9984/hw1.0/board-2.bin
+ath10k/QCA9984/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9984/hw1.0/firmware-5.bin
+ath10k/QCA6174/hw3.0/notice_ath10k_firmware-4.txt
+ath10k/QCA6174/hw3.0/board.bin
+ath10k/QCA6174/hw3.0/firmware-6.bin
+ath10k/QCA6174/hw3.0/board-2.bin
+ath10k/QCA6174/hw3.0/firmware-4.bin
+ath10k/QCA6174/hw3.0/notice_ath10k_firmware-6.txt
+ath10k/QCA6174/hw2.1/board-2.bin
+ath10k/QCA6174/hw2.1/firmware-5.bin
+ath10k/QCA6174/hw2.1/notice_ath10k_firmware-5.txt
+ath10k/QCA6174/hw2.1/board.bin
+ath10k/QCA4019/hw1.0/board-2.bin
+ath10k/QCA4019/hw1.0/firmware-5.bin
+ath10k/QCA4019/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9888/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9888/hw2.0/firmware-5.bin
+ath10k/QCA9888/hw2.0/board-2.bin
+ath10k/QCA99X0/hw2.0/firmware-5.bin
+ath10k/QCA99X0/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA99X0/hw2.0/board.bin
+ath3k-1.fw
+ath6k/AR6004/hw1.3/fw-3.bin
+ath6k/AR6004/hw1.3/bdata.bin
+ath6k/AR6004/hw1.2/bdata.bin
+ath6k/AR6004/hw1.2/fw-2.bin
+ath6k/AR6003/hw2.0/bdata.WB31.bin
+ath6k/AR6003/hw2.0/athwlan.bin.z77
+ath6k/AR6003/hw2.0/data.patch.bin
+ath6k/AR6003/hw2.0/bdata.SD32.bin
+ath6k/AR6003/hw2.0/bdata.SD31.bin
+ath6k/AR6003/hw2.0/otp.bin.z77
+ath6k/AR6003/hw2.1.1/bdata.WB31.bin
+ath6k/AR6003/hw2.1.1/data.patch.bin
+ath6k/AR6003/hw2.1.1/athwlan.bin
+ath6k/AR6003/hw2.1.1/bdata.SD32.bin
+ath6k/AR6003/hw2.1.1/bdata.SD31.bin
+ath6k/AR6003/hw2.1.1/fw-2.bin
+ath6k/AR6003/hw2.1.1/otp.bin
+ath6k/AR6003/hw2.1.1/endpointping.bin
+ath6k/AR6003/hw2.1.1/fw-3.bin
+ath6k/AR6003/hw1.0/bdata.SD31.bin
+ath6k/AR6003/hw1.0/data.patch.bin
+ath6k/AR6003/hw1.0/athwlan.bin.z77
+ath6k/AR6003/hw1.0/bdata.SD32.bin
+ath6k/AR6003/hw1.0/otp.bin.z77
+ath6k/AR6003/hw1.0/bdata.WB31.bin
+ath6k/AR6003.1/hw2.1.1/otp.bin
+ath6k/AR6003.1/hw2.1.1/athwlan.bin
+ath6k/AR6003.1/hw2.1.1/bdata.SD31.bin
+ath6k/AR6003.1/hw2.1.1/data.patch.bin
+ath6k/AR6003.1/hw2.1.1/bdata.SD32.bin
+ath6k/AR6003.1/hw2.1.1/bdata.WB31.bin
+ath6k/AR6003.1/hw2.1.1/endpointping.bin
+ath6k/AR6002/eeprom.data
+ath6k/AR6002/data.patch.hw2_0.bin
+ath6k/AR6002/eeprom.bin
+ath6k/AR6002/athwlan.bin.z77
+ath9k_htc/htc_9271-1.4.0.fw
+ath9k_htc/htc_7010-1.4.0.fw
+atmel/wilc1000_ap_fw.bin
+atmel/wilc1000_fw.bin
+atmel/wilc1000_wifi_firmware.bin
+atmel/wilc1000_p2p_fw.bin
+atusb/atusb-0.2.dfu
+atusb/atusb-0.3.dfu
+atusb/rzusb-0.3.bin
+av7110/bootcode.bin
+bnx2/bnx2-rv2p-09-4.6.15.fw
+bnx2/bnx2-mips-09-6.2.1.fw
+bnx2/bnx2-mips-06-6.2.1.fw
+bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw
+bnx2/bnx2-mips-06-6.2.3.fw
+bnx2/bnx2-mips-09-5.0.0.j9.fw
+bnx2/bnx2-rv2p-09-6.0.17.fw
+bnx2/bnx2-mips-09-6.2.1b.fw
+bnx2/bnx2-rv2p-09-5.0.0.j10.fw
+bnx2/bnx2-rv2p-06-4.6.16.fw
+bnx2/bnx2-rv2p-09ax-5.0.0.j10.fw
+bnx2/bnx2-mips-09-6.2.1a.fw
+bnx2/bnx2-rv2p-06-6.0.15.fw
+bnx2/bnx2-mips-06-5.0.0.j6.fw
+bnx2/bnx2-mips-09-6.0.17.fw
+bnx2/bnx2-mips-09-4.6.17.fw
+bnx2/bnx2-rv2p-09-5.0.0.j3.fw
+bnx2/bnx2-rv2p-06-5.0.0.j3.fw
+bnx2/bnx2-mips-06-6.0.15.fw
+bnx2/bnx2-rv2p-09ax-6.0.17.fw
+bnx2/bnx2-mips-06-4.6.16.fw
+bnx2/bnx2-mips-09-5.0.0.j15.fw
+bnx2/bnx2-mips-09-5.0.0.j3.fw
+bnx2/bnx2-mips-06-5.0.0.j3.fw
+bnx2x/bnx2x-e1h-7.13.1.0.fw
+bnx2x/bnx2x-e2-7.0.23.0.fw
+bnx2x/bnx2x-e1h-6.0.34.0.fw
+bnx2x/bnx2x-e1-7.2.51.0.fw
+bnx2x/bnx2x-e1-7.0.29.0.fw
+bnx2x/bnx2x-e1-6.2.5.0.fw
+bnx2x/bnx2x-e1h-7.8.19.0.fw
+bnx2x/bnx2x-e1-6.2.9.0.fw
+bnx2x/bnx2x-e1-7.2.16.0.fw
+bnx2x/bnx2x-e1h-7.0.20.0.fw
+bnx2x/bnx2x-e1h-7.8.2.0.fw
+bnx2x/bnx2x-e1-7.8.2.0.fw
+bnx2x/bnx2x-e1h-7.2.16.0.fw
+bnx2x/bnx2x-e1-7.0.20.0.fw
+bnx2x/bnx2x-e1h-6.2.9.0.fw
+bnx2x/bnx2x-e1-7.13.1.0.fw
+bnx2x/bnx2x-e1h-6.2.5.0.fw
+bnx2x/bnx2x-e1-6.0.34.0.fw
+bnx2x/bnx2x-e2-7.8.17.0.fw
+bnx2x/bnx2x-e1h-7.2.51.0.fw
+bnx2x/bnx2x-e1-7.8.19.0.fw
+bnx2x/bnx2x-e1h-7.0.29.0.fw
+bnx2x/bnx2x-e2-7.12.30.0.fw
+bnx2x/bnx2x-e2-6.2.9.0.fw
+bnx2x/bnx2x-e1-7.8.17.0.fw
+bnx2x/bnx2x-e2-7.8.19.0.fw
+bnx2x/bnx2x-e1h-7.13.11.0.fw
+bnx2x/bnx2x-e1h-7.0.23.0.fw
+bnx2x/bnx2x-e2-7.13.1.0.fw
+bnx2x/bnx2x-e1-7.12.30.0.fw
+bnx2x/bnx2x-e1h-7.13.15.0.fw
+bnx2x/bnx2x-e2-6.0.34.0.fw
+bnx2x/bnx2x-e2-7.0.20.0.fw
+bnx2x/bnx2x-e1h-7.10.51.0.fw
+bnx2x/bnx2x-e2-6.2.5.0.fw
+bnx2x/bnx2x-e2-7.13.11.0.fw
+bnx2x/bnx2x-e1-7.13.15.0.fw
+bnx2x/bnx2x-e1h-7.12.30.0.fw
+bnx2x/bnx2x-e2-7.13.15.0.fw
+bnx2x/bnx2x-e1-7.13.11.0.fw
+bnx2x/bnx2x-e2-7.2.16.0.fw
+bnx2x/bnx2x-e2-7.2.51.0.fw
+bnx2x/bnx2x-e2-7.8.2.0.fw
+bnx2x/bnx2x-e1h-7.8.17.0.fw
+bnx2x/bnx2x-e2-7.10.51.0.fw
+bnx2x/bnx2x-e2-7.0.29.0.fw
+bnx2x/bnx2x-e1-7.10.51.0.fw
+bnx2x/bnx2x-e1-7.0.23.0.fw
+bnx2x-e1-4.8.53.0.fw
+bnx2x-e1-5.2.13.0.fw
+bnx2x-e1-5.2.7.0.fw
+bnx2x-e1h-4.8.53.0.fw
+bnx2x-e1h-5.2.13.0.fw
+bnx2x-e1h-5.2.7.0.fw
+brcm/brcmfmac4350c2-pcie.bin
+brcm/brcmfmac4358-pcie.bin
+brcm/bcm4329-fullmac-4.bin
+brcm/brcmfmac4354-sdio.bin
+brcm/brcmfmac4366c-pcie.bin
+brcm/brcmfmac4350-pcie.bin
+brcm/brcmfmac4373-sdio.bin
+brcm/brcmfmac43430a0-sdio.bin
+brcm/brcmfmac43340-sdio.pov-tab-p1006w-data.txt
+brcm/brcmfmac4334-sdio.bin
+brcm/brcmfmac43455-sdio.bin
+brcm/brcmfmac43362-sdio.bin
+brcm/brcmfmac4366b-pcie.bin
+brcm/brcmfmac43430-sdio.Hampoo-D2D3_Vi8A1.txt
+brcm/brcmfmac4373.bin
+brcm/brcmfmac43143-sdio.bin
+brcm/brcmfmac43241b0-sdio.bin
+brcm/brcmfmac4356-pcie.bin
+brcm/BCM-0bb4-0306.hcd
+brcm/brcmfmac4356-pcie.gpd-win-pocket.txt
+brcm/brcmfmac4371-pcie.bin
+brcm/brcmfmac43455-sdio.MINIX-NEO Z83-4.txt
+brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt
+brcm/brcmfmac4335-sdio.bin
+brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.txt
+brcm/brcmfmac43143.bin
+brcm/brcmfmac43430a0-sdio.jumper-ezpad-mini3.txt
+brcm/brcmfmac4329-sdio.bin
+brcm/brcmfmac43241b4-sdio.bin
+brcm/brcmfmac4330-sdio.Prowise-PT301.txt
+brcm/brcmfmac4339-sdio.bin
+brcm/bcm43xx-0.fw
+brcm/brcmfmac43430-sdio.MUR1DX.txt
+brcm/brcmfmac43430-sdio.AP6212.txt
+brcm/brcmfmac4356-sdio.bin
+brcm/brcmfmac43362-sdio.cubietech,cubietruck.txt
+brcm/brcmfmac43241b5-sdio.bin
+brcm/brcmfmac43430a0-sdio.ONDA-V80 PLUS.txt
+brcm/brcmfmac43362-sdio.lemaker,bananapro.txt
+brcm/bcm43xx_hdr-0.fw
+brcm/brcmfmac43570-pcie.bin
+brcm/brcmfmac43340-sdio.meegopad-t08.txt
+brcm/brcmfmac43569.bin
+brcm/brcmfmac4330-sdio.bin
+brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt
+brcm/brcmfmac43242a.bin
+brcm/brcmfmac43602-pcie.ap.bin
+brcm/brcmfmac43602-pcie.bin
+brcm/brcmfmac43340-sdio.bin
+brcm/brcmfmac43430-sdio.bin
+brcm/brcmfmac43236b.bin
+cadence/mhdp8546.bin
+carl9170-1.fw
+cavium/cnn55xx_ae.fw
+cavium/cnn55xx_se.fw
+cbfw-3.2.1.1.bin
+cbfw-3.2.3.0.bin
+cbfw-3.2.5.1.bin
+cis/PE-200.cis
+cis/tamarack.cis
+cis/DP83903.cis
+cis/NE2K.cis
+cis/PCMLM28.cis
+cis/PE520.cis
+cis/3CCFEM556.cis
+cis/3CXEM556.cis
+cis/SW_555_SER.cis
+cis/MT5634ZLX.cis
+cis/COMpad2.cis
+cis/SW_7xx_SER.cis
+cis/RS-COM-2P.cis
+cis/SW_8xx_SER.cis
+cis/LA-PCM.cis
+cis/COMpad4.cis
+cmmb_vega_12mhz.inp
+cmmb_venice_12mhz.inp
+copy-firmware.sh
+ct2fw-3.2.1.1.bin
+ct2fw-3.2.3.0.bin
+ct2fw-3.2.5.1.bin
+ctefx.bin
+ctfw-3.2.1.1.bin
+ctfw-3.2.3.0.bin
+ctfw-3.2.5.1.bin
+ctspeq.bin
+cxgb3/t3b_psram-1.1.0.bin
+cxgb3/t3c_psram-1.1.0.bin
+cxgb3/ael2020_twx_edc.bin
+cxgb3/ael2005_opt_edc.bin
+cxgb3/t3fw-7.0.0.bin
+cxgb3/t3fw-7.1.0.bin
+cxgb3/ael2005_twx_edc.bin
+cxgb3/t3fw-7.10.0.bin
+cxgb3/t3fw-7.4.0.bin
+cxgb3/t3fw-7.12.0.bin
+cxgb4/bcm8483.bin
+cxgb4/t5fw-1.24.11.0.bin
+cxgb4/t5fw-1.14.4.0.bin
+cxgb4/configs/t6-config-hashfilter.txt
+cxgb4/configs/t5-config-default.txt
+cxgb4/configs/t4-config-default.txt
+cxgb4/configs/t5-config-hashfilter.txt
+cxgb4/configs/t6-config-default.txt
+cxgb4/t4fw-1.24.11.0.bin
+cxgb4/t6fw-1.24.11.0.bin
+cxgb4/t4fw-1.15.37.0.bin
+cxgb4/t5fw-1.15.37.0.bin
+cxgb4/aq1202_fw.cld
+cxgb4/t4fw-1.14.4.0.bin
+dabusb/firmware.fw
+dabusb/bitstream.bin
+dpaa2/mc/mc_10.18.0_ls1088a.itb
+dpaa2/mc/mc_10.16.2_lx2160a.itb
+dpaa2/mc/mc_10.16.2_ls2088a.itb
+dpaa2/mc/mc_10.14.3_ls1088a.itb
+dpaa2/mc/mc_10.10.0_ls1088a.itb
+dpaa2/mc/mc_10.14.3_lx2160a.itb
+dpaa2/mc/mc_10.10.0_lx2160a.itb
+dpaa2/mc/mc_10.18.0_ls2088a.itb
+dpaa2/mc/mc_10.18.0_lx2160a.itb
+dpaa2/mc/mc_10.16.2_ls1088a.itb
+dpaa2/mc/mc_10.14.3_ls2088a.itb
+dpaa2/mc/mc_10.10.0_ls2088a.itb
+dsp56k/bootstrap.bin
+dvb-fe-xc4000-1.4.1.fw
+dvb-fe-xc5000-1.6.114.fw
+dvb-fe-xc5000c-4.1.30.7.fw
+dvb-usb-dib0700-1.20.fw
+dvb-usb-it9135-01.fw
+dvb-usb-it9135-02.fw
+dvb-usb-terratec-h5-drxk.fw
+dvb_nova_12mhz.inp
+dvb_nova_12mhz_b0.inp
+e100/d101s_ucode.bin
+e100/d102e_ucode.bin
+e100/d101m_ucode.bin
+emi26/firmware.fw
+emi26/loader.fw
+emi26/bitstream.fw
+ene-ub6250/sd_init2.bin
+ene-ub6250/ms_rdwr.bin
+ene-ub6250/sd_rdwr.bin
+ene-ub6250/msp_rdwr.bin
+ene-ub6250/sd_init1.bin
+ene-ub6250/ms_init.bin
+f2255usb.bin
+go7007/px-m402u.fw
+go7007/px-tv402u.fw
+go7007/wis-startrek.fw
+go7007/s2250-1.fw
+go7007/go7007tv.bin
+go7007/s2250-2.fw
+go7007/go7007fw.bin
+go7007/lr192.fw
+hfi1_dc8051.fw
+hfi1_fabric.fw
+hfi1_pcie.fw
+hfi1_sbus.fw
+htc_7010.fw
+htc_9271.fw
+i2400m-fw-usb-1.4.sbcf
+i2400m-fw-usb-1.5.sbcf
+i6050-fw-usb-1.5.sbcf
+i915/glk_guc_33.0.0.bin
+i915/kbl_guc_ver9_39.bin
+i915/skl_huc_ver01_07_1398.bin
+i915/skl_guc_ver1.bin
+i915/skl_guc_ver6.bin
+i915/cnl_dmc_ver1_07.bin
+i915/kbl_dmc_ver1.bin
+i915/kbl_guc_ver9_14.bin
+i915/bxt_guc_ver9_29.bin
+i915/bxt_dmc_ver1.bin
+i915/bxt_huc_ver01_07_1398.bin
+i915/bxt_huc_ver01_8_2893.bin
+i915/skl_guc_ver6_1.bin
+i915/skl_guc_33.0.0.bin
+i915/icl_huc_ver8_4_3238.bin
+i915/bxt_dmc_ver1_07.bin
+i915/kbl_dmc_ver1_01.bin
+i915/icl_huc_9.0.0.bin
+i915/tgl_dmc_ver2_06.bin
+i915/bxt_guc_ver8_7.bin
+i915/cml_guc_33.0.0.bin
+i915/skl_dmc_ver1_23.bin
+i915/tgl_huc_7.0.12.bin
+i915/ehl_guc_33.0.4.bin
+i915/bxt_guc_33.0.0.bin
+i915/kbl_guc_32.0.3.bin
+i915/skl_dmc_ver1.bin
+i915/glk_huc_ver03_01_2893.bin
+i915/ehl_huc_9.0.0.bin
+i915/icl_guc_32.0.3.bin
+i915/cnl_dmc_ver1_06.bin
+i915/kbl_huc_ver02_00_1810.bin
+i915/glk_guc_32.0.3.bin
+i915/glk_huc_4.0.0.bin
+i915/kbl_huc_4.0.0.bin
+i915/icl_dmc_ver1_09.bin
+i915/skl_dmc_ver1_27.bin
+i915/icl_dmc_ver1_07.bin
+i915/glk_dmc_ver1_04.bin
+i915/skl_guc_ver9_33.bin
+i915/cml_huc_4.0.0.bin
+i915/skl_guc_ver4.bin
+i915/skl_guc_32.0.3.bin
+i915/skl_dmc_ver1_26.bin
+i915/tgl_dmc_ver2_04.bin
+i915/bxt_huc_2.0.0.bin
+i915/tgl_huc_7.0.3.bin
+i915/kbl_dmc_ver1_04.bin
+i915/skl_huc_2.0.0.bin
+i915/tgl_guc_35.2.0.bin
+i915/bxt_guc_32.0.3.bin
+i915/kbl_guc_33.0.0.bin
+i915/icl_guc_33.0.0.bin
+imx/sdma/sdma-imx6q.bin
+imx/sdma/sdma-imx7d.bin
+inside-secure/eip197_minifw/ifpp.bin
+inside-secure/eip197_minifw/ipue.bin
+intel/ibt-17-1.ddc
+intel/ibt-hw-37.7.10-fw-1.80.1.2d.d.bseq
+intel/ice/ddp/ice-1.3.4.0.pkg
+intel/ibt-19-240-1.ddc
+intel/ibt-19-0-0.ddc
+intel/ibt-19-32-4.sfi
+intel/ibt-12-16.sfi
+intel/dsp_fw_glk_v2880.bin
+intel/ibt-17-2.sfi
+intel/ibt-hw-37.7.bseq
+intel/dsp_fw_release_v3402.bin
+intel/ibt-11-5.ddc
+intel/ibt-18-0-1.ddc
+intel/dsp_fw_kbl_v3266.bin
+intel/ibt-hw-37.7.10-fw-1.0.1.2d.d.bseq
+intel/ibt-19-0-4.sfi
+intel/ibt-19-32-0.ddc
+intel/ibt-20-1-4.ddc
+intel/fw_sst_0f28.bin-48kHz_i2s_master
+intel/ibt-17-0-1.sfi
+intel/ibt-hw-37.7.10-fw-1.80.2.3.d.bseq
+intel/ibt-20-1-3.ddc
+intel/dsp_fw_kbl_v2630.bin
+intel/ibt-19-0-1.ddc
+intel/ibt-18-2.sfi
+intel/irci_irci_ecr-master_20161208_0213_20170112_1500.bin
+intel/dsp_fw_release_v969.bin
+intel/ibt-17-16-1.sfi
+intel/ibt-18-16-1.sfi
+intel/IntcSST2.bin
+intel/ibt-20-0-3.ddc
+intel/ibt-19-32-1.ddc
+intel/dsp_fw_cnl_v1191.bin
+intel/ibt-18-1.ddc
+intel/ibt-19-240-4.sfi
+intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq
+intel/dsp_fw_kbl_v701.bin
+intel/dsp_fw_glk_v1814.bin
+intel/ibt-19-16-4.ddc
+intel/ibt-hw-37.8.10-fw-22.50.19.14.f.bseq
+intel/fw_sst_0f28.bin
+intel/dsp_fw_kbl_v1037.bin
+intel/ibt-20-1-4.sfi
+intel/ibt-20-1-3.sfi
+intel/ibt-17-0-1.ddc
+intel/ibt-19-0-1.sfi
+intel/dsp_fw_kbl_v2042.bin
+intel/ibt-18-2.ddc
+intel/ibt-17-16-1.ddc
+intel/ibt-18-16-1.ddc
+intel/fw_sst_0f28_ssp0.bin
+intel/ibt-19-32-1.sfi
+intel/ibt-20-0-3.sfi
+intel/ibt-18-1.sfi
+intel/ibt-19-240-4.ddc
+intel/fw_sst_22a8.bin
+intel/dsp_fw_kbl_v3420.bin
+intel/ibt-19-16-4.sfi
+intel/ibt-hw-37.8.bseq
+intel/dsp_fw_glk_v3366.bin
+intel/ibt-hw-37.8.10-fw-1.10.2.27.d.bseq
+intel/ibt-17-1.sfi
+intel/dsp_fw_kbl_v3402.bin
+intel/ibt-19-0-0.sfi
+intel/ibt-19-240-1.sfi
+intel/ibt-19-32-4.ddc
+intel/ibt-12-16.ddc
+intel/ibt-17-2.ddc
+intel/ibt-hw-37.7.10-fw-1.0.2.3.d.bseq
+intel/dsp_fw_glk_v2768.bin
+intel/dsp_fw_bxtn_v2219.bin
+intel/ibt-18-0-1.sfi
+intel/ibt-11-5.sfi
+intel/ibt-19-0-4.ddc
+intel/dsp_fw_bxtn_v3366.bin
+intel/dsp_fw_cnl_v1858.bin
+intel/ibt-19-32-0.sfi
+isci/isci_firmware.bin
+isdbt_nova_12mhz.inp
+isdbt_nova_12mhz_b0.inp
+isdbt_rio.inp
+iwlwifi-100-5.ucode
+iwlwifi-1000-3.ucode
+iwlwifi-1000-5.ucode
+iwlwifi-105-6.ucode
+iwlwifi-135-6.ucode
+iwlwifi-2000-6.ucode
+iwlwifi-2030-6.ucode
+iwlwifi-3160-10.ucode
+iwlwifi-3160-12.ucode
+iwlwifi-3160-13.ucode
+iwlwifi-3160-16.ucode
+iwlwifi-3160-17.ucode
+iwlwifi-3160-7.ucode
+iwlwifi-3160-8.ucode
+iwlwifi-3160-9.ucode
+iwlwifi-3168-21.ucode
+iwlwifi-3168-22.ucode
+iwlwifi-3168-27.ucode
+iwlwifi-3168-29.ucode
+iwlwifi-3945-2.ucode
+iwlwifi-4965-2.ucode
+iwlwifi-5000-1.ucode
+iwlwifi-5000-2.ucode
+iwlwifi-5000-5.ucode
+iwlwifi-5150-2.ucode
+iwlwifi-6000-4.ucode
+iwlwifi-6000g2a-5.ucode
+iwlwifi-6000g2a-6.ucode
+iwlwifi-6000g2b-5.ucode
+iwlwifi-6000g2b-6.ucode
+iwlwifi-6050-4.ucode
+iwlwifi-6050-5.ucode
+iwlwifi-7260-10.ucode
+iwlwifi-7260-12.ucode
+iwlwifi-7260-13.ucode
+iwlwifi-7260-16.ucode
+iwlwifi-7260-17.ucode
+iwlwifi-7260-7.ucode
+iwlwifi-7260-8.ucode
+iwlwifi-7260-9.ucode
+iwlwifi-7265-10.ucode
+iwlwifi-7265-12.ucode
+iwlwifi-7265-13.ucode
+iwlwifi-7265-16.ucode
+iwlwifi-7265-17.ucode
+iwlwifi-7265-8.ucode
+iwlwifi-7265-9.ucode
+iwlwifi-7265D-10.ucode
+iwlwifi-7265D-12.ucode
+iwlwifi-7265D-13.ucode
+iwlwifi-7265D-16.ucode
+iwlwifi-7265D-17.ucode
+iwlwifi-7265D-21.ucode
+iwlwifi-7265D-22.ucode
+iwlwifi-7265D-27.ucode
+iwlwifi-7265D-29.ucode
+iwlwifi-8000C-13.ucode
+iwlwifi-8000C-16.ucode
+iwlwifi-8000C-21.ucode
+iwlwifi-8000C-22.ucode
+iwlwifi-8000C-27.ucode
+iwlwifi-8000C-31.ucode
+iwlwifi-8000C-34.ucode
+iwlwifi-8000C-36.ucode
+iwlwifi-8265-21.ucode
+iwlwifi-8265-22.ucode
+iwlwifi-8265-27.ucode
+iwlwifi-8265-31.ucode
+iwlwifi-8265-34.ucode
+iwlwifi-8265-36.ucode
+iwlwifi-9000-pu-b0-jf-b0-33.ucode
+iwlwifi-9000-pu-b0-jf-b0-34.ucode
+iwlwifi-9000-pu-b0-jf-b0-38.ucode
+iwlwifi-9000-pu-b0-jf-b0-41.ucode
+iwlwifi-9000-pu-b0-jf-b0-43.ucode
+iwlwifi-9000-pu-b0-jf-b0-46.ucode
+iwlwifi-9260-th-b0-jf-b0-33.ucode
+iwlwifi-9260-th-b0-jf-b0-34.ucode
+iwlwifi-9260-th-b0-jf-b0-38.ucode
+iwlwifi-9260-th-b0-jf-b0-41.ucode
+iwlwifi-9260-th-b0-jf-b0-43.ucode
+iwlwifi-9260-th-b0-jf-b0-46.ucode
+iwlwifi-Qu-b0-hr-b0-48.ucode
+iwlwifi-Qu-b0-jf-b0-48.ucode
+iwlwifi-Qu-c0-hr-b0-48.ucode
+iwlwifi-Qu-c0-jf-b0-48.ucode
+iwlwifi-QuZ-a0-hr-b0-48.ucode
+iwlwifi-QuZ-a0-jf-b0-48.ucode
+iwlwifi-cc-a0-46.ucode
+iwlwifi-cc-a0-48.ucode
+kaweth/new_code_fix.bin
+kaweth/trigger_code_fix.bin
+kaweth/trigger_code.bin
+kaweth/new_code.bin
+keyspan/usa28x.fw
+keyspan/usa49w.fw
+keyspan/usa49wlc.fw
+keyspan/usa28.fw
+keyspan/usa19qw.fw
+keyspan/usa28xa.fw
+keyspan/usa19w.fw
+keyspan/usa28xb.fw
+keyspan/usa19qi.fw
+keyspan/mpr.fw
+keyspan/usa18x.fw
+keyspan/usa19.fw
+keyspan_pda/keyspan_pda.fw
+keyspan_pda/xircom_pgs.fw
+lbtf_usb.bin
+libertas/usb8682.bin
+libertas/sd8686_v8_helper.bin
+libertas/gspi8686_v9_helper.bin
+libertas/cf8381.bin
+libertas/gspi8682.bin
+libertas/gspi8688_helper.bin
+libertas/lbtf_sdio.bin
+libertas/sd8385.bin
+libertas/usb8388_v9.bin
+libertas/cf8381_helper.bin
+libertas/sd8686_v9.bin
+libertas/gspi8682_helper.bin
+libertas/gspi8686_v9.bin
+libertas/gspi8688.bin
+libertas/cf8385.bin
+libertas/sd8682_helper.bin
+libertas/sd8686_v8.bin
+libertas/usb8388_olpc.bin
+libertas/sd8385_helper.bin
+libertas/cf8385_helper.bin
+libertas/usb8388_v5.bin
+libertas/sd8686_v9_helper.bin
+libertas/sd8682.bin
+liquidio/lio_23xx_vsw.bin
+liquidio/lio_210sv_nic.bin
+liquidio/lio_23xx_nic.bin
+liquidio/lio_210nv_nic.bin
+liquidio/lio_410nv_nic.bin
+matrox/g400_warp.fw
+matrox/g200_warp.fw
+mediatek/mt7615_n9.bin
+mediatek/mt7622_n9.bin
+mediatek/mt7668pr2h.bin
+mediatek/mt7610u.bin
+mediatek/mt7622pr2h.bin
+mediatek/mt7622_rom_patch.bin
+mediatek/mt7662u.bin
+mediatek/mt7650e.bin
+mediatek/mt7615_cr4.bin
+mediatek/mt7615_rom_patch.bin
+mediatek/mt8173/vpu_d.bin
+mediatek/mt8173/vpu_p.bin
+mediatek/mt7610e.bin
+mediatek/mt7662u_rom_patch.bin
+mellanox/mlxsw_spectrum-13.1620.192.mfa2
+mellanox/mlxsw_spectrum-13.2000.1886.mfa2
+mellanox/mlxsw_spectrum2-29.2000.2308.mfa2
+mellanox/mlxsw_spectrum-13.1530.152.mfa2
+mellanox/mlxsw_spectrum-13.1420.122.mfa2
+mellanox/mlxsw_spectrum-13.1702.6.mfa2
+mellanox/mlxsw_spectrum-13.1703.4.mfa2
+mellanox/mlxsw_spectrum-13.2000.2714.mfa2
+mellanox/mlxsw_spectrum-13.2000.1122.mfa2
+mellanox/mlxsw_spectrum2-29.2000.2714.mfa2
+mellanox/mlxsw_spectrum-13.1910.622.mfa2
+mellanox/mlxsw_spectrum-13.2000.2308.mfa2
+meson/vdec/gxl_mpeg4_5.bin
+meson/vdec/gxl_h263.bin
+meson/vdec/gxl_h264.bin
+meson/vdec/gxl_hevc_mmu.bin
+meson/vdec/gxl_mpeg12.bin
+meson/vdec/gxl_vp9.bin
+meson/vdec/gxm_h264.bin
+meson/vdec/g12a_hevc_mmu.bin
+meson/vdec/g12a_h264.bin
+meson/vdec/gxl_hevc.bin
+meson/vdec/sm1_vp9_mmu.bin
+meson/vdec/gxl_mjpeg.bin
+meson/vdec/sm1_hevc_mmu.bin
+meson/vdec/g12a_vp9.bin
+meson/vdec/gxbb_h264.bin
+microchip/mscc_vsc8574_revb_int8051_29e8.bin
+microchip/mscc_vsc8584_revb_int8051_fb48.bin
+moxa/moxa-1150.fw
+moxa/moxa-1151.fw
+moxa/moxa-1451.fw
+moxa/moxa-1613.fw
+moxa/moxa-1450.fw
+moxa/moxa-1131.fw
+moxa/moxa-1130.fw
+moxa/moxa-1658.fw
+moxa/moxa-1250.fw
+moxa/moxa-1618.fw
+moxa/moxa-1251.fw
+moxa/moxa-1653.fw
+moxa/moxa-1410.fw
+moxa/moxa-1110.fw
+mrvl/pcie8997_wlan_v4.bin
+mrvl/usb8766_uapsta.bin
+mrvl/usb8801_uapsta.bin
+mrvl/sd8897_uapsta.bin
+mrvl/sd8797_uapsta.bin
+mrvl/sdsd8997_combo_v4.bin
+mrvl/sd8801_uapsta.bin
+mrvl/pcieusb8997_combo_v4.bin
+mrvl/pcie8897_uapsta.bin
+mrvl/pcieuart8997_combo_v4.bin
+mrvl/sd8688_helper.bin
+mrvl/sd8787_uapsta.bin
+mrvl/usb8897_uapsta.bin
+mrvl/usbusb8997_combo_v4.bin
+mrvl/sd8688.bin
+mrvl/sdsd8977_combo_v2.bin
+mrvl/usb8797_uapsta.bin
+mrvl/sd8887_uapsta.bin
+mt7601u.bin
+mt7650.bin
+mt7662.bin
+mt7662_rom_patch.bin
+mts_cdma.fw
+mts_edge.fw
+mts_gsm.fw
+mwl8k/fmimage_8764_ap-1.fw
+mwl8k/helper_8687.fw
+mwl8k/fmimage_8366.fw
+mwl8k/fmimage_8687.fw
+mwl8k/helper_8366.fw
+mwl8k/fmimage_8366_ap-3.fw
+mwl8k/fmimage_8366_ap-2.fw
+mwl8k/fmimage_8366_ap-1.fw
+mwlwifi/88W8864.bin
+mwlwifi/88W8897.bin
+myri10ge_eth_big_z8e.dat
+myri10ge_eth_z8e.dat
+myri10ge_ethp_big_z8e.dat
+myri10ge_ethp_z8e.dat
+myri10ge_rss_eth_big_z8e.dat
+myri10ge_rss_eth_z8e.dat
+myri10ge_rss_ethp_big_z8e.dat
+myri10ge_rss_ethp_z8e.dat
+netronome/nic/nic_AMDA0099-0001_2x25.nffw
+netronome/nic/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/nic/nic_AMDA0099-0001_2x10.nffw
+netronome/nic/nic_AMDA0081-0001_4x10.nffw
+netronome/nic/nic_AMDA0078-0011_1x100.nffw
+netronome/nic/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/nic/nic_AMDA0097-0001_2x40.nffw
+netronome/nic/nic_AMDA0096-0001_2x10.nffw
+netronome/nic/nic_AMDA0058-0012_2x40.nffw
+netronome/nic/nic_AMDA0081-0001_1x40.nffw
+netronome/nic/nic_AMDA0058-0011_2x40.nffw
+netronome/nic/nic_AMDA0097-0001_8x10.nffw
+netronome/flower/nic_AMDA0058.nffw
+netronome/flower/nic_AMDA0099.nffw
+netronome/flower/nic_AMDA0097.nffw
+netronome/flower/nic_AMDA0096.nffw
+netronome/bpf/nic_AMDA0099-0001_2x10.nffw
+netronome/bpf/nic_AMDA0099-0001_2x25.nffw
+netronome/bpf/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/bpf/nic_AMDA0081-0001_4x10.nffw
+netronome/bpf/nic_AMDA0096-0001_2x10.nffw
+netronome/bpf/nic_AMDA0078-0011_1x100.nffw
+netronome/bpf/nic_AMDA0097-0001_8x10.nffw
+netronome/bpf/nic_AMDA0058-0011_2x40.nffw
+netronome/bpf/nic_AMDA0081-0001_1x40.nffw
+netronome/bpf/nic_AMDA0058-0012_2x40.nffw
+netronome/bpf/nic_AMDA0097-0001_2x40.nffw
+netronome/bpf/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/nic-sriov/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/nic-sriov/nic_AMDA0097-0001_2x40.nffw
+netronome/nic-sriov/nic_AMDA0081-0001_1x40.nffw
+netronome/nic-sriov/nic_AMDA0058-0012_2x40.nffw
+netronome/nic-sriov/nic_AMDA0058-0011_2x40.nffw
+netronome/nic-sriov/nic_AMDA0097-0001_8x10.nffw
+netronome/nic-sriov/nic_AMDA0078-0011_1x100.nffw
+netronome/nic-sriov/nic_AMDA0096-0001_2x10.nffw
+netronome/nic-sriov/nic_AMDA0081-0001_4x10.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_2x25.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_2x10.nffw
+nvidia/tu116/gr/gpccs_bl.bin
+nvidia/tu116/gr/gpccs_data.bin
+nvidia/tu116/gr/fecs_inst.bin
+nvidia/tu116/gr/sw_bundle_init.bin
+nvidia/tu116/gr/sw_ctx.bin
+nvidia/tu116/gr/gpccs_sig.bin
+nvidia/tu116/gr/sw_method_init.bin
+nvidia/tu116/gr/sw_veid_bundle_init.bin
+nvidia/tu116/gr/fecs_sig.bin
+nvidia/tu116/gr/gpccs_inst.bin
+nvidia/tu116/gr/fecs_data.bin
+nvidia/tu116/gr/fecs_bl.bin
+nvidia/tu116/gr/sw_nonctx.bin
+nvidia/tu116/nvdec/scrubber.bin
+nvidia/tu116/acr/bl.bin
+nvidia/tu116/acr/ucode_ahesasc.bin
+nvidia/tu116/acr/ucode_asb.bin
+nvidia/tu116/acr/ucode_unload.bin
+nvidia/tu116/acr/unload_bl.bin
+nvidia/tu116/sec2/sig.bin
+nvidia/tu116/sec2/image.bin
+nvidia/tu116/sec2/desc.bin
+nvidia/gp108/sec2/desc.bin
+nvidia/gp108/sec2/sig.bin
+nvidia/gp108/sec2/image.bin
+nvidia/gp108/acr/bl.bin
+nvidia/gp108/acr/ucode_load.bin
+nvidia/gp108/acr/ucode_unload.bin
+nvidia/gp108/acr/unload_bl.bin
+nvidia/gp108/nvdec/scrubber.bin
+nvidia/gp108/gr/gpccs_inst.bin
+nvidia/gp108/gr/fecs_bl.bin
+nvidia/gp108/gr/fecs_inst.bin
+nvidia/gp108/gr/gpccs_bl.bin
+nvidia/gp108/gr/sw_ctx.bin
+nvidia/gp108/gr/gpccs_sig.bin
+nvidia/gp108/gr/sw_bundle_init.bin
+nvidia/gp108/gr/fecs_sig.bin
+nvidia/gp108/gr/sw_method_init.bin
+nvidia/gp108/gr/gpccs_data.bin
+nvidia/gp108/gr/fecs_data.bin
+nvidia/gp108/gr/sw_nonctx.bin
+nvidia/gp102/nvdec/scrubber.bin
+nvidia/gp102/gr/sw_bundle_init.bin
+nvidia/gp102/gr/gpccs_bl.bin
+nvidia/gp102/gr/gpccs_sig.bin
+nvidia/gp102/gr/gpccs_data.bin
+nvidia/gp102/gr/sw_ctx.bin
+nvidia/gp102/gr/fecs_inst.bin
+nvidia/gp102/gr/sw_nonctx.bin
+nvidia/gp102/gr/fecs_data.bin
+nvidia/gp102/gr/fecs_bl.bin
+nvidia/gp102/gr/sw_method_init.bin
+nvidia/gp102/gr/fecs_sig.bin
+nvidia/gp102/gr/gpccs_inst.bin
+nvidia/gp102/sec2/desc-1.bin
+nvidia/gp102/sec2/sig.bin
+nvidia/gp102/sec2/sig-1.bin
+nvidia/gp102/sec2/image.bin
+nvidia/gp102/sec2/image-1.bin
+nvidia/gp102/sec2/desc.bin
+nvidia/gp102/acr/bl.bin
+nvidia/gp102/acr/ucode_load.bin
+nvidia/gp102/acr/unload_bl.bin
+nvidia/gp102/acr/ucode_unload.bin
+nvidia/gm204/acr/ucode_load.bin
+nvidia/gm204/acr/bl.bin
+nvidia/gm204/acr/ucode_unload.bin
+nvidia/gm204/gr/gpccs_sig.bin
+nvidia/gm204/gr/gpccs_data.bin
+nvidia/gm204/gr/fecs_inst.bin
+nvidia/gm204/gr/sw_method_init.bin
+nvidia/gm204/gr/gpccs_bl.bin
+nvidia/gm204/gr/fecs_bl.bin
+nvidia/gm204/gr/fecs_sig.bin
+nvidia/gm204/gr/gpccs_inst.bin
+nvidia/gm204/gr/sw_nonctx.bin
+nvidia/gm204/gr/sw_bundle_init.bin
+nvidia/gm204/gr/fecs_data.bin
+nvidia/gm204/gr/sw_ctx.bin
+nvidia/tegra186/xusb.bin
+nvidia/tegra186/vic04_ucode.bin
+nvidia/gp10b/pmu/desc.bin
+nvidia/gp10b/pmu/image.bin
+nvidia/gp10b/pmu/sig.bin
+nvidia/gp10b/gr/fecs_data.bin
+nvidia/gp10b/gr/gpccs_inst.bin
+nvidia/gp10b/gr/sw_ctx.bin
+nvidia/gp10b/gr/sw_nonctx.bin
+nvidia/gp10b/gr/sw_bundle_init.bin
+nvidia/gp10b/gr/fecs_bl.bin
+nvidia/gp10b/gr/gpccs_bl.bin
+nvidia/gp10b/gr/gpccs_sig.bin
+nvidia/gp10b/gr/fecs_sig.bin
+nvidia/gp10b/gr/gpccs_data.bin
+nvidia/gp10b/gr/fecs_inst.bin
+nvidia/gp10b/gr/sw_method_init.bin
+nvidia/gp10b/acr/ucode_load.bin
+nvidia/gp10b/acr/bl.bin
+nvidia/tu102/gr/gpccs_data.bin
+nvidia/tu102/gr/fecs_inst.bin
+nvidia/tu102/gr/fecs_bl.bin
+nvidia/tu102/gr/sw_veid_bundle_init.bin
+nvidia/tu102/gr/gpccs_bl.bin
+nvidia/tu102/gr/sw_bundle_init.bin
+nvidia/tu102/gr/gpccs_sig.bin
+nvidia/tu102/gr/sw_method_init.bin
+nvidia/tu102/gr/fecs_sig.bin
+nvidia/tu102/gr/gpccs_inst.bin
+nvidia/tu102/gr/sw_ctx.bin
+nvidia/tu102/gr/fecs_data.bin
+nvidia/tu102/gr/sw_nonctx.bin
+nvidia/tu102/nvdec/scrubber.bin
+nvidia/tu102/sec2/image.bin
+nvidia/tu102/sec2/desc.bin
+nvidia/tu102/sec2/sig.bin
+nvidia/tu102/acr/ucode_unload.bin
+nvidia/tu102/acr/bl.bin
+nvidia/tu102/acr/unload_bl.bin
+nvidia/tu102/acr/ucode_asb.bin
+nvidia/tu102/acr/ucode_ahesasc.bin
+nvidia/tu10x/typec/ccg_primary.cyacd
+nvidia/tu10x/typec/ccg_secondary.cyacd
+nvidia/tu10x/typec/ccg_boot.cyacd
+nvidia/tu106/gr/sw_method_init.bin
+nvidia/tu106/gr/sw_veid_bundle_init.bin
+nvidia/tu106/gr/gpccs_bl.bin
+nvidia/tu106/gr/gpccs_inst.bin
+nvidia/tu106/gr/sw_nonctx.bin
+nvidia/tu106/gr/fecs_data.bin
+nvidia/tu106/gr/gpccs_data.bin
+nvidia/tu106/gr/sw_ctx.bin
+nvidia/tu106/gr/fecs_inst.bin
+nvidia/tu106/gr/sw_bundle_init.bin
+nvidia/tu106/gr/fecs_sig.bin
+nvidia/tu106/gr/fecs_bl.bin
+nvidia/tu106/gr/gpccs_sig.bin
+nvidia/tu106/acr/ucode_ahesasc.bin
+nvidia/tu106/acr/ucode_unload.bin
+nvidia/tu106/acr/unload_bl.bin
+nvidia/tu106/acr/bl.bin
+nvidia/tu106/acr/ucode_asb.bin
+nvidia/tu106/sec2/desc.bin
+nvidia/tu106/sec2/image.bin
+nvidia/tu106/sec2/sig.bin
+nvidia/tu106/nvdec/scrubber.bin
+nvidia/tegra124/vic03_ucode.bin
+nvidia/tegra124/xusb.bin
+nvidia/gp106/sec2/desc.bin
+nvidia/gp106/sec2/image-1.bin
+nvidia/gp106/sec2/sig.bin
+nvidia/gp106/sec2/sig-1.bin
+nvidia/gp106/sec2/image.bin
+nvidia/gp106/sec2/desc-1.bin
+nvidia/gp106/gr/fecs_sig.bin
+nvidia/gp106/gr/fecs_inst.bin
+nvidia/gp106/gr/sw_bundle_init.bin
+nvidia/gp106/gr/gpccs_sig.bin
+nvidia/gp106/gr/gpccs_data.bin
+nvidia/gp106/gr/gpccs_inst.bin
+nvidia/gp106/gr/fecs_bl.bin
+nvidia/gp106/gr/fecs_data.bin
+nvidia/gp106/gr/gpccs_bl.bin
+nvidia/gp106/gr/sw_ctx.bin
+nvidia/gp106/gr/sw_nonctx.bin
+nvidia/gp106/gr/sw_method_init.bin
+nvidia/gp106/nvdec/scrubber.bin
+nvidia/gp106/acr/ucode_unload.bin
+nvidia/gp106/acr/bl.bin
+nvidia/gp106/acr/ucode_load.bin
+nvidia/gp106/acr/unload_bl.bin
+nvidia/gm200/acr/ucode_unload.bin
+nvidia/gm200/acr/bl.bin
+nvidia/gm200/acr/ucode_load.bin
+nvidia/gm200/gr/fecs_sig.bin
+nvidia/gm200/gr/sw_ctx.bin
+nvidia/gm200/gr/fecs_data.bin
+nvidia/gm200/gr/gpccs_data.bin
+nvidia/gm200/gr/sw_nonctx.bin
+nvidia/gm200/gr/sw_method_init.bin
+nvidia/gm200/gr/gpccs_inst.bin
+nvidia/gm200/gr/fecs_inst.bin
+nvidia/gm200/gr/sw_bundle_init.bin
+nvidia/gm200/gr/gpccs_sig.bin
+nvidia/gm200/gr/fecs_bl.bin
+nvidia/gm200/gr/gpccs_bl.bin
+nvidia/gp104/gr/sw_method_init.bin
+nvidia/gp104/gr/gpccs_data.bin
+nvidia/gp104/gr/sw_nonctx.bin
+nvidia/gp104/gr/fecs_data.bin
+nvidia/gp104/gr/fecs_sig.bin
+nvidia/gp104/gr/fecs_inst.bin
+nvidia/gp104/gr/gpccs_bl.bin
+nvidia/gp104/gr/sw_ctx.bin
+nvidia/gp104/gr/fecs_bl.bin
+nvidia/gp104/gr/sw_bundle_init.bin
+nvidia/gp104/gr/gpccs_sig.bin
+nvidia/gp104/gr/gpccs_inst.bin
+nvidia/gp104/nvdec/scrubber.bin
+nvidia/gp104/acr/ucode_unload.bin
+nvidia/gp104/acr/bl.bin
+nvidia/gp104/acr/ucode_load.bin
+nvidia/gp104/acr/unload_bl.bin
+nvidia/gp104/sec2/desc-1.bin
+nvidia/gp104/sec2/image.bin
+nvidia/gp104/sec2/image-1.bin
+nvidia/gp104/sec2/desc.bin
+nvidia/gp104/sec2/sig-1.bin
+nvidia/gp104/sec2/sig.bin
+nvidia/gk20a/gpccs_inst.bin
+nvidia/gk20a/sw_ctx.bin
+nvidia/gk20a/sw_bundle_init.bin
+nvidia/gk20a/fecs_inst.bin
+nvidia/gk20a/sw_method_init.bin
+nvidia/gk20a/fecs_data.bin
+nvidia/gk20a/sw_nonctx.bin
+nvidia/gk20a/gpccs_data.bin
+nvidia/tegra210/vic04_ucode.bin
+nvidia/tegra210/xusb.bin
+nvidia/gm20b/gr/fecs_inst.bin
+nvidia/gm20b/gr/sw_ctx.bin
+nvidia/gm20b/gr/gpccs_data.bin
+nvidia/gm20b/gr/fecs_bl.bin
+nvidia/gm20b/gr/sw_method_init.bin
+nvidia/gm20b/gr/fecs_sig.bin
+nvidia/gm20b/gr/sw_bundle_init.bin
+nvidia/gm20b/gr/sw_nonctx.bin
+nvidia/gm20b/gr/fecs_data.bin
+nvidia/gm20b/gr/gpccs_inst.bin
+nvidia/gm20b/acr/ucode_load.bin
+nvidia/gm20b/acr/bl.bin
+nvidia/gm20b/pmu/image.bin
+nvidia/gm20b/pmu/sig.bin
+nvidia/gm20b/pmu/desc.bin
+nvidia/tu104/acr/ucode_ahesasc.bin
+nvidia/tu104/acr/ucode_unload.bin
+nvidia/tu104/acr/unload_bl.bin
+nvidia/tu104/acr/ucode_asb.bin
+nvidia/tu104/acr/bl.bin
+nvidia/tu104/sec2/desc.bin
+nvidia/tu104/sec2/image.bin
+nvidia/tu104/sec2/sig.bin
+nvidia/tu104/gr/sw_ctx.bin
+nvidia/tu104/gr/gpccs_bl.bin
+nvidia/tu104/gr/sw_nonctx.bin
+nvidia/tu104/gr/fecs_data.bin
+nvidia/tu104/gr/sw_method_init.bin
+nvidia/tu104/gr/gpccs_data.bin
+nvidia/tu104/gr/fecs_bl.bin
+nvidia/tu104/gr/sw_bundle_init.bin
+nvidia/tu104/gr/gpccs_inst.bin
+nvidia/tu104/gr/gpccs_sig.bin
+nvidia/tu104/gr/fecs_sig.bin
+nvidia/tu104/gr/sw_veid_bundle_init.bin
+nvidia/tu104/gr/fecs_inst.bin
+nvidia/tu104/nvdec/scrubber.bin
+nvidia/tegra194/xusb.bin
+nvidia/gv100/nvdec/scrubber.bin
+nvidia/gv100/gr/gpccs_data.bin
+nvidia/gv100/gr/fecs_data.bin
+nvidia/gv100/gr/sw_nonctx.bin
+nvidia/gv100/gr/sw_method_init.bin
+nvidia/gv100/gr/gpccs_bl.bin
+nvidia/gv100/gr/sw_bundle_init.bin
+nvidia/gv100/gr/fecs_inst.bin
+nvidia/gv100/gr/sw_ctx.bin
+nvidia/gv100/gr/fecs_bl.bin
+nvidia/gv100/gr/fecs_sig.bin
+nvidia/gv100/gr/gpccs_sig.bin
+nvidia/gv100/gr/gpccs_inst.bin
+nvidia/gv100/sec2/desc.bin
+nvidia/gv100/sec2/sig.bin
+nvidia/gv100/sec2/image.bin
+nvidia/gv100/acr/bl.bin
+nvidia/gv100/acr/ucode_unload.bin
+nvidia/gv100/acr/unload_bl.bin
+nvidia/gv100/acr/ucode_load.bin
+nvidia/tu117/gr/gpccs_sig.bin
+nvidia/tu117/gr/fecs_bl.bin
+nvidia/tu117/gr/fecs_sig.bin
+nvidia/tu117/gr/gpccs_inst.bin
+nvidia/tu117/gr/fecs_inst.bin
+nvidia/tu117/gr/sw_method_init.bin
+nvidia/tu117/gr/sw_veid_bundle_init.bin
+nvidia/tu117/gr/sw_nonctx.bin
+nvidia/tu117/gr/gpccs_data.bin
+nvidia/tu117/gr/sw_bundle_init.bin
+nvidia/tu117/gr/fecs_data.bin
+nvidia/tu117/gr/gpccs_bl.bin
+nvidia/tu117/gr/sw_ctx.bin
+nvidia/tu117/acr/unload_bl.bin
+nvidia/tu117/acr/bl.bin
+nvidia/tu117/acr/ucode_asb.bin
+nvidia/tu117/acr/ucode_unload.bin
+nvidia/tu117/acr/ucode_ahesasc.bin
+nvidia/tu117/sec2/image.bin
+nvidia/tu117/sec2/desc.bin
+nvidia/tu117/sec2/sig.bin
+nvidia/tu117/nvdec/scrubber.bin
+nvidia/gp107/acr/ucode_unload.bin
+nvidia/gp107/acr/bl.bin
+nvidia/gp107/acr/unload_bl.bin
+nvidia/gp107/acr/ucode_load.bin
+nvidia/gp107/nvdec/scrubber.bin
+nvidia/gp107/gr/gpccs_inst.bin
+nvidia/gp107/gr/gpccs_bl.bin
+nvidia/gp107/gr/sw_bundle_init.bin
+nvidia/gp107/gr/sw_nonctx.bin
+nvidia/gp107/gr/fecs_data.bin
+nvidia/gp107/gr/sw_ctx.bin
+nvidia/gp107/gr/sw_method_init.bin
+nvidia/gp107/gr/fecs_inst.bin
+nvidia/gp107/gr/fecs_bl.bin
+nvidia/gp107/gr/gpccs_sig.bin
+nvidia/gp107/gr/gpccs_data.bin
+nvidia/gp107/gr/fecs_sig.bin
+nvidia/gp107/sec2/sig-1.bin
+nvidia/gp107/sec2/image.bin
+nvidia/gp107/sec2/desc.bin
+nvidia/gp107/sec2/desc-1.bin
+nvidia/gp107/sec2/image-1.bin
+nvidia/gp107/sec2/sig.bin
+nvidia/gm206/acr/bl.bin
+nvidia/gm206/acr/ucode_unload.bin
+nvidia/gm206/acr/ucode_load.bin
+nvidia/gm206/gr/sw_bundle_init.bin
+nvidia/gm206/gr/gpccs_data.bin
+nvidia/gm206/gr/fecs_inst.bin
+nvidia/gm206/gr/gpccs_sig.bin
+nvidia/gm206/gr/fecs_sig.bin
+nvidia/gm206/gr/fecs_bl.bin
+nvidia/gm206/gr/gpccs_bl.bin
+nvidia/gm206/gr/sw_nonctx.bin
+nvidia/gm206/gr/gpccs_inst.bin
+nvidia/gm206/gr/sw_method_init.bin
+nvidia/gm206/gr/fecs_data.bin
+nvidia/gm206/gr/sw_ctx.bin
+nvidia/gp100/gr/sw_bundle_init.bin
+nvidia/gp100/gr/sw_nonctx.bin
+nvidia/gp100/gr/fecs_data.bin
+nvidia/gp100/gr/fecs_sig.bin
+nvidia/gp100/gr/gpccs_inst.bin
+nvidia/gp100/gr/fecs_bl.bin
+nvidia/gp100/gr/gpccs_sig.bin
+nvidia/gp100/gr/sw_ctx.bin
+nvidia/gp100/gr/fecs_inst.bin
+nvidia/gp100/gr/sw_method_init.bin
+nvidia/gp100/gr/gpccs_bl.bin
+nvidia/gp100/gr/gpccs_data.bin
+nvidia/gp100/acr/ucode_load.bin
+nvidia/gp100/acr/bl.bin
+nvidia/gp100/acr/ucode_unload.bin
+phanfw.bin
+qat_895xcc.bin
+qat_895xcc_mmp.bin
+qat_c3xxx.bin
+qat_c3xxx_mmp.bin
+qat_c62x.bin
+qat_c62x_mmp.bin
+qca/rampatch_usb_00000302.bin
+qca/nvm_00130300.bin
+qca/crnv32.bin
+qca/rampatch_00130302.bin
+qca/nvm_usb_00000302.bin
+qca/nvm_00440302_eu.bin
+qca/crbtfw21.tlv
+qca/rampatch_00440302.bin
+qca/nvm_usb_00000201.bin
+qca/rampatch_usb_00000200.bin
+qca/nvm_00440302.bin
+qca/nvm_00440302_i2s_eu.bin
+qca/rampatch_usb_00000300.bin
+qca/nvm_usb_00000302_eu.bin
+qca/NOTICE.txt
+qca/nvm_00130302.bin
+qca/crnv21.bin
+qca/nvm_usb_00000200.bin
+qca/rampatch_usb_00000201.bin
+qca/crbtfw32.tlv
+qca/nvm_usb_00000300.bin
+qca/rampatch_00130300.bin
+qcom/a530v3_gpmu.fw2
+qcom/a630_sqe.fw
+qcom/a300_pfp.fw
+qcom/a530_zap.b00
+qcom/venus-5.4/venus.b04
+qcom/venus-5.4/venus.b03
+qcom/venus-5.4/venus.b00
+qcom/venus-5.4/venus.b02
+qcom/venus-5.4/venus.mbn
+qcom/venus-5.4/venus.b01
+qcom/venus-5.4/venus.mdt
+qcom/venus-1.8/venus.b00
+qcom/venus-1.8/venus.b04
+qcom/venus-1.8/venus.b03
+qcom/venus-1.8/venus.mdt
+qcom/venus-1.8/venus.b01
+qcom/venus-1.8/venus.b02
+qcom/a300_pm4.fw
+qcom/venus-4.2/venus.mdt
+qcom/venus-4.2/venus.b01
+qcom/venus-4.2/venus.b02
+qcom/venus-4.2/venus.b00
+qcom/venus-4.2/venus.b03
+qcom/venus-4.2/venus.b04
+qcom/a530_zap.mdt
+qcom/a630_gmu.bin
+qcom/sdm845/cdspr.jsn
+qcom/sdm845/adsp.mbn
+qcom/sdm845/cdsp.mbn
+qcom/sdm845/modemuw.jsn
+qcom/sdm845/mba.mbn
+qcom/sdm845/adspr.jsn
+qcom/sdm845/modem.mbn
+qcom/sdm845/adspua.jsn
+qcom/a530_zap.b01
+qcom/a530_pm4.fw
+qcom/venus-5.2/venus.b00
+qcom/venus-5.2/venus.b03
+qcom/venus-5.2/venus.b04
+qcom/venus-5.2/venus.mbn
+qcom/venus-5.2/venus.b01
+qcom/venus-5.2/venus.mdt
+qcom/venus-5.2/venus.b02
+qcom/a530_pfp.fw
+qcom/a530_zap.b02
+qcom/NOTICE.txt
+qed/qed_init_values-8.14.6.0.bin
+qed/qed_init_values-8.33.12.0.bin
+qed/qed_init_values_zipped-8.15.3.0.bin
+qed/qed_init_values_zipped-8.42.2.0.bin
+qed/qed_init_values-8.37.7.0.bin
+qed/qed_init_values_zipped-8.33.1.0.bin
+qed/qed_init_values-8.20.0.0.bin
+qed/qed_init_values_zipped-8.4.2.0.bin
+qed/qed_init_values_zipped-8.37.2.0.bin
+qed/qed_init_values_zipped-8.33.11.0.bin
+qed/qed_init_values-8.18.9.0.bin
+qed/qed_init_values-8.10.9.0.bin
+qed/qed_init_values_zipped-8.10.10.0.bin
+qed/qed_init_values_zipped-8.10.5.0.bin
+qed/qed_init_values-8.40.33.0.bin
+qed/qed_init_values_zipped-8.7.3.0.bin
+qed/qed_init_values_zipped-8.20.0.0.bin
+qed/qed_init_values-8.30.12.0.bin
+qed/qed_init_values_zipped-8.37.7.0.bin
+ql2100_fw.bin
+ql2200_fw.bin
+ql2300_fw.bin
+ql2322_fw.bin
+ql2400_fw.bin
+ql2500_fw.bin
+qlogic/12160.bin
+qlogic/sd7220.fw
+qlogic/1040.bin
+qlogic/1280.bin
+r128/r128_cce.bin
+r8a779x_usb3_v1.dlmem
+r8a779x_usb3_v2.dlmem
+r8a779x_usb3_v3.dlmem
+radeon/RV740_smc.bin
+radeon/R420_cp.bin
+radeon/pitcairn_rlc.bin
+radeon/verde_rlc.bin
+radeon/PITCAIRN_mc.bin
+radeon/hawaii_k_smc.bin
+radeon/JUNIPER_smc.bin
+radeon/bonaire_sdma1.bin
+radeon/bonaire_mec.bin
+radeon/HAWAII_mec.bin
+radeon/BONAIRE_rlc.bin
+radeon/SUMO_me.bin
+radeon/tahiti_me.bin
+radeon/KAVERI_pfp.bin
+radeon/R600_uvd.bin
+radeon/kaveri_me.bin
+radeon/BARTS_pfp.bin
+radeon/CAICOS_pfp.bin
+radeon/CAYMAN_smc.bin
+radeon/si58_mc.bin
+radeon/TAHITI_pfp.bin
+radeon/CAYMAN_mc.bin
+radeon/hawaii_pfp.bin
+radeon/MULLINS_rlc.bin
+radeon/hainan_k_smc.bin
+radeon/mullins_mec.bin
+radeon/kaveri_mec.bin
+radeon/HAWAII_sdma.bin
+radeon/verde_ce.bin
+radeon/OLAND_pfp.bin
+radeon/kabini_rlc.bin
+radeon/PITCAIRN_pfp.bin
+radeon/KAVERI_sdma.bin
+radeon/KABINI_ce.bin
+radeon/BTC_rlc.bin
+radeon/mullins_ce.bin
+radeon/OLAND_me.bin
+radeon/pitcairn_me.bin
+radeon/RV610_pfp.bin
+radeon/VERDE_smc.bin
+radeon/hainan_ce.bin
+radeon/HAWAII_me.bin
+radeon/HAWAII_mc2.bin
+radeon/bonaire_me.bin
+radeon/HAINAN_mc.bin
+radeon/TURKS_smc.bin
+radeon/RS780_pfp.bin
+radeon/RV730_smc.bin
+radeon/HAINAN_pfp.bin
+radeon/RV710_pfp.bin
+radeon/verde_k_smc.bin
+radeon/RV710_me.bin
+radeon/kabini_sdma1.bin
+radeon/mullins_sdma.bin
+radeon/VERDE_mc.bin
+radeon/REDWOOD_pfp.bin
+radeon/SUMO_pfp.bin
+radeon/RV635_me.bin
+radeon/JUNIPER_me.bin
+radeon/pitcairn_smc.bin
+radeon/verde_smc.bin
+radeon/tahiti_pfp.bin
+radeon/kaveri_pfp.bin
+radeon/BONAIRE_vce.bin
+radeon/mullins_pfp.bin
+radeon/JUNIPER_rlc.bin
+radeon/R100_cp.bin
+radeon/kabini_uvd.bin
+radeon/hawaii_mec.bin
+radeon/kabini_me.bin
+radeon/BONAIRE_smc.bin
+radeon/KABINI_sdma.bin
+radeon/banks_k_2_smc.bin
+radeon/CAYMAN_rlc.bin
+radeon/CAYMAN_me.bin
+radeon/tahiti_k_smc.bin
+radeon/R700_rlc.bin
+radeon/RV770_pfp.bin
+radeon/R520_cp.bin
+radeon/tahiti_mc.bin
+radeon/CEDAR_pfp.bin
+radeon/SUMO2_pfp.bin
+radeon/HAINAN_mc2.bin
+radeon/kabini_vce.bin
+radeon/CYPRESS_pfp.bin
+radeon/KAVERI_mec.bin
+radeon/KABINI_rlc.bin
+radeon/BONAIRE_ce.bin
+radeon/oland_ce.bin
+radeon/R600_rlc.bin
+radeon/PITCAIRN_me.bin
+radeon/RV670_pfp.bin
+radeon/bonaire_pfp.bin
+radeon/HAWAII_pfp.bin
+radeon/BONAIRE_uvd.bin
+radeon/KAVERI_ce.bin
+radeon/CYPRESS_me.bin
+radeon/MULLINS_me.bin
+radeon/TAHITI_ce.bin
+radeon/RV610_me.bin
+radeon/VERDE_me.bin
+radeon/PITCAIRN_mc2.bin
+radeon/REDWOOD_me.bin
+radeon/OLAND_mc2.bin
+radeon/hainan_pfp.bin
+radeon/VERDE_rlc.bin
+radeon/BONAIRE_sdma.bin
+radeon/ARUBA_pfp.bin
+radeon/TAHITI_mc2.bin
+radeon/HAINAN_me.bin
+radeon/hawaii_ce.bin
+radeon/pitcairn_mc.bin
+radeon/kaveri_mec2.bin
+radeon/OLAND_mc.bin
+radeon/RS780_me.bin
+radeon/bonaire_mc.bin
+radeon/oland_pfp.bin
+radeon/HAWAII_mc.bin
+radeon/VERDE_pfp.bin
+radeon/hainan_mc.bin
+radeon/hainan_rlc.bin
+radeon/R600_me.bin
+radeon/RV630_pfp.bin
+radeon/oland_k_smc.bin
+radeon/TURKS_mc.bin
+radeon/SUMO_uvd.bin
+radeon/ARUBA_rlc.bin
+radeon/HAINAN_ce.bin
+radeon/TURKS_pfp.bin
+radeon/hawaii_me.bin
+radeon/RV730_pfp.bin
+radeon/RV710_smc.bin
+radeon/HAINAN_smc.bin
+radeon/bonaire_sdma.bin
+radeon/BONAIRE_mc2.bin
+radeon/pitcairn_k_smc.bin
+radeon/oland_rlc.bin
+radeon/RS780_uvd.bin
+radeon/VERDE_ce.bin
+radeon/RV710_uvd.bin
+radeon/REDWOOD_smc.bin
+radeon/JUNIPER_pfp.bin
+radeon/mullins_rlc.bin
+radeon/MULLINS_ce.bin
+radeon/hawaii_uvd.bin
+radeon/TAHITI_me.bin
+radeon/BARTS_mc.bin
+radeon/kaveri_rlc.bin
+radeon/KAVERI_me.bin
+radeon/SUMO2_me.bin
+radeon/kabini_mec.bin
+radeon/tahiti_rlc.bin
+radeon/BONAIRE_me.bin
+radeon/oland_me.bin
+radeon/TAHITI_vce.bin
+radeon/PITCAIRN_ce.bin
+radeon/RS690_cp.bin
+radeon/CEDAR_me.bin
+radeon/RV670_me.bin
+radeon/CAICOS_smc.bin
+radeon/BARTS_smc.bin
+radeon/CAYMAN_pfp.bin
+radeon/RV630_me.bin
+radeon/TAHITI_smc.bin
+radeon/MULLINS_mec.bin
+radeon/KABINI_pfp.bin
+radeon/kaveri_sdma.bin
+radeon/BONAIRE_mec.bin
+radeon/CYPRESS_rlc.bin
+radeon/hawaii_smc.bin
+radeon/R200_cp.bin
+radeon/CEDAR_rlc.bin
+radeon/kabini_ce.bin
+radeon/CAICOS_mc.bin
+radeon/hawaii_sdma.bin
+radeon/ARUBA_me.bin
+radeon/TAHITI_uvd.bin
+radeon/hawaii_vce.bin
+radeon/PALM_pfp.bin
+radeon/R600_pfp.bin
+radeon/verde_mc.bin
+radeon/HAWAII_rlc.bin
+radeon/bonaire_rlc.bin
+radeon/OLAND_smc.bin
+radeon/PITCAIRN_smc.bin
+radeon/hainan_smc.bin
+radeon/RS600_cp.bin
+radeon/HAINAN_rlc.bin
+radeon/RV620_me.bin
+radeon/mullins_sdma1.bin
+radeon/MULLINS_sdma.bin
+radeon/hawaii_mc.bin
+radeon/RV620_pfp.bin
+radeon/bonaire_ce.bin
+radeon/hainan_me.bin
+radeon/oland_smc.bin
+radeon/HAWAII_ce.bin
+radeon/SUMO_rlc.bin
+radeon/REDWOOD_rlc.bin
+radeon/pitcairn_ce.bin
+radeon/TURKS_me.bin
+radeon/PALM_me.bin
+radeon/mullins_me.bin
+radeon/OLAND_ce.bin
+radeon/R300_cp.bin
+radeon/kabini_sdma.bin
+radeon/CYPRESS_uvd.bin
+radeon/RV635_pfp.bin
+radeon/KABINI_me.bin
+radeon/RV770_uvd.bin
+radeon/verde_me.bin
+radeon/pitcairn_pfp.bin
+radeon/verde_pfp.bin
+radeon/kaveri_sdma1.bin
+radeon/tahiti_smc.bin
+radeon/TAHITI_rlc.bin
+radeon/kaveri_vce.bin
+radeon/bonaire_uvd.bin
+radeon/KAVERI_rlc.bin
+radeon/mullins_vce.bin
+radeon/BONAIRE_pfp.bin
+radeon/CAICOS_me.bin
+radeon/KABINI_mec.bin
+radeon/bonaire_vce.bin
+radeon/MULLINS_pfp.bin
+radeon/kaveri_uvd.bin
+radeon/mullins_uvd.bin
+radeon/CYPRESS_smc.bin
+radeon/hawaii_rlc.bin
+radeon/bonaire_k_smc.bin
+radeon/kaveri_ce.bin
+radeon/RV770_smc.bin
+radeon/hawaii_sdma1.bin
+radeon/tahiti_ce.bin
+radeon/CEDAR_smc.bin
+radeon/BARTS_me.bin
+radeon/RV730_me.bin
+radeon/RV770_me.bin
+radeon/TAHITI_mc.bin
+radeon/BONAIRE_mc.bin
+radeon/kabini_pfp.bin
+radeon/PITCAIRN_rlc.bin
+radeon/oland_mc.bin
+radeon/OLAND_rlc.bin
+radeon/bonaire_smc.bin
+radeon/HAWAII_smc.bin
+radeon/VERDE_mc2.bin
+rockchip/dptx.bin
+rp2.fw
+rsi/rs9113_wlan_bt_dual_mode.rps
+rsi/rs9116_wlan_bt_classic.rps
+rsi/rs9113_wlan_qspi.rps
+rsi/rs9113_ap_bt_dual_mode.rps
+rsi/rs9116_wlan.rps
+rsi_91x.fw
+rt2561.bin
+rt2561s.bin
+rt2661.bin
+rt2860.bin
+rt2870.bin
+rt3071.bin
+rt3290.bin
+rt73.bin
+rtl_bt/rtl8822cs_config.bin
+rtl_bt/rtl8723bs_fw.bin
+rtl_bt/rtl8822b_fw.bin
+rtl_bt/rtl8192eu_fw.bin
+rtl_bt/rtl8723b_fw.bin
+rtl_bt/rtl8723d_fw.bin
+rtl_bt/rtl8821c_fw.bin
+rtl_bt/rtl8821a_fw.bin
+rtl_bt/rtl8812ae_fw.bin
+rtl_bt/rtl8723d_config.bin
+rtl_bt/rtl8192ee_fw.bin
+rtl_bt/rtl8822cs_fw.bin
+rtl_bt/rtl8822b_config.bin
+rtl_bt/rtl8821c_config.bin
+rtl_bt/rtl8723a_fw.bin
+rtl_bt/rtl8761a_fw.bin
+rtl_bt/rtl8723bs_config-OBDA8723.bin
+rtl_bt/rtl8822cu_fw.bin
+rtl_bt/rtl8822cu_config.bin
+rtl_nic/rtl8168f-1.fw
+rtl_nic/rtl8402-1.fw
+rtl_nic/rtl8153b-2.fw
+rtl_nic/rtl8168f-2.fw
+rtl_nic/rtl8168g-2.fw
+rtl_nic/rtl8168g-3.fw
+rtl_nic/rtl8168g-1.fw
+rtl_nic/rtl8153a-2.fw
+rtl_nic/rtl8411-2.fw
+rtl_nic/rtl8168fp-3.fw
+rtl_nic/rtl8168e-2.fw
+rtl_nic/rtl8107e-2.fw
+rtl_nic/rtl8106e-1.fw
+rtl_nic/rtl8168e-3.fw
+rtl_nic/rtl8153a-3.fw
+rtl_nic/rtl8411-1.fw
+rtl_nic/rtl8106e-2.fw
+rtl_nic/rtl8168e-1.fw
+rtl_nic/rtl8107e-1.fw
+rtl_nic/rtl8153a-4.fw
+rtl_nic/rtl8168d-1.fw
+rtl_nic/rtl8168h-2.fw
+rtl_nic/rtl8125a-3.fw
+rtl_nic/rtl8105e-1.fw
+rtl_nic/rtl8168d-2.fw
+rtl_nic/rtl8168h-1.fw
+rtlwifi/rtl8723befw.bin
+rtlwifi/rtl8192cufw_B.bin
+rtlwifi/rtl8822befw.bin
+rtlwifi/rtl8812aefw.bin
+rtlwifi/rtl8192eu_wowlan.bin
+rtlwifi/rtl8723aufw_A.bin
+rtlwifi/rtl8192cfwU_B.bin
+rtlwifi/rtl8192eefw.bin
+rtlwifi/rtl8188eufw.bin
+rtlwifi/rtl8821aefw.bin
+rtlwifi/rtl8821aefw_29.bin
+rtlwifi/rtl8192cfw.bin
+rtlwifi/rtl8188efw.bin
+rtlwifi/rtl8812aefw_wowlan.bin
+rtlwifi/rtl8723bs_nic.bin
+rtlwifi/rtl8723bu_ap_wowlan.bin
+rtlwifi/rtl8723defw.bin
+rtlwifi/rtl8723befw_36.bin
+rtlwifi/rtl8723bs_wowlan.bin
+rtlwifi/rtl8192cfwU.bin
+rtlwifi/rtl8723aufw_B_NoBT.bin
+rtlwifi/rtl8712u.bin
+rtlwifi/rtl8821aefw_wowlan.bin
+rtlwifi/rtl8723bu_nic.bin
+rtlwifi/rtl8192cufw_TMSC.bin
+rtlwifi/rtl8723bu_wowlan.bin
+rtlwifi/rtl8723bs_ap_wowlan.bin
+rtlwifi/rtl8192cufw.bin
+rtlwifi/rtl8192eu_ap_wowlan.bin
+rtlwifi/rtl8723aufw_B.bin
+rtlwifi/rtl8192eu_nic.bin
+rtlwifi/rtl8723bs_bt.bin
+rtlwifi/rtl8723fw.bin
+rtlwifi/rtl8192cufw_A.bin
+rtlwifi/rtl8192defw.bin
+rtlwifi/rtl8723fw_B.bin
+rtlwifi/rtl8192sefw.bin
+rtw88/rtw8822c_fw.bin
+rtw88/rtw8822c_wow_fw.bin
+rtw88/rtw8723d_fw.bin
+rtw88/README
+rtw88/rtw8822b_fw.bin
+s5p-mfc-v6-v2.fw
+s5p-mfc-v6.fw
+s5p-mfc-v7.fw
+s5p-mfc-v8.fw
+s5p-mfc.fw
+sdd_sagrad_1091_1098.bin
+slicoss/oasisrcvucode.sys
+slicoss/gbdownload.sys
+slicoss/oasisdbgdownload.sys
+slicoss/oasisdownload.sys
+slicoss/gbrcvucode.sys
+sms1xxx-hcw-55xxx-dvbt-02.fw
+sms1xxx-hcw-55xxx-isdbt-02.fw
+sms1xxx-nova-a-dvbt-01.fw
+sms1xxx-nova-b-dvbt-01.fw
+sms1xxx-stellar-dvbt-01.fw
+sxg/saharadownloadB.sys
+sxg/saharadbgdownloadB.sys
+tdmb_nova_12mhz.inp
+tehuti/bdx.bin
+ti-connectivity/wl128x-fw-4-plt.bin
+ti-connectivity/TIInit_6.2.31.bts
+ti-connectivity/wl128x-fw-4-sr.bin
+ti-connectivity/wl127x-fw-5-mr.bin
+ti-connectivity/wl1251-nvs.bin
+ti-connectivity/wl18xx-fw.bin
+ti-connectivity/wl127x-fw-3.bin
+ti-connectivity/wl18xx-fw-2.bin
+ti-connectivity/wl127x-fw-4-plt.bin
+ti-connectivity/wl128x-fw-3.bin
+ti-connectivity/TIInit_7.2.31.bts
+ti-connectivity/wl127x-fw-4-sr.bin
+ti-connectivity/wl127x-fw-5-plt.bin
+ti-connectivity/wl18xx-fw-4.bin
+ti-connectivity/wl128x-fw-5-plt.bin
+ti-connectivity/wl18xx-fw-3.bin
+ti-connectivity/wl128x-fw-5-mr.bin
+ti-connectivity/wl1271-fw.bin
+ti-connectivity/TIInit_6.6.15.bts
+ti-connectivity/wl127x-fw-5-sr.bin
+ti-connectivity/wl128x-fw.bin
+ti-connectivity/wl1251-fw.bin
+ti-connectivity/wl128x-fw-4-mr.bin
+ti-connectivity/wl128x-fw-5-sr.bin
+ti-connectivity/wl1271-fw-2.bin
+ti-connectivity/wl128x-fw-plt-3.bin
+ti-connectivity/wl127x-nvs.bin
+ti-connectivity/wl128x-nvs.bin
+ti-connectivity/wl127x-fw-plt-3.bin
+ti-connectivity/wl1271-fw-ap.bin
+ti-connectivity/wl128x-fw-ap.bin
+ti-connectivity/wl127x-fw-4-mr.bin
+ti-keystone/ks2_qmss_pdsp_acc48_k2_le_1_0_0_9.bin
+tigon/tg357766.bin
+tigon/tg3_tso5.bin
+tigon/tg3.bin
+tigon/tg3_tso.bin
+tlg2300_firmware.bin
+ueagle-atm/DSP9i.bin
+ueagle-atm/DSPep.bin
+ueagle-atm/CMVep.bin
+ueagle-atm/eagleI.fw
+ueagle-atm/CMV9i.bin
+ueagle-atm/CMVepES.bin
+ueagle-atm/CMVepIT.bin
+ueagle-atm/adi930.fw
+ueagle-atm/CMVepFR04.bin
+ueagle-atm/eagleIII.fw
+ueagle-atm/eagleII.fw
+ueagle-atm/CMVei.bin
+ueagle-atm/eagleIV.fw
+ueagle-atm/CMV9p.bin
+ueagle-atm/DSP9p.bin
+ueagle-atm/CMVepFR.bin
+ueagle-atm/CMVepES03.bin
+ueagle-atm/DSPei.bin
+ueagle-atm/CMV4p.bin.v2
+ueagle-atm/CMVepWO.bin
+ueagle-atm/CMVeiWO.bin
+ueagle-atm/930-fpga.bin
+ueagle-atm/CMVepFR10.bin
+ueagle-atm/DSP4p.bin
+usbdux_firmware.bin
+usbduxfast_firmware.bin
+usbduxsigma_firmware.bin
+v4l-cx231xx-avcore-01.fw
+v4l-cx23418-apu.fw
+v4l-cx23418-cpu.fw
+v4l-cx23418-dig.fw
+v4l-cx23885-avcore-01.fw
+v4l-cx25840.fw
+vntwusb.fw
+vxge/X3fw.ncf
+vxge/X3fw-pxe.ncf
+wil6210.brd
+wil6210.fw
+wsm_22.bin
diff --git a/savedconfig/sys-kernel/linux-firmware-20200421 b/savedconfig/sys-kernel/linux-firmware-20200421
@@ -0,0 +1,2058 @@
+# Remove files that shall not be installed from this list.
+3com/typhoon.bin
+RTL8192E/boot.img
+RTL8192E/data.img
+RTL8192E/main.img
+TDA7706_OM_v2.5.1_boot.txt
+TDA7706_OM_v3.0.2_boot.txt
+advansys/mcode.bin
+advansys/38C1600.bin
+advansys/38C0800.bin
+advansys/3550.bin
+agere_ap_fw.bin
+agere_sta_fw.bin
+amd/amd_sev_fam17h_model0xh.sbin
+amd-ucode/microcode_amd_fam16h.bin
+amd-ucode/microcode_amd_fam17h.bin.asc
+amd-ucode/microcode_amd_fam16h.bin.asc
+amd-ucode/microcode_amd_fam17h.bin
+amd-ucode/microcode_amd_fam15h.bin.asc
+amd-ucode/microcode_amd_fam15h.bin
+amd-ucode/microcode_amd.bin.asc
+amd-ucode/microcode_amd.bin
+amdgpu/vega10_uvd.bin
+amdgpu/bonaire_mc.bin
+amdgpu/picasso_mec2.bin
+amdgpu/polaris10_uvd.bin
+amdgpu/tonga_vce.bin
+amdgpu/tonga_smc.bin
+amdgpu/raven2_sdma.bin
+amdgpu/raven2_ce.bin
+amdgpu/raven2_ta.bin
+amdgpu/topaz_sdma.bin
+amdgpu/navi10_vcn.bin
+amdgpu/bonaire_mec.bin
+amdgpu/oland_rlc.bin
+amdgpu/navi14_vcn.bin
+amdgpu/vega20_mec2.bin
+amdgpu/vegam_mec.bin
+amdgpu/vega12_ce.bin
+amdgpu/vega10_smc.bin
+amdgpu/mullins_mec.bin
+amdgpu/stoney_mec.bin
+amdgpu/vega10_mec2.bin
+amdgpu/polaris10_smc.bin
+amdgpu/navi14_pfp.bin
+amdgpu/hainan_mc.bin
+amdgpu/navi10_pfp.bin
+amdgpu/polaris10_ce_2.bin
+amdgpu/polaris12_k_mc.bin
+amdgpu/polaris10_vce.bin
+amdgpu/picasso_asd.bin
+amdgpu/hainan_pfp.bin
+amdgpu/tonga_uvd.bin
+amdgpu/mullins_sdma1.bin
+amdgpu/hawaii_me.bin
+amdgpu/vega10_vce.bin
+amdgpu/navi14_sdma1.bin
+amdgpu/raven_me.bin
+amdgpu/vega20_mec.bin
+amdgpu/renoir_rlc.bin
+amdgpu/navi14_mec2_wks.bin
+amdgpu/polaris11_mec2_2.bin
+amdgpu/vega12_mec.bin
+amdgpu/topaz_me.bin
+amdgpu/verde_k_smc.bin
+amdgpu/kabini_ce.bin
+amdgpu/polaris10_mec_2.bin
+amdgpu/pitcairn_smc.bin
+amdgpu/tonga_me.bin
+amdgpu/polaris12_mec.bin
+amdgpu/picasso_me.bin
+amdgpu/pitcairn_k_smc.bin
+amdgpu/navi14_ta.bin
+amdgpu/polaris10_mec2.bin
+amdgpu/pitcairn_me.bin
+amdgpu/kabini_vce.bin
+amdgpu/renoir_asd.bin
+amdgpu/tahiti_k_smc.bin
+amdgpu/polaris11_mec_2.bin
+amdgpu/picasso_rlc.bin
+amdgpu/verde_mc.bin
+amdgpu/navi14_ce.bin
+amdgpu/polaris11_mc.bin
+amdgpu/tonga_sdma.bin
+amdgpu/fiji_mec.bin
+amdgpu/vegam_sdma.bin
+amdgpu/raven_gpu_info.bin
+amdgpu/polaris11_rlc.bin
+amdgpu/topaz_smc.bin
+amdgpu/navi14_pfp_wks.bin
+amdgpu/hawaii_mec.bin
+amdgpu/raven_mec.bin
+amdgpu/carrizo_mec.bin
+amdgpu/oland_me.bin
+amdgpu/vega10_ce.bin
+amdgpu/polaris12_mec_2.bin
+amdgpu/kabini_uvd.bin
+amdgpu/kaveri_pfp.bin
+amdgpu/navi10_sdma1.bin
+amdgpu/bonaire_k_smc.bin
+amdgpu/raven_kicker_rlc.bin
+amdgpu/tahiti_pfp.bin
+amdgpu/vega20_pfp.bin
+amdgpu/hawaii_mc.bin
+amdgpu/polaris11_pfp_2.bin
+amdgpu/polaris11_smc_sk.bin
+amdgpu/raven_mec2.bin
+amdgpu/vega12_sdma1.bin
+amdgpu/polaris12_sdma.bin
+amdgpu/polaris11_ce_2.bin
+amdgpu/polaris12_me_2.bin
+amdgpu/navi10_gpu_info.bin
+amdgpu/navi10_mec.bin
+amdgpu/tonga_rlc.bin
+amdgpu/navi14_mec.bin
+amdgpu/polaris10_pfp_2.bin
+amdgpu/stoney_pfp.bin
+amdgpu/hainan_me.bin
+amdgpu/oland_smc.bin
+amdgpu/polaris10_ce.bin
+amdgpu/mullins_pfp.bin
+amdgpu/vegam_pfp.bin
+amdgpu/polaris11_k2_smc.bin
+amdgpu/kabini_sdma1.bin
+amdgpu/bonaire_pfp.bin
+amdgpu/vega10_rlc.bin
+amdgpu/mullins_sdma.bin
+amdgpu/vegam_me.bin
+amdgpu/polaris10_rlc.bin
+amdgpu/raven2_rlc.bin
+amdgpu/vega10_sdma1.bin
+amdgpu/polaris12_pfp_2.bin
+amdgpu/bonaire_me.bin
+amdgpu/renoir_sdma.bin
+amdgpu/fiji_sdma.bin
+amdgpu/mullins_ce.bin
+amdgpu/navi10_ce.bin
+amdgpu/navi14_sdma.bin
+amdgpu/vega12_gpu_info.bin
+amdgpu/carrizo_mec2.bin
+amdgpu/renoir_ce.bin
+amdgpu/polaris11_uvd.bin
+amdgpu/tahiti_ce.bin
+amdgpu/kaveri_ce.bin
+amdgpu/raven2_asd.bin
+amdgpu/vega20_me.bin
+amdgpu/kabini_rlc.bin
+amdgpu/polaris11_k_smc.bin
+amdgpu/kaveri_mec.bin
+amdgpu/vega10_asd.bin
+amdgpu/pitcairn_rlc.bin
+amdgpu/navi10_ta.bin
+amdgpu/vega10_acg_smc.bin
+amdgpu/hawaii_k_smc.bin
+amdgpu/topaz_sdma1.bin
+amdgpu/polaris12_ce.bin
+amdgpu/picasso_gpu_info.bin
+amdgpu/raven_pfp.bin
+amdgpu/hawaii_pfp.bin
+amdgpu/carrizo_pfp.bin
+amdgpu/polaris11_me.bin
+amdgpu/oland_mc.bin
+amdgpu/polaris10_k_smc.bin
+amdgpu/fiji_pfp.bin
+amdgpu/stoney_me.bin
+amdgpu/pitcairn_mc.bin
+amdgpu/raven_vcn.bin
+amdgpu/polaris11_smc.bin
+amdgpu/navi14_gpu_info.bin
+amdgpu/kaveri_mec2.bin
+amdgpu/verde_pfp.bin
+amdgpu/verde_me.bin
+amdgpu/topaz_rlc.bin
+amdgpu/navi10_mec2.bin
+amdgpu/vega12_sdma.bin
+amdgpu/topaz_mc.bin
+amdgpu/polaris12_pfp.bin
+amdgpu/tonga_sdma1.bin
+amdgpu/carrizo_me.bin
+amdgpu/polaris11_mec2.bin
+amdgpu/vega10_gpu_info.bin
+amdgpu/tonga_mc.bin
+amdgpu/fiji_ce.bin
+amdgpu/polaris11_vce.bin
+amdgpu/picasso_rlc_am4.bin
+amdgpu/hainan_k_smc.bin
+amdgpu/vega12_pfp.bin
+amdgpu/vega10_sos.bin
+amdgpu/polaris12_k_smc.bin
+amdgpu/kaveri_sdma1.bin
+amdgpu/pitcairn_pfp.bin
+amdgpu/si58_mc.bin
+amdgpu/navi14_me_wks.bin
+amdgpu/fiji_me.bin
+amdgpu/raven_dmcu.bin
+amdgpu/kabini_pfp.bin
+amdgpu/banks_k_2_smc.bin
+amdgpu/carrizo_ce.bin
+amdgpu/polaris12_mec2_2.bin
+amdgpu/fiji_rlc.bin
+amdgpu/polaris12_sdma1.bin
+amdgpu/raven_sdma.bin
+amdgpu/verde_ce.bin
+amdgpu/vega20_sos.bin
+amdgpu/polaris11_mec.bin
+amdgpu/raven_rlc.bin
+amdgpu/hawaii_rlc.bin
+amdgpu/carrizo_rlc.bin
+amdgpu/polaris12_mec2.bin
+amdgpu/kaveri_uvd.bin
+amdgpu/stoney_ce.bin
+amdgpu/tonga_k_smc.bin
+amdgpu/oland_k_smc.bin
+amdgpu/renoir_mec2.bin
+amdgpu/topaz_pfp.bin
+amdgpu/hawaii_sdma1.bin
+amdgpu/vega20_asd.bin
+amdgpu/kaveri_vce.bin
+amdgpu/polaris11_sdma1.bin
+amdgpu/verde_rlc.bin
+amdgpu/polaris11_ce.bin
+amdgpu/picasso_mec.bin
+amdgpu/fiji_mec2.bin
+amdgpu/polaris12_me.bin
+amdgpu/tahiti_smc.bin
+amdgpu/navi14_mec_wks.bin
+amdgpu/vega20_ce.bin
+amdgpu/polaris10_sdma1.bin
+amdgpu/vega12_rlc.bin
+amdgpu/raven2_gpu_info.bin
+amdgpu/kaveri_me.bin
+amdgpu/polaris12_rlc.bin
+amdgpu/navi10_me.bin
+amdgpu/renoir_me.bin
+amdgpu/topaz_k_smc.bin
+amdgpu/tahiti_me.bin
+amdgpu/mullins_me.bin
+amdgpu/polaris10_k2_smc.bin
+amdgpu/vega20_rlc.bin
+amdgpu/bonaire_ce.bin
+amdgpu/renoir_mec.bin
+amdgpu/mullins_rlc.bin
+amdgpu/vegam_rlc.bin
+amdgpu/navi14_mec2.bin
+amdgpu/carrizo_sdma.bin
+amdgpu/stoney_rlc.bin
+amdgpu/raven2_vcn.bin
+amdgpu/vegam_ce.bin
+amdgpu/tonga_pfp.bin
+amdgpu/vega12_asd.bin
+amdgpu/polaris10_smc_sk.bin
+amdgpu/polaris11_sdma.bin
+amdgpu/polaris10_k_mc.bin
+amdgpu/polaris12_ce_2.bin
+amdgpu/raven2_pfp.bin
+amdgpu/polaris10_me.bin
+amdgpu/vegam_sdma1.bin
+amdgpu/navi14_smc.bin
+amdgpu/polaris10_pfp.bin
+amdgpu/polaris11_me_2.bin
+amdgpu/hainan_ce.bin
+amdgpu/vega12_mec2.bin
+amdgpu/navi10_smc.bin
+amdgpu/vega10_pfp.bin
+amdgpu/vega12_sos.bin
+amdgpu/bonaire_rlc.bin
+amdgpu/kaveri_sdma.bin
+amdgpu/raven_asd.bin
+amdgpu/hainan_smc.bin
+amdgpu/navi10_sdma.bin
+amdgpu/hawaii_sdma.bin
+amdgpu/raven2_mec2.bin
+amdgpu/carrizo_vce.bin
+amdgpu/hawaii_vce.bin
+amdgpu/vega20_sdma.bin
+amdgpu/tahiti_mc.bin
+amdgpu/navi10_asd.bin
+amdgpu/navi14_asd.bin
+amdgpu/fiji_vce.bin
+amdgpu/topaz_mec2.bin
+amdgpu/oland_ce.bin
+amdgpu/vega10_me.bin
+amdgpu/picasso_sdma.bin
+amdgpu/vega12_uvd.bin
+amdgpu/fiji_smc.bin
+amdgpu/picasso_pfp.bin
+amdgpu/polaris10_mec2_2.bin
+amdgpu/polaris12_uvd.bin
+amdgpu/bonaire_sdma1.bin
+amdgpu/polaris12_mc.bin
+amdgpu/hawaii_smc.bin
+amdgpu/topaz_mec.bin
+amdgpu/polaris12_vce.bin
+amdgpu/navi14_ce_wks.bin
+amdgpu/navi14_me.bin
+amdgpu/picasso_vcn.bin
+amdgpu/renoir_dmcub.bin
+amdgpu/vega12_vce.bin
+amdgpu/pitcairn_ce.bin
+amdgpu/polaris11_pfp.bin
+amdgpu/verde_smc.bin
+amdgpu/fiji_mc.bin
+amdgpu/tonga_ce.bin
+amdgpu/picasso_ce.bin
+amdgpu/vega12_smc.bin
+amdgpu/fiji_uvd.bin
+amdgpu/tahiti_rlc.bin
+amdgpu/kabini_mec.bin
+amdgpu/kaveri_rlc.bin
+amdgpu/polaris12_smc.bin
+amdgpu/topaz_ce.bin
+amdgpu/kabini_me.bin
+amdgpu/navi10_sos.bin
+amdgpu/picasso_ta.bin
+amdgpu/hawaii_uvd.bin
+amdgpu/carrizo_uvd.bin
+amdgpu/navi14_sos.bin
+amdgpu/vega10_sdma.bin
+amdgpu/renoir_gpu_info.bin
+amdgpu/polaris10_me_2.bin
+amdgpu/renoir_vcn.bin
+amdgpu/raven_ce.bin
+amdgpu/polaris11_k_mc.bin
+amdgpu/polaris10_sdma.bin
+amdgpu/raven_ta.bin
+amdgpu/vega20_smc.bin
+amdgpu/stoney_vce.bin
+amdgpu/bonaire_uvd.bin
+amdgpu/hawaii_ce.bin
+amdgpu/mullins_vce.bin
+amdgpu/vegam_vce.bin
+amdgpu/vega20_vce.bin
+amdgpu/kabini_sdma.bin
+amdgpu/oland_pfp.bin
+amdgpu/carrizo_sdma1.bin
+amdgpu/polaris10_mc.bin
+amdgpu/vega10_mec.bin
+amdgpu/vegam_smc.bin
+amdgpu/bonaire_sdma.bin
+amdgpu/polaris10_mec.bin
+amdgpu/vega12_me.bin
+amdgpu/raven2_mec.bin
+amdgpu/fiji_sdma1.bin
+amdgpu/navi10_rlc.bin
+amdgpu/tonga_mec.bin
+amdgpu/vega20_sdma1.bin
+amdgpu/navi14_rlc.bin
+amdgpu/vega20_uvd.bin
+amdgpu/raven2_me.bin
+amdgpu/bonaire_smc.bin
+amdgpu/stoney_uvd.bin
+amdgpu/renoir_pfp.bin
+amdgpu/bonaire_vce.bin
+amdgpu/mullins_uvd.bin
+amdgpu/vegam_uvd.bin
+amdgpu/tonga_mec2.bin
+amdgpu/vegam_mec2.bin
+amdgpu/stoney_sdma.bin
+amdgpu/hainan_rlc.bin
+ar3k/ramps_0x11020100_40.dfu
+ar3k/ramps_0x01020200_40.dfu
+ar3k/AthrBT_0x41020000.dfu
+ar3k/AthrBT_0x11020100.dfu
+ar3k/ramps_0x41020000_40.dfu
+ar3k/1020201/PS_ASIC.pst
+ar3k/1020201/RamPatch.txt
+ar3k/ramps_0x01020201_26.dfu
+ar3k/ramps_0x11020000_40.dfu
+ar3k/AthrBT_0x11020000.dfu
+ar3k/30101/RamPatch.txt
+ar3k/30101/ar3kbdaddr.pst
+ar3k/30101/PS_ASIC.pst
+ar3k/AthrBT_0x31010000.dfu
+ar3k/ramps_0x01020200_26.dfu
+ar3k/ramps_0x31010000_40.dfu
+ar3k/AthrBT_0x01020201.dfu
+ar3k/30101coex/PS_ASIC_aclLowPri.pst
+ar3k/30101coex/ar3kbdaddr.pst
+ar3k/30101coex/PS_ASIC.pst
+ar3k/30101coex/PS_ASIC_aclHighPri.pst
+ar3k/30101coex/RamPatch.txt
+ar3k/AthrBT_0x31010100.dfu
+ar3k/AthrBT_0x01020200.dfu
+ar3k/ramps_0x01020201_40.dfu
+ar3k/AthrBT_0x01020001.dfu
+ar3k/ramps_0x31010100_40.dfu
+ar3k/1020200/RamPatch.txt
+ar3k/1020200/ar3kbdaddr.pst
+ar3k/1020200/PS_ASIC.pst
+ar3k/1020201coex/ramps_0x01020201_26_HighPriority.dfu
+ar3k/30000/ar3kbdaddr.pst
+ar3k/30000/PS_ASIC.pst
+ar3k/30000/RamPatch.txt
+ar3k/ramps_0x01020001_26.dfu
+ar5523.bin
+ar7010.fw
+ar7010_1_1.fw
+ar9170-1.fw
+ar9170-2.fw
+ar9271.fw
+as102_data1_st.hex
+as102_data2_st.hex
+ath10k/QCA9888/hw2.0/firmware-5.bin
+ath10k/QCA9888/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9888/hw2.0/board-2.bin
+ath10k/QCA99X0/hw2.0/firmware-5.bin
+ath10k/QCA99X0/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA99X0/hw2.0/board.bin
+ath10k/QCA4019/hw1.0/firmware-5.bin
+ath10k/QCA4019/hw1.0/board-2.bin
+ath10k/QCA4019/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA6174/hw3.0/board.bin
+ath10k/QCA6174/hw3.0/notice_ath10k_firmware-4.txt
+ath10k/QCA6174/hw3.0/firmware-4.bin
+ath10k/QCA6174/hw3.0/notice_ath10k_firmware-6.txt
+ath10k/QCA6174/hw3.0/firmware-6.bin
+ath10k/QCA6174/hw3.0/board-2.bin
+ath10k/QCA6174/hw2.1/board.bin
+ath10k/QCA6174/hw2.1/board-2.bin
+ath10k/QCA6174/hw2.1/firmware-5.bin
+ath10k/QCA6174/hw2.1/notice_ath10k_firmware-5.txt
+ath10k/QCA988X/hw2.0/firmware-4.bin
+ath10k/QCA988X/hw2.0/firmware-5.bin
+ath10k/QCA988X/hw2.0/notice_ath10k_firmware-5.txt
+ath10k/QCA988X/hw2.0/board.bin
+ath10k/QCA988X/hw2.0/notice_ath10k_firmware-4.txt
+ath10k/QCA9984/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9984/hw1.0/board-2.bin
+ath10k/QCA9984/hw1.0/firmware-5.bin
+ath10k/QCA9377/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9377/hw1.0/firmware-5.bin
+ath10k/QCA9377/hw1.0/board-2.bin
+ath10k/QCA9377/hw1.0/firmware-6.bin
+ath10k/QCA9377/hw1.0/board.bin
+ath10k/QCA9377/hw1.0/notice_ath10k_firmware-6.txt
+ath10k/QCA9887/hw1.0/board.bin
+ath10k/QCA9887/hw1.0/notice_ath10k_firmware-5.txt
+ath10k/QCA9887/hw1.0/firmware-5.bin
+ath10k/WCN3990/hw1.0/notice.txt_wlanmdsp
+ath10k/WCN3990/hw1.0/firmware-5.bin
+ath10k/WCN3990/hw1.0/wlanmdsp.mbn
+ath3k-1.fw
+ath6k/AR6003/hw2.1.1/bdata.SD31.bin
+ath6k/AR6003/hw2.1.1/fw-2.bin
+ath6k/AR6003/hw2.1.1/otp.bin
+ath6k/AR6003/hw2.1.1/fw-3.bin
+ath6k/AR6003/hw2.1.1/endpointping.bin
+ath6k/AR6003/hw2.1.1/bdata.WB31.bin
+ath6k/AR6003/hw2.1.1/athwlan.bin
+ath6k/AR6003/hw2.1.1/bdata.SD32.bin
+ath6k/AR6003/hw2.1.1/data.patch.bin
+ath6k/AR6003/hw2.0/bdata.WB31.bin
+ath6k/AR6003/hw2.0/data.patch.bin
+ath6k/AR6003/hw2.0/bdata.SD32.bin
+ath6k/AR6003/hw2.0/athwlan.bin.z77
+ath6k/AR6003/hw2.0/bdata.SD31.bin
+ath6k/AR6003/hw2.0/otp.bin.z77
+ath6k/AR6003/hw1.0/otp.bin.z77
+ath6k/AR6003/hw1.0/data.patch.bin
+ath6k/AR6003/hw1.0/bdata.SD32.bin
+ath6k/AR6003/hw1.0/bdata.WB31.bin
+ath6k/AR6003/hw1.0/athwlan.bin.z77
+ath6k/AR6003/hw1.0/bdata.SD31.bin
+ath6k/AR6004/hw1.2/bdata.bin
+ath6k/AR6004/hw1.2/fw-2.bin
+ath6k/AR6004/hw1.3/fw-3.bin
+ath6k/AR6004/hw1.3/bdata.bin
+ath6k/AR6002/data.patch.hw2_0.bin
+ath6k/AR6002/eeprom.data
+ath6k/AR6002/eeprom.bin
+ath6k/AR6002/athwlan.bin.z77
+ath6k/AR6003.1/hw2.1.1/data.patch.bin
+ath6k/AR6003.1/hw2.1.1/athwlan.bin
+ath6k/AR6003.1/hw2.1.1/bdata.SD32.bin
+ath6k/AR6003.1/hw2.1.1/bdata.WB31.bin
+ath6k/AR6003.1/hw2.1.1/otp.bin
+ath6k/AR6003.1/hw2.1.1/bdata.SD31.bin
+ath6k/AR6003.1/hw2.1.1/endpointping.bin
+ath9k_htc/htc_9271-1.4.0.fw
+ath9k_htc/htc_7010-1.4.0.fw
+atmel/wilc1000_wifi_firmware.bin
+atmel/wilc1000_fw.bin
+atmel/wilc1000_p2p_fw.bin
+atmel/wilc1000_ap_fw.bin
+atusb/atusb-0.3.dfu
+atusb/rzusb-0.3.bin
+atusb/atusb-0.2.dfu
+av7110/bootcode.bin
+bnx2/bnx2-mips-06-6.0.15.fw
+bnx2/bnx2-mips-09-5.0.0.j9.fw
+bnx2/bnx2-rv2p-09-5.0.0.j10.fw
+bnx2/bnx2-mips-06-4.6.16.fw
+bnx2/bnx2-mips-09-4.6.17.fw
+bnx2/bnx2-mips-09-6.0.17.fw
+bnx2/bnx2-rv2p-06-4.6.16.fw
+bnx2/bnx2-mips-09-5.0.0.j15.fw
+bnx2/bnx2-mips-06-5.0.0.j6.fw
+bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw
+bnx2/bnx2-mips-09-6.2.1b.fw
+bnx2/bnx2-rv2p-09-5.0.0.j3.fw
+bnx2/bnx2-rv2p-06-5.0.0.j3.fw
+bnx2/bnx2-rv2p-06-6.0.15.fw
+bnx2/bnx2-mips-09-6.2.1a.fw
+bnx2/bnx2-rv2p-09ax-6.0.17.fw
+bnx2/bnx2-rv2p-09ax-5.0.0.j10.fw
+bnx2/bnx2-mips-06-6.2.3.fw
+bnx2/bnx2-rv2p-09-4.6.15.fw
+bnx2/bnx2-rv2p-09-6.0.17.fw
+bnx2/bnx2-mips-09-6.2.1.fw
+bnx2/bnx2-mips-06-6.2.1.fw
+bnx2/bnx2-mips-09-5.0.0.j3.fw
+bnx2/bnx2-mips-06-5.0.0.j3.fw
+bnx2x/bnx2x-e2-7.12.30.0.fw
+bnx2x/bnx2x-e1h-7.0.23.0.fw
+bnx2x/bnx2x-e1-7.12.30.0.fw
+bnx2x/bnx2x-e2-7.2.16.0.fw
+bnx2x/bnx2x-e2-7.2.51.0.fw
+bnx2x/bnx2x-e2-7.8.2.0.fw
+bnx2x/bnx2x-e1h-7.12.30.0.fw
+bnx2x/bnx2x-e2-7.0.29.0.fw
+bnx2x/bnx2x-e1-7.0.23.0.fw
+bnx2x/bnx2x-e2-6.2.9.0.fw
+bnx2x/bnx2x-e1-7.8.17.0.fw
+bnx2x/bnx2x-e1-7.13.15.0.fw
+bnx2x/bnx2x-e2-7.13.11.0.fw
+bnx2x/bnx2x-e2-7.8.19.0.fw
+bnx2x/bnx2x-e1h-7.10.51.0.fw
+bnx2x/bnx2x-e2-7.13.1.0.fw
+bnx2x/bnx2x-e2-6.0.34.0.fw
+bnx2x/bnx2x-e1-7.13.11.0.fw
+bnx2x/bnx2x-e2-7.13.15.0.fw
+bnx2x/bnx2x-e2-7.0.20.0.fw
+bnx2x/bnx2x-e1h-7.13.11.0.fw
+bnx2x/bnx2x-e2-7.10.51.0.fw
+bnx2x/bnx2x-e1h-7.8.17.0.fw
+bnx2x/bnx2x-e2-6.2.5.0.fw
+bnx2x/bnx2x-e1-7.10.51.0.fw
+bnx2x/bnx2x-e1h-7.13.15.0.fw
+bnx2x/bnx2x-e1-7.8.2.0.fw
+bnx2x/bnx2x-e1h-6.0.34.0.fw
+bnx2x/bnx2x-e1h-7.13.1.0.fw
+bnx2x/bnx2x-e1-7.0.20.0.fw
+bnx2x/bnx2x-e1h-7.8.19.0.fw
+bnx2x/bnx2x-e1h-6.2.9.0.fw
+bnx2x/bnx2x-e1h-6.2.5.0.fw
+bnx2x/bnx2x-e1-7.13.1.0.fw
+bnx2x/bnx2x-e1-6.0.34.0.fw
+bnx2x/bnx2x-e2-7.8.17.0.fw
+bnx2x/bnx2x-e1h-7.0.20.0.fw
+bnx2x/bnx2x-e1-7.8.19.0.fw
+bnx2x/bnx2x-e1h-7.2.16.0.fw
+bnx2x/bnx2x-e2-7.0.23.0.fw
+bnx2x/bnx2x-e1-7.2.51.0.fw
+bnx2x/bnx2x-e1-7.0.29.0.fw
+bnx2x/bnx2x-e1-6.2.5.0.fw
+bnx2x/bnx2x-e1-6.2.9.0.fw
+bnx2x/bnx2x-e1-7.2.16.0.fw
+bnx2x/bnx2x-e1h-7.0.29.0.fw
+bnx2x/bnx2x-e1h-7.8.2.0.fw
+bnx2x/bnx2x-e1h-7.2.51.0.fw
+bnx2x-e1-4.8.53.0.fw
+bnx2x-e1-5.2.13.0.fw
+bnx2x-e1-5.2.7.0.fw
+bnx2x-e1h-4.8.53.0.fw
+bnx2x-e1h-5.2.13.0.fw
+bnx2x-e1h-5.2.7.0.fw
+brcm/bcm43xx-0.fw
+brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt
+brcm/brcmfmac4366c-pcie.bin
+brcm/brcmfmac4330-sdio.bin
+brcm/brcmfmac43430-sdio.AP6212.txt
+brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt
+brcm/brcmfmac43430-sdio.MUR1DX.txt
+brcm/brcmfmac43340-sdio.pov-tab-p1006w-data.txt
+brcm/brcmfmac43241b0-sdio.bin
+brcm/brcmfmac4356-pcie.gpd-win-pocket.txt
+brcm/brcmfmac4350c2-pcie.bin
+brcm/brcmfmac43430-sdio.Hampoo-D2D3_Vi8A1.txt
+brcm/brcmfmac43143-sdio.bin
+brcm/brcmfmac4366b-pcie.bin
+brcm/brcmfmac43362-sdio.bin
+brcm/brcmfmac43455-sdio.bin
+brcm/brcmfmac4356-sdio.bin
+brcm/brcmfmac43569.bin
+brcm/brcmfmac43430a0-sdio.bin
+brcm/brcmfmac4339-sdio.bin
+brcm/brcmfmac43455-sdio.MINIX-NEO Z83-4.txt
+brcm/brcmfmac4329-sdio.bin
+brcm/brcmfmac43602-pcie.ap.bin
+brcm/bcm43xx_hdr-0.fw
+brcm/brcmfmac43430a0-sdio.jumper-ezpad-mini3.txt
+brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.txt
+brcm/brcmfmac4371-pcie.bin
+brcm/brcmfmac43340-sdio.meegopad-t08.txt
+brcm/brcmfmac4335-sdio.bin
+brcm/brcmfmac43241b5-sdio.bin
+brcm/brcmfmac4356-pcie.bin
+brcm/brcmfmac43362-sdio.cubietech,cubietruck.txt
+brcm/brcmfmac43570-pcie.bin
+brcm/brcmfmac4334-sdio.bin
+brcm/brcmfmac4373-sdio.bin
+brcm/brcmfmac43430a0-sdio.ONDA-V80 PLUS.txt
+brcm/BCM-0bb4-0306.hcd
+brcm/brcmfmac4350-pcie.bin
+brcm/brcmfmac4330-sdio.Prowise-PT301.txt
+brcm/brcmfmac43242a.bin
+brcm/brcmfmac4373.bin
+brcm/brcmfmac43236b.bin
+brcm/bcm4329-fullmac-4.bin
+brcm/brcmfmac4354-sdio.bin
+brcm/brcmfmac43430-sdio.bin
+brcm/brcmfmac43340-sdio.bin
+brcm/brcmfmac4358-pcie.bin
+brcm/brcmfmac43241b4-sdio.bin
+brcm/brcmfmac43143.bin
+brcm/brcmfmac43602-pcie.bin
+cadence/mhdp8546.bin
+carl9170-1.fw
+cavium/cnn55xx_se.fw
+cavium/cnn55xx_ae.fw
+cbfw-3.2.1.1.bin
+cbfw-3.2.3.0.bin
+cbfw-3.2.5.1.bin
+cis/3CCFEM556.cis
+cis/3CXEM556.cis
+cis/PE-200.cis
+cis/MT5634ZLX.cis
+cis/RS-COM-2P.cis
+cis/DP83903.cis
+cis/PCMLM28.cis
+cis/SW_8xx_SER.cis
+cis/LA-PCM.cis
+cis/COMpad2.cis
+cis/SW_555_SER.cis
+cis/NE2K.cis
+cis/tamarack.cis
+cis/COMpad4.cis
+cis/SW_7xx_SER.cis
+cis/PE520.cis
+cmmb_vega_12mhz.inp
+cmmb_venice_12mhz.inp
+copy-firmware.sh
+ct2fw-3.2.1.1.bin
+ct2fw-3.2.3.0.bin
+ct2fw-3.2.5.1.bin
+ctefx.bin
+ctfw-3.2.1.1.bin
+ctfw-3.2.3.0.bin
+ctfw-3.2.5.1.bin
+ctspeq.bin
+cxgb3/ael2005_opt_edc.bin
+cxgb3/t3b_psram-1.1.0.bin
+cxgb3/t3fw-7.4.0.bin
+cxgb3/t3c_psram-1.1.0.bin
+cxgb3/ael2020_twx_edc.bin
+cxgb3/t3fw-7.10.0.bin
+cxgb3/t3fw-7.0.0.bin
+cxgb3/ael2005_twx_edc.bin
+cxgb3/t3fw-7.1.0.bin
+cxgb3/t3fw-7.12.0.bin
+cxgb4/t4fw-1.14.4.0.bin
+cxgb4/bcm8483.bin
+cxgb4/t6fw-1.24.14.0.bin
+cxgb4/configs/t4-config-default.txt
+cxgb4/configs/t6-config-default.txt
+cxgb4/configs/t5-config-hashfilter.txt
+cxgb4/configs/t6-config-hashfilter.txt
+cxgb4/configs/t5-config-default.txt
+cxgb4/t5fw-1.14.4.0.bin
+cxgb4/t5fw-1.24.14.0.bin
+cxgb4/aq1202_fw.cld
+cxgb4/t5fw-1.15.37.0.bin
+cxgb4/t4fw-1.15.37.0.bin
+cxgb4/t4fw-1.24.14.0.bin
+dabusb/bitstream.bin
+dabusb/firmware.fw
+dpaa2/mc/mc_10.18.0_lx2160a.itb
+dpaa2/mc/mc_10.16.2_ls1088a.itb
+dpaa2/mc/mc_10.14.3_ls2088a.itb
+dpaa2/mc/mc_10.10.0_ls2088a.itb
+dpaa2/mc/mc_10.14.3_lx2160a.itb
+dpaa2/mc/mc_10.10.0_lx2160a.itb
+dpaa2/mc/mc_10.18.0_ls2088a.itb
+dpaa2/mc/mc_10.16.2_ls2088a.itb
+dpaa2/mc/mc_10.14.3_ls1088a.itb
+dpaa2/mc/mc_10.10.0_ls1088a.itb
+dpaa2/mc/mc_10.18.0_ls1088a.itb
+dpaa2/mc/mc_10.16.2_lx2160a.itb
+dsp56k/bootstrap.bin
+dvb-fe-xc4000-1.4.1.fw
+dvb-fe-xc5000-1.6.114.fw
+dvb-fe-xc5000c-4.1.30.7.fw
+dvb-usb-dib0700-1.20.fw
+dvb-usb-it9135-01.fw
+dvb-usb-it9135-02.fw
+dvb-usb-terratec-h5-drxk.fw
+dvb_nova_12mhz.inp
+dvb_nova_12mhz_b0.inp
+e100/d101s_ucode.bin
+e100/d102e_ucode.bin
+e100/d101m_ucode.bin
+emi26/loader.fw
+emi26/firmware.fw
+emi26/bitstream.fw
+ene-ub6250/sd_init2.bin
+ene-ub6250/ms_rdwr.bin
+ene-ub6250/ms_init.bin
+ene-ub6250/msp_rdwr.bin
+ene-ub6250/sd_rdwr.bin
+ene-ub6250/sd_init1.bin
+f2255usb.bin
+go7007/go7007fw.bin
+go7007/px-m402u.fw
+go7007/s2250-2.fw
+go7007/wis-startrek.fw
+go7007/px-tv402u.fw
+go7007/s2250-1.fw
+go7007/go7007tv.bin
+go7007/lr192.fw
+hfi1_dc8051.fw
+hfi1_fabric.fw
+hfi1_pcie.fw
+hfi1_sbus.fw
+htc_7010.fw
+htc_9271.fw
+i2400m-fw-usb-1.4.sbcf
+i2400m-fw-usb-1.5.sbcf
+i6050-fw-usb-1.5.sbcf
+i915/bxt_huc_2.0.0.bin
+i915/tgl_huc_7.0.3.bin
+i915/cnl_dmc_ver1_06.bin
+i915/skl_dmc_ver1_23.bin
+i915/tgl_dmc_ver2_06.bin
+i915/skl_guc_32.0.3.bin
+i915/skl_huc_ver01_07_1398.bin
+i915/bxt_guc_32.0.3.bin
+i915/skl_dmc_ver1.bin
+i915/kbl_dmc_ver1_01.bin
+i915/bxt_huc_ver01_07_1398.bin
+i915/kbl_guc_33.0.0.bin
+i915/icl_guc_33.0.0.bin
+i915/tgl_guc_35.2.0.bin
+i915/bxt_dmc_ver1_07.bin
+i915/skl_huc_2.0.0.bin
+i915/skl_guc_ver1.bin
+i915/kbl_guc_ver9_14.bin
+i915/bxt_guc_ver9_29.bin
+i915/glk_guc_32.0.3.bin
+i915/skl_guc_ver6.bin
+i915/glk_huc_4.0.0.bin
+i915/kbl_huc_4.0.0.bin
+i915/cnl_dmc_ver1_07.bin
+i915/bxt_dmc_ver1.bin
+i915/cml_huc_4.0.0.bin
+i915/kbl_huc_ver02_00_1810.bin
+i915/icl_huc_ver8_4_3238.bin
+i915/glk_huc_ver03_01_2893.bin
+i915/kbl_dmc_ver1.bin
+i915/kbl_guc_ver9_39.bin
+i915/icl_huc_9.0.0.bin
+i915/kbl_dmc_ver1_04.bin
+i915/skl_guc_33.0.0.bin
+i915/skl_guc_ver6_1.bin
+i915/bxt_guc_33.0.0.bin
+i915/tgl_dmc_ver2_04.bin
+i915/ehl_huc_9.0.0.bin
+i915/kbl_guc_32.0.3.bin
+i915/skl_dmc_ver1_26.bin
+i915/icl_guc_32.0.3.bin
+i915/bxt_guc_ver8_7.bin
+i915/cml_guc_33.0.0.bin
+i915/ehl_guc_33.0.4.bin
+i915/tgl_huc_7.0.12.bin
+i915/glk_guc_33.0.0.bin
+i915/skl_guc_ver9_33.bin
+i915/bxt_huc_ver01_8_2893.bin
+i915/skl_guc_ver4.bin
+i915/skl_dmc_ver1_27.bin
+i915/icl_dmc_ver1_07.bin
+i915/glk_dmc_ver1_04.bin
+i915/icl_dmc_ver1_09.bin
+imx/sdma/sdma-imx6q.bin
+imx/sdma/sdma-imx7d.bin
+inside-secure/eip197_minifw/ifpp.bin
+inside-secure/eip197_minifw/ipue.bin
+intel/ibt-19-0-1.ddc
+intel/ibt-19-240-4.ddc
+intel/ibt-20-1-3.ddc
+intel/ibt-17-0-1.sfi
+intel/dsp_fw_release_v3402.bin
+intel/ibt-20-1-4.ddc
+intel/dsp_fw_kbl_v3266.bin
+intel/ibt-17-2.sfi
+intel/ibt-19-32-0.ddc
+intel/ibt-11-5.ddc
+intel/ibt-hw-37.8.bseq
+intel/dsp_fw_glk_v2880.bin
+intel/dsp_fw_kbl_v701.bin
+intel/ibt-hw-37.7.10-fw-1.80.2.3.d.bseq
+intel/ibt-20-0-3.ddc
+intel/ibt-17-1.ddc
+intel/fw_sst_0f28.bin-48kHz_i2s_master
+intel/ibt-19-32-4.sfi
+intel/ibt-hw-37.8.10-fw-1.10.2.27.d.bseq
+intel/dsp_fw_kbl_v1037.bin
+intel/ibt-12-16.ddc
+intel/ibt-19-32-1.ddc
+intel/dsp_fw_glk_v1814.bin
+intel/ibt-hw-37.8.10-fw-22.50.19.14.f.bseq
+intel/ibt-hw-37.7.10-fw-1.0.1.2d.d.bseq
+intel/ibt-19-16-4.ddc
+intel/IntcSST2.bin
+intel/ibt-19-0-0.ddc
+intel/fw_sst_0f28.bin
+intel/dsp_fw_cnl_v1191.bin
+intel/ibt-18-1.ddc
+intel/ibt-18-0-1.ddc
+intel/dsp_fw_release_v969.bin
+intel/ice/ddp/ice-1.3.4.0.pkg
+intel/dsp_fw_kbl_v2630.bin
+intel/ibt-19-0-4.sfi
+intel/ibt-18-2.sfi
+intel/ibt-17-16-1.sfi
+intel/ibt-19-240-1.sfi
+intel/ibt-18-16-1.sfi
+intel/dsp_fw_glk_v3366.bin
+intel/ibt-19-32-1.sfi
+intel/ibt-hw-37.7.bseq
+intel/ibt-12-16.sfi
+intel/ibt-hw-37.7.10-fw-1.80.1.2d.d.bseq
+intel/dsp_fw_kbl_v3420.bin
+intel/fw_sst_22a8.bin
+intel/ibt-19-16-4.sfi
+intel/ibt-19-0-0.sfi
+intel/ibt-hw-37.7.10-fw-1.0.2.3.d.bseq
+intel/ibt-18-1.sfi
+intel/ibt-18-0-1.sfi
+intel/fw_sst_0f28_ssp0.bin
+intel/dsp_fw_bxtn_v2219.bin
+intel/dsp_fw_kbl_v2042.bin
+intel/dsp_fw_bxtn_v3366.bin
+intel/ibt-19-240-1.ddc
+intel/ibt-17-16-1.ddc
+intel/ibt-18-16-1.ddc
+intel/ibt-19-0-4.ddc
+intel/ibt-18-2.ddc
+intel/ibt-19-240-4.sfi
+intel/ibt-19-0-1.sfi
+intel/ibt-17-0-1.ddc
+intel/ibt-20-1-3.sfi
+intel/ibt-20-1-4.sfi
+intel/dsp_fw_cnl_v1858.bin
+intel/ibt-17-2.ddc
+intel/ibt-19-32-0.sfi
+intel/ibt-11-5.sfi
+intel/irci_irci_ecr-master_20161208_0213_20170112_1500.bin
+intel/dsp_fw_glk_v2768.bin
+intel/ibt-20-0-3.sfi
+intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq
+intel/dsp_fw_kbl_v3402.bin
+intel/ibt-17-1.sfi
+intel/ibt-19-32-4.ddc
+isci/isci_firmware.bin
+isdbt_nova_12mhz.inp
+isdbt_nova_12mhz_b0.inp
+isdbt_rio.inp
+iwlwifi-100-5.ucode
+iwlwifi-1000-3.ucode
+iwlwifi-1000-5.ucode
+iwlwifi-105-6.ucode
+iwlwifi-135-6.ucode
+iwlwifi-2000-6.ucode
+iwlwifi-2030-6.ucode
+iwlwifi-3160-10.ucode
+iwlwifi-3160-12.ucode
+iwlwifi-3160-13.ucode
+iwlwifi-3160-16.ucode
+iwlwifi-3160-17.ucode
+iwlwifi-3160-7.ucode
+iwlwifi-3160-8.ucode
+iwlwifi-3160-9.ucode
+iwlwifi-3168-21.ucode
+iwlwifi-3168-22.ucode
+iwlwifi-3168-27.ucode
+iwlwifi-3168-29.ucode
+iwlwifi-3945-2.ucode
+iwlwifi-4965-2.ucode
+iwlwifi-5000-1.ucode
+iwlwifi-5000-2.ucode
+iwlwifi-5000-5.ucode
+iwlwifi-5150-2.ucode
+iwlwifi-6000-4.ucode
+iwlwifi-6000g2a-5.ucode
+iwlwifi-6000g2a-6.ucode
+iwlwifi-6000g2b-5.ucode
+iwlwifi-6000g2b-6.ucode
+iwlwifi-6050-4.ucode
+iwlwifi-6050-5.ucode
+iwlwifi-7260-10.ucode
+iwlwifi-7260-12.ucode
+iwlwifi-7260-13.ucode
+iwlwifi-7260-16.ucode
+iwlwifi-7260-17.ucode
+iwlwifi-7260-7.ucode
+iwlwifi-7260-8.ucode
+iwlwifi-7260-9.ucode
+iwlwifi-7265-10.ucode
+iwlwifi-7265-12.ucode
+iwlwifi-7265-13.ucode
+iwlwifi-7265-16.ucode
+iwlwifi-7265-17.ucode
+iwlwifi-7265-8.ucode
+iwlwifi-7265-9.ucode
+iwlwifi-7265D-10.ucode
+iwlwifi-7265D-12.ucode
+iwlwifi-7265D-13.ucode
+iwlwifi-7265D-16.ucode
+iwlwifi-7265D-17.ucode
+iwlwifi-7265D-21.ucode
+iwlwifi-7265D-22.ucode
+iwlwifi-7265D-27.ucode
+iwlwifi-7265D-29.ucode
+iwlwifi-8000C-13.ucode
+iwlwifi-8000C-16.ucode
+iwlwifi-8000C-21.ucode
+iwlwifi-8000C-22.ucode
+iwlwifi-8000C-27.ucode
+iwlwifi-8000C-31.ucode
+iwlwifi-8000C-34.ucode
+iwlwifi-8000C-36.ucode
+iwlwifi-8265-21.ucode
+iwlwifi-8265-22.ucode
+iwlwifi-8265-27.ucode
+iwlwifi-8265-31.ucode
+iwlwifi-8265-34.ucode
+iwlwifi-8265-36.ucode
+iwlwifi-9000-pu-b0-jf-b0-33.ucode
+iwlwifi-9000-pu-b0-jf-b0-34.ucode
+iwlwifi-9000-pu-b0-jf-b0-38.ucode
+iwlwifi-9000-pu-b0-jf-b0-41.ucode
+iwlwifi-9000-pu-b0-jf-b0-43.ucode
+iwlwifi-9000-pu-b0-jf-b0-46.ucode
+iwlwifi-9260-th-b0-jf-b0-33.ucode
+iwlwifi-9260-th-b0-jf-b0-34.ucode
+iwlwifi-9260-th-b0-jf-b0-38.ucode
+iwlwifi-9260-th-b0-jf-b0-41.ucode
+iwlwifi-9260-th-b0-jf-b0-43.ucode
+iwlwifi-9260-th-b0-jf-b0-46.ucode
+iwlwifi-Qu-b0-hr-b0-48.ucode
+iwlwifi-Qu-b0-jf-b0-48.ucode
+iwlwifi-Qu-c0-hr-b0-48.ucode
+iwlwifi-Qu-c0-jf-b0-48.ucode
+iwlwifi-QuZ-a0-hr-b0-48.ucode
+iwlwifi-QuZ-a0-jf-b0-48.ucode
+iwlwifi-cc-a0-46.ucode
+iwlwifi-cc-a0-48.ucode
+kaweth/new_code.bin
+kaweth/new_code_fix.bin
+kaweth/trigger_code.bin
+kaweth/trigger_code_fix.bin
+keyspan/usa49w.fw
+keyspan/usa19qi.fw
+keyspan/usa49wlc.fw
+keyspan/usa28x.fw
+keyspan/usa28.fw
+keyspan/usa19w.fw
+keyspan/usa19.fw
+keyspan/mpr.fw
+keyspan/usa18x.fw
+keyspan/usa28xb.fw
+keyspan/usa19qw.fw
+keyspan/usa28xa.fw
+keyspan_pda/xircom_pgs.fw
+keyspan_pda/keyspan_pda.fw
+lbtf_usb.bin
+libertas/cf8381.bin
+libertas/cf8385_helper.bin
+libertas/usb8388_v9.bin
+libertas/gspi8682_helper.bin
+libertas/sd8682_helper.bin
+libertas/usb8682.bin
+libertas/sd8686_v9.bin
+libertas/sd8385_helper.bin
+libertas/gspi8688.bin
+libertas/sd8686_v9_helper.bin
+libertas/sd8686_v8.bin
+libertas/gspi8686_v9.bin
+libertas/gspi8686_v9_helper.bin
+libertas/sd8385.bin
+libertas/cf8381_helper.bin
+libertas/sd8686_v8_helper.bin
+libertas/gspi8682.bin
+libertas/usb8388_v5.bin
+libertas/sd8682.bin
+libertas/usb8388_olpc.bin
+libertas/lbtf_sdio.bin
+libertas/cf8385.bin
+libertas/gspi8688_helper.bin
+liquidio/lio_210nv_nic.bin
+liquidio/lio_23xx_nic.bin
+liquidio/lio_410nv_nic.bin
+liquidio/lio_23xx_vsw.bin
+liquidio/lio_210sv_nic.bin
+matrox/g400_warp.fw
+matrox/g200_warp.fw
+mediatek/mt8173/vpu_p.bin
+mediatek/mt8173/vpu_d.bin
+mediatek/mt7622_rom_patch.bin
+mediatek/mt7668pr2h.bin
+mediatek/mt7622pr2h.bin
+mediatek/mt8183/scp.img
+mediatek/mt7610e.bin
+mediatek/mt7662u_rom_patch.bin
+mediatek/mt7663pr2h.bin
+mediatek/mt7615_n9.bin
+mediatek/mt7622_n9.bin
+mediatek/mt7615_rom_patch.bin
+mediatek/mt7663_n9_v3.bin
+mediatek/mt7662u.bin
+mediatek/mt7650e.bin
+mediatek/mt7610u.bin
+mediatek/mt7615_cr4.bin
+mellanox/mlxsw_spectrum-13.2000.2714.mfa2
+mellanox/mlxsw_spectrum-13.2000.1122.mfa2
+mellanox/mlxsw_spectrum-13.2000.2308.mfa2
+mellanox/mlxsw_spectrum-13.1620.192.mfa2
+mellanox/mlxsw_spectrum2-29.2000.2714.mfa2
+mellanox/mlxsw_spectrum-13.1910.622.mfa2
+mellanox/mlxsw_spectrum-13.1530.152.mfa2
+mellanox/mlxsw_spectrum-13.1420.122.mfa2
+mellanox/mlxsw_spectrum2-29.2000.2308.mfa2
+mellanox/mlxsw_spectrum-13.2000.1886.mfa2
+mellanox/mlxsw_spectrum-13.1703.4.mfa2
+mellanox/mlxsw_spectrum-13.1702.6.mfa2
+meson/vdec/g12a_h264.bin
+meson/vdec/gxl_h263.bin
+meson/vdec/gxl_h264.bin
+meson/vdec/gxl_hevc_mmu.bin
+meson/vdec/gxbb_h264.bin
+meson/vdec/gxl_mpeg4_5.bin
+meson/vdec/gxl_vp9.bin
+meson/vdec/gxm_h264.bin
+meson/vdec/gxl_mpeg12.bin
+meson/vdec/gxl_mjpeg.bin
+meson/vdec/g12a_hevc_mmu.bin
+meson/vdec/sm1_vp9_mmu.bin
+meson/vdec/sm1_hevc_mmu.bin
+meson/vdec/g12a_vp9.bin
+meson/vdec/gxl_hevc.bin
+microchip/mscc_vsc8584_revb_int8051_fb48.bin
+microchip/mscc_vsc8574_revb_int8051_29e8.bin
+moxa/moxa-1110.fw
+moxa/moxa-1250.fw
+moxa/moxa-1618.fw
+moxa/moxa-1251.fw
+moxa/moxa-1653.fw
+moxa/moxa-1410.fw
+moxa/moxa-1451.fw
+moxa/moxa-1613.fw
+moxa/moxa-1450.fw
+moxa/moxa-1131.fw
+moxa/moxa-1130.fw
+moxa/moxa-1658.fw
+moxa/moxa-1150.fw
+moxa/moxa-1151.fw
+mrvl/usb8797_uapsta.bin
+mrvl/sd8688_helper.bin
+mrvl/pcie8997_wlan_v4.bin
+mrvl/sd8787_uapsta.bin
+mrvl/sd8801_uapsta.bin
+mrvl/pcieuart8997_combo_v4.bin
+mrvl/pcie8897_uapsta.bin
+mrvl/usb8897_uapsta.bin
+mrvl/sd8887_uapsta.bin
+mrvl/sdsd8977_combo_v2.bin
+mrvl/sd8897_uapsta.bin
+mrvl/sd8688.bin
+mrvl/sd8797_uapsta.bin
+mrvl/sdsd8997_combo_v4.bin
+mrvl/pcieusb8997_combo_v4.bin
+mrvl/usb8801_uapsta.bin
+mrvl/usb8766_uapsta.bin
+mrvl/usbusb8997_combo_v4.bin
+mt7601u.bin
+mt7650.bin
+mt7662.bin
+mt7662_rom_patch.bin
+mts_cdma.fw
+mts_edge.fw
+mts_gsm.fw
+mwl8k/fmimage_8366_ap-2.fw
+mwl8k/fmimage_8366_ap-3.fw
+mwl8k/fmimage_8366_ap-1.fw
+mwl8k/fmimage_8687.fw
+mwl8k/helper_8366.fw
+mwl8k/fmimage_8764_ap-1.fw
+mwl8k/helper_8687.fw
+mwl8k/fmimage_8366.fw
+mwlwifi/88W8897.bin
+mwlwifi/88W8864.bin
+myri10ge_eth_big_z8e.dat
+myri10ge_eth_z8e.dat
+myri10ge_ethp_big_z8e.dat
+myri10ge_ethp_z8e.dat
+myri10ge_rss_eth_big_z8e.dat
+myri10ge_rss_eth_z8e.dat
+myri10ge_rss_ethp_big_z8e.dat
+myri10ge_rss_ethp_z8e.dat
+netronome/nic-sriov/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_2x25.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_2x10.nffw
+netronome/nic-sriov/nic_AMDA0081-0001_4x10.nffw
+netronome/nic-sriov/nic_AMDA0078-0011_1x100.nffw
+netronome/nic-sriov/nic_AMDA0096-0001_2x10.nffw
+netronome/nic-sriov/nic_AMDA0081-0001_1x40.nffw
+netronome/nic-sriov/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/nic-sriov/nic_AMDA0058-0012_2x40.nffw
+netronome/nic-sriov/nic_AMDA0097-0001_8x10.nffw
+netronome/nic-sriov/nic_AMDA0058-0011_2x40.nffw
+netronome/nic-sriov/nic_AMDA0097-0001_2x40.nffw
+netronome/flower/nic_AMDA0097.nffw
+netronome/flower/nic_AMDA0096.nffw
+netronome/flower/nic_AMDA0058.nffw
+netronome/flower/nic_AMDA0099.nffw
+netronome/bpf/nic_AMDA0097-0001_2x40.nffw
+netronome/bpf/nic_AMDA0096-0001_2x10.nffw
+netronome/bpf/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/bpf/nic_AMDA0081-0001_1x40.nffw
+netronome/bpf/nic_AMDA0058-0012_2x40.nffw
+netronome/bpf/nic_AMDA0097-0001_8x10.nffw
+netronome/bpf/nic_AMDA0058-0011_2x40.nffw
+netronome/bpf/nic_AMDA0099-0001_2x25.nffw
+netronome/bpf/nic_AMDA0078-0011_1x100.nffw
+netronome/bpf/nic_AMDA0099-0001_2x10.nffw
+netronome/bpf/nic_AMDA0081-0001_4x10.nffw
+netronome/bpf/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/nic/nic_AMDA0097-0001_4x10_1x40.nffw
+netronome/nic/nic_AMDA0097-0001_2x40.nffw
+netronome/nic/nic_AMDA0081-0001_1x40.nffw
+netronome/nic/nic_AMDA0058-0012_2x40.nffw
+netronome/nic/nic_AMDA0097-0001_8x10.nffw
+netronome/nic/nic_AMDA0058-0011_2x40.nffw
+netronome/nic/nic_AMDA0096-0001_2x10.nffw
+netronome/nic/nic_AMDA0099-0001_1x10_1x25.nffw
+netronome/nic/nic_AMDA0081-0001_4x10.nffw
+netronome/nic/nic_AMDA0099-0001_2x25.nffw
+netronome/nic/nic_AMDA0078-0011_1x100.nffw
+netronome/nic/nic_AMDA0099-0001_2x10.nffw
+nvidia/tegra186/vic04_ucode.bin
+nvidia/tegra186/xusb.bin
+nvidia/tu104/acr/ucode_ahesasc.bin
+nvidia/tu104/acr/ucode_asb.bin
+nvidia/tu104/acr/ucode_unload.bin
+nvidia/tu104/acr/unload_bl.bin
+nvidia/tu104/acr/bl.bin
+nvidia/tu104/nvdec/scrubber.bin
+nvidia/tu104/gr/fecs_sig.bin
+nvidia/tu104/gr/fecs_inst.bin
+nvidia/tu104/gr/gpccs_inst.bin
+nvidia/tu104/gr/gpccs_sig.bin
+nvidia/tu104/gr/sw_bundle_init.bin
+nvidia/tu104/gr/fecs_bl.bin
+nvidia/tu104/gr/sw_method_init.bin
+nvidia/tu104/gr/sw_ctx.bin
+nvidia/tu104/gr/gpccs_bl.bin
+nvidia/tu104/gr/fecs_data.bin
+nvidia/tu104/gr/gpccs_data.bin
+nvidia/tu104/gr/sw_nonctx.bin
+nvidia/tu104/gr/sw_veid_bundle_init.bin
+nvidia/tu104/sec2/sig.bin
+nvidia/tu104/sec2/image.bin
+nvidia/tu104/sec2/desc.bin
+nvidia/tu117/acr/unload_bl.bin
+nvidia/tu117/acr/ucode_asb.bin
+nvidia/tu117/acr/bl.bin
+nvidia/tu117/acr/ucode_unload.bin
+nvidia/tu117/acr/ucode_ahesasc.bin
+nvidia/tu117/gr/gpccs_data.bin
+nvidia/tu117/gr/gpccs_sig.bin
+nvidia/tu117/gr/gpccs_bl.bin
+nvidia/tu117/gr/fecs_inst.bin
+nvidia/tu117/gr/sw_method_init.bin
+nvidia/tu117/gr/sw_nonctx.bin
+nvidia/tu117/gr/sw_veid_bundle_init.bin
+nvidia/tu117/gr/fecs_data.bin
+nvidia/tu117/gr/sw_bundle_init.bin
+nvidia/tu117/gr/gpccs_inst.bin
+nvidia/tu117/gr/fecs_bl.bin
+nvidia/tu117/gr/fecs_sig.bin
+nvidia/tu117/gr/sw_ctx.bin
+nvidia/tu117/sec2/image.bin
+nvidia/tu117/sec2/sig.bin
+nvidia/tu117/sec2/desc.bin
+nvidia/tu117/nvdec/scrubber.bin
+nvidia/gv100/nvdec/scrubber.bin
+nvidia/gv100/acr/unload_bl.bin
+nvidia/gv100/acr/ucode_unload.bin
+nvidia/gv100/acr/bl.bin
+nvidia/gv100/acr/ucode_load.bin
+nvidia/gv100/sec2/image.bin
+nvidia/gv100/sec2/desc.bin
+nvidia/gv100/sec2/sig.bin
+nvidia/gv100/gr/fecs_data.bin
+nvidia/gv100/gr/gpccs_data.bin
+nvidia/gv100/gr/sw_nonctx.bin
+nvidia/gv100/gr/sw_bundle_init.bin
+nvidia/gv100/gr/gpccs_bl.bin
+nvidia/gv100/gr/gpccs_sig.bin
+nvidia/gv100/gr/fecs_sig.bin
+nvidia/gv100/gr/fecs_inst.bin
+nvidia/gv100/gr/gpccs_inst.bin
+nvidia/gv100/gr/sw_ctx.bin
+nvidia/gv100/gr/sw_method_init.bin
+nvidia/gv100/gr/fecs_bl.bin
+nvidia/gp104/gr/sw_nonctx.bin
+nvidia/gp104/gr/fecs_data.bin
+nvidia/gp104/gr/sw_bundle_init.bin
+nvidia/gp104/gr/fecs_bl.bin
+nvidia/gp104/gr/gpccs_bl.bin
+nvidia/gp104/gr/gpccs_data.bin
+nvidia/gp104/gr/sw_ctx.bin
+nvidia/gp104/gr/gpccs_inst.bin
+nvidia/gp104/gr/gpccs_sig.bin
+nvidia/gp104/gr/fecs_inst.bin
+nvidia/gp104/gr/fecs_sig.bin
+nvidia/gp104/gr/sw_method_init.bin
+nvidia/gp104/acr/unload_bl.bin
+nvidia/gp104/acr/bl.bin
+nvidia/gp104/acr/ucode_unload.bin
+nvidia/gp104/acr/ucode_load.bin
+nvidia/gp104/sec2/image-1.bin
+nvidia/gp104/sec2/desc.bin
+nvidia/gp104/sec2/sig.bin
+nvidia/gp104/sec2/desc-1.bin
+nvidia/gp104/sec2/image.bin
+nvidia/gp104/sec2/sig-1.bin
+nvidia/gp104/nvdec/scrubber.bin
+nvidia/gk20a/fecs_data.bin
+nvidia/gk20a/gpccs_inst.bin
+nvidia/gk20a/sw_nonctx.bin
+nvidia/gk20a/sw_bundle_init.bin
+nvidia/gk20a/fecs_inst.bin
+nvidia/gk20a/gpccs_data.bin
+nvidia/gk20a/sw_method_init.bin
+nvidia/gk20a/sw_ctx.bin
+nvidia/gm20b/acr/ucode_load.bin
+nvidia/gm20b/acr/bl.bin
+nvidia/gm20b/gr/gpccs_data.bin
+nvidia/gm20b/gr/fecs_bl.bin
+nvidia/gm20b/gr/fecs_inst.bin
+nvidia/gm20b/gr/sw_method_init.bin
+nvidia/gm20b/gr/sw_nonctx.bin
+nvidia/gm20b/gr/sw_ctx.bin
+nvidia/gm20b/gr/fecs_data.bin
+nvidia/gm20b/gr/sw_bundle_init.bin
+nvidia/gm20b/gr/gpccs_inst.bin
+nvidia/gm20b/gr/fecs_sig.bin
+nvidia/gm20b/pmu/desc.bin
+nvidia/gm20b/pmu/sig.bin
+nvidia/gm20b/pmu/image.bin
+nvidia/tegra124/vic03_ucode.bin
+nvidia/tegra124/xusb.bin
+nvidia/gp100/acr/bl.bin
+nvidia/gp100/acr/ucode_unload.bin
+nvidia/gp100/acr/ucode_load.bin
+nvidia/gp100/gr/sw_method_init.bin
+nvidia/gp100/gr/sw_ctx.bin
+nvidia/gp100/gr/gpccs_bl.bin
+nvidia/gp100/gr/gpccs_data.bin
+nvidia/gp100/gr/fecs_data.bin
+nvidia/gp100/gr/sw_nonctx.bin
+nvidia/gp100/gr/gpccs_inst.bin
+nvidia/gp100/gr/fecs_bl.bin
+nvidia/gp100/gr/fecs_sig.bin
+nvidia/gp100/gr/fecs_inst.bin
+nvidia/gp100/gr/sw_bundle_init.bin
+nvidia/gp100/gr/gpccs_sig.bin
+nvidia/gm206/gr/fecs_inst.bin
+nvidia/gm206/gr/fecs_sig.bin
+nvidia/gm206/gr/gpccs_inst.bin
+nvidia/gm206/gr/gpccs_sig.bin
+nvidia/gm206/gr/sw_ctx.bin
+nvidia/gm206/gr/sw_method_init.bin
+nvidia/gm206/gr/gpccs_data.bin
+nvidia/gm206/gr/sw_bundle_init.bin
+nvidia/gm206/gr/gpccs_bl.bin
+nvidia/gm206/gr/fecs_data.bin
+nvidia/gm206/gr/sw_nonctx.bin
+nvidia/gm206/gr/fecs_bl.bin
+nvidia/gm206/acr/ucode_load.bin
+nvidia/gm206/acr/ucode_unload.bin
+nvidia/gm206/acr/bl.bin
+nvidia/gp107/gr/gpccs_sig.bin
+nvidia/gp107/gr/sw_method_init.bin
+nvidia/gp107/gr/gpccs_bl.bin
+nvidia/gp107/gr/gpccs_data.bin
+nvidia/gp107/gr/fecs_inst.bin
+nvidia/gp107/gr/fecs_data.bin
+nvidia/gp107/gr/sw_nonctx.bin
+nvidia/gp107/gr/fecs_bl.bin
+nvidia/gp107/gr/sw_ctx.bin
+nvidia/gp107/gr/gpccs_inst.bin
+nvidia/gp107/gr/sw_bundle_init.bin
+nvidia/gp107/gr/fecs_sig.bin
+nvidia/gp107/nvdec/scrubber.bin
+nvidia/gp107/acr/unload_bl.bin
+nvidia/gp107/acr/ucode_load.bin
+nvidia/gp107/acr/ucode_unload.bin
+nvidia/gp107/acr/bl.bin
+nvidia/gp107/sec2/sig.bin
+nvidia/gp107/sec2/image.bin
+nvidia/gp107/sec2/sig-1.bin
+nvidia/gp107/sec2/image-1.bin
+nvidia/gp107/sec2/desc.bin
+nvidia/gp107/sec2/desc-1.bin
+nvidia/tegra210/vic04_ucode.bin
+nvidia/tegra210/xusb.bin
+nvidia/tu102/nvdec/scrubber.bin
+nvidia/tu102/gr/fecs_sig.bin
+nvidia/tu102/gr/sw_ctx.bin
+nvidia/tu102/gr/sw_bundle_init.bin
+nvidia/tu102/gr/gpccs_inst.bin
+nvidia/tu102/gr/sw_nonctx.bin
+nvidia/tu102/gr/fecs_data.bin
+nvidia/tu102/gr/fecs_inst.bin
+nvidia/tu102/gr/sw_veid_bundle_init.bin
+nvidia/tu102/gr/fecs_bl.bin
+nvidia/tu102/gr/gpccs_bl.bin
+nvidia/tu102/gr/gpccs_sig.bin
+nvidia/tu102/gr/gpccs_data.bin
+nvidia/tu102/gr/sw_method_init.bin
+nvidia/tu102/acr/ucode_asb.bin
+nvidia/tu102/acr/unload_bl.bin
+nvidia/tu102/acr/bl.bin
+nvidia/tu102/acr/ucode_ahesasc.bin
+nvidia/tu102/acr/ucode_unload.bin
+nvidia/tu102/sec2/desc.bin
+nvidia/tu102/sec2/sig.bin
+nvidia/tu102/sec2/image.bin
+nvidia/tegra194/xusb.bin
+nvidia/tu116/acr/ucode_asb.bin
+nvidia/tu116/acr/unload_bl.bin
+nvidia/tu116/acr/ucode_ahesasc.bin
+nvidia/tu116/acr/ucode_unload.bin
+nvidia/tu116/acr/bl.bin
+nvidia/tu116/sec2/image.bin
+nvidia/tu116/sec2/desc.bin
+nvidia/tu116/sec2/sig.bin
+nvidia/tu116/gr/sw_veid_bundle_init.bin
+nvidia/tu116/gr/gpccs_inst.bin
+nvidia/tu116/gr/sw_method_init.bin
+nvidia/tu116/gr/gpccs_sig.bin
+nvidia/tu116/gr/gpccs_bl.bin
+nvidia/tu116/gr/fecs_inst.bin
+nvidia/tu116/gr/sw_ctx.bin
+nvidia/tu116/gr/sw_nonctx.bin
+nvidia/tu116/gr/fecs_data.bin
+nvidia/tu116/gr/fecs_sig.bin
+nvidia/tu116/gr/fecs_bl.bin
+nvidia/tu116/gr/gpccs_data.bin
+nvidia/tu116/gr/sw_bundle_init.bin
+nvidia/tu116/nvdec/scrubber.bin
+nvidia/gm204/acr/ucode_unload.bin
+nvidia/gm204/acr/ucode_load.bin
+nvidia/gm204/acr/bl.bin
+nvidia/gm204/gr/gpccs_bl.bin
+nvidia/gm204/gr/gpccs_sig.bin
+nvidia/gm204/gr/sw_method_init.bin
+nvidia/gm204/gr/gpccs_data.bin
+nvidia/gm204/gr/fecs_inst.bin
+nvidia/gm204/gr/fecs_bl.bin
+nvidia/gm204/gr/gpccs_inst.bin
+nvidia/gm204/gr/fecs_data.bin
+nvidia/gm204/gr/sw_ctx.bin
+nvidia/gm204/gr/sw_nonctx.bin
+nvidia/gm204/gr/sw_bundle_init.bin
+nvidia/gm204/gr/fecs_sig.bin
+nvidia/gp108/nvdec/scrubber.bin
+nvidia/gp108/gr/gpccs_inst.bin
+nvidia/gp108/gr/fecs_data.bin
+nvidia/gp108/gr/fecs_sig.bin
+nvidia/gp108/gr/sw_nonctx.bin
+nvidia/gp108/gr/sw_bundle_init.bin
+nvidia/gp108/gr/gpccs_sig.bin
+nvidia/gp108/gr/sw_method_init.bin
+nvidia/gp108/gr/gpccs_data.bin
+nvidia/gp108/gr/gpccs_bl.bin
+nvidia/gp108/gr/fecs_inst.bin
+nvidia/gp108/gr/fecs_bl.bin
+nvidia/gp108/gr/sw_ctx.bin
+nvidia/gp108/sec2/image.bin
+nvidia/gp108/sec2/sig.bin
+nvidia/gp108/sec2/desc.bin
+nvidia/gp108/acr/bl.bin
+nvidia/gp108/acr/ucode_unload.bin
+nvidia/gp108/acr/ucode_load.bin
+nvidia/gp108/acr/unload_bl.bin
+nvidia/gp102/nvdec/scrubber.bin
+nvidia/gp102/acr/ucode_load.bin
+nvidia/gp102/acr/ucode_unload.bin
+nvidia/gp102/acr/unload_bl.bin
+nvidia/gp102/acr/bl.bin
+nvidia/gp102/sec2/desc.bin
+nvidia/gp102/sec2/desc-1.bin
+nvidia/gp102/sec2/image.bin
+nvidia/gp102/sec2/sig-1.bin
+nvidia/gp102/sec2/image-1.bin
+nvidia/gp102/sec2/sig.bin
+nvidia/gp102/gr/fecs_data.bin
+nvidia/gp102/gr/fecs_sig.bin
+nvidia/gp102/gr/sw_nonctx.bin
+nvidia/gp102/gr/gpccs_data.bin
+nvidia/gp102/gr/fecs_bl.bin
+nvidia/gp102/gr/sw_bundle_init.bin
+nvidia/gp102/gr/gpccs_sig.bin
+nvidia/gp102/gr/sw_ctx.bin
+nvidia/gp102/gr/sw_method_init.bin
+nvidia/gp102/gr/fecs_inst.bin
+nvidia/gp102/gr/gpccs_bl.bin
+nvidia/gp102/gr/gpccs_inst.bin
+nvidia/gp10b/pmu/image.bin
+nvidia/gp10b/pmu/desc.bin
+nvidia/gp10b/pmu/sig.bin
+nvidia/gp10b/acr/ucode_load.bin
+nvidia/gp10b/acr/bl.bin
+nvidia/gp10b/gr/sw_method_init.bin
+nvidia/gp10b/gr/fecs_data.bin
+nvidia/gp10b/gr/sw_nonctx.bin
+nvidia/gp10b/gr/gpccs_data.bin
+nvidia/gp10b/gr/gpccs_bl.bin
+nvidia/gp10b/gr/fecs_bl.bin
+nvidia/gp10b/gr/gpccs_sig.bin
+nvidia/gp10b/gr/gpccs_inst.bin
+nvidia/gp10b/gr/fecs_sig.bin
+nvidia/gp10b/gr/sw_bundle_init.bin
+nvidia/gp10b/gr/sw_ctx.bin
+nvidia/gp10b/gr/fecs_inst.bin
+nvidia/gm200/acr/bl.bin
+nvidia/gm200/acr/ucode_load.bin
+nvidia/gm200/acr/ucode_unload.bin
+nvidia/gm200/gr/fecs_inst.bin
+nvidia/gm200/gr/gpccs_bl.bin
+nvidia/gm200/gr/sw_method_init.bin
+nvidia/gm200/gr/gpccs_sig.bin
+nvidia/gm200/gr/gpccs_inst.bin
+nvidia/gm200/gr/gpccs_data.bin
+nvidia/gm200/gr/sw_ctx.bin
+nvidia/gm200/gr/fecs_data.bin
+nvidia/gm200/gr/fecs_sig.bin
+nvidia/gm200/gr/sw_nonctx.bin
+nvidia/gm200/gr/sw_bundle_init.bin
+nvidia/gm200/gr/fecs_bl.bin
+nvidia/gp106/nvdec/scrubber.bin
+nvidia/gp106/gr/sw_nonctx.bin
+nvidia/gp106/gr/fecs_bl.bin
+nvidia/gp106/gr/fecs_data.bin
+nvidia/gp106/gr/gpccs_bl.bin
+nvidia/gp106/gr/gpccs_data.bin
+nvidia/gp106/gr/sw_bundle_init.bin
+nvidia/gp106/gr/sw_ctx.bin
+nvidia/gp106/gr/sw_method_init.bin
+nvidia/gp106/gr/fecs_sig.bin
+nvidia/gp106/gr/gpccs_inst.bin
+nvidia/gp106/gr/gpccs_sig.bin
+nvidia/gp106/gr/fecs_inst.bin
+nvidia/gp106/sec2/desc.bin
+nvidia/gp106/sec2/image-1.bin
+nvidia/gp106/sec2/sig.bin
+nvidia/gp106/sec2/image.bin
+nvidia/gp106/sec2/desc-1.bin
+nvidia/gp106/sec2/sig-1.bin
+nvidia/gp106/acr/unload_bl.bin
+nvidia/gp106/acr/bl.bin
+nvidia/gp106/acr/ucode_load.bin
+nvidia/gp106/acr/ucode_unload.bin
+nvidia/tu10x/typec/ccg_boot.cyacd
+nvidia/tu10x/typec/ccg_secondary.cyacd
+nvidia/tu10x/typec/ccg_primary.cyacd
+nvidia/tu106/nvdec/scrubber.bin
+nvidia/tu106/gr/sw_method_init.bin
+nvidia/tu106/gr/sw_veid_bundle_init.bin
+nvidia/tu106/gr/gpccs_data.bin
+nvidia/tu106/gr/sw_nonctx.bin
+nvidia/tu106/gr/fecs_sig.bin
+nvidia/tu106/gr/fecs_data.bin
+nvidia/tu106/gr/gpccs_inst.bin
+nvidia/tu106/gr/sw_ctx.bin
+nvidia/tu106/gr/fecs_inst.bin
+nvidia/tu106/gr/gpccs_bl.bin
+nvidia/tu106/gr/sw_bundle_init.bin
+nvidia/tu106/gr/fecs_bl.bin
+nvidia/tu106/gr/gpccs_sig.bin
+nvidia/tu106/sec2/desc.bin
+nvidia/tu106/sec2/sig.bin
+nvidia/tu106/sec2/image.bin
+nvidia/tu106/acr/ucode_asb.bin
+nvidia/tu106/acr/ucode_ahesasc.bin
+nvidia/tu106/acr/unload_bl.bin
+nvidia/tu106/acr/bl.bin
+nvidia/tu106/acr/ucode_unload.bin
+phanfw.bin
+qat_895xcc.bin
+qat_895xcc_mmp.bin
+qat_c3xxx.bin
+qat_c3xxx_mmp.bin
+qat_c62x.bin
+qat_c62x_mmp.bin
+qca/rampatch_00130300.bin
+qca/htbtfw20.tlv
+qca/rampatch_usb_00000201.bin
+qca/nvm_usb_00000302.bin
+qca/rampatch_usb_00000300.bin
+qca/nvm_00440302_eu.bin
+qca/nvm_00440302.bin
+qca/crnv32.bin
+qca/rampatch_usb_00000200.bin
+qca/crbtfw21.tlv
+qca/nvm_00130302.bin
+qca/nvm_usb_00000300.bin
+qca/htnv20.bin
+qca/rampatch_00440302.bin
+qca/nvm_00440302_i2s_eu.bin
+qca/nvm_usb_00000302_eu.bin
+qca/nvm_usb_00000200.bin
+qca/NOTICE.txt
+qca/rampatch_00130302.bin
+qca/nvm_00130300.bin
+qca/crnv21.bin
+qca/crbtfw32.tlv
+qca/nvm_usb_00000201.bin
+qca/rampatch_usb_00000302.bin
+qcom/venus-5.4/venus.mdt
+qcom/venus-5.4/venus.mbn
+qcom/venus-5.4/venus.b01
+qcom/venus-5.4/venus.b02
+qcom/venus-5.4/venus.b00
+qcom/venus-5.4/venus.b03
+qcom/venus-5.4/venus.b04
+qcom/a300_pm4.fw
+qcom/a530_zap.b02
+qcom/a630_gmu.bin
+qcom/a530_zap.mdt
+qcom/a530_zap.b01
+qcom/a530v3_gpmu.fw2
+qcom/a630_sqe.fw
+qcom/a300_pfp.fw
+qcom/venus-1.8/venus.b02
+qcom/venus-1.8/venus.b01
+qcom/venus-1.8/venus.mdt
+qcom/venus-1.8/venus.b03
+qcom/venus-1.8/venus.b04
+qcom/venus-1.8/venus.b00
+qcom/venus-5.2/venus.b00
+qcom/venus-5.2/venus.b03
+qcom/venus-5.2/venus.b04
+qcom/venus-5.2/venus.mdt
+qcom/venus-5.2/venus.mbn
+qcom/venus-5.2/venus.b01
+qcom/venus-5.2/venus.b02
+qcom/sdm845/adspr.jsn
+qcom/sdm845/modem.mbn
+qcom/sdm845/a630_zap.mbn
+qcom/sdm845/modemuw.jsn
+qcom/sdm845/cdsp.mbn
+qcom/sdm845/cdspr.jsn
+qcom/sdm845/mba.mbn
+qcom/sdm845/adsp.mbn
+qcom/sdm845/adspua.jsn
+qcom/a530_pfp.fw
+qcom/venus-4.2/venus.b04
+qcom/venus-4.2/venus.b03
+qcom/venus-4.2/venus.b00
+qcom/venus-4.2/venus.b02
+qcom/venus-4.2/venus.b01
+qcom/venus-4.2/venus.mdt
+qcom/NOTICE.txt
+qcom/a530_pm4.fw
+qcom/a530_zap.b00
+qed/qed_init_values_zipped-8.37.2.0.bin
+qed/qed_init_values-8.40.33.0.bin
+qed/qed_init_values-8.30.12.0.bin
+qed/qed_init_values_zipped-8.10.10.0.bin
+qed/qed_init_values_zipped-8.7.3.0.bin
+qed/qed_init_values_zipped-8.42.2.0.bin
+qed/qed_init_values_zipped-8.15.3.0.bin
+qed/qed_init_values_zipped-8.33.1.0.bin
+qed/qed_init_values_zipped-8.33.11.0.bin
+qed/qed_init_values-8.10.9.0.bin
+qed/qed_init_values-8.18.9.0.bin
+qed/qed_init_values_zipped-8.20.0.0.bin
+qed/qed_init_values_zipped-8.37.7.0.bin
+qed/qed_init_values_zipped-8.4.2.0.bin
+qed/qed_init_values-8.37.7.0.bin
+qed/qed_init_values-8.33.12.0.bin
+qed/qed_init_values-8.20.0.0.bin
+qed/qed_init_values-8.14.6.0.bin
+qed/qed_init_values_zipped-8.10.5.0.bin
+ql2100_fw.bin
+ql2200_fw.bin
+ql2300_fw.bin
+ql2322_fw.bin
+ql2400_fw.bin
+ql2500_fw.bin
+qlogic/1280.bin
+qlogic/1040.bin
+qlogic/sd7220.fw
+qlogic/12160.bin
+r128/r128_cce.bin
+r8a779x_usb3_v1.dlmem
+r8a779x_usb3_v2.dlmem
+r8a779x_usb3_v3.dlmem
+radeon/kabini_rlc.bin
+radeon/SUMO_rlc.bin
+radeon/kaveri_mec.bin
+radeon/pitcairn_me.bin
+radeon/OLAND_ce.bin
+radeon/TURKS_me.bin
+radeon/verde_k_smc.bin
+radeon/hawaii_pfp.bin
+radeon/KAVERI_pfp.bin
+radeon/HAWAII_ce.bin
+radeon/oland_smc.bin
+radeon/TAHITI_pfp.bin
+radeon/CAICOS_pfp.bin
+radeon/hainan_me.bin
+radeon/CAYMAN_smc.bin
+radeon/RV620_me.bin
+radeon/bonaire_k_smc.bin
+radeon/bonaire_sdma.bin
+radeon/RV620_pfp.bin
+radeon/hawaii_mc.bin
+radeon/REDWOOD_pfp.bin
+radeon/HAWAII_mec.bin
+radeon/RS600_cp.bin
+radeon/CAICOS_me.bin
+radeon/RV770_me.bin
+radeon/RV730_me.bin
+radeon/BARTS_me.bin
+radeon/PITCAIRN_mc.bin
+radeon/JUNIPER_smc.bin
+radeon/bonaire_mec.bin
+radeon/oland_mc.bin
+radeon/BONAIRE_rlc.bin
+radeon/PITCAIRN_smc.bin
+radeon/verde_pfp.bin
+radeon/RV770_uvd.bin
+radeon/KABINI_me.bin
+radeon/RV635_pfp.bin
+radeon/R100_cp.bin
+radeon/VERDE_mc2.bin
+radeon/HAINAN_pfp.bin
+radeon/OLAND_rlc.bin
+radeon/TAHITI_mc.bin
+radeon/mullins_sdma1.bin
+radeon/MULLINS_rlc.bin
+radeon/CEDAR_smc.bin
+radeon/R520_cp.bin
+radeon/tahiti_ce.bin
+radeon/mullins_mec.bin
+radeon/HAWAII_sdma.bin
+radeon/mullins_ce.bin
+radeon/RV770_smc.bin
+radeon/kaveri_ce.bin
+radeon/bonaire_me.bin
+radeon/KAVERI_sdma.bin
+radeon/HAWAII_mc2.bin
+radeon/verde_me.bin
+radeon/RV710_smc.bin
+radeon/RV730_pfp.bin
+radeon/hawaii_me.bin
+radeon/HAWAII_pfp.bin
+radeon/BONAIRE_ce.bin
+radeon/TURKS_pfp.bin
+radeon/HAINAN_ce.bin
+radeon/MULLINS_me.bin
+radeon/MULLINS_sdma.bin
+radeon/ARUBA_rlc.bin
+radeon/VERDE_ce.bin
+radeon/CYPRESS_me.bin
+radeon/RV630_pfp.bin
+radeon/KABINI_rlc.bin
+radeon/KAVERI_mec.bin
+radeon/kabini_vce.bin
+radeon/HAINAN_mc2.bin
+radeon/hainan_mc.bin
+radeon/VERDE_pfp.bin
+radeon/hawaii_mec.bin
+radeon/RV710_uvd.bin
+radeon/RS780_uvd.bin
+radeon/kabini_uvd.bin
+radeon/SUMO_uvd.bin
+radeon/CAYMAN_rlc.bin
+radeon/oland_rlc.bin
+radeon/tahiti_pfp.bin
+radeon/pitcairn_mc.bin
+radeon/kaveri_mec2.bin
+radeon/JUNIPER_me.bin
+radeon/TURKS_mc.bin
+radeon/kaveri_pfp.bin
+radeon/hawaii_sdma1.bin
+radeon/ARUBA_me.bin
+radeon/SUMO_me.bin
+radeon/si58_mc.bin
+radeon/R600_pfp.bin
+radeon/verde_mc.bin
+radeon/BARTS_smc.bin
+radeon/PALM_pfp.bin
+radeon/bonaire_mc.bin
+radeon/mullins_pfp.bin
+radeon/BONAIRE_vce.bin
+radeon/JUNIPER_rlc.bin
+radeon/BONAIRE_smc.bin
+radeon/PITCAIRN_rlc.bin
+radeon/R420_cp.bin
+radeon/TAHITI_mc2.bin
+radeon/KABINI_sdma.bin
+radeon/KAVERI_me.bin
+radeon/TAHITI_me.bin
+radeon/OLAND_smc.bin
+radeon/RV630_me.bin
+radeon/kaveri_sdma1.bin
+radeon/pitcairn_pfp.bin
+radeon/RV670_me.bin
+radeon/CEDAR_me.bin
+radeon/CYPRESS_pfp.bin
+radeon/BTC_rlc.bin
+radeon/SUMO2_me.bin
+radeon/BARTS_mc.bin
+radeon/PITCAIRN_me.bin
+radeon/bonaire_pfp.bin
+radeon/CAICOS_mc.bin
+radeon/kabini_ce.bin
+radeon/BONAIRE_uvd.bin
+radeon/CEDAR_rlc.bin
+radeon/RS690_cp.bin
+radeon/hainan_pfp.bin
+radeon/oland_me.bin
+radeon/REDWOOD_me.bin
+radeon/JUNIPER_pfp.bin
+radeon/CAYMAN_me.bin
+radeon/mullins_rlc.bin
+radeon/R600_rlc.bin
+radeon/oland_ce.bin
+radeon/kabini_me.bin
+radeon/PITCAIRN_ce.bin
+radeon/R300_cp.bin
+radeon/R700_rlc.bin
+radeon/PITCAIRN_pfp.bin
+radeon/verde_smc.bin
+radeon/hainan_k_smc.bin
+radeon/MULLINS_mec.bin
+radeon/TAHITI_ce.bin
+radeon/BONAIRE_mec.bin
+radeon/kaveri_sdma.bin
+radeon/CYPRESS_rlc.bin
+radeon/KAVERI_ce.bin
+radeon/hawaii_k_smc.bin
+radeon/HAINAN_smc.bin
+radeon/pitcairn_rlc.bin
+radeon/RV670_pfp.bin
+radeon/hawaii_sdma.bin
+radeon/hainan_rlc.bin
+radeon/SUMO2_pfp.bin
+radeon/CEDAR_pfp.bin
+radeon/tahiti_mc.bin
+radeon/bonaire_rlc.bin
+radeon/RV770_pfp.bin
+radeon/pitcairn_k_smc.bin
+radeon/OLAND_mc.bin
+radeon/TAHITI_uvd.bin
+radeon/mullins_sdma.bin
+radeon/kabini_sdma1.bin
+radeon/ARUBA_pfp.bin
+radeon/HAWAII_rlc.bin
+radeon/RS780_me.bin
+radeon/hawaii_vce.bin
+radeon/oland_k_smc.bin
+radeon/VERDE_rlc.bin
+radeon/banks_k_2_smc.bin
+radeon/OLAND_mc2.bin
+radeon/hawaii_smc.bin
+radeon/KABINI_pfp.bin
+radeon/BONAIRE_mc2.bin
+radeon/HAWAII_mc.bin
+radeon/TAHITI_smc.bin
+radeon/oland_pfp.bin
+radeon/CAICOS_smc.bin
+radeon/CAYMAN_pfp.bin
+radeon/PALM_me.bin
+radeon/VERDE_me.bin
+radeon/kabini_mec.bin
+radeon/RV610_me.bin
+radeon/kaveri_rlc.bin
+radeon/MULLINS_ce.bin
+radeon/hawaii_uvd.bin
+radeon/hawaii_ce.bin
+radeon/BONAIRE_me.bin
+radeon/HAINAN_me.bin
+radeon/TAHITI_vce.bin
+radeon/REDWOOD_smc.bin
+radeon/tahiti_rlc.bin
+radeon/kabini_sdma.bin
+radeon/BARTS_pfp.bin
+radeon/verde_ce.bin
+radeon/CYPRESS_uvd.bin
+radeon/bonaire_ce.bin
+radeon/mullins_me.bin
+radeon/kaveri_me.bin
+radeon/tahiti_me.bin
+radeon/verde_rlc.bin
+radeon/bonaire_uvd.bin
+radeon/BONAIRE_pfp.bin
+radeon/mullins_vce.bin
+radeon/RV740_smc.bin
+radeon/MULLINS_pfp.bin
+radeon/bonaire_vce.bin
+radeon/R600_uvd.bin
+radeon/mullins_uvd.bin
+radeon/CYPRESS_smc.bin
+radeon/KABINI_ce.bin
+radeon/OLAND_pfp.bin
+radeon/HAINAN_rlc.bin
+radeon/pitcairn_smc.bin
+radeon/tahiti_k_smc.bin
+radeon/hainan_smc.bin
+radeon/R200_cp.bin
+radeon/CAYMAN_mc.bin
+radeon/bonaire_smc.bin
+radeon/bonaire_sdma1.bin
+radeon/VERDE_mc.bin
+radeon/RV635_me.bin
+radeon/RV710_pfp.bin
+radeon/RV730_smc.bin
+radeon/HAWAII_smc.bin
+radeon/RS780_pfp.bin
+radeon/BONAIRE_mc.bin
+radeon/kabini_pfp.bin
+radeon/SUMO_pfp.bin
+radeon/TURKS_smc.bin
+radeon/HAINAN_mc.bin
+radeon/R600_me.bin
+radeon/hawaii_rlc.bin
+radeon/HAWAII_me.bin
+radeon/RV710_me.bin
+radeon/kaveri_uvd.bin
+radeon/hainan_ce.bin
+radeon/VERDE_smc.bin
+radeon/RV610_pfp.bin
+radeon/PITCAIRN_mc2.bin
+radeon/TAHITI_rlc.bin
+radeon/KABINI_mec.bin
+radeon/KAVERI_rlc.bin
+radeon/kaveri_vce.bin
+radeon/OLAND_me.bin
+radeon/REDWOOD_rlc.bin
+radeon/tahiti_smc.bin
+radeon/pitcairn_ce.bin
+radeon/BONAIRE_sdma.bin
+rockchip/dptx.bin
+rp2.fw
+rsi/rs9113_ap_bt_dual_mode.rps
+rsi/rs9113_wlan_qspi.rps
+rsi/rs9113_wlan_bt_dual_mode.rps
+rsi/rs9116_wlan.rps
+rsi/rs9116_wlan_bt_classic.rps
+rsi_91x.fw
+rt2561.bin
+rt2561s.bin
+rt2661.bin
+rt2860.bin
+rt2870.bin
+rt3071.bin
+rt3290.bin
+rt73.bin
+rtl_bt/rtl8822cs_fw.bin
+rtl_bt/rtl8821a_fw.bin
+rtl_bt/rtl8192ee_fw.bin
+rtl_bt/rtl8812ae_fw.bin
+rtl_bt/rtl8821c_fw.bin
+rtl_bt/rtl8723d_fw.bin
+rtl_bt/rtl8723b_fw.bin
+rtl_bt/rtl8822b_fw.bin
+rtl_bt/rtl8822cs_config.bin
+rtl_bt/rtl8822cu_fw.bin
+rtl_bt/rtl8723bs_config-OBDA8723.bin
+rtl_bt/rtl8822cu_config.bin
+rtl_bt/rtl8192eu_fw.bin
+rtl_bt/rtl8761a_fw.bin
+rtl_bt/rtl8723bs_fw.bin
+rtl_bt/rtl8723a_fw.bin
+rtl_bt/rtl8723d_config.bin
+rtl_bt/rtl8821c_config.bin
+rtl_bt/rtl8822b_config.bin
+rtl_nic/rtl8168h-1.fw
+rtl_nic/rtl8105e-1.fw
+rtl_nic/rtl8168d-2.fw
+rtl_nic/rtl8125a-3.fw
+rtl_nic/rtl8168h-2.fw
+rtl_nic/rtl8153a-4.fw
+rtl_nic/rtl8168d-1.fw
+rtl_nic/rtl8106e-2.fw
+rtl_nic/rtl8168e-1.fw
+rtl_nic/rtl8107e-1.fw
+rtl_nic/rtl8153a-3.fw
+rtl_nic/rtl8168e-3.fw
+rtl_nic/rtl8168e-2.fw
+rtl_nic/rtl8107e-2.fw
+rtl_nic/rtl8106e-1.fw
+rtl_nic/rtl8153a-2.fw
+rtl_nic/rtl8402-1.fw
+rtl_nic/rtl8168g-1.fw
+rtl_nic/rtl8168g-3.fw
+rtl_nic/rtl8168g-2.fw
+rtl_nic/rtl8168fp-3.fw
+rtl_nic/rtl8168f-2.fw
+rtl_nic/rtl8153b-2.fw
+rtl_nic/rtl8411-2.fw
+rtl_nic/rtl8168f-1.fw
+rtl_nic/rtl8411-1.fw
+rtlwifi/rtl8192eu_wowlan.bin
+rtlwifi/rtl8192cufw_B.bin
+rtlwifi/rtl8192cfwU_B.bin
+rtlwifi/rtl8723aufw_A.bin
+rtlwifi/rtl8723bs_nic.bin
+rtlwifi/rtl8712u.bin
+rtlwifi/rtl8723bs_wowlan.bin
+rtlwifi/rtl8723aufw_B_NoBT.bin
+rtlwifi/rtl8192cufw.bin
+rtlwifi/rtl8723fw_B.bin
+rtlwifi/rtl8723bu_ap_wowlan.bin
+rtlwifi/rtl8192sefw.bin
+rtlwifi/rtl8192defw.bin
+rtlwifi/rtl8812aefw_wowlan.bin
+rtlwifi/rtl8822befw.bin
+rtlwifi/rtl8188efw.bin
+rtlwifi/rtl8812aefw.bin
+rtlwifi/rtl8723bu_nic.bin
+rtlwifi/rtl8723bu_wowlan.bin
+rtlwifi/rtl8723befw_36.bin
+rtlwifi/rtl8723befw.bin
+rtlwifi/rtl8192cfw.bin
+rtlwifi/rtl8723bs_bt.bin
+rtlwifi/rtl8192eefw.bin
+rtlwifi/rtl8723fw.bin
+rtlwifi/rtl8188eufw.bin
+rtlwifi/rtl8821aefw_wowlan.bin
+rtlwifi/rtl8192cufw_TMSC.bin
+rtlwifi/rtl8821aefw_29.bin
+rtlwifi/rtl8192eu_nic.bin
+rtlwifi/rtl8821aefw.bin
+rtlwifi/rtl8723aufw_B.bin
+rtlwifi/rtl8192cfwU.bin
+rtlwifi/rtl8192cufw_A.bin
+rtlwifi/rtl8192eu_ap_wowlan.bin
+rtlwifi/rtl8723bs_ap_wowlan.bin
+rtlwifi/rtl8723defw.bin
+rtw88/rtw8822c_fw.bin
+rtw88/README
+rtw88/rtw8723d_fw.bin
+rtw88/rtw8822c_wow_fw.bin
+rtw88/rtw8822b_fw.bin
+s5p-mfc-v6-v2.fw
+s5p-mfc-v6.fw
+s5p-mfc-v7.fw
+s5p-mfc-v8.fw
+s5p-mfc.fw
+sdd_sagrad_1091_1098.bin
+slicoss/oasisrcvucode.sys
+slicoss/gbdownload.sys
+slicoss/oasisdownload.sys
+slicoss/oasisdbgdownload.sys
+slicoss/gbrcvucode.sys
+sms1xxx-hcw-55xxx-dvbt-02.fw
+sms1xxx-hcw-55xxx-isdbt-02.fw
+sms1xxx-nova-a-dvbt-01.fw
+sms1xxx-nova-b-dvbt-01.fw
+sms1xxx-stellar-dvbt-01.fw
+sxg/saharadbgdownloadB.sys
+sxg/saharadownloadB.sys
+tdmb_nova_12mhz.inp
+tehuti/bdx.bin
+ti-connectivity/wl128x-fw-3.bin
+ti-connectivity/TIInit_6.2.31.bts
+ti-connectivity/wl127x-fw-4-sr.bin
+ti-connectivity/wl127x-fw-plt-3.bin
+ti-connectivity/wl128x-fw-plt-3.bin
+ti-connectivity/wl18xx-fw-4.bin
+ti-connectivity/wl18xx-fw-3.bin
+ti-connectivity/wl128x-fw-5-mr.bin
+ti-connectivity/wl128x-fw-4-sr.bin
+ti-connectivity/wl128x-fw.bin
+ti-connectivity/wl128x-nvs.bin
+ti-connectivity/wl127x-nvs.bin
+ti-connectivity/TIInit_7.2.31.bts
+ti-connectivity/TIInit_6.6.15.bts
+ti-connectivity/wl127x-fw-3.bin
+ti-connectivity/wl18xx-fw-2.bin
+ti-connectivity/wl127x-fw-5-mr.bin
+ti-connectivity/wl1251-fw.bin
+ti-connectivity/wl1271-fw-2.bin
+ti-connectivity/wl128x-fw-5-plt.bin
+ti-connectivity/wl128x-fw-5-sr.bin
+ti-connectivity/wl127x-fw-4-mr.bin
+ti-connectivity/wl1251-nvs.bin
+ti-connectivity/wl127x-fw-5-plt.bin
+ti-connectivity/wl1271-fw.bin
+ti-connectivity/wl127x-fw-4-plt.bin
+ti-connectivity/wl127x-fw-5-sr.bin
+ti-connectivity/wl128x-fw-ap.bin
+ti-connectivity/wl128x-fw-4-mr.bin
+ti-connectivity/wl18xx-fw.bin
+ti-connectivity/wl128x-fw-4-plt.bin
+ti-connectivity/wl1271-fw-ap.bin
+ti-keystone/ks2_qmss_pdsp_acc48_k2_le_1_0_0_9.bin
+tigon/tg3_tso5.bin
+tigon/tg3.bin
+tigon/tg3_tso.bin
+tigon/tg357766.bin
+tlg2300_firmware.bin
+ueagle-atm/CMVeiWO.bin
+ueagle-atm/930-fpga.bin
+ueagle-atm/CMV4p.bin.v2
+ueagle-atm/adi930.fw
+ueagle-atm/CMVepWO.bin
+ueagle-atm/CMVepFR04.bin
+ueagle-atm/eagleII.fw
+ueagle-atm/CMVepFR.bin
+ueagle-atm/DSPep.bin
+ueagle-atm/DSP9i.bin
+ueagle-atm/CMV9i.bin
+ueagle-atm/eagleI.fw
+ueagle-atm/CMVep.bin
+ueagle-atm/CMVepIT.bin
+ueagle-atm/eagleIII.fw
+ueagle-atm/DSP4p.bin
+ueagle-atm/CMVepFR10.bin
+ueagle-atm/CMVepES.bin
+ueagle-atm/CMV9p.bin
+ueagle-atm/eagleIV.fw
+ueagle-atm/CMVei.bin
+ueagle-atm/DSPei.bin
+ueagle-atm/CMVepES03.bin
+ueagle-atm/DSP9p.bin
+usbdux_firmware.bin
+usbduxfast_firmware.bin
+usbduxsigma_firmware.bin
+v4l-cx231xx-avcore-01.fw
+v4l-cx23418-apu.fw
+v4l-cx23418-cpu.fw
+v4l-cx23418-dig.fw
+v4l-cx23885-avcore-01.fw
+v4l-cx25840.fw
+vntwusb.fw
+vxge/X3fw.ncf
+vxge/X3fw-pxe.ncf
+wil6210.brd
+wil6210.fw
+wsm_22.bin
diff --git a/savedconfig/x11-misc/dmenu-4.8 b/savedconfig/x11-misc/dmenu-4.8
@@ -0,0 +1,23 @@
+/* See LICENSE file for copyright and license details. */
+/* Default settings; can be overriden by command line. */
+
+static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
+/* -fn option overrides fonts[0]; default X11 font or font set */
+static const char *fonts[] = {
+ "monospace:size=10"
+};
+static const char *prompt = NULL; /* -p option; prompt to the left of input field */
+static const char *colors[SchemeLast][2] = {
+ /* fg bg */
+ [SchemeNorm] = { "#bbbbbb", "#222222" },
+ [SchemeSel] = { "#eeeeee", "#005577" },
+ [SchemeOut] = { "#000000", "#00ffff" },
+};
+/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
+static unsigned int lines = 0;
+
+/*
+ * Characters not considered part of a word while deleting words
+ * for example: " /?\"&[]"
+ */
+static const char worddelimiters[] = " ";
diff --git a/savedconfig/x11-misc/slock-1.4 b/savedconfig/x11-misc/slock-1.4
@@ -0,0 +1,12 @@
+/* user and group to drop privileges to */
+static const char *user = "nobody";
+static const char *group = "nogroup";
+
+static const char *colorname[NUMCOLS] = {
+ [INIT] = "black", /* after initialization */
+ [INPUT] = "#005577", /* during input */
+ [FAILED] = "#CC3333", /* wrong password */
+};
+
+/* treat a cleared input like a wrong password (color) */
+static const int failonclear = 1;
diff --git a/savedconfig/x11-misc/tabbed-0.6 b/savedconfig/x11-misc/tabbed-0.6
@@ -0,0 +1,48 @@
+/* See LICENSE file for copyright and license details. */
+
+/* appearance */
+static const char font[] = "monospace-9";
+static const char* normbgcolor = "#222222";
+static const char* normfgcolor = "#cccccc";
+static const char* selbgcolor = "#555555";
+static const char* selfgcolor = "#ffffff";
+static const char before[] = "<";
+static const char after[] = ">";
+static const int tabwidth = 200;
+static const Bool foreground = True;
+
+/*
+ * Where to place a new tab when it is opened. When npisrelative is True,
+ * then the current position is changed + newposition. If npisrelative
+ * is False, then newposition is an absolute position.
+ */
+static int newposition = 0;
+static Bool npisrelative = True;
+
+#define MODKEY Mod1Mask
+static Key keys[] = { \
+ /* modifier key function argument */
+ { MODKEY|ShiftMask, XK_Return, spawn, { 0 } },
+
+ { MODKEY, XK_j, rotate, { .i = +1 } },
+ { MODKEY, XK_k, rotate, { .i = -1 } },
+ { MODKEY|ShiftMask, XK_j, movetab, { .i = -1 } },
+ { MODKEY|ShiftMask, XK_k, movetab, { .i = +1 } },
+ { MODKEY, XK_Tab, rotate, { .i = 0 } },
+
+ { MODKEY, XK_1, move, { .i = 0 } },
+ { MODKEY, XK_2, move, { .i = 1 } },
+ { MODKEY, XK_3, move, { .i = 2 } },
+ { MODKEY, XK_4, move, { .i = 3 } },
+ { MODKEY, XK_5, move, { .i = 4 } },
+ { MODKEY, XK_6, move, { .i = 5 } },
+ { MODKEY, XK_7, move, { .i = 6 } },
+ { MODKEY, XK_8, move, { .i = 7 } },
+ { MODKEY, XK_9, move, { .i = 8 } },
+ { MODKEY, XK_0, move, { .i = 9 } },
+
+ { MODKEY, XK_q, killclient, { 0 } },
+
+ { 0, XK_F11, fullscreen, { 0 } },
+};
+
diff --git a/savedconfig/x11-terms/st-0.8.2 b/savedconfig/x11-terms/st-0.8.2
@@ -0,0 +1,480 @@
+/* See LICENSE file for copyright and license details. */
+
+/*
+ * appearance
+ *
+ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+ */
+static char *font = "monospace-7";
+static int borderpx = 2;
+
+/*
+ * What program is execed by st depends of these precedence rules:
+ * 1: program passed with -e
+ * 2: utmp option
+ * 3: SHELL environment variable
+ * 4: value of shell in /etc/passwd
+ * 5: value of shell in config.h
+ */
+static char *shell = "/bin/sh";
+char *utmp = NULL;
+char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
+
+/* identification sequence returned in DA and DECID */
+char *vtiden = "\033[?6c";
+
+/* Kerning / character bounding-box multipliers */
+static float cwscale = 1.0;
+static float chscale = 1.0;
+
+/*
+ * word delimiter string
+ *
+ * More advanced example: " `'\"()[]{}"
+ */
+char *worddelimiters = " │`'\"()[]{}“”<>‘’\~\;";
+
+/* selection timeouts (in milliseconds) */
+static unsigned int doubleclicktimeout = 300;
+static unsigned int tripleclicktimeout = 600;
+
+/* alt screens */
+int allowaltscreen = 1;
+
+/* frames per second st should at maximum draw to the screen */
+static unsigned int xfps = 120;
+static unsigned int actionfps = 30;
+
+/*
+ * blinking timeout (set to 0 to disable blinking) for the terminal blinking
+ * attribute.
+ */
+static unsigned int blinktimeout = 800;
+
+/*
+ * thickness of underline and bar cursors
+ */
+static unsigned int cursorthickness = 2;
+
+/*
+ * bell volume. It must be a value between -100 and 100. Use 0 for disabling
+ * it
+ */
+static int bellvolume = 0;
+
+/* default TERM value */
+char *termname = "st-256color";
+
+/*
+ * spaces per tab
+ *
+ * When you are changing this value, don't forget to adapt the »it« value in
+ * the st.info and appropriately install the st.info in the environment where
+ * you use this st version.
+ *
+ * it#$tabspaces,
+ *
+ * Secondly make sure your kernel is not expanding tabs. When running `stty
+ * -a` »tab0« should appear. You can tell the terminal to not expand tabs by
+ * running following command:
+ *
+ * stty tabs
+ */
+unsigned int tabspaces = 8;
+
+/* Terminal colors (16 first used in escape sequence) */
+static const char *colorname[] = {
+ /* gruvbox dark */
+ "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f / normal: #282828 */
+ "#cc241d",
+ "#98971a",
+ "#d79921",
+ "#458588",
+ "#b16286",
+ "#689d6a",
+ "#a89984",
+ "#928374",
+ "#fb4934",
+ "#b8bb26",
+ "#fabd2f",
+ "#83a598",
+ "#d3869b",
+ "#8ec07c",
+ "#ebdbb2",
+
+ [255] = 0,
+};
+
+/* Terminal colors for alternate (light) palette */
+static const char *altcolorname[] = {
+ /* gruvbox light */
+ "#fbf1c7", /* hard contrast: #f9f5d7 / soft contrast: #f2e5bc / normal: #fbf1c7 */
+ "#cc241d",
+ "#98971a",
+ "#d79921",
+ "#458588",
+ "#b16286",
+ "#689d6a",
+ "#7c6f64",
+ "#928374",
+ "#9d0006",
+ "#79740e",
+ "#b57614",
+ "#076678",
+ "#8f3f71",
+ "#427b58",
+ "#3c3836",
+
+ [255] = 0,
+};
+
+
+/*
+ * Default colors (colorname index)
+ * foreground, background, cursor, reverse cursor
+ */
+unsigned int defaultfg = 15;
+unsigned int defaultbg = 0;
+static unsigned int defaultcs = 15;
+static unsigned int defaultrcs = 0;
+
+/*
+ * Default shape of cursor
+ * 2: Block ("█")
+ * 4: Underline ("_")
+ * 6: Bar ("|")
+ * 7: Snowman ("☃")
+ */
+static unsigned int cursorshape = 2;
+
+/*
+ * Default columns and rows numbers
+ */
+
+static unsigned int cols = 80;
+static unsigned int rows = 24;
+
+/*
+ * Default colour and shape of the mouse cursor
+ */
+static unsigned int mouseshape = XC_xterm;
+static unsigned int mousefg = 7;
+static unsigned int mousebg = 0;
+
+/*
+ * Color used to display font attributes when fontconfig selected a font which
+ * doesn't match the ones requested.
+ */
+static unsigned int defaultattr = 11;
+
+/*
+ * Internal mouse shortcuts.
+ * Beware that overloading Button1 will disable the selection.
+ */
+static MouseShortcut mshortcuts[] = {
+ /* button mask string */
+ { Button4, XK_ANY_MOD, "\031" },
+ { Button5, XK_ANY_MOD, "\005" },
+};
+
+/* Internal keyboard shortcuts. */
+#define MODKEY Mod1Mask
+#define TERMMOD (ControlMask|ShiftMask)
+
+static Shortcut shortcuts[] = {
+ /* mask keysym function argument */
+ { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
+ { ControlMask, XK_Print, toggleprinter, {.i = 0} },
+ { ShiftMask, XK_Print, printscreen, {.i = 0} },
+ { XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
+ { TERMMOD, XK_Prior, zoom, {.f = +1} },
+ { TERMMOD, XK_Next, zoom, {.f = -1} },
+ { TERMMOD, XK_Home, zoomreset, {.f = 0} },
+ { TERMMOD, XK_C, clipcopy, {.i = 0} },
+ { TERMMOD, XK_V, clippaste, {.i = 0} },
+ { TERMMOD, XK_Y, selpaste, {.i = 0} },
+ { ShiftMask, XK_Insert, selpaste, {.i = 0} },
+ { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
+ { TERMMOD, XK_F6, swapcolors, {.i = 0} },
+};
+
+/*
+ * Special keys (change & recompile st.info accordingly)
+ *
+ * Mask value:
+ * * Use XK_ANY_MOD to match the key no matter modifiers state
+ * * Use XK_NO_MOD to match the key alone (no modifiers)
+ * appkey value:
+ * * 0: no value
+ * * > 0: keypad application mode enabled
+ * * = 2: term.numlock = 1
+ * * < 0: keypad application mode disabled
+ * appcursor value:
+ * * 0: no value
+ * * > 0: cursor application mode enabled
+ * * < 0: cursor application mode disabled
+ * crlf value
+ * * 0: no value
+ * * > 0: crlf mode is enabled
+ * * < 0: crlf mode is disabled
+ *
+ * Be careful with the order of the definitions because st searches in
+ * this table sequentially, so any XK_ANY_MOD must be in the last
+ * position for a key.
+ */
+
+/*
+ * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF)
+ * to be mapped below, add them to this array.
+ */
+static KeySym mappedkeys[] = { -1 };
+
+/*
+ * State bits to ignore when matching key or button events. By default,
+ * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
+ */
+static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
+
+/*
+ * Override mouse-select while mask is active (when MODE_MOUSE is set).
+ * Note that if you want to use ShiftMask with selmasks, set this to an other
+ * modifier, set to 0 to not use it.
+ */
+static uint forceselmod = ShiftMask;
+
+/*
+ * This is the huge key array which defines all compatibility to the Linux
+ * world. Please decide about changes wisely.
+ */
+static Key key[] = {
+ /* keysym mask string appkey appcursor */
+ { XK_KP_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
+ { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1},
+ { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0},
+ { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1},
+ { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1},
+ { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0},
+ { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1},
+ { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1},
+ { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0},
+ { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1},
+ { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1},
+ { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0},
+ { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1},
+ { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
+ { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0},
+ { XK_KP_End, ControlMask, "\033[J", -1, 0},
+ { XK_KP_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_KP_End, ShiftMask, "\033[K", -1, 0},
+ { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0},
+ { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
+ { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
+ { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+ { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_KP_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
+ { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+ { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0},
+ { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0},
+ { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0},
+ { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0},
+ { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0},
+ { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0},
+ { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0},
+ { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0},
+ { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0},
+ { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0},
+ { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0},
+ { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0},
+ { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0},
+ { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0},
+ { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0},
+ { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0},
+ { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0},
+ { XK_Up, ShiftMask, "\033[1;2A", 0, 0},
+ { XK_Up, Mod1Mask, "\033[1;3A", 0, 0},
+ { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
+ { XK_Up, ControlMask, "\033[1;5A", 0, 0},
+ { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0},
+ { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0},
+ { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0},
+ { XK_Up, XK_ANY_MOD, "\033[A", 0, -1},
+ { XK_Up, XK_ANY_MOD, "\033OA", 0, +1},
+ { XK_Down, ShiftMask, "\033[1;2B", 0, 0},
+ { XK_Down, Mod1Mask, "\033[1;3B", 0, 0},
+ { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0},
+ { XK_Down, ControlMask, "\033[1;5B", 0, 0},
+ { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0},
+ { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0},
+ { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0},
+ { XK_Down, XK_ANY_MOD, "\033[B", 0, -1},
+ { XK_Down, XK_ANY_MOD, "\033OB", 0, +1},
+ { XK_Left, ShiftMask, "\033[1;2D", 0, 0},
+ { XK_Left, Mod1Mask, "\033[1;3D", 0, 0},
+ { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0},
+ { XK_Left, ControlMask, "\033[1;5D", 0, 0},
+ { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0},
+ { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0},
+ { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0},
+ { XK_Left, XK_ANY_MOD, "\033[D", 0, -1},
+ { XK_Left, XK_ANY_MOD, "\033OD", 0, +1},
+ { XK_Right, ShiftMask, "\033[1;2C", 0, 0},
+ { XK_Right, Mod1Mask, "\033[1;3C", 0, 0},
+ { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0},
+ { XK_Right, ControlMask, "\033[1;5C", 0, 0},
+ { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0},
+ { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0},
+ { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0},
+ { XK_Right, XK_ANY_MOD, "\033[C", 0, -1},
+ { XK_Right, XK_ANY_MOD, "\033OC", 0, +1},
+ { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
+ { XK_Return, Mod1Mask, "\033\r", 0, 0},
+ { XK_Return, XK_ANY_MOD, "\r", 0, 0},
+ { XK_Insert, ShiftMask, "\033[4l", -1, 0},
+ { XK_Insert, ShiftMask, "\033[2;2~", +1, 0},
+ { XK_Insert, ControlMask, "\033[L", -1, 0},
+ { XK_Insert, ControlMask, "\033[2;5~", +1, 0},
+ { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0},
+ { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0},
+ { XK_Delete, ControlMask, "\033[M", -1, 0},
+ { XK_Delete, ControlMask, "\033[3;5~", +1, 0},
+ { XK_Delete, ShiftMask, "\033[2K", -1, 0},
+ { XK_Delete, ShiftMask, "\033[3;2~", +1, 0},
+ { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0},
+ { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0},
+ { XK_BackSpace, XK_NO_MOD, "\177", 0, 0},
+ { XK_BackSpace, Mod1Mask, "\033\177", 0, 0},
+ { XK_Home, ShiftMask, "\033[2J", 0, -1},
+ { XK_Home, ShiftMask, "\033[1;2H", 0, +1},
+ { XK_Home, XK_ANY_MOD, "\033[H", 0, -1},
+ { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1},
+ { XK_End, ControlMask, "\033[J", -1, 0},
+ { XK_End, ControlMask, "\033[1;5F", +1, 0},
+ { XK_End, ShiftMask, "\033[K", -1, 0},
+ { XK_End, ShiftMask, "\033[1;2F", +1, 0},
+ { XK_End, XK_ANY_MOD, "\033[4~", 0, 0},
+ { XK_Prior, ControlMask, "\033[5;5~", 0, 0},
+ { XK_Prior, ShiftMask, "\033[5;2~", 0, 0},
+ { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0},
+ { XK_Next, ControlMask, "\033[6;5~", 0, 0},
+ { XK_Next, ShiftMask, "\033[6;2~", 0, 0},
+ { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0},
+ { XK_F1, XK_NO_MOD, "\033OP" , 0, 0},
+ { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
+ { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
+ { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
+ { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
+ { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
+ { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0},
+ { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
+ { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
+ { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
+ { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
+ { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
+ { XK_F3, XK_NO_MOD, "\033OR" , 0, 0},
+ { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
+ { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
+ { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
+ { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
+ { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
+ { XK_F4, XK_NO_MOD, "\033OS" , 0, 0},
+ { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
+ { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
+ { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
+ { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
+ { XK_F5, XK_NO_MOD, "\033[15~", 0, 0},
+ { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
+ { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
+ { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
+ { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
+ { XK_F6, XK_NO_MOD, "\033[17~", 0, 0},
+ { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
+ { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
+ { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
+ { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
+ { XK_F7, XK_NO_MOD, "\033[18~", 0, 0},
+ { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
+ { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
+ { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
+ { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
+ { XK_F8, XK_NO_MOD, "\033[19~", 0, 0},
+ { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
+ { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
+ { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
+ { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
+ { XK_F9, XK_NO_MOD, "\033[20~", 0, 0},
+ { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
+ { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
+ { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
+ { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
+ { XK_F10, XK_NO_MOD, "\033[21~", 0, 0},
+ { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
+ { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
+ { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
+ { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
+ { XK_F11, XK_NO_MOD, "\033[23~", 0, 0},
+ { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
+ { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
+ { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
+ { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
+ { XK_F12, XK_NO_MOD, "\033[24~", 0, 0},
+ { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
+ { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
+ { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
+ { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
+ { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0},
+ { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0},
+ { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0},
+ { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0},
+ { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0},
+ { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0},
+ { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0},
+ { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0},
+ { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0},
+ { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0},
+ { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0},
+ { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0},
+ { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0},
+ { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0},
+ { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0},
+ { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0},
+ { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0},
+ { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0},
+ { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0},
+ { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0},
+ { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0},
+ { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0},
+ { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0},
+};
+
+/*
+ * Selection types' masks.
+ * Use the same masks as usual.
+ * Button1Mask is always unset, to make masks match between ButtonPress.
+ * ButtonRelease and MotionNotify.
+ * If no match is found, regular selection is used.
+ */
+static uint selmasks[] = {
+ [SEL_RECTANGULAR] = Mod1Mask,
+};
+
+/*
+ * Printable characters in ASCII, used to estimate the advance width
+ * of single wide characters.
+ */
+static char ascii_printable[] =
+ " !\"#$%&'()*+,-./0123456789:;<=>?"
+ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~";
diff --git a/savedconfig/x11-wm/dwm-6.1-r1 b/savedconfig/x11-wm/dwm-6.1-r1
@@ -0,0 +1,113 @@
+/* See LICENSE file for copyright and license details. */
+
+/* appearance */
+static const char *fonts[] = {
+ "monospace:size=10"
+};
+static const char dmenufont[] = "monospace:size=10";
+static const char normbordercolor[] = "#444444";
+static const char normbgcolor[] = "#222222";
+static const char normfgcolor[] = "#bbbbbb";
+static const char selbordercolor[] = "#005577";
+static const char selbgcolor[] = "#005577";
+static const char selfgcolor[] = "#eeeeee";
+static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int snap = 32; /* snap pixel */
+static const int showbar = 1; /* 0 means no bar */
+static const int topbar = 1; /* 0 means bottom bar */
+
+/* tagging */
+static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
+
+static const Rule rules[] = {
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating monitor */
+ { "Gimp", NULL, NULL, 0, 1, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
+};
+
+/* layout(s) */
+static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+static const int nmaster = 1; /* number of clients in master area */
+static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
+
+static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "[]=", tile }, /* first entry is default */
+ { "><>", NULL }, /* no layout function means floating behavior */
+ { "[M]", monocle },
+};
+
+/* key definitions */
+#define MODKEY Mod1Mask
+#define TAGKEYS(KEY,TAG) \
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
+
+/* helper for spawning shell commands in the pre dwm-5.0 fashion */
+#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+/* commands */
+static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
+static const char *termcmd[] = { "st", NULL };
+
+static Key keys[] = {
+ /* modifier key function argument */
+ { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+ { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_j, focusstack, {.i = +1 } },
+ { MODKEY, XK_k, focusstack, {.i = -1 } },
+ { MODKEY, XK_i, incnmaster, {.i = +1 } },
+ { MODKEY, XK_d, incnmaster, {.i = -1 } },
+ { MODKEY, XK_h, setmfact, {.f = -0.05} },
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
+ { MODKEY, XK_Return, zoom, {0} },
+ { MODKEY, XK_Tab, view, {0} },
+ { MODKEY|ShiftMask, XK_c, killclient, {0} },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+ { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+ { MODKEY, XK_0, view, {.ui = ~0 } },
+ { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
+ { MODKEY, XK_comma, focusmon, {.i = -1 } },
+ { MODKEY, XK_period, focusmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+ TAGKEYS( XK_4, 3)
+ TAGKEYS( XK_5, 4)
+ TAGKEYS( XK_6, 5)
+ TAGKEYS( XK_7, 6)
+ TAGKEYS( XK_8, 7)
+ TAGKEYS( XK_9, 8)
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+};
+
+/* button definitions */
+/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+static Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
+ { ClkTagBar, MODKEY, Button1, tag, {0} },
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+};
+
diff --git a/smart-live-rebuild.conf b/smart-live-rebuild.conf
@@ -0,0 +1,3 @@
+[smart-live-rebuild]
+jobs = 6
+# quickpkg = on