From 0940fb78499cec106aeb28a19595209c2434b070 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 1/12] libre/iceweasel: 150.0.1-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index e156853..5adb47b 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=150.0
+pkgver=150.0.1
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -196,7 +196,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('fbe43df4c8a135cee4b29c375574bd9f609ee37a9f3b43bb96a83680e8ef3994'
+sha256sums=('2acffa708d924f5c81ecf08ce99dd9e0cfca2f3797f1a7791f154ed0365f6eec'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -211,7 +211,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('046ed34f4ccdeab26420bb394621887293791fe67a45b548819baaad1f93f72d675d461c9c0a9f3d88cc3ae9cd33a9d614904748b3ac70ad900f933013c397eb'
+b2sums=('d70920a86e784fe971756604237c1dacba5fc7d9cf346634ac897ea09f7fa92b8b243076fa9d7e98acc0cf79d88b9871145a8878b959e3130ddad5544e6b4b28'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop

From d88218546a4882f90d1aad9ac675fcfef64b1d6b Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 2/12] libre/iceweasel: 150.0.2-1, sync with changes from upstreams


Also adjust the patching to account for some new domain names

---

diff --git a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
index 2032bd9..52c9413 100644
--- a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
@@ -50,6 +50,19 @@ If necessary, missing files can be added later.
  toolkit/modules/AppConstants.sys.mjs                 |  6 +-----
  26 files changed, 48 insertions(+), 63 deletions(-)
 
+diff --git a/browser/base/content/spotlight.html b/browser/base/content/spotlight.html
+index a23738408e..53f988dc6e 100644
+--- a/browser/base/content/spotlight.html
++++ b/browser/base/content/spotlight.html
+@@ -8,7 +8,7 @@
+   <head>
+     <meta
+       http-equiv="Content-Security-Policy"
+-      content="default-src resource: chrome:; img-src moz-icon: https://www.mozilla.org https://firefox-settings-attachments.cdn.mozilla.net https://addons.mozilla.org blob: chrome:; style-src resource: chrome: 'unsafe-inline'; object-src 'none'"
++      content="default-src resource: chrome:; img-src moz-icon: blob: chrome:; style-src resource: chrome: 'unsafe-inline'; object-src 'none'"
+     />
+     <meta name="referrer" content="no-referrer" />
+     <link
 diff --git a/browser/components/asrouter/bin/import-rollouts.js b/browser/components/asrouter/bin/import-rollouts.js
 index 65d8d57c3b..2f4386f9a1 100644
 --- a/browser/components/asrouter/bin/import-rollouts.js
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 5adb47b..8750a5c 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=150.0.1
+pkgver=150.0.2
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -196,7 +196,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('2acffa708d924f5c81ecf08ce99dd9e0cfca2f3797f1a7791f154ed0365f6eec'
+sha256sums=('e3830b20cdf660a9cdec6e4d2326d7ced07333d9746df028cfc00c8216acbec9'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -211,7 +211,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('d70920a86e784fe971756604237c1dacba5fc7d9cf346634ac897ea09f7fa92b8b243076fa9d7e98acc0cf79d88b9871145a8878b959e3130ddad5544e6b4b28'
+b2sums=('71ceb820171d3cbd4b6a0a13bb081d821b2361a8e5503b967aaa16d676e4f0dd718ce8d6b9b488449b5901d985afe6d21a49297293f97a30431b799092404ee6'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
@@ -270,18 +270,18 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
             process-json-files.py )
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
-                '1b9af585ef14100338bbeb612f0febc6259308c760a05f0f8930bb849edd1fce'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+                '2d0846c9f966fcc5efb34f5ca0cdd21dd284b0344df9557d286e8cda98fb3b1b'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
                 'da6cf41706c7e399a6b2d51cd3ec73ead08203f365e7b76a6dcc3f741edba561'   # 9002-FSDG-preference-defaults.patch
                 'b8880edefbee77c5ed51830d3d2c4d8f7eb749dba5ae53828ffab4d489142aff'   # 9003-FSDG-urihandlers.patch
                 'e49b66abd14bb9d5b0c3aec0a8ee01fc057c38c30a2f0a5d300ecdad0da07f0f'   # 9004-FSDG-misc.patch
-                'e3fbe2f242afd5bb7ad23c0be69178437e26c664fc92faaaa5fca3de93f4c30c' ) # process-json-files.py
+                '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
-            '7f5b944c8784310320e8294e5cec664f53b54db9272461d0411c19a0f2b1f8ce7b1e487a0ad9a0c6465a7effbef6172d9b08ebe776aa9c001c42fdf87744aeb3'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+            'a2ea53346ec29a43ae29da118a6287f85a51806f8d33c64b6df190ff5c63fabe3681f01a16174b029e8942619e4c77b8ae5dc66ed8edba5ea9cb42cded317c03'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
             '2c523aa33dcbc5bd902a1dd971b1b13a61c69bff8c40bafb48915b0ad77d4483e0b602d0c7bbda6b1cfc8bbd9109fa7cf4d117f6a48f62a630a93bff8f52fe50'   # 9002-FSDG-preference-defaults.patch
             'fbdda325966c8a7e887f9424a62eacd30281c425f075a05a2f7fabd310a039b3af246e896db8dba7ffbfe8923bc7ef9beb41d9d3b659587bc98f41642a51bece'   # 9003-FSDG-urihandlers.patch
             '68911b711f4f0eec11c28e083bdc2bfd7fc7d03e35fc66d24c90fa38e14d3db1d04570d3ab0047872b5f16c90354f3ddba43565f9773a2b2986933605124a693'   # 9004-FSDG-misc.patch
-            '5b730a5e1eab388d1289e208610794b8b4393a93e1244d25bf7c0e69354341eed4cd3f5f85845efbd7cb703aa1d4cb6bdaf3e0413cc63355759a659920c4926c' ) # process-json-files.py
+            '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
 source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
          ${source[*]:${_N_MKSOURCES}} )
 sha256sums=( '11e26032db22fabb7562f239859d78d4cfd85a73796a7af840a3a4444c050e43' # libre source-ball
@@ -389,24 +389,24 @@ _check_patching() {
   pushd "${srcdir}"/firefox-${pkgver} > /dev/null
 
   # Remote Settings
-  local settings_server_regex='firefox\.settings\.services\.(mozilla|allizom)\.(com|org)'
+  local settings_server_regex='firefox.?settings.*\.(mozilla|allizom)(-backup)?\.(com|org)'
   local settings_err_msg="ERROR: 9001-FSDG-sync-remote-settings-with-local-dump.patch needs reworking"
   ! grep -qrE $settings_server_regex || ! echo "${settings_err_msg}" || return 1
 
   # Model Hub
-  local model_hub_server_regex='model-hub.(mozilla|allizom).org'
+  local model_hub_server_regex='model-hub.(mozilla|allizom)(-backup)?.org'
   local model_hub_err_msg="ERROR: Found ${model_hub_server_regex} in the sources. 9002-FSDG-preference-defaults.patch needs reworking"
   ! grep -qrE $model_hub_server_regex || ! echo "${model_hub_err_msg}" || return 1
 
   # Merino
-  local merino_server_regex='.*merino.*(\.(mozilla|allizom)\.com|mozgcp\.net|mozilla\.fastly-edge\.com|edgecompute\.app)'
+  local merino_server_regex='.*merino.*(\.(mozilla|allizom)(-backup)?\.com|mozgcp\.net|mozilla\.fastly-edge\.com|edgecompute\.app)'
   local merino_err_msg="ERROR: Found ${merino_server_regex} in the sources. 9002-FSDG-preference-defaults.patch needs reworking"
   ! grep -qrE $merino_server_regex || ! echo "${merino_err_msg}" || return 1
 
   # services.addons.mozilla.org API endpoint
-  local amo_api_endpoint='services.addons.mozilla.org'
+  local amo_api_endpoint='services.addons.mozilla(-backup)?.org'
   local amo_err_msg="ERROR: 9002-FSDG-preference-defaults.patch needs reworking: AMO API endpoint hostname found in source tree"
-  ! grep -qr $amo_api_endpoint || ! echo "${amo_err_msg}" || return 1
+  ! grep -qrE $amo_api_endpoint || ! echo "${amo_err_msg}" || return 1
 
   # URI protocol handlers
   local uri_handlers=uriloader/exthandler/HandlerList.sys.mjs
diff --git a/libre/iceweasel/process-json-files.py b/libre/iceweasel/process-json-files.py
index 9e24167..9f2586c 100644
--- a/libre/iceweasel/process-json-files.py
+++ b/libre/iceweasel/process-json-files.py
@@ -246,6 +246,14 @@ class SearchConfigV2(RemoteSettings):
         return engine_orders
 
 
+class MozEssentialDomainFallbacks(EmptyRemoteSettings):
+    JSON_PATHS = (
+        RemoteSettings.DUMPS_PATH_ABSOLUTE /
+        'main/moz-essential-domain-fallbacks.json',
+    )
+    OUTPUT_PATH = JSON_PATHS[0]
+
+
 class SearchConfigOverridesV2(EmptyRemoteSettings):
     JSON_PATHS = (
         RemoteSettings.DUMPS_PATH_ABSOLUTE /
@@ -344,6 +352,7 @@ class TopSites(RemoteSettings):
 # To reflect the latest timestamps, Changes class should always come after
 # all other RemoteSettings subclasses
 processors = (
+    MozEssentialDomainFallbacks,
     SearchConfigOverridesV2,
     SearchConfigV2,
     SearchDefaultOverrideAllowlist,

From cd04b3b4936f24e8b2e6fae60bd1e6a801aea3f4 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 3/12] libre/iceweasel: 150.0.3-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 8750a5c..7264fa3 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=150.0.2
+pkgver=150.0.3
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -196,7 +196,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('e3830b20cdf660a9cdec6e4d2326d7ced07333d9746df028cfc00c8216acbec9'
+sha256sums=('0a0a539ccc96d928fec78af511884b9b89d0aec87f0d5a8852d9298b2d9332da'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -211,7 +211,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('71ceb820171d3cbd4b6a0a13bb081d821b2361a8e5503b967aaa16d676e4f0dd718ce8d6b9b488449b5901d985afe6d21a49297293f97a30431b799092404ee6'
+b2sums=('c167496083203222116cac44d0b58a1931530fa6ca4edc5176466ed82928e4d17859b5c722796b748c08f7f26957183ed8c5ce343fa2f812a7ec9b3d176755a1'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop

From 377e38bfd84bc9f9a5da2dc127f8d22149dbe6db Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 4/12] libre/iceweasel: WIP 151.0-1, sync with changes from upstreams


Some 'Settings' pages seem to have options broken / missing.

---

diff --git a/libre/iceweasel/0001-Install-under-remoting-name.patch b/libre/iceweasel/0001-Install-under-remoting-name.patch
index c3e6bcd..d79c0cd 100644
--- a/libre/iceweasel/0001-Install-under-remoting-name.patch
+++ b/libre/iceweasel/0001-Install-under-remoting-name.patch
@@ -25,7 +25,7 @@ index 428beef48e14..13a609c1cfe9 100644
  DIST = dist
  else
 diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk
-index 464a356cfa8b..53ae21630d80 100644
+index 05bc3a664ff8..937b79eba724 100644
 --- a/toolkit/mozapps/installer/packager.mk
 +++ b/toolkit/mozapps/installer/packager.mk
 @@ -169,8 +169,8 @@ endif
diff --git a/libre/iceweasel/0002-Bug-2033279-Make-enable-rust-simd-work-with-Rust-1.9.patch b/libre/iceweasel/0002-Bug-2033279-Make-enable-rust-simd-work-with-Rust-1.9.patch
deleted file mode 100644
index 2001985..0000000
--- a/libre/iceweasel/0002-Bug-2033279-Make-enable-rust-simd-work-with-Rust-1.9.patch
+++ /dev/null
@@ -1,295 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Henri Sivonen <hsivonen@hsivonen.fi>
-Date: Mon, 20 Apr 2026 16:03:25 +0200
-Subject: [PATCH] Bug 2033279 - Make --enable-rust-simd work with Rust 1.95.
-
-Differential Revision: https://phabricator.services.mozilla.com/D295287
----
- .cargo/config.toml.in                         |  5 ++
- Cargo.lock                                    |  4 +-
- Cargo.toml                                    |  2 +
- supply-chain/audits.toml                      |  6 ++
- supply-chain/config.toml                      |  4 ++
- .../rust/encoding_rs/.cargo-checksum.json     |  2 +-
- .../rust/encoding_rs/.cargo_vcs_info.json     |  6 --
- third_party/rust/encoding_rs/Cargo.toml       | 60 ++++++++++---------
- third_party/rust/encoding_rs/Cargo.toml.orig  | 45 --------------
- .../rust/encoding_rs/src/x_user_defined.rs    |  2 +
- 10 files changed, 54 insertions(+), 82 deletions(-)
- delete mode 100644 third_party/rust/encoding_rs/.cargo_vcs_info.json
- delete mode 100644 third_party/rust/encoding_rs/Cargo.toml.orig
-
-diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in
-index 21d9d47c3b3e..ba7bd730d495 100644
---- a/.cargo/config.toml.in
-+++ b/.cargo/config.toml.in
-@@ -70,6 +70,11 @@ git = "https://github.com/hsivonen/chardetng_c"
- rev = "2f0aba284677d098de14f91ffe5a9e5b9a4922c2"
- replace-with = "vendored-sources"
- 
-+[source."git+https://github.com/hsivonen/encoding_rs?rev=1236d1bc423e6ba35a06485f74a6304db2d703b5"]
-+git = "https://github.com/hsivonen/encoding_rs"
-+rev = "1236d1bc423e6ba35a06485f74a6304db2d703b5"
-+replace-with = "vendored-sources"
-+
- [source."git+https://github.com/hsivonen/rust-harfbuzz?rev=9d58a23a98772a197291d04af93f7041b7093d95"]
- git = "https://github.com/hsivonen/rust-harfbuzz"
- rev = "9d58a23a98772a197291d04af93f7041b7093d95"
-diff --git a/Cargo.lock b/Cargo.lock
-index 8c97711dc449..8cf7d32bff8e 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -1912,11 +1912,11 @@ dependencies = [
- [[package]]
- name = "encoding_rs"
- version = "0.8.35"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
-+source = "git+https://github.com/hsivonen/encoding_rs?rev=1236d1bc423e6ba35a06485f74a6304db2d703b5#1236d1bc423e6ba35a06485f74a6304db2d703b5"
- dependencies = [
-  "any_all_workaround",
-  "cfg-if",
-+ "rustversion",
- ]
- 
- [[package]]
-diff --git a/Cargo.toml b/Cargo.toml
-index 85edaada8988..4d9f6fbf021e 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -280,6 +280,8 @@ harfbuzz-sys = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a
- harfbuzz = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a98772a197291d04af93f7041b7093d95" }
- # Also vendor `harfbuzz-traits` to keep cargo-vendor happy.
- harfbuzz-traits = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a98772a197291d04af93f7041b7093d95" }
-+# Make --enable-rust-simd compatible with Rust 1.95
-+encoding_rs = { git = "https://github.com/hsivonen/encoding_rs", rev = "1236d1bc423e6ba35a06485f74a6304db2d703b5" }
- 
- # objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13
- objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" }
-diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
-index 0ba55a6f723a..5b90663b2c4b 100644
---- a/supply-chain/audits.toml
-+++ b/supply-chain/audits.toml
-@@ -2380,6 +2380,12 @@ who = "Mike Hommey <mh+mozilla@glandium.org>"
- criteria = "safe-to-deploy"
- delta = "0.8.31 -> 0.8.32"
- 
-+[[audits.encoding_rs]]
-+who = "Henri Sivonen <hsivonen@hsivonen.fi>"
-+criteria = "safe-to-deploy"
-+delta = "0.8.35 -> 0.8.35@git:1236d1bc423e6ba35a06485f74a6304db2d703b5"
-+importable = false
-+
- [[audits.enum-map]]
- who = "Kershaw Chang <kershaw@mozilla.com>"
- criteria = "safe-to-deploy"
-diff --git a/supply-chain/config.toml b/supply-chain/config.toml
-index 6766dac152b8..af46b149ab00 100644
---- a/supply-chain/config.toml
-+++ b/supply-chain/config.toml
-@@ -47,6 +47,10 @@ notes = "This is a crate Henri wrote which is also published. We should probably
- audit-as-crates-io = true
- notes = "This is upstream plus a warning fix from bug 1823866."
- 
-+[policy.encoding_rs]
-+audit-as-crates-io = true
-+notes = "This is upstream plus a build fix for bug 2033279."
-+
- [policy.firefox-on-glean]
- audit-as-crates-io = false
- notes = "The crates.io version of this is just a placeholder to allow public crates to depend on firefox-on-glean."
-diff --git a/third_party/rust/encoding_rs/.cargo-checksum.json b/third_party/rust/encoding_rs/.cargo-checksum.json
-index 6a2ad1bfebbc..1e0ddc9e211b 100644
---- a/third_party/rust/encoding_rs/.cargo-checksum.json
-+++ b/third_party/rust/encoding_rs/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{".cargo_vcs_info.json":"022d0d4a218bdf087dc7ab554a26319d57e3bb97d9adcb388b94dfab3e7accec","CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"d7405d2bcf99cf9729075473c45f677630f4c1947c8ba9757db607f2025a7da2","Cargo.toml.orig":"7fece6ec8988f17d2bd64559ad444a5ceaed1e3cafb3832fc193e314b441bde3","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"9826137ed4297be3b2019b74a8f6111a796ff507bde41df2f20712539704b9e9","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"8229e59076d8bddb01865cdcf6afda3533238d7c23d97f98820f9e3b2d13505d","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"67a01665c75505330b0fe5b8d88d5873d8ce555a145c77dca04a467fa2680744","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"6f34a845785f53425accf30759edc566873fcb0c2188648e07b09c898f39dddb","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"588e38b01e666d5e7462617ea7e90a108d608dec9e016f3d273ac0744af2e05d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"b93f34025fe5c6a85b4b9f0037bf58961352bf19c83f91b09b35eb8495625eec","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"89cd6ae2247add3f3471a699bc12113a9ae2f6b91a5223abbf15b68a13537dcd","src/gb18030_2022.rs":"3c2e06492c5e00fcd39515e4af4c560d8cee5c31e7a7e388db682bc9ee33ee32","src/handles.rs":"b08cef1f5785bb6a4822f2e844c6df1b046b737b7a075e4593eaa8c4208e9fe2","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"c4d9fa1c43105e2310122f1b9197125032e607fe6f79bc22769b340de76e2430","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"948571137d3b151df8db4fb2c733e74ae595d055cdf0ad83abcab9341d6adabe","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"05c6e77af74bfe73cd39a752067c11425d6b46e5da419910f54bf75a5c02a984","src/single_byte.rs":"3ad87116fb339434a4b58e8f2b15485f2b66b9f7814d708f16194ed08f6d6ccf","src/test_data/big5_in.txt":"a5ae290786610c7facdbb1d06be6815e8bb81d68dfa7380edc7ddb6b8c7e412e","src/test_data/big5_in_ref.txt":"52733d9970fb8987f014fa0eac2792250123cf583b363beb2ce7b3c55e3dc555","src/test_data/big5_out.txt":"57420ca41a669c949738c84cab620020959572d2ee97b4e059405bfe26a79b6d","src/test_data/big5_out_ref.txt":"00e5f67c222dd5cd3bb1739276910b8f0032f454cba7cf7c3eaa255a564188d0","src/test_data/euc_kr_in.txt":"21534ec87e82d785d128f980902d13fab6d9dea15c69a991f409d9b0afd1c852","src/test_data/euc_kr_in_ref.txt":"b3009e6a94967df1f1135c66f005610bebad6666d634aec72d2ad77c3211bda3","src/test_data/euc_kr_out.txt":"20205b0b5be4f579271193b5bfbc549a61a9fd5217c33eecfa61784a3ffe2e9d","src/test_data/euc_kr_out_ref.txt":"b5f566237f8d4ef4d03ad26135ca97dfd7398608a82165bd4853b5134ab22cb5","src/test_data/gb18030_in.txt":"0dd1fbf0360930daafdce7e6761852005a8f92f7910180df19a070b6c3c59dee","src/test_data/gb18030_in_ref.txt":"f3eaea1115857054cf30f8ba18219e72377f2a4afd848ccf223770d75aa4251d","src/test_data/gb18030_out.txt":"7184fe9592609597d55c2733606b4c4b1a18b79b24533e1a16a14ff92e7d2b55","src/test_data/gb18030_out_ref.txt":"23bb850ddc69aaf1bdfeabe05a12d93f614e5560dac879d5f02929ee4a7c06c5","src/test_data/iso_2022_jp_in.txt":"98fb823530a30a76eb0ba7ab6ac796959e8869c1ec143f018a1964581ae813aa","src/test_data/iso_2022_jp_in_ref.txt":"df82166d2e01bb446211d7e46f33b47d93ac1bafeae2ed880ee93c4096d11210","src/test_data/iso_2022_jp_out.txt":"bef8eb4804ed0843b9dffdd1d168738635cc77f8d0929beb2532b686318ddae6","src/test_data/iso_2022_jp_out_ref.txt":"b221b36b2bce49d49b620dc8ba80d77bac74e8660a86a11628e79b67f1d98964","src/test_data/jis0208_in.txt":"3c1a7aaada00d6fff41e60bd7589d7ae94afaf562759b116958b1d84711d17b6","src/test_data/jis0208_in_ref.txt":"df82166d2e01bb446211d7e46f33b47d93ac1bafeae2ed880ee93c4096d11210","src/test_data/jis0208_out.txt":"a6188b67eb00ba980cb83056186c89bcdddc1b0210af9afa78ed1c9b7a098950","src/test_data/jis0208_out_ref.txt":"e75a986fe5e78e64bf8fafd7392ae96ee0cb0a4b2e7ef2fe722b3caacf3e2f70","src/test_data/jis0212_in.txt":"9eda766002646a27310457c661832429beff9089d2703355812c4cac30d800b5","src/test_data/jis0212_in_ref.txt":"fcf74c58d2cbe9b3f3db4fa9eff26e09f5e9644097c78614c03177e938988d03","src/test_data/shift_jis_in.txt":"e65df746be90359e70422868522a7aa3e8ed20e0d4c0cf9995d9de248bf93388","src/test_data/shift_jis_in_ref.txt":"13b15aed64e9e7cb35e6a740b67413f0c285fda944f4814d45a7619ea338fb5e","src/test_data/shift_jis_out.txt":"192d0a4a8ce5d0f904c5cb283dfb974577ee667cf1e71955a6dd6aece2b354ef","src/test_data/shift_jis_out_ref.txt":"cb6d50b0c11bad1d1f1fcc02d779672a8b9a2509cbbafdc6392aceb49c8b4268","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"9456ca46168ef86c98399a2536f577ef7be3cdde90c0c51392d8ac48519d3fae"},"package":"75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"}
-\ No newline at end of file
-+{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"a066ad881d5a74386e666fc844f7fecbbd70021d0330c1b08a2d7a2a67437ccf","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"9826137ed4297be3b2019b74a8f6111a796ff507bde41df2f20712539704b9e9","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"8229e59076d8bddb01865cdcf6afda3533238d7c23d97f98820f9e3b2d13505d","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"67a01665c75505330b0fe5b8d88d5873d8ce555a145c77dca04a467fa2680744","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"6f34a845785f53425accf30759edc566873fcb0c2188648e07b09c898f39dddb","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"588e38b01e666d5e7462617ea7e90a108d608dec9e016f3d273ac0744af2e05d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"b93f34025fe5c6a85b4b9f0037bf58961352bf19c83f91b09b35eb8495625eec","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"89cd6ae2247add3f3471a699bc12113a9ae2f6b91a5223abbf15b68a13537dcd","src/gb18030_2022.rs":"3c2e06492c5e00fcd39515e4af4c560d8cee5c31e7a7e388db682bc9ee33ee32","src/handles.rs":"b08cef1f5785bb6a4822f2e844c6df1b046b737b7a075e4593eaa8c4208e9fe2","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"c4d9fa1c43105e2310122f1b9197125032e607fe6f79bc22769b340de76e2430","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"948571137d3b151df8db4fb2c733e74ae595d055cdf0ad83abcab9341d6adabe","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"05c6e77af74bfe73cd39a752067c11425d6b46e5da419910f54bf75a5c02a984","src/single_byte.rs":"3ad87116fb339434a4b58e8f2b15485f2b66b9f7814d708f16194ed08f6d6ccf","src/test_data/big5_in.txt":"a5ae290786610c7facdbb1d06be6815e8bb81d68dfa7380edc7ddb6b8c7e412e","src/test_data/big5_in_ref.txt":"52733d9970fb8987f014fa0eac2792250123cf583b363beb2ce7b3c55e3dc555","src/test_data/big5_out.txt":"57420ca41a669c949738c84cab620020959572d2ee97b4e059405bfe26a79b6d","src/test_data/big5_out_ref.txt":"00e5f67c222dd5cd3bb1739276910b8f0032f454cba7cf7c3eaa255a564188d0","src/test_data/euc_kr_in.txt":"21534ec87e82d785d128f980902d13fab6d9dea15c69a991f409d9b0afd1c852","src/test_data/euc_kr_in_ref.txt":"b3009e6a94967df1f1135c66f005610bebad6666d634aec72d2ad77c3211bda3","src/test_data/euc_kr_out.txt":"20205b0b5be4f579271193b5bfbc549a61a9fd5217c33eecfa61784a3ffe2e9d","src/test_data/euc_kr_out_ref.txt":"b5f566237f8d4ef4d03ad26135ca97dfd7398608a82165bd4853b5134ab22cb5","src/test_data/gb18030_in.txt":"0dd1fbf0360930daafdce7e6761852005a8f92f7910180df19a070b6c3c59dee","src/test_data/gb18030_in_ref.txt":"f3eaea1115857054cf30f8ba18219e72377f2a4afd848ccf223770d75aa4251d","src/test_data/gb18030_out.txt":"7184fe9592609597d55c2733606b4c4b1a18b79b24533e1a16a14ff92e7d2b55","src/test_data/gb18030_out_ref.txt":"23bb850ddc69aaf1bdfeabe05a12d93f614e5560dac879d5f02929ee4a7c06c5","src/test_data/iso_2022_jp_in.txt":"98fb823530a30a76eb0ba7ab6ac796959e8869c1ec143f018a1964581ae813aa","src/test_data/iso_2022_jp_in_ref.txt":"df82166d2e01bb446211d7e46f33b47d93ac1bafeae2ed880ee93c4096d11210","src/test_data/iso_2022_jp_out.txt":"bef8eb4804ed0843b9dffdd1d168738635cc77f8d0929beb2532b686318ddae6","src/test_data/iso_2022_jp_out_ref.txt":"b221b36b2bce49d49b620dc8ba80d77bac74e8660a86a11628e79b67f1d98964","src/test_data/jis0208_in.txt":"3c1a7aaada00d6fff41e60bd7589d7ae94afaf562759b116958b1d84711d17b6","src/test_data/jis0208_in_ref.txt":"df82166d2e01bb446211d7e46f33b47d93ac1bafeae2ed880ee93c4096d11210","src/test_data/jis0208_out.txt":"a6188b67eb00ba980cb83056186c89bcdddc1b0210af9afa78ed1c9b7a098950","src/test_data/jis0208_out_ref.txt":"e75a986fe5e78e64bf8fafd7392ae96ee0cb0a4b2e7ef2fe722b3caacf3e2f70","src/test_data/jis0212_in.txt":"9eda766002646a27310457c661832429beff9089d2703355812c4cac30d800b5","src/test_data/jis0212_in_ref.txt":"fcf74c58d2cbe9b3f3db4fa9eff26e09f5e9644097c78614c03177e938988d03","src/test_data/shift_jis_in.txt":"e65df746be90359e70422868522a7aa3e8ed20e0d4c0cf9995d9de248bf93388","src/test_data/shift_jis_in_ref.txt":"13b15aed64e9e7cb35e6a740b67413f0c285fda944f4814d45a7619ea338fb5e","src/test_data/shift_jis_out.txt":"192d0a4a8ce5d0f904c5cb283dfb974577ee667cf1e71955a6dd6aece2b354ef","src/test_data/shift_jis_out_ref.txt":"cb6d50b0c11bad1d1f1fcc02d779672a8b9a2509cbbafdc6392aceb49c8b4268","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"d733660c7775afa8007cfc80c09057d875d6613aaf98c7dc942e47fb93306feb"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/encoding_rs/.cargo_vcs_info.json b/third_party/rust/encoding_rs/.cargo_vcs_info.json
-deleted file mode 100644
-index 6e5d699759e4..000000000000
---- a/third_party/rust/encoding_rs/.cargo_vcs_info.json
-+++ /dev/null
-@@ -1,6 +0,0 @@
--{
--  "git": {
--    "sha1": "2fa58aecf537cc76ff52c0eb3d5e9f8fda466844"
--  },
--  "path_in_vcs": ""
--}
-\ No newline at end of file
-diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml
-index 2adac351c2ed..0239315bab18 100644
---- a/third_party/rust/encoding_rs/Cargo.toml
-+++ b/third_party/rust/encoding_rs/Cargo.toml
-@@ -16,72 +16,76 @@ name = "encoding_rs"
- version = "0.8.35"
- authors = ["Henri Sivonen <hsivonen@hsivonen.fi>"]
- build = false
-+autolib = false
- autobins = false
- autoexamples = false
- autotests = false
- autobenches = false
- description = "A Gecko-oriented implementation of the Encoding Standard"
- homepage = "https://docs.rs/encoding_rs/"
- documentation = "https://docs.rs/encoding_rs/"
- readme = "README.md"
- keywords = [
-     "encoding",
-     "web",
-     "unicode",
-     "charset",
- ]
- categories = [
-     "text-processing",
-     "encoding",
-     "web-programming",
-     "internationalization",
- ]
- license = "(Apache-2.0 OR MIT) AND BSD-3-Clause"
- repository = "https://github.com/hsivonen/encoding_rs"
- 
--[profile.release]
--lto = true
--
--[lib]
--name = "encoding_rs"
--path = "src/lib.rs"
--
--[dependencies.any_all_workaround]
--version = "0.1.0"
--optional = true
--
--[dependencies.cfg-if]
--version = "1.0"
--
--[dependencies.serde]
--version = "1.0"
--optional = true
--
--[dev-dependencies.bincode]
--version = "1.0"
--
--[dev-dependencies.serde_derive]
--version = "1.0"
--
--[dev-dependencies.serde_json]
--version = "1.0"
--
- [features]
- alloc = []
- default = ["alloc"]
- fast-big5-hanzi-encode = []
- fast-gb-hanzi-encode = []
- fast-hangul-encode = []
- fast-hanja-encode = []
- fast-kanji-encode = []
- fast-legacy-encode = [
-     "fast-hangul-encode",
-     "fast-hanja-encode",
-     "fast-kanji-encode",
-     "fast-gb-hanzi-encode",
-     "fast-big5-hanzi-encode",
- ]
- less-slow-big5-hanzi-encode = []
- less-slow-gb-hanzi-encode = []
- less-slow-kanji-encode = []
--simd-accel = ["any_all_workaround"]
-+simd-accel = [
-+    "any_all_workaround",
-+    "rustversion",
-+]
-+
-+[lib]
-+name = "encoding_rs"
-+path = "src/lib.rs"
-+
-+[dependencies]
-+cfg-if = "1.0"
-+
-+[dependencies.any_all_workaround]
-+version = "0.1.0"
-+optional = true
-+
-+[dependencies.rustversion]
-+version = "1.0.19"
-+optional = true
-+
-+[dependencies.serde]
-+version = "1.0"
-+optional = true
-+
-+[dev-dependencies]
-+bincode = "1.0"
-+serde_derive = "1.0"
-+serde_json = "1.0"
-+
-+[profile.release]
-+lto = true
-diff --git a/third_party/rust/encoding_rs/Cargo.toml.orig b/third_party/rust/encoding_rs/Cargo.toml.orig
-deleted file mode 100644
-index 0f7639d5f879..000000000000
---- a/third_party/rust/encoding_rs/Cargo.toml.orig
-+++ /dev/null
-@@ -1,45 +0,0 @@
--[package]
--name = "encoding_rs"
--description = "A Gecko-oriented implementation of the Encoding Standard"
--version = "0.8.35"
--edition = '2018'
--authors = ["Henri Sivonen <hsivonen@hsivonen.fi>"]
--license = "(Apache-2.0 OR MIT) AND BSD-3-Clause"
--readme = "README.md"
--documentation = "https://docs.rs/encoding_rs/"
--homepage = "https://docs.rs/encoding_rs/"
--repository = "https://github.com/hsivonen/encoding_rs"
--keywords = ["encoding", "web", "unicode", "charset"]
--categories = ["text-processing", "encoding", "web-programming", "internationalization"]
--rust-version = "1.36"
--
--[features]
--default = ["alloc"]
--alloc = []
--simd-accel = ["any_all_workaround"]
--less-slow-kanji-encode = []
--less-slow-big5-hanzi-encode = []
--less-slow-gb-hanzi-encode = []
--fast-hangul-encode = []
--fast-hanja-encode = []
--fast-kanji-encode = []
--fast-gb-hanzi-encode = []
--fast-big5-hanzi-encode = []
--fast-legacy-encode = ["fast-hangul-encode",
--                      "fast-hanja-encode",
--                      "fast-kanji-encode",
--                      "fast-gb-hanzi-encode",
--                      "fast-big5-hanzi-encode"]
--
--[dependencies]
--cfg-if = "1.0"
--serde = { version = "1.0", optional = true }
--any_all_workaround = { version = "0.1.0" , optional = true }
--
--[dev-dependencies]
--serde_derive = "1.0"
--bincode = "1.0"
--serde_json = "1.0"
--
--[profile.release]
--lto = true
-diff --git a/third_party/rust/encoding_rs/src/x_user_defined.rs b/third_party/rust/encoding_rs/src/x_user_defined.rs
-index 7af7d5e3d69d..16f1a18d7f6c 100644
---- a/third_party/rust/encoding_rs/src/x_user_defined.rs
-+++ b/third_party/rust/encoding_rs/src/x_user_defined.rs
-@@ -16,6 +16,8 @@ cfg_if! {
-         use simd_funcs::*;
-         use core::simd::u16x8;
-         use core::simd::cmp::SimdPartialOrd;
-+        #[rustversion::since(1.95)]
-+        use core::simd::Select;
- 
-         #[inline(always)]
-         fn shift_upper(unpacked: u16x8) -> u16x8 {
diff --git a/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch b/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
new file mode 100644
index 0000000..7518098
--- /dev/null
+++ b/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
@@ -0,0 +1,3108 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
+Date: Thu, 12 Feb 2026 09:31:45 +0100
+Subject: [PATCH] Patch glsl-optimizer to build with glibc 2.43
+
+---
+ .cargo/config.toml.in                         |   5 +
+ Cargo.lock                                    |   3 +-
+ Cargo.toml                                    |   2 +
+ supply-chain/audits.toml                      |   6 +
+ supply-chain/config.toml                      |   4 +
+ third_party/rust/glslopt/.cargo-checksum.json |   2 +-
+ third_party/rust/glslopt/.cargo_vcs_info.json |   6 -
+ third_party/rust/glslopt/Cargo.lock           |  25 --
+ third_party/rust/glslopt/Cargo.toml           |   4 +-
+ third_party/rust/glslopt/Cargo.toml.orig      |  12 -
+ .../rust/glslopt/glsl-optimizer/.cargo-ok     |   0
+ .../rust/glslopt/glsl-optimizer/.gitignore    |   4 -
+ .../glslopt/glsl-optimizer/generateParsers.sh |   6 +-
+ .../include/c11/threads_posix.h               |   6 +
+ .../src/compiler/glsl/ast_function.cpp        |   2 +-
+ .../src/compiler/glsl/ast_to_hir.cpp          |  24 +-
+ .../src/compiler/glsl/builtin_functions.cpp   |   2 +-
+ .../src/compiler/glsl/glcpp/glcpp-lex.c       |   8 +-
+ .../src/compiler/glsl/glcpp/glcpp-lex.l       |   6 +-
+ .../glsl-optimizer/src/compiler/glsl/ir.cpp   |   4 +-
+ .../glsl/ir_builder_print_visitor.cpp         |   6 +-
+ .../compiler/glsl/ir_expression_operation.py  |  18 +-
+ .../glsl/ir_expression_operation_constant.h   | 248 +++++++++---------
+ .../compiler/glsl/ir_print_glsl_visitor.cpp   |   6 +-
+ .../src/compiler/glsl/ir_print_visitor.cpp    |   4 +-
+ .../src/compiler/glsl/linker.cpp              |   2 +-
+ .../src/compiler/glsl/loop_analysis.cpp       |   4 +-
+ .../glsl/lower_blend_equation_advanced.cpp    |   2 +-
+ .../src/compiler/glsl/lower_buffer_access.cpp |   4 +-
+ .../src/compiler/glsl/lower_distance.cpp      |   2 +-
+ .../src/compiler/glsl/lower_ubo_reference.cpp |   4 +-
+ .../src/compiler/glsl/opt_algebraic.cpp       |   2 +-
+ .../src/compiler/glsl/opt_minmax.cpp          |   2 +-
+ .../src/compiler/glsl/opt_vectorize.cpp       |   2 +-
+ .../src/compiler/glsl_types.cpp               |  16 +-
+ .../glsl-optimizer/src/compiler/glsl_types.h  |   2 +-
+ .../src/compiler/shader_enums.c               |   4 +-
+ .../glsl-optimizer/src/mesa/main/shaderobj.h  |  12 +-
+ .../glslopt/glsl-optimizer/src/util/macros.h  |  22 +-
+ third_party/rust/glslopt/src/bindings.rs      |  46 ++--
+ 40 files changed, 263 insertions(+), 276 deletions(-)
+ delete mode 100644 third_party/rust/glslopt/.cargo_vcs_info.json
+ delete mode 100644 third_party/rust/glslopt/Cargo.lock
+ delete mode 100644 third_party/rust/glslopt/Cargo.toml.orig
+ copy .trackerignore => third_party/rust/glslopt/glsl-optimizer/.cargo-ok (100%)
+ delete mode 100644 third_party/rust/glslopt/glsl-optimizer/.gitignore
+
+diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in
+index be917029832d..0af8c7b9c51b 100644
+--- a/.cargo/config.toml.in
++++ b/.cargo/config.toml.in
+@@ -5,6 +5,11 @@
+ [source.crates-io]
+ replace-with = "vendored-sources"
+ 
++[source."git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d"]
++git = "https://github.com/Erk-/glslopt-rs"
++rev = "92fa39d0910e9e73de40b0d391906e6e2940080d"
++replace-with = "vendored-sources"
++
+ [source."git+https://github.com/FirefoxGraphics/aa-stroke?rev=5776bdfc8ad664a1503db668fab397d818a5f98a"]
+ git = "https://github.com/FirefoxGraphics/aa-stroke"
+ rev = "5776bdfc8ad664a1503db668fab397d818a5f98a"
+diff --git a/Cargo.lock b/Cargo.lock
+index 4c4d30dfbd38..0c71a15468cb 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -2897,8 +2897,7 @@ dependencies = [
+ [[package]]
+ name = "glslopt"
+ version = "0.1.12"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"
++source = "git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d#92fa39d0910e9e73de40b0d391906e6e2940080d"
+ dependencies = [
+  "cc",
+ ]
+diff --git a/Cargo.toml b/Cargo.toml
+index 2648c32ae57e..a6a6e93e9a73 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -289,6 +289,8 @@ harfbuzz = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a9
+ harfbuzz-traits = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a98772a197291d04af93f7041b7093d95" }
+ # Make --enable-rust-simd compatible with Rust 1.95
+ encoding_rs = { git = "https://github.com/hsivonen/encoding_rs", rev = "1236d1bc423e6ba35a06485f74a6304db2d703b5" }
++# Make glsl-optimizer compatible with glibc 2.43
++glslopt = { git = "https://github.com/Erk-/glslopt-rs", rev = "92fa39d0910e9e73de40b0d391906e6e2940080d" }
+ 
+ # objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13
+ objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" }
+diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
+index 44cb3a10d208..6814e05851f9 100644
+--- a/supply-chain/audits.toml
++++ b/supply-chain/audits.toml
+@@ -2996,6 +2996,12 @@ criteria = "safe-to-deploy"
+ delta = "0.1.11 -> 0.1.12"
+ notes = "Only a minor build tweak."
+ 
++[[audits.glslopt]]
++who = "Jan Alexander Steffens (heftig) <heftig@archlinux.org>"
++criteria = "safe-to-deploy"
++delta = "0.1.12 -> 0.1.12@git:92fa39d0910e9e73de40b0d391906e6e2940080d"
++importable = false
++
+ [[audits.goblin]]
+ who = "Jan-Erik Rediger <jrediger@mozilla.com>"
+ criteria = "safe-to-deploy"
+diff --git a/supply-chain/config.toml b/supply-chain/config.toml
+index 15deefbec057..88848c730671 100644
+--- a/supply-chain/config.toml
++++ b/supply-chain/config.toml
+@@ -60,6 +60,10 @@ notes = "Used for testing."
+ dependency-criteria = { tokio-reactor = [], tokio-threadpool = [] }
+ notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack to pin the version used by audioipc-{client,server}. Suppress vetting on those for the same reasons behind the policy entries."
+ 
++[policy.glslopt]
++audit-as-crates-io = true
++notes = "This is upstream plus a build fix for bug 1999625."
++
+ [policy.gluesmith]
+ criteria = "safe-to-run"
+ notes = "Used for fuzzing."
+diff --git a/third_party/rust/glslopt/.cargo-checksum.json b/third_party/rust/glslopt/.cargo-checksum.json
+index e3300c718103..975a4c8da7b6 100644
+--- a/third_party/rust/glslopt/.cargo-checksum.json
++++ b/third_party/rust/glslopt/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","Cargo.toml.orig":"c46463ed28492baaaa17c772384cd1654093f96e900cefdb13d578e10561974f","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"}
+\ No newline at end of file
++{"files":{".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.toml":"cd1efadd7a6d266acd8c412df59df8c8beec33e393567d4a5b236a3315f35d93","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"e8f7af58b34d4e46b475e848a0af1d9926bd1d9aa52727b4a80cbf13d1c2ca47","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"5fa592653213459e2cce70b430715246d53fd1a10c1866acf427874530a69f92","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"7cccd240c080f5ab2ed73f5f1a6e1ce9ae9583a209338c026db8f76272a352f2","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"256de69fbedf79fd0711b0e0edc2dc061e6bdf0b04996b05f9237036a8e375d9","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"09731e48472b42038aeb8b8f06fecc2d919d2333a088b52b06a9711d8afb9732","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"6ed9a66b752877aec847bf9e39e2126860552a5d5f225e8c2523d6155b51eea8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"15fa8afa3011865ff181a54bbd5e4ddccb4c9ec5a862c98366cd84b295dcf446","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"ddeb4ced00afa00fc0e2b19c6120f0a37b8b05b4f8473fbb627ea9d7d13efe58","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"0fd7f92be11fb1482255541597018b56d7619925346504414404e46a60f4797b","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"85011f325e5d4a3068e4e41b7ea62adbc1deddc9d225b7c69eea0f3b63fe727e","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"cf575663c4922de6dbee3d8bc7ab80d4a65fcc7ff2e994eb296961e76b761a79","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"a8b89b9bd15575e2ea5af3a6822214295686f18c202f2562eee666891033e726","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"98e0ca92087edbc3a3c8b8bfacdc730751a767ea96bfa90b19e68cdc429b7a89","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"cfcbc7ed03b2de6e43505bd6eba42564cc415b0f293e9f73791a6fa7b9a59b4a","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"d3025c34e8010d49cd5abb86d30278263c40a2697b7724c20e804a2398660540","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"172ade61a513c00be842070615e1afa78ccc6136adaada06f00b988a62996254","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"af451edfaa3efde30b3a648c4cf3411672cadcef33d69966dce6f92333a8b763","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"7531858637a3149431162637de0e6ced99a15ccf7ee15f07ea9d6c88e3330cc2","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"e670dbbc1817f146ff7d53750569cf020364a2b49555de41d6944f161aef6276","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"538058c7be50e50e58f997dec4b1e0add25a8dc44abf2648366b90612bf95e41","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"0014e6b044f05e58d91add005d05cbdf8206f67ea1e593deea0cde947c26b8a2","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"4e3ae189d32a09cabef66ec46c2f1563ddcc634a85b9c4b77a8d39590a5aa8a4","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"e909cab91eccfbb31d13f544e561dd41799a92bf5a853f5afca66927d4ac3706","glsl-optimizer/src/compiler/glsl_types.h":"caeabddb68f47390ca3414b642813bc384715b1363f453c0b449098d423c4b23","glsl-optimizer/src/compiler/shader_enums.c":"282bab5b7c04d4af9a06ef4aec6be10a865865d5aab6f74c3d2c9add77c08a74","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"3597defbc142e4bd3b54f5f3c454f5c71ceae771f2fefed0f86d49f926335dbe","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"be115a17e3c18844a30813e3c3f9029b908e7f3fc1f47431345761098bbd88be","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"11b403241b456fbe3482951ec70d274bd3ebd54bf39c11b3e81d3b9721b1bdaf","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/glslopt/.cargo_vcs_info.json b/third_party/rust/glslopt/.cargo_vcs_info.json
+deleted file mode 100644
+index 3edfbe5942a8..000000000000
+--- a/third_party/rust/glslopt/.cargo_vcs_info.json
++++ /dev/null
+@@ -1,6 +0,0 @@
+-{
+-  "git": {
+-    "sha1": "e1a7fe3ac8ccca62a31682a98d78cedf470aaf5e"
+-  },
+-  "path_in_vcs": ""
+-}
+\ No newline at end of file
+diff --git a/third_party/rust/glslopt/Cargo.lock b/third_party/rust/glslopt/Cargo.lock
+deleted file mode 100644
+index 2034b562ee8d..000000000000
+--- a/third_party/rust/glslopt/Cargo.lock
++++ /dev/null
+@@ -1,25 +0,0 @@
+-# This file is automatically @generated by Cargo.
+-# It is not intended for manual editing.
+-version = 4
+-
+-[[package]]
+-name = "cc"
+-version = "1.1.15"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
+-dependencies = [
+- "shlex",
+-]
+-
+-[[package]]
+-name = "glslopt"
+-version = "0.1.12"
+-dependencies = [
+- "cc",
+-]
+-
+-[[package]]
+-name = "shlex"
+-version = "1.3.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+diff --git a/third_party/rust/glslopt/Cargo.toml b/third_party/rust/glslopt/Cargo.toml
+index a5a4b997ac1e..acd34d69d52f 100644
+--- a/third_party/rust/glslopt/Cargo.toml
++++ b/third_party/rust/glslopt/Cargo.toml
+@@ -36,5 +36,5 @@ repository = "https://github.com/jamienicol/glslopt-rs"
+ name = "glslopt"
+ path = "src/lib.rs"
+ 
+-[build-dependencies.cc]
+-version = "1.0"
++[build-dependencies]
++cc = "1.0"
+diff --git a/third_party/rust/glslopt/Cargo.toml.orig b/third_party/rust/glslopt/Cargo.toml.orig
+deleted file mode 100644
+index 452381f9941a..000000000000
+--- a/third_party/rust/glslopt/Cargo.toml.orig
++++ /dev/null
+@@ -1,12 +0,0 @@
+-[package]
+-name = "glslopt"
+-version = "0.1.12"
+-authors = ["Jamie Nicol <jnicol@mozilla.com>"]
+-edition = "2018"
+-license = "MIT"
+-description = "Optimizes GLSL shader code"
+-keywords = ["opengl", "gl", "gles", "glsl", "shader"]
+-repository = "https://github.com/jamienicol/glslopt-rs"
+-
+-[build-dependencies]
+-cc = "1.0"
+diff --git a/.trackerignore b/third_party/rust/glslopt/glsl-optimizer/.cargo-ok
+similarity index 100%
+copy from .trackerignore
+copy to third_party/rust/glslopt/glsl-optimizer/.cargo-ok
+diff --git a/third_party/rust/glslopt/glsl-optimizer/.gitignore b/third_party/rust/glslopt/glsl-optimizer/.gitignore
+deleted file mode 100644
+index 825ad5fd1656..000000000000
+--- a/third_party/rust/glslopt/glsl-optimizer/.gitignore
++++ /dev/null
+@@ -1,4 +0,0 @@
+-*.pyc
+-*.pyo
+-*.out
+-build
+diff --git a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
+index 1b4e63513609..8ecffa6d212c 100755
+--- a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
++++ b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
+@@ -4,6 +4,6 @@ flex --nounistd -osrc/compiler/glsl/glsl_lexer.cpp src/compiler/glsl/glsl_lexer.
+ bison -v -o "src/compiler/glsl/glcpp/glcpp-parse.c" -p "glcpp_parser_" --defines=src/compiler/glsl/glcpp/glcpp-parse.h src/compiler/glsl/glcpp/glcpp-parse.y
+ bison -v -o "src/compiler/glsl/glsl_parser.cpp" -p "_mesa_glsl_" --defines=src/compiler/glsl/glsl_parser.h src/compiler/glsl/glsl_parser.yy
+ 
+-python "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
+-python "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
+-python "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
++python3 "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
++python3 "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
++python3 "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
+diff --git a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
+index 45cb6075e6e0..5f22aca6f1e7 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
++++ b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
+@@ -51,50 +51,56 @@ Configuration macro:
+ #include <pthread.h>
+ 
+ /*---------------------------- macros ----------------------------*/
++#ifndef __once_flag_defined
+ #define ONCE_FLAG_INIT PTHREAD_ONCE_INIT
++#endif
+ #ifdef INIT_ONCE_STATIC_INIT
+ #define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
+ #else
+ #define TSS_DTOR_ITERATIONS 1  // assume TSS dtor MAY be called at least once.
+ #endif
+ 
+ // FIXME: temporary non-standard hack to ease transition
+ #define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER
+ 
+ /*---------------------------- types ----------------------------*/
+ typedef pthread_cond_t  cnd_t;
+ typedef pthread_t       thrd_t;
+ typedef pthread_key_t   tss_t;
+ typedef pthread_mutex_t mtx_t;
++#ifndef __once_flag_defined
+ typedef pthread_once_t  once_flag;
++#endif
+ 
+ 
+ /*
+ Implementation limits:
+   - Conditionally emulation for "mutex with timeout"
+     (see EMULATED_THREADS_USE_NATIVE_TIMEDLOCK macro)
+ */
+ struct impl_thrd_param {
+     thrd_start_t func;
+     void *arg;
+ };
+ 
+ static inline void *
+ impl_thrd_routine(void *p)
+ {
+     struct impl_thrd_param pack = *((struct impl_thrd_param *)p);
+     free(p);
+     return (void*)(intptr_t)pack.func(pack.arg);
+ }
+ 
+ 
+ /*--------------- 7.25.2 Initialization functions ---------------*/
+ // 7.25.2.1
++#ifndef __once_flag_defined
+ static inline void
+ call_once(once_flag *flag, void (*func)(void))
+ {
+     pthread_once(flag, func);
+ }
++#endif
+ 
+ 
+ /*------------- 7.25.3 Condition variable functions -------------*/
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
+index b6b81bf1e142..0924d5b57f6e 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
+@@ -2464,7 +2464,7 @@ ast_function_expression::hir(exec_list *instructions,
+       return value;
+    }
+ 
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ bool
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
+index c00298a16051..6bb0ebd9ea22 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
+@@ -1413,7 +1413,7 @@ ast_expression::do_hir(exec_list *instructions,
+ 
+    switch (this->oper) {
+    case ast_aggregate:
+-      unreachable("ast_aggregate: Should never get here.");
++      UNREACHABLE("ast_aggregate: Should never get here.");
+ 
+    case ast_assign: {
+       this->subexpressions[0]->set_is_lhs(true);
+@@ -2004,13 +2004,13 @@ ast_expression::do_hir(exec_list *instructions,
+    }
+ 
+    case ast_unsized_array_dim:
+-      unreachable("ast_unsized_array_dim: Should never get here.");
++      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
+ 
+    case ast_function_call:
+       /* Should *NEVER* get here.  ast_function_call should always be handled
+        * by ast_function_expression::hir.
+        */
+-      unreachable("ast_function_call: handled elsewhere ");
++      UNREACHABLE("ast_function_call: handled elsewhere ");
+ 
+    case ast_identifier: {
+       /* ast_identifier can appear several places in a full abstract syntax
+@@ -2225,10 +2225,10 @@ ast_expression::has_sequence_subexpression() const
+       return false;
+ 
+    case ast_function_call:
+-      unreachable("should be handled by ast_function_expression::hir");
++      UNREACHABLE("should be handled by ast_function_expression::hir");
+ 
+    case ast_unsized_array_dim:
+-      unreachable("ast_unsized_array_dim: Should never get here.");
++      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
+    }
+ 
+    return false;
+@@ -2529,7 +2529,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
+             return names[type_idx];
+          }
+          default:
+-            unreachable("Unsupported sampler/image dimensionality");
++            UNREACHABLE("Unsupported sampler/image dimensionality");
+          } /* sampler/image float dimensionality */
+          break;
+       case GLSL_TYPE_INT:
+@@ -2584,7 +2584,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
+             return names[offset + type_idx];
+          }
+          default:
+-            unreachable("Unsupported isampler/iimage dimensionality");
++            UNREACHABLE("Unsupported isampler/iimage dimensionality");
+          } /* sampler/image int dimensionality */
+          break;
+       case GLSL_TYPE_UINT:
+@@ -2639,17 +2639,17 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
+             return names[offset + type_idx];
+          }
+          default:
+-            unreachable("Unsupported usampler/uimage dimensionality");
++            UNREACHABLE("Unsupported usampler/uimage dimensionality");
+          } /* sampler/image uint dimensionality */
+          break;
+       default:
+-         unreachable("Unsupported sampler/image type");
++         UNREACHABLE("Unsupported sampler/image type");
+       } /* sampler/image type */
+       break;
+    } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */
+    break;
+    default:
+-      unreachable("Unsupported type");
++      UNREACHABLE("Unsupported type");
+    } /* base type */
+ }
+ 
+@@ -5013,28 +5013,28 @@ ast_declarator_list::hir(exec_list *instructions,
+             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
+             break;
+          default:
+-            unreachable("Unknown image format");
++            UNREACHABLE("Unknown image format");
+          }
+          this->type->qualifier.image_base_type = GLSL_TYPE_FLOAT;
+       } else if (strncmp(this->type->specifier->type_name, "uimage", strlen("uimage")) == 0) {
+          switch (this->type->qualifier.image_format) {
+          case PIPE_FORMAT_R8_SINT:
+             this->type->qualifier.image_format = PIPE_FORMAT_R8_UINT;
+             break;
+          case PIPE_FORMAT_R16_SINT:
+             this->type->qualifier.image_format = PIPE_FORMAT_R16_UINT;
+             break;
+          case PIPE_FORMAT_R32_SINT:
+             this->type->qualifier.image_format = PIPE_FORMAT_R32_UINT;
+             break;
+          case PIPE_FORMAT_R32G32_SINT:
+             this->type->qualifier.image_format = PIPE_FORMAT_R32G32_UINT;
+             break;
+          case PIPE_FORMAT_R32G32B32A32_SINT:
+             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_UINT;
+             break;
+          default:
+-            unreachable("Unknown image format");
++            UNREACHABLE("Unknown image format");
+          }
+          this->type->qualifier.image_base_type = GLSL_TYPE_UINT;
+       } else if (strncmp(this->type->specifier->type_name, "iimage", strlen("iimage")) == 0) {
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
+index 3dafcf0c77e8..603c7f645820 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
+@@ -5414,7 +5414,7 @@ builtin_builder::_isinf(builtin_available_predicate avail, const glsl_type *type
+          infinities.d[i] = INFINITY;
+          break;
+       default:
+-         unreachable("unknown type");
++         UNREACHABLE("unknown type");
+       }
+    }
+ 
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
+index 973d1140783b..6081b8aee8fc 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
+@@ -1032,7 +1032,7 @@ characters that appear in any other expressions. */
+ #define DONE 3
+ #define HASH 4
+ #define NEWLINE_CATCHUP 5
+-#define UNREACHABLE 6
++#define NOT_REACHABLE 6
+ 
+ #define YY_EXTRA_TYPE glcpp_parser_t *
+ 
+@@ -1953,25 +1953,25 @@ YY_RULE_SETUP
+ {
+ 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
+ 
+-	/* We don't actually use the UNREACHABLE start condition. We
++	/* We don't actually use the NOT_REACHABLE start condition. We
+ 	only have this block here so that we can pretend to call some
+ 	generated functions, (to avoid "defined but not used"
+ 	warnings. */
+-        if (YY_START == UNREACHABLE) {
++        if (YY_START == NOT_REACHABLE) {
+ 		unput('.');
+ 		yy_top_state(yyextra);
+ 	}
+ }
+ 	YY_BREAK
+ case 54:
+ YY_RULE_SETUP
+ #line 616 "src/compiler/glsl/glcpp/glcpp-lex.l"
+ YY_FATAL_ERROR( "flex scanner jammed" );
+ 	YY_BREAK
+ #line 1971 "src/compiler/glsl/glcpp/glcpp-lex.c"
+ case YY_STATE_EOF(DONE):
+ case YY_STATE_EOF(NEWLINE_CATCHUP):
+-case YY_STATE_EOF(UNREACHABLE):
++case YY_STATE_EOF(NOT_REACHABLE):
+ 	yyterminate();
+ 
+ 	case YY_END_OF_BUFFER:
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
+index e07739b657c3..f831b58c8aa9 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
+@@ -178,7 +178,7 @@ glcpp_lex_update_state_per_token (glcpp_parser_t *parser, int token)
+ 	 * update the "Internal compiler error" catch-all rule near the end of
+ 	 * this file. */
+ 
+-%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP UNREACHABLE
++%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP NOT_REACHABLE
+ 
+ SPACE		[[:space:]]
+ NONSPACE	[^[:space:]]
+@@ -602,11 +602,11 @@ PATH			["][]^./ _A-Za-z0-9+*%[(){}|&~=!:;,?-]*["]
+ <*>. {
+ 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
+ 
+-	/* We don't actually use the UNREACHABLE start condition. We
++	/* We don't actually use the NOT_REACHABLE start condition. We
+ 	only have this block here so that we can pretend to call some
+ 	generated functions, (to avoid "defined but not used"
+ 	warnings. */
+-        if (YY_START == UNREACHABLE) {
++        if (YY_START == NOT_REACHABLE) {
+ 		unput('.');
+ 		yy_top_state(yyextra);
+ 	}
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
+index 9ea8e00d310a..75b43d77537d 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
+@@ -550,7 +550,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
+          base = GLSL_TYPE_UINT64;
+          break;
+       default:
+-         unreachable(!"Invalid base type.");
++         UNREACHABLE("Invalid base type.");
+       }
+ 
+       this->type = glsl_type::get_instance(base, op0->type->vector_elements, 1);
+@@ -623,7 +623,7 @@ ir_expression::get_num_operands(ir_expression_operation op)
+    if (op <= ir_last_quadop)
+       return 4;
+ 
+-   unreachable("Could not calculate number of operands");
++   UNREACHABLE("Could not calculate number of operands");
+ }
+ 
+ #include "ir_expression_operation_strings.h"
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
+index 5ab50a58415f..edd2107745fb 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
+@@ -196,33 +196,33 @@ ir_builder_print_visitor::print_without_declaration(const ir_rvalue *ir)
+       print_without_declaration((ir_expression *) ir);
+       break;
+    default:
+-      unreachable("Invalid IR type.");
++      UNREACHABLE("Invalid IR type.");
+    }
+ }
+ 
+ ir_visitor_status
+ ir_builder_print_visitor::visit(ir_variable *ir)
+ {
+    const unsigned my_index = next_ir_index++;
+ 
+    _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index);
+ 
+    const char *mode_str;
+    switch (ir->data.mode) {
+    case ir_var_auto: mode_str = "ir_var_auto"; break;
+    case ir_var_uniform: mode_str = "ir_var_uniform"; break;
+    case ir_var_shader_storage: mode_str = "ir_var_shader_storage"; break;
+    case ir_var_shader_shared: mode_str = "ir_var_shader_shared"; break;
+    case ir_var_shader_in: mode_str = "ir_var_shader_in"; break;
+    case ir_var_shader_out: mode_str = "ir_var_shader_out"; break;
+    case ir_var_function_in: mode_str = "ir_var_function_in"; break;
+    case ir_var_function_out: mode_str = "ir_var_function_out"; break;
+    case ir_var_function_inout: mode_str = "ir_var_function_inout"; break;
+    case ir_var_const_in: mode_str = "ir_var_const_in"; break;
+    case ir_var_system_value: mode_str = "ir_var_system_value"; break;
+    case ir_var_temporary: mode_str = "ir_var_temporary"; break;
+    default:
+-      unreachable("Invalid variable mode");
++      UNREACHABLE("Invalid variable mode");
+    }
+ 
+    if (ir->data.mode == ir_var_temporary) {
+@@ -420,7 +420,7 @@ ir_builder_print_visitor::visit(ir_constant *ir)
+                print_with_indent("r%04X_data.u[%u] = 1;\n", my_index, i);
+             break;
+          default:
+-            unreachable("Invalid constant type");
++            UNREACHABLE("Invalid constant type");
+          }
+       }
+ 
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
+index 160626e6ef6f..58c9b44a0d4e 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
+@@ -106,7 +106,7 @@ constant_template_common = mako.template.Template("""\
+             break;
+     % endfor
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;""")
+@@ -137,30 +137,30 @@ constant_template_vector_scalar = mako.template.Template("""\
+             break;
+     % endfor
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;""")
+ 
+ # This template is for multiplication.  It is unique because it has to support
+ # matrix * vector and matrix * matrix operations, and those are just different.
+ constant_template_mul = mako.template.Template("""\
+    case ${op.get_enum_name()}:
+       /* Check for equal types, or unequal types involving scalars */
+       if ((op[0]->type == op[1]->type && !op[0]->type->is_matrix())
+           || op0_scalar || op1_scalar) {
+          for (unsigned c = 0, c0 = 0, c1 = 0;
+               c < components;
+               c0 += c0_inc, c1 += c1_inc, c++) {
+ 
+             switch (op[0]->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+             case ${src_types[0].glsl_type}:
+                data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))};
+                break;
+     % endfor
+             default:
+-               unreachable("invalid type");
++               UNREACHABLE("invalid type");
+             }
+          }
+       } else {
+@@ -218,99 +218,99 @@ constant_template_horizontal = mako.template.Template("""\
+          break;
+     % endfor
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;""")
+ 
+ # This template is for ir_binop_vector_extract.
+ constant_template_vector_extract = mako.template.Template("""\
+    case ${op.get_enum_name()}: {
+       const int c = CLAMP(op[1]->value.i[0], 0,
+                           (int) op[0]->type->vector_elements - 1);
+ 
+       switch (op[0]->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+       case ${src_types[0].glsl_type}:
+          data.${dst_type.union_field}[0] = op[0]->value.${src_types[0].union_field}[c];
+          break;
+     % endfor
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+    }""")
+ 
+ # This template is for ir_triop_vector_insert.
+ constant_template_vector_insert = mako.template.Template("""\
+    case ${op.get_enum_name()}: {
+       const unsigned idx = op[2]->value.u[0];
+ 
+       memcpy(&data, &op[0]->value, sizeof(data));
+ 
+       switch (this->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+       case ${src_types[0].glsl_type}:
+          data.${dst_type.union_field}[idx] = op[1]->value.${src_types[0].union_field}[0];
+          break;
+     % endfor
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+    }""")
+ 
+ # This template is for ir_quadop_vector.
+ constant_template_vector = mako.template.Template("""\
+    case ${op.get_enum_name()}:
+       for (unsigned c = 0; c < this->type->vector_elements; c++) {
+          switch (this->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+          case ${src_types[0].glsl_type}:
+             data.${dst_type.union_field}[c] = op[c]->value.${src_types[0].union_field}[0];
+             break;
+     % endfor
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;""")
+ 
+ # This template is for ir_triop_lrp.
+ constant_template_lrp = mako.template.Template("""\
+    case ${op.get_enum_name()}: {
+       assert(op[0]->type->is_float() || op[0]->type->is_double());
+       assert(op[1]->type->is_float() || op[1]->type->is_double());
+       assert(op[2]->type->is_float() || op[2]->type->is_double());
+ 
+       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
+       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
+          switch (this->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+          case ${src_types[0].glsl_type}:
+             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c", "c", "c2"))};
+             break;
+     % endfor
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+    }""")
+ 
+ # This template is for ir_triop_csel.  This expression is really unique
+ # because not all of the operands are the same type, and the second operand
+ # determines the type of the expression (instead of the first).
+ constant_template_csel = mako.template.Template("""\
+    case ${op.get_enum_name()}:
+       for (unsigned c = 0; c < components; c++) {
+          switch (this->type->base_type) {
+     % for dst_type, src_types in op.signatures():
+          case ${src_types[1].glsl_type}:
+             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types)};
+             break;
+     % endfor
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;""")
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
+index ef5c4e792772..76cd18f03398 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
+@@ -15,1018 +15,1018 @@
+             data.i64[c] = ~ op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_logic_not:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.b[c] = !op[0]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_neg:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = -((int) op[0]->value.u[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = -op[0]->value.i[c];
+             break;
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = -op[0]->value.f[c];
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = -op[0]->value.d[c];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = -((int64_t) op[0]->value.u64[c]);
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = -op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_abs:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.i[c] = op[0]->value.i[c] < 0 ? -op[0]->value.i[c] : op[0]->value.i[c];
+             break;
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = fabsf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = fabs(op[0]->value.d[c]);
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = op[0]->value.i64[c] < 0 ? -op[0]->value.i64[c] : op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_sign:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.i[c] = (op[0]->value.i[c] > 0) - (op[0]->value.i[c] < 0);
+             break;
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = float((op[0]->value.f[c] > 0.0F) - (op[0]->value.f[c] < 0.0F));
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = double((op[0]->value.d[c] > 0.0) - (op[0]->value.d[c] < 0.0));
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = (op[0]->value.i64[c] > 0) - (op[0]->value.i64[c] < 0);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_rcp:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 1.0F / op[0]->value.f[c];
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = 1.0 / op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_rsq:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = 1.0 / sqrt(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_sqrt:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = sqrtf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = sqrt(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_exp:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = expf(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_log:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = logf(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_exp2:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = exp2f(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_log2:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = log2f(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.i[c] = (int) op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.u[c] = (unsigned) op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.f[c] = (float) op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2b:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.b[c] = op[0]->value.f[c] != 0.0F ? true : false;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_b2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_b2f16:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2b:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.b[c] = op[0]->value.u[c] ? true : false;
+             break;
+          case GLSL_TYPE_INT:
+             data.b[c] = op[0]->value.i[c] ? true : false;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_b2i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.i[c] = op[0]->value.b[c] ? 1 : 0;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.f[c] = (float) op[0]->value.u[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.u[c] = op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u2i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i[c] = op[0]->value.u[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.f[c] = op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.d[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2f16:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2fmp:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f162f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.i[c] = op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.d[c] = op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.u[c] = op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u2d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.d[c] = op[0]->value.u[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2b:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.b[c] = op[0]->value.d[c] != 0.0;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f162b:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.b[c] = op[0]->value.f[c] != 0.0;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_i2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.f[c] = bitcast_u2f(op[0]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_f2i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.i[c] = bitcast_f2u(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_u2f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.f[c] = bitcast_u2f(op[0]->value.u[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_f2u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.u[c] = bitcast_f2u(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_u642d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.d[c] = bitcast_u642d(op[0]->value.u64[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_i642d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.d[c] = bitcast_i642d(op[0]->value.i64[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_d2u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.u64[c] = bitcast_d2u64(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bitcast_d2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.i64[c] = bitcast_d2i64(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.i[c] = op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u642i:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.i[c] = op[0]->value.u64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.u[c] = op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u642u:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.u[c] = op[0]->value.u64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642b:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.b[c] = op[0]->value.i64[c] != 0;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.f[c] = op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u642f:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.f[c] = op[0]->value.u64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.d[c] = op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u642d:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.d[c] = op[0]->value.u64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.i64[c] = op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i64[c] = op[0]->value.u[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_b2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.i64[c] = op[0]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.i64[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.i64[c] = op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i2u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT:
+             data.u64[c] = op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u2u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u64[c] = op[0]->value.u[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_f2u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.u64[c] = op[0]->value.f[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_d2u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_DOUBLE:
+             data.u64[c] = op[0]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_u642i64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT64:
+             data.i64[c] = op[0]->value.u64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_i642u64:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_INT64:
+             data.u64[c] = op[0]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_trunc:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = truncf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = trunc(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_ceil:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = ceilf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = ceil(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_floor:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = floorf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = floor(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_fract:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c] - floorf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = op[0]->value.d[c] - floor(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_round_even:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = _mesa_roundevenf(op[0]->value.f[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = _mesa_roundeven(op[0]->value.d[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_sin:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = sinf(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_cos:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = cosf(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_atan:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = atan(op[0]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdx:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdx_coarse:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdx_fine:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdy:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdy_coarse:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_dFdy_fine:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = 0.0f;
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_pack_snorm_2x16:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.u[0] = pack_2x16(pack_snorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+    case ir_unop_pack_snorm_4x8:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.u[0] = pack_4x8(pack_snorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+    case ir_unop_pack_unorm_2x16:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.u[0] = pack_2x16(pack_unorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+    case ir_unop_pack_unorm_4x8:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.u[0] = pack_4x8(pack_unorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+    case ir_unop_pack_half_2x16:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.u[0] = pack_2x16(pack_half_1x16, op[0]->value.f[0], op[0]->value.f[1]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+@@ -1060,76 +1060,76 @@
+             data.i[c] = bitfield_reverse(op[0]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_bit_count:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i[c] = util_bitcount(op[0]->value.u[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = util_bitcount(op[0]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_find_msb:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i[c] = find_msb_uint(op[0]->value.u[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = find_msb_int(op[0]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_find_lsb:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i[c] = find_msb_uint(op[0]->value.u[c] & -op[0]->value.u[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = find_msb_uint(op[0]->value.i[c] & -op[0]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_clz:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (unsigned)(31 - find_msb_uint(op[0]->value.u[c]));
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_unop_saturate:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = CLAMP(op[0]->value.f[c], 0.0f, 1.0f);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1200,7 +1200,7 @@
+             data.i64[c] = op[0]->value.i64[c0] + op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1231,112 +1231,112 @@
+             data.i64[c] = op[0]->value.i64[c0] - op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_add_sat:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (op[0]->value.u[c] + op[1]->value.u[c]) < op[0]->value.u[c] ? UINT32_MAX : (op[0]->value.u[c] + op[1]->value.u[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = iadd_saturate(op[0]->value.i[c], op[1]->value.i[c]);
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = (op[0]->value.u64[c] + op[1]->value.u64[c]) < op[0]->value.u64[c] ? UINT64_MAX : (op[0]->value.u64[c] + op[1]->value.u64[c]);
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = iadd64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_sub_sat:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? 0 : op[0]->value.u[c] - op[1]->value.u[c];
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = isub_saturate(op[0]->value.i[c], op[1]->value.i[c]);
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? 0 : op[0]->value.u64[c] - op[1]->value.u64[c];
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = isub64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_abs_sub:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? op[1]->value.u[c] - op[0]->value.u[c] : op[0]->value.u[c] - op[1]->value.u[c];
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = (op[1]->value.i[c] > op[0]->value.i[c]) ? (unsigned)op[1]->value.i[c] - (unsigned)op[0]->value.i[c] : (unsigned)op[0]->value.i[c] - (unsigned)op[1]->value.i[c];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? op[1]->value.u64[c] - op[0]->value.u64[c] : op[0]->value.u64[c] - op[1]->value.u64[c];
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = (op[1]->value.i64[c] > op[0]->value.i64[c]) ? (uint64_t)op[1]->value.i64[c] - (uint64_t)op[0]->value.i64[c] : (uint64_t)op[0]->value.i64[c] - (uint64_t)op[1]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_avg:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] & op[1]->value.u[c]) & 1);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] & op[1]->value.i[c]) & 1);
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] & op[1]->value.u64[c]) & 1);
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] & op[1]->value.i64[c]) & 1);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_avg_round:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] | op[1]->value.u[c]) & 1);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] | op[1]->value.i[c]) & 1);
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] | op[1]->value.u64[c]) & 1);
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] | op[1]->value.i64[c]) & 1);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1369,7 +1369,7 @@
+                data.i64[c] = op[0]->value.i64[c0] * op[1]->value.i64[c1];
+                break;
+             default:
+-               unreachable("invalid type");
++               UNREACHABLE("invalid type");
+             }
+          }
+       } else {
+@@ -1411,7 +1411,7 @@
+             data.i[c] = op[0]->value.i[c] * (int16_t)op[0]->value.i[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1442,7 +1442,7 @@
+             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] / op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1473,61 +1473,61 @@
+             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] % op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_less:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.b[c] = op[0]->value.u[c] < op[1]->value.u[c];
+             break;
+          case GLSL_TYPE_INT:
+             data.b[c] = op[0]->value.i[c] < op[1]->value.i[c];
+             break;
+          case GLSL_TYPE_FLOAT:
+             data.b[c] = op[0]->value.f[c] < op[1]->value.f[c];
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.b[c] = op[0]->value.d[c] < op[1]->value.d[c];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.b[c] = op[0]->value.u64[c] < op[1]->value.u64[c];
+             break;
+          case GLSL_TYPE_INT64:
+             data.b[c] = op[0]->value.i64[c] < op[1]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_gequal:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c];
+             break;
+          case GLSL_TYPE_INT:
+             data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c];
+             break;
+          case GLSL_TYPE_FLOAT:
+             data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c];
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.b[c] = op[0]->value.d[c] >= op[1]->value.d[c];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.b[c] = op[0]->value.u64[c] >= op[1]->value.u64[c];
+             break;
+          case GLSL_TYPE_INT64:
+             data.b[c] = op[0]->value.i64[c] >= op[1]->value.i64[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1557,7 +1557,7 @@
+             data.b[c] = op[0]->value.b[c] == op[1]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1587,7 +1587,7 @@
+             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1627,7 +1627,7 @@
+             data.i64[c] = op[0]->value.i64[c0] << op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1659,132 +1659,132 @@
+             data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_bit_and:
+       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
+       for (unsigned c = 0, c0 = 0, c1 = 0;
+            c < components;
+            c0 += c0_inc, c1 += c1_inc, c++) {
+ 
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = op[0]->value.u[c0] & op[1]->value.u[c1];
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = op[0]->value.i[c0] & op[1]->value.i[c1];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = op[0]->value.u64[c0] & op[1]->value.u64[c1];
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = op[0]->value.i64[c0] & op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_bit_xor:
+       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
+       for (unsigned c = 0, c0 = 0, c1 = 0;
+            c < components;
+            c0 += c0_inc, c1 += c1_inc, c++) {
+ 
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = op[0]->value.u[c0] ^ op[1]->value.u[c1];
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = op[0]->value.i[c0] ^ op[1]->value.i[c1];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = op[0]->value.u64[c0] ^ op[1]->value.u64[c1];
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = op[0]->value.i64[c0] ^ op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_bit_or:
+       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
+       for (unsigned c = 0, c0 = 0, c1 = 0;
+            c < components;
+            c0 += c0_inc, c1 += c1_inc, c++) {
+ 
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = op[0]->value.u[c0] | op[1]->value.u[c1];
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = op[0]->value.i[c0] | op[1]->value.i[c1];
+             break;
+          case GLSL_TYPE_UINT64:
+             data.u64[c] = op[0]->value.u64[c0] | op[1]->value.u64[c1];
+             break;
+          case GLSL_TYPE_INT64:
+             data.i64[c] = op[0]->value.i64[c0] | op[1]->value.i64[c1];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_logic_and:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.b[c] = op[0]->value.b[c] && op[1]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_logic_xor:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_logic_or:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_BOOL:
+             data.b[c] = op[0]->value.b[c] || op[1]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_dot:
+       switch (op[0]->type->base_type) {
+       case GLSL_TYPE_FLOAT:
+          data.f[0] = dot_f(op[0], op[1]);
+          break;
+       case GLSL_TYPE_DOUBLE:
+          data.d[0] = dot_d(op[0], op[1]);
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+ 
+@@ -1814,7 +1814,7 @@
+             data.i64[c] = MIN2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1845,34 +1845,34 @@
+             data.i64[c] = MAX2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_pow:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = powf(op[0]->value.f[c], op[1]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_binop_ldexp:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = ldexpf_flush_subnormal(op[0]->value.f[c], op[1]->value.i[c]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = ldexp_flush_subnormal(op[0]->value.d[c], op[1]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1904,54 +1904,54 @@
+          data.b[0] = op[0]->value.b[c];
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+    }
+ 
+    case ir_binop_atan2:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = atan2(op[0]->value.f[c], op[1]->value.f[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_triop_fma:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c] * op[1]->value.f[c] + op[2]->value.f[c];
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = op[0]->value.d[c] * op[1]->value.d[c] + op[2]->value.d[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_triop_lrp: {
+       assert(op[0]->type->is_float() || op[0]->type->is_double());
+       assert(op[1]->type->is_float() || op[1]->type->is_double());
+       assert(op[2]->type->is_float() || op[2]->type->is_double());
+ 
+       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
+       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
+          switch (this->type->base_type) {
+          case GLSL_TYPE_FLOAT:
+             data.f[c] = op[0]->value.f[c] * (1.0f - op[2]->value.f[c2]) + (op[1]->value.f[c] * op[2]->value.f[c2]);
+             break;
+          case GLSL_TYPE_DOUBLE:
+             data.d[c] = op[0]->value.d[c] * (1.0 - op[2]->value.d[c2]) + (op[1]->value.d[c] * op[2]->value.d[c2]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -1982,22 +1982,22 @@
+             data.b[c] = op[0]->value.b[c] ? op[1]->value.b[c] : op[2]->value.b[c];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+ 
+    case ir_triop_bitfield_extract:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.i[c] = bitfield_extract_uint(op[0]->value.u[c], op[1]->value.i[c], op[2]->value.i[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = bitfield_extract_int(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -2030,22 +2030,22 @@
+          data.b[idx] = op[1]->value.b[0];
+          break;
+       default:
+-         unreachable("invalid type");
++         UNREACHABLE("invalid type");
+       }
+       break;
+    }
+ 
+    case ir_quadop_bitfield_insert:
+       for (unsigned c = 0; c < op[0]->type->components(); c++) {
+          switch (op[0]->type->base_type) {
+          case GLSL_TYPE_UINT:
+             data.u[c] = bitfield_insert(op[0]->value.u[c], op[1]->value.u[c], op[2]->value.i[c], op[3]->value.i[c]);
+             break;
+          case GLSL_TYPE_INT:
+             data.i[c] = bitfield_insert(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c], op[3]->value.i[c]);
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+@@ -2075,7 +2075,7 @@
+             data.b[c] = op[c]->value.b[0];
+             break;
+          default:
+-            unreachable("invalid type");
++            UNREACHABLE("invalid type");
+          }
+       }
+       break;
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
+index d15bfd0e5640..b7618753c2c3 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
+@@ -835,7 +835,7 @@ static const char* operator_glsl_str(ir_expression_operation op, const glsl_type
+ 	case ir_triop_lrp:
+ 		return "mix";
+ 	default:
+-		unreachable("Unexpected operator in operator_glsl_str");
++		UNREACHABLE("Unexpected operator in operator_glsl_str");
+ 		return "UNIMPLEMENTED";
+ 	}
+ }
+@@ -1891,21 +1891,21 @@ interface_packing_string(enum glsl_interface_packing packing)
+ 	case GLSL_INTERFACE_PACKING_STD430:
+ 		return "std430";
+ 	default:
+-		unreachable("Unexpected interface packing");
++		UNREACHABLE("Unexpected interface packing");
+ 		return "UNKNOWN";
+ 	}
+ }
+ 
+ static const char*
+ interface_variable_mode_string(enum ir_variable_mode mode)
+ {
+ 	switch (mode) {
+ 	case ir_var_uniform:
+ 		return "uniform";
+ 	case ir_var_shader_storage:
+ 		return "buffer";
+ 	default:
+-		unreachable("Unexpected interface variable mode");
++		UNREACHABLE("Unexpected interface variable mode");
+ 		return "UNKOWN";
+ 	}
+ }
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
+index d621c2670032..964177fd11b7 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
+@@ -381,7 +381,7 @@ void ir_print_visitor::visit(ir_texture *ir)
+       ir->lod_info.component->accept(this);
+       break;
+    case ir_samples_identical:
+-      unreachable("ir_samples_identical was already handled");
++      UNREACHABLE("ir_samples_identical was already handled");
+    };
+    fprintf(f, ")");
+ }
+@@ -522,7 +522,7 @@ void ir_print_visitor::visit(ir_constant *ir)
+                fprintf(f, "%f", ir->value.d[i]);
+             break;
+ 	 default:
+-            unreachable("Invalid constant type");
++            UNREACHABLE("Invalid constant type");
+ 	 }
+       }
+    }
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
+index 212abf084b2e..112076d40733 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
+@@ -3988,7 +3988,7 @@ add_packed_varyings(const struct gl_context *ctx,
+             iface = GL_PROGRAM_OUTPUT;
+             break;
+          default:
+-            unreachable("unexpected type");
++            UNREACHABLE("unexpected type");
+          }
+ 
+          if (type == iface) {
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
+index 9429e69c2a7f..445bfd06c01b 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
+@@ -171,7 +171,7 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
+          iter = new(mem_ctx) ir_constant(double(iter_value + bias[i]));
+          break;
+       default:
+-          unreachable("Unsupported type for loop iterator.");
++          UNREACHABLE("Unsupported type for loop iterator.");
+       }
+ 
+       ir_expression *const mul =
+@@ -238,7 +238,7 @@ incremented_before_terminator(ir_loop *loop, ir_variable *var,
+       }
+    }
+ 
+-   unreachable("Unable to find induction variable");
++   UNREACHABLE("Unable to find induction variable");
+ }
+ 
+ /**
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
+index c85b39bcaa34..1a7b8d4e8d6a 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
+@@ -386,7 +386,7 @@ calc_blend_result(ir_factory f,
+          break;
+       case BLEND_NONE:
+       case BLEND_ALL:
+-         unreachable("not real cases");
++         UNREACHABLE("not real cases");
+       }
+ 
+       if (val)
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
+index a6e2f741ebe6..c97f497c384d 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
+@@ -244,19 +244,19 @@ lower_buffer_access::is_dereferenced_thing_row_major(const ir_rvalue *deref)
+             return matrix || deref->type->without_array()->is_struct();
+          }
+ 
+-         unreachable("invalid matrix layout");
++         UNREACHABLE("invalid matrix layout");
+          break;
+       }
+ 
+       default:
+          return false;
+       }
+    }
+ 
+    /* The tree must have ended with a dereference that wasn't an
+     * ir_dereference_variable.  That is invalid, and it should be impossible.
+     */
+-   unreachable("invalid dereference tree");
++   UNREACHABLE("invalid dereference tree");
+    return false;
+ }
+ 
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
+index b4e730c64fbd..749bfc509748 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
+@@ -155,7 +155,7 @@ lower_distance_visitor::visit(ir_variable *ir)
+       old_var = &old_distance_in_var;
+       new_var = &new_distance_in_var;
+    } else {
+-      unreachable("not reached");
++      UNREACHABLE("not reached");
+    }
+ 
+    this->progress = true;
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
+index 08d4f72efa0a..3a44c60c7abe 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
+@@ -549,7 +549,7 @@ lower_ubo_reference_visitor::insert_buffer_access(void *mem_ctx,
+       }
+       break;
+    default:
+-      unreachable("invalid buffer_access_type in insert_buffer_access");
++      UNREACHABLE("invalid buffer_access_type in insert_buffer_access");
+    }
+ }
+ 
+@@ -730,7 +730,7 @@ lower_ubo_reference_visitor::calculate_unsized_array_stride(ir_dereference *dere
+       break;
+    }
+    default:
+-      unreachable("Unsupported dereference type");
++      UNREACHABLE("Unsupported dereference type");
+    }
+    return array_stride;
+ }
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
+index 7cef4fc6ef93..ecb592d5c13d 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
+@@ -995,7 +995,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
+             break;
+          default:
+             one = NULL;
+-            unreachable("unexpected type");
++            UNREACHABLE("unexpected type");
+          }
+ 
+          return mul(ir->operands[0], add(one, neg(ir->operands[2])));
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
+index 36fe0a9f05b6..a56ef38b81b1 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
+@@ -154,7 +154,7 @@ compare_components(ir_constant *a, ir_constant *b)
+             foundequal = true;
+          break;
+       default:
+-         unreachable("not reached");
++         UNREACHABLE("not reached");
+       }
+    }
+ 
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
+index 88318cd8a6eb..9475467629c9 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
+@@ -228,7 +228,7 @@ write_mask_to_swizzle(unsigned write_mask)
+    case WRITEMASK_Z: return SWIZZLE_Z;
+    case WRITEMASK_W: return SWIZZLE_W;
+    }
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ /**
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
+index 445659599c22..77ea8b11ff87 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
+@@ -459,7 +459,7 @@ const glsl_type *glsl_type::get_bare_type() const
+       return this;
+    }
+ 
+-   unreachable("Invalid base type");
++   UNREACHABLE("Invalid base type");
+ }
+ 
+ const glsl_type *glsl_type::get_float16_type() const
+@@ -899,7 +899,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim,
+       return error_type;
+    }
+ 
+-   unreachable("switch statement above should be complete");
++   UNREACHABLE("switch statement above should be complete");
+ }
+ 
+ const glsl_type *
+@@ -998,7 +998,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim,
+       return error_type;
+    }
+ 
+-   unreachable("switch statement above should be complete");
++   UNREACHABLE("switch statement above should be complete");
+ }
+ 
+ const glsl_type *
+@@ -2015,7 +2015,7 @@ glsl_type::get_explicit_std140_type(bool row_major) const
+       delete[] fields;
+       return type;
+    } else {
+-      unreachable("Invalid type for UBO or SSBO");
++      UNREACHABLE("Invalid type for UBO or SSBO");
+    }
+ }
+ 
+@@ -2373,7 +2373,7 @@ glsl_type::get_explicit_std430_type(bool row_major) const
+       delete[] fields;
+       return type;
+    } else {
+-      unreachable("Invalid type for SSBO");
++      UNREACHABLE("Invalid type for SSBO");
+    }
+ }
+ 
+@@ -2447,7 +2447,7 @@ glsl_type::get_explicit_type_for_size_align(glsl_type_size_align_func type_info,
+       return glsl_type::get_instance(this->base_type, this->vector_elements,
+                                      this->matrix_columns, stride, false);
+    } else {
+-      unreachable("Unhandled type.");
++      UNREACHABLE("Unhandled type.");
+    }
+ }
+ 
+@@ -2583,7 +2583,7 @@ glsl_type::count_dword_slots(bool is_bindless) const
+    case GLSL_TYPE_ERROR:
+    case GLSL_TYPE_FUNCTION:
+    default:
+-      unreachable("invalid type in st_glsl_type_dword_size()");
++      UNREACHABLE("invalid type in st_glsl_type_dword_size()");
+    }
+ 
+    return 0;
+@@ -2947,7 +2947,7 @@ glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim)
+    case GLSL_SAMPLER_DIM_CUBE:
+       return 3;
+    default:
+-      unreachable("Unknown sampler dim");
++      UNREACHABLE("Unknown sampler dim");
+    }
+ }
+ 
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
+index f709bdd702e2..45d608ce47e3 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
+@@ -187,7 +187,7 @@ glsl_base_type_get_bit_size(const enum glsl_base_type base_type)
+       return 64;
+ 
+    default:
+-      unreachable("unknown base type");
++      UNREACHABLE("unknown base type");
+    }
+ 
+    return 0;
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
+index a2a5eb82a61f..6df48d39abc0 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
+@@ -66,27 +66,27 @@ _mesa_shader_stage_to_string(unsigned stage)
+    case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
+    }
+ 
+-   unreachable("Unknown shader stage.");
++   UNREACHABLE("Unknown shader stage.");
+ }
+ 
+ /**
+  * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)
+  * for debug printouts and error messages.
+  */
+ const char *
+ _mesa_shader_stage_to_abbrev(unsigned stage)
+ {
+    switch (stage) {
+    case MESA_SHADER_VERTEX:   return "VS";
+    case MESA_SHADER_FRAGMENT: return "FS";
+    case MESA_SHADER_GEOMETRY: return "GS";
+    case MESA_SHADER_COMPUTE:  return "CS";
+    case MESA_SHADER_KERNEL:   return "CL";
+    case MESA_SHADER_TESS_CTRL: return "TCS";
+    case MESA_SHADER_TESS_EVAL: return "TES";
+    }
+ 
+-   unreachable("Unknown shader stage.");
++   UNREACHABLE("Unknown shader stage.");
+ }
+ 
+ const char *
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
+index 0d512550de47..3f105d64d21b 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
+@@ -140,7 +140,7 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
+    case GL_COMPUTE_SHADER:
+       return MESA_SHADER_COMPUTE;
+    default:
+-      unreachable("bad value in _mesa_shader_enum_to_shader_stage()");
++      UNREACHABLE("bad value in _mesa_shader_enum_to_shader_stage()");
+    }
+ }
+ 
+@@ -184,75 +184,75 @@ _mesa_shader_stage_from_subroutine_uniform(GLenum subuniform)
+    case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
+       return MESA_SHADER_TESS_EVAL;
+    }
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ static inline gl_shader_stage
+ _mesa_shader_stage_from_subroutine(GLenum subroutine)
+ {
+    switch (subroutine) {
+    case GL_VERTEX_SUBROUTINE:
+       return MESA_SHADER_VERTEX;
+    case GL_GEOMETRY_SUBROUTINE:
+       return MESA_SHADER_GEOMETRY;
+    case GL_FRAGMENT_SUBROUTINE:
+       return MESA_SHADER_FRAGMENT;
+    case GL_COMPUTE_SUBROUTINE:
+       return MESA_SHADER_COMPUTE;
+    case GL_TESS_CONTROL_SUBROUTINE:
+       return MESA_SHADER_TESS_CTRL;
+    case GL_TESS_EVALUATION_SUBROUTINE:
+       return MESA_SHADER_TESS_EVAL;
+    }
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ static inline GLenum
+ _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
+ {
+    switch (stage) {
+    case MESA_SHADER_VERTEX:
+       return GL_VERTEX_SUBROUTINE;
+    case MESA_SHADER_GEOMETRY:
+       return GL_GEOMETRY_SUBROUTINE;
+    case MESA_SHADER_FRAGMENT:
+       return GL_FRAGMENT_SUBROUTINE;
+    case MESA_SHADER_COMPUTE:
+       return GL_COMPUTE_SUBROUTINE;
+    case MESA_SHADER_TESS_CTRL:
+       return GL_TESS_CONTROL_SUBROUTINE;
+    case MESA_SHADER_TESS_EVAL:
+       return GL_TESS_EVALUATION_SUBROUTINE;
+    case MESA_SHADER_NONE:
+       break;
+    case MESA_SHADER_KERNEL:
+-      unreachable("not reached");
++      UNREACHABLE("not reached");
+       break;
+    }
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ static inline GLenum
+ _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
+ {
+    switch (stage) {
+    case MESA_SHADER_VERTEX:
+       return GL_VERTEX_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_GEOMETRY:
+       return GL_GEOMETRY_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_FRAGMENT:
+       return GL_FRAGMENT_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_COMPUTE:
+       return GL_COMPUTE_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_TESS_CTRL:
+       return GL_TESS_CONTROL_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_TESS_EVAL:
+       return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
+    case MESA_SHADER_NONE:
+    case MESA_SHADER_KERNEL:
+       break;
+    }
+-   unreachable("not reached");
++   UNREACHABLE("not reached");
+ }
+ 
+ extern bool
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
+index fcace4e351d6..e4dfd67c8cc2 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
+@@ -68,24 +68,34 @@
+    } while (0)
+ 
+ 
++/**
++ * Unreachable macro. Useful for suppressing "control reaches end of non-void
++ * function" warnings.
++ */
+ /**
+  * Unreachable macro. Useful for suppressing "control reaches end of non-void
+  * function" warnings.
+  */
+ #if defined(HAVE___BUILTIN_UNREACHABLE) || __has_builtin(__builtin_unreachable)
+-#define unreachable(str)    \
++#define UNREACHABLE(str)    \
+ do {                        \
++   (void)"" str; /* str must be a string literal */ \
+    assert(!str);            \
+    __builtin_unreachable(); \
+ } while (0)
+ #elif defined (_MSC_VER)
+-#define unreachable(str)    \
++#define UNREACHABLE(str)    \
+ do {                        \
++   (void)"" str; /* str must be a string literal */ \
+    assert(!str);            \
+    __assume(0);             \
+ } while (0)
+ #else
+-#define unreachable(str) assert(!str)
++#define UNREACHABLE(str)    \
++do {                        \
++   (void)"" str; /* str must be a string literal */ \
++   assert(!str);            \
++} while (0)
+ #endif
+ 
+ /**
+@@ -190,8 +200,10 @@ do {                       \
+  * performs no action and all member variables and base classes are
+  * trivially destructible themselves.
+  */
+-#   if (defined(__clang__) && defined(__has_feature))
+-#      if __has_feature(has_trivial_destructor)
++#   if defined(__clang__)
++#      if __has_builtin(__is_trivially_destructible)
++#         define HAS_TRIVIAL_DESTRUCTOR(T) __is_trivially_destructible(T)
++#      elif (defined(__has_feature) && __has_feature(has_trivial_destructor))
+ #         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+ #      endif
+ #   elif defined(__GNUC__)
+diff --git a/third_party/rust/glslopt/src/bindings.rs b/third_party/rust/glslopt/src/bindings.rs
+index f4e5bebd08ba..5c1ca487d5e9 100644
+--- a/third_party/rust/glslopt/src/bindings.rs
++++ b/third_party/rust/glslopt/src/bindings.rs
+@@ -1,131 +1,131 @@
+-/* automatically generated by rust-bindgen */
++/* automatically generated by rust-bindgen 0.72.1 */
+ 
+ #[repr(C)]
+ #[derive(Debug, Copy, Clone)]
+ pub struct glslopt_shader {
+     _unused: [u8; 0],
+ }
+ #[repr(C)]
+ #[derive(Debug, Copy, Clone)]
+ pub struct glslopt_ctx {
+     _unused: [u8; 0],
+ }
+ pub const glslopt_shader_type_kGlslOptShaderVertex: glslopt_shader_type = 0;
+ pub const glslopt_shader_type_kGlslOptShaderFragment: glslopt_shader_type = 1;
+-pub type glslopt_shader_type = u32;
++pub type glslopt_shader_type = ::std::os::raw::c_uint;
+ pub const glslopt_options_kGlslOptionSkipPreprocessor: glslopt_options = 1;
+ pub const glslopt_options_kGlslOptionNotFullShader: glslopt_options = 2;
+-pub type glslopt_options = u32;
++pub type glslopt_options = ::std::os::raw::c_uint;
+ pub const glslopt_target_kGlslTargetOpenGL: glslopt_target = 0;
+ pub const glslopt_target_kGlslTargetOpenGLES20: glslopt_target = 1;
+ pub const glslopt_target_kGlslTargetOpenGLES30: glslopt_target = 2;
+ pub const glslopt_target_kGlslTargetMetal: glslopt_target = 3;
+-pub type glslopt_target = u32;
++pub type glslopt_target = ::std::os::raw::c_uint;
+ pub const glslopt_basic_type_kGlslTypeFloat: glslopt_basic_type = 0;
+ pub const glslopt_basic_type_kGlslTypeInt: glslopt_basic_type = 1;
+ pub const glslopt_basic_type_kGlslTypeBool: glslopt_basic_type = 2;
+ pub const glslopt_basic_type_kGlslTypeTex2D: glslopt_basic_type = 3;
+ pub const glslopt_basic_type_kGlslTypeTex3D: glslopt_basic_type = 4;
+ pub const glslopt_basic_type_kGlslTypeTexCube: glslopt_basic_type = 5;
+ pub const glslopt_basic_type_kGlslTypeTex2DShadow: glslopt_basic_type = 6;
+ pub const glslopt_basic_type_kGlslTypeTex2DArray: glslopt_basic_type = 7;
+ pub const glslopt_basic_type_kGlslTypeOther: glslopt_basic_type = 8;
+ pub const glslopt_basic_type_kGlslTypeCount: glslopt_basic_type = 9;
+-pub type glslopt_basic_type = u32;
++pub type glslopt_basic_type = ::std::os::raw::c_uint;
+ pub const glslopt_precision_kGlslPrecHigh: glslopt_precision = 0;
+ pub const glslopt_precision_kGlslPrecMedium: glslopt_precision = 1;
+ pub const glslopt_precision_kGlslPrecLow: glslopt_precision = 2;
+ pub const glslopt_precision_kGlslPrecCount: glslopt_precision = 3;
+-pub type glslopt_precision = u32;
+-extern "C" {
++pub type glslopt_precision = ::std::os::raw::c_uint;
++unsafe extern "C" {
+     pub fn glslopt_initialize(target: glslopt_target) -> *mut glslopt_ctx;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_cleanup(ctx: *mut glslopt_ctx);
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_set_max_unroll_iterations(
+         ctx: *mut glslopt_ctx,
+         iterations: ::std::os::raw::c_uint,
+     );
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_optimize(
+         ctx: *mut glslopt_ctx,
+         type_: glslopt_shader_type,
+         shaderSource: *const ::std::os::raw::c_char,
+         options: ::std::os::raw::c_uint,
+     ) -> *mut glslopt_shader;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_get_status(shader: *mut glslopt_shader) -> bool;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_get_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_get_raw_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_get_log(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_delete(shader: *mut glslopt_shader);
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_input_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_input_desc(
+         shader: *mut glslopt_shader,
+         index: ::std::os::raw::c_int,
+         outName: *mut *const ::std::os::raw::c_char,
+         outType: *mut glslopt_basic_type,
+         outPrec: *mut glslopt_precision,
+         outVecSize: *mut ::std::os::raw::c_int,
+         outMatSize: *mut ::std::os::raw::c_int,
+         outArraySize: *mut ::std::os::raw::c_int,
+         outLocation: *mut ::std::os::raw::c_int,
+     );
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_uniform_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_uniform_total_size(
+         shader: *mut glslopt_shader,
+     ) -> ::std::os::raw::c_int;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_uniform_desc(
+         shader: *mut glslopt_shader,
+         index: ::std::os::raw::c_int,
+         outName: *mut *const ::std::os::raw::c_char,
+         outType: *mut glslopt_basic_type,
+         outPrec: *mut glslopt_precision,
+         outVecSize: *mut ::std::os::raw::c_int,
+         outMatSize: *mut ::std::os::raw::c_int,
+         outArraySize: *mut ::std::os::raw::c_int,
+         outLocation: *mut ::std::os::raw::c_int,
+     );
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_texture_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_texture_desc(
+         shader: *mut glslopt_shader,
+         index: ::std::os::raw::c_int,
+         outName: *mut *const ::std::os::raw::c_char,
+         outType: *mut glslopt_basic_type,
+         outPrec: *mut glslopt_precision,
+         outVecSize: *mut ::std::os::raw::c_int,
+         outMatSize: *mut ::std::os::raw::c_int,
+         outArraySize: *mut ::std::os::raw::c_int,
+         outLocation: *mut ::std::os::raw::c_int,
+     );
+ }
+-extern "C" {
++unsafe extern "C" {
+     pub fn glslopt_shader_get_stats(
+         shader: *mut glslopt_shader,
+         approxMath: *mut ::std::os::raw::c_int,
diff --git a/libre/iceweasel/0003-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch b/libre/iceweasel/0003-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
deleted file mode 100644
index f643b89..0000000
--- a/libre/iceweasel/0003-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
+++ /dev/null
@@ -1,3108 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
-Date: Thu, 12 Feb 2026 09:31:45 +0100
-Subject: [PATCH] Patch glsl-optimizer to build with glibc 2.43
-
----
- .cargo/config.toml.in                         |   5 +
- Cargo.lock                                    |   3 +-
- Cargo.toml                                    |   2 +
- supply-chain/audits.toml                      |   6 +
- supply-chain/config.toml                      |   4 +
- third_party/rust/glslopt/.cargo-checksum.json |   2 +-
- third_party/rust/glslopt/.cargo_vcs_info.json |   6 -
- third_party/rust/glslopt/Cargo.lock           |  25 --
- third_party/rust/glslopt/Cargo.toml           |   4 +-
- third_party/rust/glslopt/Cargo.toml.orig      |  12 -
- .../rust/glslopt/glsl-optimizer/.cargo-ok     |   0
- .../rust/glslopt/glsl-optimizer/.gitignore    |   4 -
- .../glslopt/glsl-optimizer/generateParsers.sh |   6 +-
- .../include/c11/threads_posix.h               |   6 +
- .../src/compiler/glsl/ast_function.cpp        |   2 +-
- .../src/compiler/glsl/ast_to_hir.cpp          |  24 +-
- .../src/compiler/glsl/builtin_functions.cpp   |   2 +-
- .../src/compiler/glsl/glcpp/glcpp-lex.c       |   8 +-
- .../src/compiler/glsl/glcpp/glcpp-lex.l       |   6 +-
- .../glsl-optimizer/src/compiler/glsl/ir.cpp   |   4 +-
- .../glsl/ir_builder_print_visitor.cpp         |   6 +-
- .../compiler/glsl/ir_expression_operation.py  |  18 +-
- .../glsl/ir_expression_operation_constant.h   | 248 +++++++++---------
- .../compiler/glsl/ir_print_glsl_visitor.cpp   |   6 +-
- .../src/compiler/glsl/ir_print_visitor.cpp    |   4 +-
- .../src/compiler/glsl/linker.cpp              |   2 +-
- .../src/compiler/glsl/loop_analysis.cpp       |   4 +-
- .../glsl/lower_blend_equation_advanced.cpp    |   2 +-
- .../src/compiler/glsl/lower_buffer_access.cpp |   4 +-
- .../src/compiler/glsl/lower_distance.cpp      |   2 +-
- .../src/compiler/glsl/lower_ubo_reference.cpp |   4 +-
- .../src/compiler/glsl/opt_algebraic.cpp       |   2 +-
- .../src/compiler/glsl/opt_minmax.cpp          |   2 +-
- .../src/compiler/glsl/opt_vectorize.cpp       |   2 +-
- .../src/compiler/glsl_types.cpp               |  16 +-
- .../glsl-optimizer/src/compiler/glsl_types.h  |   2 +-
- .../src/compiler/shader_enums.c               |   4 +-
- .../glsl-optimizer/src/mesa/main/shaderobj.h  |  12 +-
- .../glslopt/glsl-optimizer/src/util/macros.h  |  22 +-
- third_party/rust/glslopt/src/bindings.rs      |  46 ++--
- 40 files changed, 263 insertions(+), 276 deletions(-)
- delete mode 100644 third_party/rust/glslopt/.cargo_vcs_info.json
- delete mode 100644 third_party/rust/glslopt/Cargo.lock
- delete mode 100644 third_party/rust/glslopt/Cargo.toml.orig
- copy .trackerignore => third_party/rust/glslopt/glsl-optimizer/.cargo-ok (100%)
- delete mode 100644 third_party/rust/glslopt/glsl-optimizer/.gitignore
-
-diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in
-index ba7bd730d495..f54a15276cbf 100644
---- a/.cargo/config.toml.in
-+++ b/.cargo/config.toml.in
-@@ -5,6 +5,11 @@
- [source.crates-io]
- replace-with = "vendored-sources"
- 
-+[source."git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d"]
-+git = "https://github.com/Erk-/glslopt-rs"
-+rev = "92fa39d0910e9e73de40b0d391906e6e2940080d"
-+replace-with = "vendored-sources"
-+
- [source."git+https://github.com/FirefoxGraphics/aa-stroke?rev=5776bdfc8ad664a1503db668fab397d818a5f98a"]
- git = "https://github.com/FirefoxGraphics/aa-stroke"
- rev = "5776bdfc8ad664a1503db668fab397d818a5f98a"
-diff --git a/Cargo.lock b/Cargo.lock
-index 8cf7d32bff8e..b74cff7df97c 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -2894,8 +2894,7 @@ dependencies = [
- [[package]]
- name = "glslopt"
- version = "0.1.12"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"
-+source = "git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d#92fa39d0910e9e73de40b0d391906e6e2940080d"
- dependencies = [
-  "cc",
- ]
-diff --git a/Cargo.toml b/Cargo.toml
-index 4d9f6fbf021e..cd9966a950e6 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -282,6 +282,8 @@ harfbuzz = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a9
- harfbuzz-traits = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a98772a197291d04af93f7041b7093d95" }
- # Make --enable-rust-simd compatible with Rust 1.95
- encoding_rs = { git = "https://github.com/hsivonen/encoding_rs", rev = "1236d1bc423e6ba35a06485f74a6304db2d703b5" }
-+# Make glsl-optimizer compatible with glibc 2.43
-+glslopt = { git = "https://github.com/Erk-/glslopt-rs", rev = "92fa39d0910e9e73de40b0d391906e6e2940080d" }
- 
- # objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13
- objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" }
-diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
-index 5b90663b2c4b..9640a66a86cd 100644
---- a/supply-chain/audits.toml
-+++ b/supply-chain/audits.toml
-@@ -2991,6 +2991,12 @@ criteria = "safe-to-deploy"
- delta = "0.1.11 -> 0.1.12"
- notes = "Only a minor build tweak."
- 
-+[[audits.glslopt]]
-+who = "Jan Alexander Steffens (heftig) <heftig@archlinux.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.1.12 -> 0.1.12@git:92fa39d0910e9e73de40b0d391906e6e2940080d"
-+importable = false
-+
- [[audits.goblin]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
-diff --git a/supply-chain/config.toml b/supply-chain/config.toml
-index af46b149ab00..8a3a8458f38c 100644
---- a/supply-chain/config.toml
-+++ b/supply-chain/config.toml
-@@ -68,6 +68,10 @@ notes = "Used for testing."
- dependency-criteria = { tokio-reactor = [], tokio-threadpool = [] }
- notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack to pin the version used by audioipc-{client,server}. Suppress vetting on those for the same reasons behind the policy entries."
- 
-+[policy.glslopt]
-+audit-as-crates-io = true
-+notes = "This is upstream plus a build fix for bug 1999625."
-+
- [policy.gluesmith]
- criteria = "safe-to-run"
- notes = "Used for fuzzing."
-diff --git a/third_party/rust/glslopt/.cargo-checksum.json b/third_party/rust/glslopt/.cargo-checksum.json
-index e3300c718103..975a4c8da7b6 100644
---- a/third_party/rust/glslopt/.cargo-checksum.json
-+++ b/third_party/rust/glslopt/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","Cargo.toml.orig":"c46463ed28492baaaa17c772384cd1654093f96e900cefdb13d578e10561974f","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"}
-\ No newline at end of file
-+{"files":{".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.toml":"cd1efadd7a6d266acd8c412df59df8c8beec33e393567d4a5b236a3315f35d93","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"e8f7af58b34d4e46b475e848a0af1d9926bd1d9aa52727b4a80cbf13d1c2ca47","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"5fa592653213459e2cce70b430715246d53fd1a10c1866acf427874530a69f92","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"7cccd240c080f5ab2ed73f5f1a6e1ce9ae9583a209338c026db8f76272a352f2","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"256de69fbedf79fd0711b0e0edc2dc061e6bdf0b04996b05f9237036a8e375d9","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"09731e48472b42038aeb8b8f06fecc2d919d2333a088b52b06a9711d8afb9732","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"6ed9a66b752877aec847bf9e39e2126860552a5d5f225e8c2523d6155b51eea8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"15fa8afa3011865ff181a54bbd5e4ddccb4c9ec5a862c98366cd84b295dcf446","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"ddeb4ced00afa00fc0e2b19c6120f0a37b8b05b4f8473fbb627ea9d7d13efe58","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"0fd7f92be11fb1482255541597018b56d7619925346504414404e46a60f4797b","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"85011f325e5d4a3068e4e41b7ea62adbc1deddc9d225b7c69eea0f3b63fe727e","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"cf575663c4922de6dbee3d8bc7ab80d4a65fcc7ff2e994eb296961e76b761a79","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"a8b89b9bd15575e2ea5af3a6822214295686f18c202f2562eee666891033e726","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"98e0ca92087edbc3a3c8b8bfacdc730751a767ea96bfa90b19e68cdc429b7a89","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"cfcbc7ed03b2de6e43505bd6eba42564cc415b0f293e9f73791a6fa7b9a59b4a","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"d3025c34e8010d49cd5abb86d30278263c40a2697b7724c20e804a2398660540","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"172ade61a513c00be842070615e1afa78ccc6136adaada06f00b988a62996254","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"af451edfaa3efde30b3a648c4cf3411672cadcef33d69966dce6f92333a8b763","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"7531858637a3149431162637de0e6ced99a15ccf7ee15f07ea9d6c88e3330cc2","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"e670dbbc1817f146ff7d53750569cf020364a2b49555de41d6944f161aef6276","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"538058c7be50e50e58f997dec4b1e0add25a8dc44abf2648366b90612bf95e41","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"0014e6b044f05e58d91add005d05cbdf8206f67ea1e593deea0cde947c26b8a2","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"4e3ae189d32a09cabef66ec46c2f1563ddcc634a85b9c4b77a8d39590a5aa8a4","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"e909cab91eccfbb31d13f544e561dd41799a92bf5a853f5afca66927d4ac3706","glsl-optimizer/src/compiler/glsl_types.h":"caeabddb68f47390ca3414b642813bc384715b1363f453c0b449098d423c4b23","glsl-optimizer/src/compiler/shader_enums.c":"282bab5b7c04d4af9a06ef4aec6be10a865865d5aab6f74c3d2c9add77c08a74","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"3597defbc142e4bd3b54f5f3c454f5c71ceae771f2fefed0f86d49f926335dbe","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"be115a17e3c18844a30813e3c3f9029b908e7f3fc1f47431345761098bbd88be","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"11b403241b456fbe3482951ec70d274bd3ebd54bf39c11b3e81d3b9721b1bdaf","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/glslopt/.cargo_vcs_info.json b/third_party/rust/glslopt/.cargo_vcs_info.json
-deleted file mode 100644
-index 3edfbe5942a8..000000000000
---- a/third_party/rust/glslopt/.cargo_vcs_info.json
-+++ /dev/null
-@@ -1,6 +0,0 @@
--{
--  "git": {
--    "sha1": "e1a7fe3ac8ccca62a31682a98d78cedf470aaf5e"
--  },
--  "path_in_vcs": ""
--}
-\ No newline at end of file
-diff --git a/third_party/rust/glslopt/Cargo.lock b/third_party/rust/glslopt/Cargo.lock
-deleted file mode 100644
-index 2034b562ee8d..000000000000
---- a/third_party/rust/glslopt/Cargo.lock
-+++ /dev/null
-@@ -1,25 +0,0 @@
--# This file is automatically @generated by Cargo.
--# It is not intended for manual editing.
--version = 4
--
--[[package]]
--name = "cc"
--version = "1.1.15"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
--dependencies = [
-- "shlex",
--]
--
--[[package]]
--name = "glslopt"
--version = "0.1.12"
--dependencies = [
-- "cc",
--]
--
--[[package]]
--name = "shlex"
--version = "1.3.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
-diff --git a/third_party/rust/glslopt/Cargo.toml b/third_party/rust/glslopt/Cargo.toml
-index a5a4b997ac1e..acd34d69d52f 100644
---- a/third_party/rust/glslopt/Cargo.toml
-+++ b/third_party/rust/glslopt/Cargo.toml
-@@ -36,5 +36,5 @@ repository = "https://github.com/jamienicol/glslopt-rs"
- name = "glslopt"
- path = "src/lib.rs"
- 
--[build-dependencies.cc]
--version = "1.0"
-+[build-dependencies]
-+cc = "1.0"
-diff --git a/third_party/rust/glslopt/Cargo.toml.orig b/third_party/rust/glslopt/Cargo.toml.orig
-deleted file mode 100644
-index 452381f9941a..000000000000
---- a/third_party/rust/glslopt/Cargo.toml.orig
-+++ /dev/null
-@@ -1,12 +0,0 @@
--[package]
--name = "glslopt"
--version = "0.1.12"
--authors = ["Jamie Nicol <jnicol@mozilla.com>"]
--edition = "2018"
--license = "MIT"
--description = "Optimizes GLSL shader code"
--keywords = ["opengl", "gl", "gles", "glsl", "shader"]
--repository = "https://github.com/jamienicol/glslopt-rs"
--
--[build-dependencies]
--cc = "1.0"
-diff --git a/.trackerignore b/third_party/rust/glslopt/glsl-optimizer/.cargo-ok
-similarity index 100%
-copy from .trackerignore
-copy to third_party/rust/glslopt/glsl-optimizer/.cargo-ok
-diff --git a/third_party/rust/glslopt/glsl-optimizer/.gitignore b/third_party/rust/glslopt/glsl-optimizer/.gitignore
-deleted file mode 100644
-index 825ad5fd1656..000000000000
---- a/third_party/rust/glslopt/glsl-optimizer/.gitignore
-+++ /dev/null
-@@ -1,4 +0,0 @@
--*.pyc
--*.pyo
--*.out
--build
-diff --git a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-index 1b4e63513609..8ecffa6d212c 100755
---- a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-+++ b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-@@ -4,6 +4,6 @@ flex --nounistd -osrc/compiler/glsl/glsl_lexer.cpp src/compiler/glsl/glsl_lexer.
- bison -v -o "src/compiler/glsl/glcpp/glcpp-parse.c" -p "glcpp_parser_" --defines=src/compiler/glsl/glcpp/glcpp-parse.h src/compiler/glsl/glcpp/glcpp-parse.y
- bison -v -o "src/compiler/glsl/glsl_parser.cpp" -p "_mesa_glsl_" --defines=src/compiler/glsl/glsl_parser.h src/compiler/glsl/glsl_parser.yy
- 
--python "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
--python "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
--python "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
-diff --git a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-index 45cb6075e6e0..5f22aca6f1e7 100644
---- a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-@@ -51,50 +51,56 @@ Configuration macro:
- #include <pthread.h>
- 
- /*---------------------------- macros ----------------------------*/
-+#ifndef __once_flag_defined
- #define ONCE_FLAG_INIT PTHREAD_ONCE_INIT
-+#endif
- #ifdef INIT_ONCE_STATIC_INIT
- #define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
- #else
- #define TSS_DTOR_ITERATIONS 1  // assume TSS dtor MAY be called at least once.
- #endif
- 
- // FIXME: temporary non-standard hack to ease transition
- #define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER
- 
- /*---------------------------- types ----------------------------*/
- typedef pthread_cond_t  cnd_t;
- typedef pthread_t       thrd_t;
- typedef pthread_key_t   tss_t;
- typedef pthread_mutex_t mtx_t;
-+#ifndef __once_flag_defined
- typedef pthread_once_t  once_flag;
-+#endif
- 
- 
- /*
- Implementation limits:
-   - Conditionally emulation for "mutex with timeout"
-     (see EMULATED_THREADS_USE_NATIVE_TIMEDLOCK macro)
- */
- struct impl_thrd_param {
-     thrd_start_t func;
-     void *arg;
- };
- 
- static inline void *
- impl_thrd_routine(void *p)
- {
-     struct impl_thrd_param pack = *((struct impl_thrd_param *)p);
-     free(p);
-     return (void*)(intptr_t)pack.func(pack.arg);
- }
- 
- 
- /*--------------- 7.25.2 Initialization functions ---------------*/
- // 7.25.2.1
-+#ifndef __once_flag_defined
- static inline void
- call_once(once_flag *flag, void (*func)(void))
- {
-     pthread_once(flag, func);
- }
-+#endif
- 
- 
- /*------------- 7.25.3 Condition variable functions -------------*/
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-index b6b81bf1e142..0924d5b57f6e 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-@@ -2464,7 +2464,7 @@ ast_function_expression::hir(exec_list *instructions,
-       return value;
-    }
- 
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- bool
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-index c00298a16051..6bb0ebd9ea22 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-@@ -1413,7 +1413,7 @@ ast_expression::do_hir(exec_list *instructions,
- 
-    switch (this->oper) {
-    case ast_aggregate:
--      unreachable("ast_aggregate: Should never get here.");
-+      UNREACHABLE("ast_aggregate: Should never get here.");
- 
-    case ast_assign: {
-       this->subexpressions[0]->set_is_lhs(true);
-@@ -2004,13 +2004,13 @@ ast_expression::do_hir(exec_list *instructions,
-    }
- 
-    case ast_unsized_array_dim:
--      unreachable("ast_unsized_array_dim: Should never get here.");
-+      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
- 
-    case ast_function_call:
-       /* Should *NEVER* get here.  ast_function_call should always be handled
-        * by ast_function_expression::hir.
-        */
--      unreachable("ast_function_call: handled elsewhere ");
-+      UNREACHABLE("ast_function_call: handled elsewhere ");
- 
-    case ast_identifier: {
-       /* ast_identifier can appear several places in a full abstract syntax
-@@ -2225,10 +2225,10 @@ ast_expression::has_sequence_subexpression() const
-       return false;
- 
-    case ast_function_call:
--      unreachable("should be handled by ast_function_expression::hir");
-+      UNREACHABLE("should be handled by ast_function_expression::hir");
- 
-    case ast_unsized_array_dim:
--      unreachable("ast_unsized_array_dim: Should never get here.");
-+      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
-    }
- 
-    return false;
-@@ -2529,7 +2529,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[type_idx];
-          }
-          default:
--            unreachable("Unsupported sampler/image dimensionality");
-+            UNREACHABLE("Unsupported sampler/image dimensionality");
-          } /* sampler/image float dimensionality */
-          break;
-       case GLSL_TYPE_INT:
-@@ -2584,7 +2584,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[offset + type_idx];
-          }
-          default:
--            unreachable("Unsupported isampler/iimage dimensionality");
-+            UNREACHABLE("Unsupported isampler/iimage dimensionality");
-          } /* sampler/image int dimensionality */
-          break;
-       case GLSL_TYPE_UINT:
-@@ -2639,17 +2639,17 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[offset + type_idx];
-          }
-          default:
--            unreachable("Unsupported usampler/uimage dimensionality");
-+            UNREACHABLE("Unsupported usampler/uimage dimensionality");
-          } /* sampler/image uint dimensionality */
-          break;
-       default:
--         unreachable("Unsupported sampler/image type");
-+         UNREACHABLE("Unsupported sampler/image type");
-       } /* sampler/image type */
-       break;
-    } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */
-    break;
-    default:
--      unreachable("Unsupported type");
-+      UNREACHABLE("Unsupported type");
-    } /* base type */
- }
- 
-@@ -5013,28 +5013,28 @@ ast_declarator_list::hir(exec_list *instructions,
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
-             break;
-          default:
--            unreachable("Unknown image format");
-+            UNREACHABLE("Unknown image format");
-          }
-          this->type->qualifier.image_base_type = GLSL_TYPE_FLOAT;
-       } else if (strncmp(this->type->specifier->type_name, "uimage", strlen("uimage")) == 0) {
-          switch (this->type->qualifier.image_format) {
-          case PIPE_FORMAT_R8_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R8_UINT;
-             break;
-          case PIPE_FORMAT_R16_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R16_UINT;
-             break;
-          case PIPE_FORMAT_R32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32_UINT;
-             break;
-          case PIPE_FORMAT_R32G32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32_UINT;
-             break;
-          case PIPE_FORMAT_R32G32B32A32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_UINT;
-             break;
-          default:
--            unreachable("Unknown image format");
-+            UNREACHABLE("Unknown image format");
-          }
-          this->type->qualifier.image_base_type = GLSL_TYPE_UINT;
-       } else if (strncmp(this->type->specifier->type_name, "iimage", strlen("iimage")) == 0) {
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-index 3dafcf0c77e8..603c7f645820 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-@@ -5414,7 +5414,7 @@ builtin_builder::_isinf(builtin_available_predicate avail, const glsl_type *type
-          infinities.d[i] = INFINITY;
-          break;
-       default:
--         unreachable("unknown type");
-+         UNREACHABLE("unknown type");
-       }
-    }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-index 973d1140783b..6081b8aee8fc 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-@@ -1032,7 +1032,7 @@ characters that appear in any other expressions. */
- #define DONE 3
- #define HASH 4
- #define NEWLINE_CATCHUP 5
--#define UNREACHABLE 6
-+#define NOT_REACHABLE 6
- 
- #define YY_EXTRA_TYPE glcpp_parser_t *
- 
-@@ -1953,25 +1953,25 @@ YY_RULE_SETUP
- {
- 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
- 
--	/* We don't actually use the UNREACHABLE start condition. We
-+	/* We don't actually use the NOT_REACHABLE start condition. We
- 	only have this block here so that we can pretend to call some
- 	generated functions, (to avoid "defined but not used"
- 	warnings. */
--        if (YY_START == UNREACHABLE) {
-+        if (YY_START == NOT_REACHABLE) {
- 		unput('.');
- 		yy_top_state(yyextra);
- 	}
- }
- 	YY_BREAK
- case 54:
- YY_RULE_SETUP
- #line 616 "src/compiler/glsl/glcpp/glcpp-lex.l"
- YY_FATAL_ERROR( "flex scanner jammed" );
- 	YY_BREAK
- #line 1971 "src/compiler/glsl/glcpp/glcpp-lex.c"
- case YY_STATE_EOF(DONE):
- case YY_STATE_EOF(NEWLINE_CATCHUP):
--case YY_STATE_EOF(UNREACHABLE):
-+case YY_STATE_EOF(NOT_REACHABLE):
- 	yyterminate();
- 
- 	case YY_END_OF_BUFFER:
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-index e07739b657c3..f831b58c8aa9 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-@@ -178,7 +178,7 @@ glcpp_lex_update_state_per_token (glcpp_parser_t *parser, int token)
- 	 * update the "Internal compiler error" catch-all rule near the end of
- 	 * this file. */
- 
--%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP UNREACHABLE
-+%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP NOT_REACHABLE
- 
- SPACE		[[:space:]]
- NONSPACE	[^[:space:]]
-@@ -602,11 +602,11 @@ PATH			["][]^./ _A-Za-z0-9+*%[(){}|&~=!:;,?-]*["]
- <*>. {
- 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
- 
--	/* We don't actually use the UNREACHABLE start condition. We
-+	/* We don't actually use the NOT_REACHABLE start condition. We
- 	only have this block here so that we can pretend to call some
- 	generated functions, (to avoid "defined but not used"
- 	warnings. */
--        if (YY_START == UNREACHABLE) {
-+        if (YY_START == NOT_REACHABLE) {
- 		unput('.');
- 		yy_top_state(yyextra);
- 	}
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-index 9ea8e00d310a..75b43d77537d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-@@ -550,7 +550,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
-          base = GLSL_TYPE_UINT64;
-          break;
-       default:
--         unreachable(!"Invalid base type.");
-+         UNREACHABLE("Invalid base type.");
-       }
- 
-       this->type = glsl_type::get_instance(base, op0->type->vector_elements, 1);
-@@ -623,7 +623,7 @@ ir_expression::get_num_operands(ir_expression_operation op)
-    if (op <= ir_last_quadop)
-       return 4;
- 
--   unreachable("Could not calculate number of operands");
-+   UNREACHABLE("Could not calculate number of operands");
- }
- 
- #include "ir_expression_operation_strings.h"
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-index 5ab50a58415f..edd2107745fb 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-@@ -196,33 +196,33 @@ ir_builder_print_visitor::print_without_declaration(const ir_rvalue *ir)
-       print_without_declaration((ir_expression *) ir);
-       break;
-    default:
--      unreachable("Invalid IR type.");
-+      UNREACHABLE("Invalid IR type.");
-    }
- }
- 
- ir_visitor_status
- ir_builder_print_visitor::visit(ir_variable *ir)
- {
-    const unsigned my_index = next_ir_index++;
- 
-    _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index);
- 
-    const char *mode_str;
-    switch (ir->data.mode) {
-    case ir_var_auto: mode_str = "ir_var_auto"; break;
-    case ir_var_uniform: mode_str = "ir_var_uniform"; break;
-    case ir_var_shader_storage: mode_str = "ir_var_shader_storage"; break;
-    case ir_var_shader_shared: mode_str = "ir_var_shader_shared"; break;
-    case ir_var_shader_in: mode_str = "ir_var_shader_in"; break;
-    case ir_var_shader_out: mode_str = "ir_var_shader_out"; break;
-    case ir_var_function_in: mode_str = "ir_var_function_in"; break;
-    case ir_var_function_out: mode_str = "ir_var_function_out"; break;
-    case ir_var_function_inout: mode_str = "ir_var_function_inout"; break;
-    case ir_var_const_in: mode_str = "ir_var_const_in"; break;
-    case ir_var_system_value: mode_str = "ir_var_system_value"; break;
-    case ir_var_temporary: mode_str = "ir_var_temporary"; break;
-    default:
--      unreachable("Invalid variable mode");
-+      UNREACHABLE("Invalid variable mode");
-    }
- 
-    if (ir->data.mode == ir_var_temporary) {
-@@ -420,7 +420,7 @@ ir_builder_print_visitor::visit(ir_constant *ir)
-                print_with_indent("r%04X_data.u[%u] = 1;\n", my_index, i);
-             break;
-          default:
--            unreachable("Invalid constant type");
-+            UNREACHABLE("Invalid constant type");
-          }
-       }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-index 160626e6ef6f..58c9b44a0d4e 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-@@ -106,7 +106,7 @@ constant_template_common = mako.template.Template("""\
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
-@@ -137,30 +137,30 @@ constant_template_vector_scalar = mako.template.Template("""\
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
- 
- # This template is for multiplication.  It is unique because it has to support
- # matrix * vector and matrix * matrix operations, and those are just different.
- constant_template_mul = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       /* Check for equal types, or unequal types involving scalars */
-       if ((op[0]->type == op[1]->type && !op[0]->type->is_matrix())
-           || op0_scalar || op1_scalar) {
-          for (unsigned c = 0, c0 = 0, c1 = 0;
-               c < components;
-               c0 += c0_inc, c1 += c1_inc, c++) {
- 
-             switch (op[0]->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-             case ${src_types[0].glsl_type}:
-                data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))};
-                break;
-     % endfor
-             default:
--               unreachable("invalid type");
-+               UNREACHABLE("invalid type");
-             }
-          }
-       } else {
-@@ -218,99 +218,99 @@ constant_template_horizontal = mako.template.Template("""\
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;""")
- 
- # This template is for ir_binop_vector_extract.
- constant_template_vector_extract = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       const int c = CLAMP(op[1]->value.i[0], 0,
-                           (int) op[0]->type->vector_elements - 1);
- 
-       switch (op[0]->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-       case ${src_types[0].glsl_type}:
-          data.${dst_type.union_field}[0] = op[0]->value.${src_types[0].union_field}[c];
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }""")
- 
- # This template is for ir_triop_vector_insert.
- constant_template_vector_insert = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       const unsigned idx = op[2]->value.u[0];
- 
-       memcpy(&data, &op[0]->value, sizeof(data));
- 
-       switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-       case ${src_types[0].glsl_type}:
-          data.${dst_type.union_field}[idx] = op[1]->value.${src_types[0].union_field}[0];
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }""")
- 
- # This template is for ir_quadop_vector.
- constant_template_vector = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       for (unsigned c = 0; c < this->type->vector_elements; c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[0].glsl_type}:
-             data.${dst_type.union_field}[c] = op[c]->value.${src_types[0].union_field}[0];
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
- 
- # This template is for ir_triop_lrp.
- constant_template_lrp = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       assert(op[0]->type->is_float() || op[0]->type->is_double());
-       assert(op[1]->type->is_float() || op[1]->type->is_double());
-       assert(op[2]->type->is_float() || op[2]->type->is_double());
- 
-       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
-       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[0].glsl_type}:
-             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c", "c", "c2"))};
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-    }""")
- 
- # This template is for ir_triop_csel.  This expression is really unique
- # because not all of the operands are the same type, and the second operand
- # determines the type of the expression (instead of the first).
- constant_template_csel = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       for (unsigned c = 0; c < components; c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[1].glsl_type}:
-             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types)};
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-index ef5c4e792772..76cd18f03398 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-@@ -15,1018 +15,1018 @@
-             data.i64[c] = ~ op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_logic_not:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = !op[0]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_neg:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = -((int) op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = -op[0]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = -op[0]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = -op[0]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = -((int64_t) op[0]->value.u64[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = -op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_abs:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c] < 0 ? -op[0]->value.i[c] : op[0]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = fabsf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = fabs(op[0]->value.d[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c] < 0 ? -op[0]->value.i64[c] : op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sign:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] > 0) - (op[0]->value.i[c] < 0);
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = float((op[0]->value.f[c] > 0.0F) - (op[0]->value.f[c] < 0.0F));
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = double((op[0]->value.d[c] > 0.0) - (op[0]->value.d[c] < 0.0));
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] > 0) - (op[0]->value.i64[c] < 0);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_rcp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 1.0F / op[0]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = 1.0 / op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_rsq:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = 1.0 / sqrt(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sqrt:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = sqrtf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = sqrt(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_exp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = expf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_log:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = logf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_exp2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = exp2f(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_log2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = log2f(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i[c] = (int) op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u[c] = (unsigned) op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.f[c] = (float) op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] != 0.0F ? true : false;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2f16:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] ? true : false;
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] ? true : false;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.i[c] = op[0]->value.b[c] ? 1 : 0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.f[c] = (float) op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.u[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.f[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.d[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2f16:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2fmp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f162f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.d[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.d[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] != 0.0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f162b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] != 0.0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_i2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.f[c] = bitcast_u2f(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_f2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i[c] = bitcast_f2u(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_u2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.f[c] = bitcast_u2f(op[0]->value.u[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_f2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u[c] = bitcast_f2u(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_u642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.d[c] = bitcast_u642d(op[0]->value.u64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_i642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.d[c] = bitcast_i642d(op[0]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_d2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u64[c] = bitcast_d2u64(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_d2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i64[c] = bitcast_d2i64(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.i[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.i[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.u[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.u[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] != 0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.f[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.f[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.d[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.d[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i64[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i64[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.i64[c] = op[0]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i64[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i64[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.u64[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u64[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u64[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u64[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.i64[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.u64[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_trunc:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = truncf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = trunc(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_ceil:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = ceilf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = ceil(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_floor:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = floorf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = floor(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_fract:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] - floorf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] - floor(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_round_even:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = _mesa_roundevenf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = _mesa_roundeven(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sin:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = sinf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_cos:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = cosf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_atan:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = atan(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx_coarse:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx_fine:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy_coarse:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy_fine:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_pack_snorm_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_snorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_snorm_4x8:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_4x8(pack_snorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_unorm_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_unorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_unorm_4x8:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_4x8(pack_unorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_half_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_half_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-@@ -1060,76 +1060,76 @@
-             data.i[c] = bitfield_reverse(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bit_count:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = util_bitcount(op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = util_bitcount(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_find_msb:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = find_msb_uint(op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = find_msb_int(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_find_lsb:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = find_msb_uint(op[0]->value.u[c] & -op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = find_msb_uint(op[0]->value.i[c] & -op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_clz:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (unsigned)(31 - find_msb_uint(op[0]->value.u[c]));
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_saturate:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = CLAMP(op[0]->value.f[c], 0.0f, 1.0f);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1200,7 +1200,7 @@
-             data.i64[c] = op[0]->value.i64[c0] + op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1231,112 +1231,112 @@
-             data.i64[c] = op[0]->value.i64[c0] - op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_add_sat:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] + op[1]->value.u[c]) < op[0]->value.u[c] ? UINT32_MAX : (op[0]->value.u[c] + op[1]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = iadd_saturate(op[0]->value.i[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] + op[1]->value.u64[c]) < op[0]->value.u64[c] ? UINT64_MAX : (op[0]->value.u64[c] + op[1]->value.u64[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = iadd64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_sub_sat:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? 0 : op[0]->value.u[c] - op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = isub_saturate(op[0]->value.i[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? 0 : op[0]->value.u64[c] - op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = isub64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_abs_sub:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? op[1]->value.u[c] - op[0]->value.u[c] : op[0]->value.u[c] - op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[1]->value.i[c] > op[0]->value.i[c]) ? (unsigned)op[1]->value.i[c] - (unsigned)op[0]->value.i[c] : (unsigned)op[0]->value.i[c] - (unsigned)op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? op[1]->value.u64[c] - op[0]->value.u64[c] : op[0]->value.u64[c] - op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[1]->value.i64[c] > op[0]->value.i64[c]) ? (uint64_t)op[1]->value.i64[c] - (uint64_t)op[0]->value.i64[c] : (uint64_t)op[0]->value.i64[c] - (uint64_t)op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_avg:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] & op[1]->value.u[c]) & 1);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] & op[1]->value.i[c]) & 1);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] & op[1]->value.u64[c]) & 1);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] & op[1]->value.i64[c]) & 1);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_avg_round:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] | op[1]->value.u[c]) & 1);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] | op[1]->value.i[c]) & 1);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] | op[1]->value.u64[c]) & 1);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] | op[1]->value.i64[c]) & 1);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1369,7 +1369,7 @@
-                data.i64[c] = op[0]->value.i64[c0] * op[1]->value.i64[c1];
-                break;
-             default:
--               unreachable("invalid type");
-+               UNREACHABLE("invalid type");
-             }
-          }
-       } else {
-@@ -1411,7 +1411,7 @@
-             data.i[c] = op[0]->value.i[c] * (int16_t)op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1442,7 +1442,7 @@
-             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] / op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1473,61 +1473,61 @@
-             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] % op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_less:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] < op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] < op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] < op[1]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] < op[1]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.b[c] = op[0]->value.u64[c] < op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] < op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_gequal:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] >= op[1]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.b[c] = op[0]->value.u64[c] >= op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] >= op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1557,7 +1557,7 @@
-             data.b[c] = op[0]->value.b[c] == op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1587,7 +1587,7 @@
-             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1627,7 +1627,7 @@
-             data.i64[c] = op[0]->value.i64[c0] << op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1659,132 +1659,132 @@
-             data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_and:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] & op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] & op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] & op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] & op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_xor:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] ^ op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] ^ op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] ^ op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] ^ op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_or:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] | op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] | op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] | op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] | op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_and:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] && op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_xor:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_or:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] || op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_dot:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.f[0] = dot_f(op[0], op[1]);
-          break;
-       case GLSL_TYPE_DOUBLE:
-          data.d[0] = dot_d(op[0], op[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-@@ -1814,7 +1814,7 @@
-             data.i64[c] = MIN2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1845,34 +1845,34 @@
-             data.i64[c] = MAX2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_pow:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = powf(op[0]->value.f[c], op[1]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_ldexp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = ldexpf_flush_subnormal(op[0]->value.f[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = ldexp_flush_subnormal(op[0]->value.d[c], op[1]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1904,54 +1904,54 @@
-          data.b[0] = op[0]->value.b[c];
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }
- 
-    case ir_binop_atan2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = atan2(op[0]->value.f[c], op[1]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_fma:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] * op[1]->value.f[c] + op[2]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] * op[1]->value.d[c] + op[2]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_lrp: {
-       assert(op[0]->type->is_float() || op[0]->type->is_double());
-       assert(op[1]->type->is_float() || op[1]->type->is_double());
-       assert(op[2]->type->is_float() || op[2]->type->is_double());
- 
-       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
-       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
-          switch (this->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] * (1.0f - op[2]->value.f[c2]) + (op[1]->value.f[c] * op[2]->value.f[c2]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] * (1.0 - op[2]->value.d[c2]) + (op[1]->value.d[c] * op[2]->value.d[c2]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1982,22 +1982,22 @@
-             data.b[c] = op[0]->value.b[c] ? op[1]->value.b[c] : op[2]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_bitfield_extract:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = bitfield_extract_uint(op[0]->value.u[c], op[1]->value.i[c], op[2]->value.i[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = bitfield_extract_int(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -2030,22 +2030,22 @@
-          data.b[idx] = op[1]->value.b[0];
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }
- 
-    case ir_quadop_bitfield_insert:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = bitfield_insert(op[0]->value.u[c], op[1]->value.u[c], op[2]->value.i[c], op[3]->value.i[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = bitfield_insert(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c], op[3]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -2075,7 +2075,7 @@
-             data.b[c] = op[c]->value.b[0];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-index d15bfd0e5640..b7618753c2c3 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-@@ -835,7 +835,7 @@ static const char* operator_glsl_str(ir_expression_operation op, const glsl_type
- 	case ir_triop_lrp:
- 		return "mix";
- 	default:
--		unreachable("Unexpected operator in operator_glsl_str");
-+		UNREACHABLE("Unexpected operator in operator_glsl_str");
- 		return "UNIMPLEMENTED";
- 	}
- }
-@@ -1891,21 +1891,21 @@ interface_packing_string(enum glsl_interface_packing packing)
- 	case GLSL_INTERFACE_PACKING_STD430:
- 		return "std430";
- 	default:
--		unreachable("Unexpected interface packing");
-+		UNREACHABLE("Unexpected interface packing");
- 		return "UNKNOWN";
- 	}
- }
- 
- static const char*
- interface_variable_mode_string(enum ir_variable_mode mode)
- {
- 	switch (mode) {
- 	case ir_var_uniform:
- 		return "uniform";
- 	case ir_var_shader_storage:
- 		return "buffer";
- 	default:
--		unreachable("Unexpected interface variable mode");
-+		UNREACHABLE("Unexpected interface variable mode");
- 		return "UNKOWN";
- 	}
- }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-index d621c2670032..964177fd11b7 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-@@ -381,7 +381,7 @@ void ir_print_visitor::visit(ir_texture *ir)
-       ir->lod_info.component->accept(this);
-       break;
-    case ir_samples_identical:
--      unreachable("ir_samples_identical was already handled");
-+      UNREACHABLE("ir_samples_identical was already handled");
-    };
-    fprintf(f, ")");
- }
-@@ -522,7 +522,7 @@ void ir_print_visitor::visit(ir_constant *ir)
-                fprintf(f, "%f", ir->value.d[i]);
-             break;
- 	 default:
--            unreachable("Invalid constant type");
-+            UNREACHABLE("Invalid constant type");
- 	 }
-       }
-    }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-index 212abf084b2e..112076d40733 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-@@ -3988,7 +3988,7 @@ add_packed_varyings(const struct gl_context *ctx,
-             iface = GL_PROGRAM_OUTPUT;
-             break;
-          default:
--            unreachable("unexpected type");
-+            UNREACHABLE("unexpected type");
-          }
- 
-          if (type == iface) {
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-index 9429e69c2a7f..445bfd06c01b 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-@@ -171,7 +171,7 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
-          iter = new(mem_ctx) ir_constant(double(iter_value + bias[i]));
-          break;
-       default:
--          unreachable("Unsupported type for loop iterator.");
-+          UNREACHABLE("Unsupported type for loop iterator.");
-       }
- 
-       ir_expression *const mul =
-@@ -238,7 +238,7 @@ incremented_before_terminator(ir_loop *loop, ir_variable *var,
-       }
-    }
- 
--   unreachable("Unable to find induction variable");
-+   UNREACHABLE("Unable to find induction variable");
- }
- 
- /**
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-index c85b39bcaa34..1a7b8d4e8d6a 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-@@ -386,7 +386,7 @@ calc_blend_result(ir_factory f,
-          break;
-       case BLEND_NONE:
-       case BLEND_ALL:
--         unreachable("not real cases");
-+         UNREACHABLE("not real cases");
-       }
- 
-       if (val)
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-index a6e2f741ebe6..c97f497c384d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-@@ -244,19 +244,19 @@ lower_buffer_access::is_dereferenced_thing_row_major(const ir_rvalue *deref)
-             return matrix || deref->type->without_array()->is_struct();
-          }
- 
--         unreachable("invalid matrix layout");
-+         UNREACHABLE("invalid matrix layout");
-          break;
-       }
- 
-       default:
-          return false;
-       }
-    }
- 
-    /* The tree must have ended with a dereference that wasn't an
-     * ir_dereference_variable.  That is invalid, and it should be impossible.
-     */
--   unreachable("invalid dereference tree");
-+   UNREACHABLE("invalid dereference tree");
-    return false;
- }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-index b4e730c64fbd..749bfc509748 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-@@ -155,7 +155,7 @@ lower_distance_visitor::visit(ir_variable *ir)
-       old_var = &old_distance_in_var;
-       new_var = &new_distance_in_var;
-    } else {
--      unreachable("not reached");
-+      UNREACHABLE("not reached");
-    }
- 
-    this->progress = true;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-index 08d4f72efa0a..3a44c60c7abe 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-@@ -549,7 +549,7 @@ lower_ubo_reference_visitor::insert_buffer_access(void *mem_ctx,
-       }
-       break;
-    default:
--      unreachable("invalid buffer_access_type in insert_buffer_access");
-+      UNREACHABLE("invalid buffer_access_type in insert_buffer_access");
-    }
- }
- 
-@@ -730,7 +730,7 @@ lower_ubo_reference_visitor::calculate_unsized_array_stride(ir_dereference *dere
-       break;
-    }
-    default:
--      unreachable("Unsupported dereference type");
-+      UNREACHABLE("Unsupported dereference type");
-    }
-    return array_stride;
- }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-index 7cef4fc6ef93..ecb592d5c13d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-@@ -995,7 +995,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
-             break;
-          default:
-             one = NULL;
--            unreachable("unexpected type");
-+            UNREACHABLE("unexpected type");
-          }
- 
-          return mul(ir->operands[0], add(one, neg(ir->operands[2])));
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-index 36fe0a9f05b6..a56ef38b81b1 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-@@ -154,7 +154,7 @@ compare_components(ir_constant *a, ir_constant *b)
-             foundequal = true;
-          break;
-       default:
--         unreachable("not reached");
-+         UNREACHABLE("not reached");
-       }
-    }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-index 88318cd8a6eb..9475467629c9 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-@@ -228,7 +228,7 @@ write_mask_to_swizzle(unsigned write_mask)
-    case WRITEMASK_Z: return SWIZZLE_Z;
-    case WRITEMASK_W: return SWIZZLE_W;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- /**
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-index 445659599c22..77ea8b11ff87 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-@@ -459,7 +459,7 @@ const glsl_type *glsl_type::get_bare_type() const
-       return this;
-    }
- 
--   unreachable("Invalid base type");
-+   UNREACHABLE("Invalid base type");
- }
- 
- const glsl_type *glsl_type::get_float16_type() const
-@@ -899,7 +899,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim,
-       return error_type;
-    }
- 
--   unreachable("switch statement above should be complete");
-+   UNREACHABLE("switch statement above should be complete");
- }
- 
- const glsl_type *
-@@ -998,7 +998,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim,
-       return error_type;
-    }
- 
--   unreachable("switch statement above should be complete");
-+   UNREACHABLE("switch statement above should be complete");
- }
- 
- const glsl_type *
-@@ -2015,7 +2015,7 @@ glsl_type::get_explicit_std140_type(bool row_major) const
-       delete[] fields;
-       return type;
-    } else {
--      unreachable("Invalid type for UBO or SSBO");
-+      UNREACHABLE("Invalid type for UBO or SSBO");
-    }
- }
- 
-@@ -2373,7 +2373,7 @@ glsl_type::get_explicit_std430_type(bool row_major) const
-       delete[] fields;
-       return type;
-    } else {
--      unreachable("Invalid type for SSBO");
-+      UNREACHABLE("Invalid type for SSBO");
-    }
- }
- 
-@@ -2447,7 +2447,7 @@ glsl_type::get_explicit_type_for_size_align(glsl_type_size_align_func type_info,
-       return glsl_type::get_instance(this->base_type, this->vector_elements,
-                                      this->matrix_columns, stride, false);
-    } else {
--      unreachable("Unhandled type.");
-+      UNREACHABLE("Unhandled type.");
-    }
- }
- 
-@@ -2583,7 +2583,7 @@ glsl_type::count_dword_slots(bool is_bindless) const
-    case GLSL_TYPE_ERROR:
-    case GLSL_TYPE_FUNCTION:
-    default:
--      unreachable("invalid type in st_glsl_type_dword_size()");
-+      UNREACHABLE("invalid type in st_glsl_type_dword_size()");
-    }
- 
-    return 0;
-@@ -2947,7 +2947,7 @@ glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim)
-    case GLSL_SAMPLER_DIM_CUBE:
-       return 3;
-    default:
--      unreachable("Unknown sampler dim");
-+      UNREACHABLE("Unknown sampler dim");
-    }
- }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-index f709bdd702e2..45d608ce47e3 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-@@ -187,7 +187,7 @@ glsl_base_type_get_bit_size(const enum glsl_base_type base_type)
-       return 64;
- 
-    default:
--      unreachable("unknown base type");
-+      UNREACHABLE("unknown base type");
-    }
- 
-    return 0;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-index a2a5eb82a61f..6df48d39abc0 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-@@ -66,27 +66,27 @@ _mesa_shader_stage_to_string(unsigned stage)
-    case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
-    }
- 
--   unreachable("Unknown shader stage.");
-+   UNREACHABLE("Unknown shader stage.");
- }
- 
- /**
-  * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)
-  * for debug printouts and error messages.
-  */
- const char *
- _mesa_shader_stage_to_abbrev(unsigned stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:   return "VS";
-    case MESA_SHADER_FRAGMENT: return "FS";
-    case MESA_SHADER_GEOMETRY: return "GS";
-    case MESA_SHADER_COMPUTE:  return "CS";
-    case MESA_SHADER_KERNEL:   return "CL";
-    case MESA_SHADER_TESS_CTRL: return "TCS";
-    case MESA_SHADER_TESS_EVAL: return "TES";
-    }
- 
--   unreachable("Unknown shader stage.");
-+   UNREACHABLE("Unknown shader stage.");
- }
- 
- const char *
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-index 0d512550de47..3f105d64d21b 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-@@ -140,7 +140,7 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
-    case GL_COMPUTE_SHADER:
-       return MESA_SHADER_COMPUTE;
-    default:
--      unreachable("bad value in _mesa_shader_enum_to_shader_stage()");
-+      UNREACHABLE("bad value in _mesa_shader_enum_to_shader_stage()");
-    }
- }
- 
-@@ -184,75 +184,75 @@ _mesa_shader_stage_from_subroutine_uniform(GLenum subuniform)
-    case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
-       return MESA_SHADER_TESS_EVAL;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline gl_shader_stage
- _mesa_shader_stage_from_subroutine(GLenum subroutine)
- {
-    switch (subroutine) {
-    case GL_VERTEX_SUBROUTINE:
-       return MESA_SHADER_VERTEX;
-    case GL_GEOMETRY_SUBROUTINE:
-       return MESA_SHADER_GEOMETRY;
-    case GL_FRAGMENT_SUBROUTINE:
-       return MESA_SHADER_FRAGMENT;
-    case GL_COMPUTE_SUBROUTINE:
-       return MESA_SHADER_COMPUTE;
-    case GL_TESS_CONTROL_SUBROUTINE:
-       return MESA_SHADER_TESS_CTRL;
-    case GL_TESS_EVALUATION_SUBROUTINE:
-       return MESA_SHADER_TESS_EVAL;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline GLenum
- _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:
-       return GL_VERTEX_SUBROUTINE;
-    case MESA_SHADER_GEOMETRY:
-       return GL_GEOMETRY_SUBROUTINE;
-    case MESA_SHADER_FRAGMENT:
-       return GL_FRAGMENT_SUBROUTINE;
-    case MESA_SHADER_COMPUTE:
-       return GL_COMPUTE_SUBROUTINE;
-    case MESA_SHADER_TESS_CTRL:
-       return GL_TESS_CONTROL_SUBROUTINE;
-    case MESA_SHADER_TESS_EVAL:
-       return GL_TESS_EVALUATION_SUBROUTINE;
-    case MESA_SHADER_NONE:
-       break;
-    case MESA_SHADER_KERNEL:
--      unreachable("not reached");
-+      UNREACHABLE("not reached");
-       break;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline GLenum
- _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:
-       return GL_VERTEX_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_GEOMETRY:
-       return GL_GEOMETRY_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_FRAGMENT:
-       return GL_FRAGMENT_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_COMPUTE:
-       return GL_COMPUTE_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_TESS_CTRL:
-       return GL_TESS_CONTROL_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_TESS_EVAL:
-       return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_NONE:
-    case MESA_SHADER_KERNEL:
-       break;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- extern bool
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-index fcace4e351d6..e4dfd67c8cc2 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-@@ -68,24 +68,34 @@
-    } while (0)
- 
- 
-+/**
-+ * Unreachable macro. Useful for suppressing "control reaches end of non-void
-+ * function" warnings.
-+ */
- /**
-  * Unreachable macro. Useful for suppressing "control reaches end of non-void
-  * function" warnings.
-  */
- #if defined(HAVE___BUILTIN_UNREACHABLE) || __has_builtin(__builtin_unreachable)
--#define unreachable(str)    \
-+#define UNREACHABLE(str)    \
- do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-    assert(!str);            \
-    __builtin_unreachable(); \
- } while (0)
- #elif defined (_MSC_VER)
--#define unreachable(str)    \
-+#define UNREACHABLE(str)    \
- do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-    assert(!str);            \
-    __assume(0);             \
- } while (0)
- #else
--#define unreachable(str) assert(!str)
-+#define UNREACHABLE(str)    \
-+do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-+   assert(!str);            \
-+} while (0)
- #endif
- 
- /**
-@@ -190,8 +200,10 @@ do {                       \
-  * performs no action and all member variables and base classes are
-  * trivially destructible themselves.
-  */
--#   if (defined(__clang__) && defined(__has_feature))
--#      if __has_feature(has_trivial_destructor)
-+#   if defined(__clang__)
-+#      if __has_builtin(__is_trivially_destructible)
-+#         define HAS_TRIVIAL_DESTRUCTOR(T) __is_trivially_destructible(T)
-+#      elif (defined(__has_feature) && __has_feature(has_trivial_destructor))
- #         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
- #      endif
- #   elif defined(__GNUC__)
-diff --git a/third_party/rust/glslopt/src/bindings.rs b/third_party/rust/glslopt/src/bindings.rs
-index f4e5bebd08ba..5c1ca487d5e9 100644
---- a/third_party/rust/glslopt/src/bindings.rs
-+++ b/third_party/rust/glslopt/src/bindings.rs
-@@ -1,131 +1,131 @@
--/* automatically generated by rust-bindgen */
-+/* automatically generated by rust-bindgen 0.72.1 */
- 
- #[repr(C)]
- #[derive(Debug, Copy, Clone)]
- pub struct glslopt_shader {
-     _unused: [u8; 0],
- }
- #[repr(C)]
- #[derive(Debug, Copy, Clone)]
- pub struct glslopt_ctx {
-     _unused: [u8; 0],
- }
- pub const glslopt_shader_type_kGlslOptShaderVertex: glslopt_shader_type = 0;
- pub const glslopt_shader_type_kGlslOptShaderFragment: glslopt_shader_type = 1;
--pub type glslopt_shader_type = u32;
-+pub type glslopt_shader_type = ::std::os::raw::c_uint;
- pub const glslopt_options_kGlslOptionSkipPreprocessor: glslopt_options = 1;
- pub const glslopt_options_kGlslOptionNotFullShader: glslopt_options = 2;
--pub type glslopt_options = u32;
-+pub type glslopt_options = ::std::os::raw::c_uint;
- pub const glslopt_target_kGlslTargetOpenGL: glslopt_target = 0;
- pub const glslopt_target_kGlslTargetOpenGLES20: glslopt_target = 1;
- pub const glslopt_target_kGlslTargetOpenGLES30: glslopt_target = 2;
- pub const glslopt_target_kGlslTargetMetal: glslopt_target = 3;
--pub type glslopt_target = u32;
-+pub type glslopt_target = ::std::os::raw::c_uint;
- pub const glslopt_basic_type_kGlslTypeFloat: glslopt_basic_type = 0;
- pub const glslopt_basic_type_kGlslTypeInt: glslopt_basic_type = 1;
- pub const glslopt_basic_type_kGlslTypeBool: glslopt_basic_type = 2;
- pub const glslopt_basic_type_kGlslTypeTex2D: glslopt_basic_type = 3;
- pub const glslopt_basic_type_kGlslTypeTex3D: glslopt_basic_type = 4;
- pub const glslopt_basic_type_kGlslTypeTexCube: glslopt_basic_type = 5;
- pub const glslopt_basic_type_kGlslTypeTex2DShadow: glslopt_basic_type = 6;
- pub const glslopt_basic_type_kGlslTypeTex2DArray: glslopt_basic_type = 7;
- pub const glslopt_basic_type_kGlslTypeOther: glslopt_basic_type = 8;
- pub const glslopt_basic_type_kGlslTypeCount: glslopt_basic_type = 9;
--pub type glslopt_basic_type = u32;
-+pub type glslopt_basic_type = ::std::os::raw::c_uint;
- pub const glslopt_precision_kGlslPrecHigh: glslopt_precision = 0;
- pub const glslopt_precision_kGlslPrecMedium: glslopt_precision = 1;
- pub const glslopt_precision_kGlslPrecLow: glslopt_precision = 2;
- pub const glslopt_precision_kGlslPrecCount: glslopt_precision = 3;
--pub type glslopt_precision = u32;
--extern "C" {
-+pub type glslopt_precision = ::std::os::raw::c_uint;
-+unsafe extern "C" {
-     pub fn glslopt_initialize(target: glslopt_target) -> *mut glslopt_ctx;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_cleanup(ctx: *mut glslopt_ctx);
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_set_max_unroll_iterations(
-         ctx: *mut glslopt_ctx,
-         iterations: ::std::os::raw::c_uint,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_optimize(
-         ctx: *mut glslopt_ctx,
-         type_: glslopt_shader_type,
-         shaderSource: *const ::std::os::raw::c_char,
-         options: ::std::os::raw::c_uint,
-     ) -> *mut glslopt_shader;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_status(shader: *mut glslopt_shader) -> bool;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_raw_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_log(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_delete(shader: *mut glslopt_shader);
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_input_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_input_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_total_size(
-         shader: *mut glslopt_shader,
-     ) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_texture_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_texture_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_stats(
-         shader: *mut glslopt_shader,
-         approxMath: *mut ::std::os::raw::c_int,
diff --git a/libre/iceweasel/0004-Bug-2023597-Use-wasm32-wasip1-target-for-clang-22.1-.patch b/libre/iceweasel/0004-Bug-2023597-Use-wasm32-wasip1-target-for-clang-22.1-.patch
deleted file mode 100644
index 815ed6a..0000000
--- a/libre/iceweasel/0004-Bug-2023597-Use-wasm32-wasip1-target-for-clang-22.1-.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Alex Hochheiden <ahochheiden@mozilla.com>
-Date: Wed, 1 Apr 2026 18:11:37 +0000
-Subject: [PATCH] Bug 2023597 - Use `wasm32-wasip1` target for clang >= 22.1
- r=firefox-build-system-reviewers,sergesanspaille
-
-https://github.com/llvm/llvm-project/pull/165345
-https://releases.llvm.org/22.1.0/tools/clang/docs/ReleaseNotes.html
-
-Differential Revision: https://phabricator.services.mozilla.com/D291023
----
- build/moz.configure/toolchain.configure | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
-index a37ed610cc43..c7d0c8bdf75c 100644
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -695,6 +695,9 @@ def check_compiler(configure_cache, compiler, language, target, android_version)
-         # This makes clang define __ANDROID_API__ and use versioned library
-         # directories from the NDK.
-         toolchain = "%s%d" % (target.toolchain, android_version)
-+    elif target.kernel == "WASI" and info.type == "clang" and info.version >= Version("22.1"):
-+        # The wasm32-wasi target was renamed to wasm32-wasip1 in LLVM 22.1.
-+        toolchain = "wasm32-wasip1"
-     else:
-         toolchain = target.toolchain
- 
diff --git a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
index 52c9413..879d7b0 100644
--- a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
@@ -1,4 +1,4 @@
-From e3d2b6b9e80ef5c2b69551fca22693e99cff71c5 Mon Sep 17 00:00:00 2001
+From fcfe298c635dbdc8d7477ac5f5d8581b548c99e7 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:20:39 +0200
 Subject: [PATCH 01/13] Point to local omni.ja files, not remote server
@@ -22,6 +22,7 @@ If necessary, missing files can be added later.
 [1] https://remote-settings.readthedocs.io/en/latest/introduction.html
 [2] https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#license-rules
 ---
+ browser/base/content/spotlight.html                  |  2 +-
  browser/components/asrouter/bin/import-rollouts.js   |  4 ++--
  .../components/ASRouterAdmin/ASRouterAdmin.jsx       |  4 ++--
  .../asrouter/content/asrouter-admin.bundle.js        |  6 +++---
@@ -48,10 +49,10 @@ If necessary, missing files can be added later.
  .../search/docs/SearchEngineConfigurationArchive.rst |  2 +-
  .../xpcshell/searchconfigs/head_searchconfig.js      |  8 ++++----
  toolkit/modules/AppConstants.sys.mjs                 |  6 +-----
- 26 files changed, 48 insertions(+), 63 deletions(-)
+ 27 files changed, 49 insertions(+), 64 deletions(-)
 
 diff --git a/browser/base/content/spotlight.html b/browser/base/content/spotlight.html
-index a23738408e..53f988dc6e 100644
+index ccb05596f1..df0f7a519a 100644
 --- a/browser/base/content/spotlight.html
 +++ b/browser/base/content/spotlight.html
 @@ -8,7 +8,7 @@
@@ -108,10 +109,10 @@ index 753fbc633f..a0d49902a8 100644
                    >
                      nimbus-desktop-experiments
 diff --git a/browser/components/asrouter/content/asrouter-admin.bundle.js b/browser/components/asrouter/content/asrouter-admin.bundle.js
-index 7d0ed87430..a84153a29e 100644
+index ec2bba72f7..22bab5c84d 100644
 --- a/browser/components/asrouter/content/asrouter-admin.bundle.js
 +++ b/browser/components/asrouter/content/asrouter-admin.bundle.js
-@@ -1147,14 +1147,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
+@@ -1148,14 +1148,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
          label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", null, "remote settings (", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("a", {
            className: "small-text",
            target: "_blank",
@@ -128,7 +129,7 @@ index 7d0ed87430..a84153a29e 100644
            rel: "noopener noreferrer"
          }, "nimbus-desktop-experiments"), ")");
        }
-@@ -1520,4 +1520,4 @@ function renderASRouterAdmin() {
+@@ -1521,4 +1521,4 @@ function renderASRouterAdmin() {
  
  ASRouterAdminRenderUtils = __webpack_exports__;
  /******/ })()
@@ -188,10 +189,10 @@ index f4f852eeb1..b877808e79 100644
  The purpose of this Google Summer of Code project, which is called Fretboard, was to develop an A/B testing framework written in Kotlin based on the existing code from Fennec, but making it independent of both the server used and the local storage mechanism, allowing it to be used on other apps, such as Firefox Focus, which started to need to do some A/B tests.
  
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-index f51d1135d0..c6886dd8f4 100644
+index aa1ce7fc80..a0ebc4ee48 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-@@ -778,8 +778,8 @@ class Core(
+@@ -821,8 +821,8 @@ class Core(
  
          // collection name to fetch from server for SERP telemetry
          const val COLLECTION_NAME = "search-telemetry-v2"
@@ -219,10 +220,10 @@ index 4cbfe77a32..8c56e3b306 100644
          private val isEnabledByDefault: Boolean
              get() = !AppConstants.isKlarBuild
 diff --git a/netwerk/protocol/http/metrics.yaml b/netwerk/protocol/http/metrics.yaml
-index 68fc0ea110..9ef8a0e5b5 100644
+index dab8efd3d0..2d7b7342c3 100644
 --- a/netwerk/protocol/http/metrics.yaml
 +++ b/netwerk/protocol/http/metrics.yaml
-@@ -850,7 +850,7 @@ network:
+@@ -1016,7 +1016,7 @@ network:
    system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -231,7 +232,7 @@ index 68fc0ea110..9ef8a0e5b5 100644
  
    system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
-@@ -880,7 +880,7 @@ network:
+@@ -1046,7 +1046,7 @@ network:
    retried_system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -241,10 +242,10 @@ index 68fc0ea110..9ef8a0e5b5 100644
    retried_system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
 diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
-index 0f66c4138a..18615ba2ac 100644
+index 6d6381581b..6fdd9c042c 100644
 --- a/netwerk/protocol/http/nsHttpChannel.cpp
 +++ b/netwerk/protocol/http/nsHttpChannel.cpp
-@@ -9029,12 +9029,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
+@@ -8755,12 +8755,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
    if (domain == "aus5.mozilla.org"_ns) {
      return EssentialDomainCategory::Aus5MozillaOrg;
    }
@@ -396,10 +397,10 @@ index e49d8513ba..c1c6ae5deb 100644
  they apply.
  
 diff --git a/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs b/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
-index 7c49fb68f8..990772ffc9 100644
+index 4a8cda6603..f1f2cd3d93 100644
 --- a/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
 +++ b/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
-@@ -19,8 +19,8 @@
+@@ -18,8 +18,8 @@
  // environment variables still apply.
  //
  // --stage: use stage Remote Settings
@@ -410,7 +411,7 @@ index 7c49fb68f8..990772ffc9 100644
  //
  // --preview: enable Remote Settings and Experiment previews.
  //
-@@ -72,7 +72,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
+@@ -71,7 +71,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
    Utils: "resource://services-settings/Utils.sys.mjs",
  });
  
@@ -518,10 +519,10 @@ index 13a523a989..9962529dde 100644
    REMOTE_SETTINGS_VERIFY_SIGNATURE:
  #ifdef MOZ_THUNDERBIRD
 -- 
-2.53.0
+2.54.0
 
 
-From 46fe6386cf5241a8689a28a27202244288e00f96 Mon Sep 17 00:00:00 2001
+From bece0cb90ba78f8b1f18b48aaf6fead250d80433 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:34:08 +0200
 Subject: [PATCH 02/13] Remove polling triggered by push broadcasts
@@ -590,10 +591,10 @@ index 2330fb011f..a5e3b6a10d 100644
    },
  };
 -- 
-2.53.0
+2.54.0
 
 
-From 12e6b7041c4424df50fecbb5579cf9f84939351d Mon Sep 17 00:00:00 2001
+From 7587ae0fb173b28d4a23c31bf5e14ebebc48da52 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:41:54 +0200
 Subject: [PATCH 03/13] Remove timer that triggers polling for changes
@@ -635,10 +636,10 @@ index c9c2370d2c..85c4a5cafe 100644
 -category update-timer RemoteSettingsComponents @mozilla.org/services/settings;1,getService,services-settings-poll-changes,services.settings.poll_interval,21600,86400
 +
 -- 
-2.53.0
+2.54.0
 
 
-From 8c3a4e87e21e9d10c1b6baf16c6acaf7f3a66dd4 Mon Sep 17 00:00:00 2001
+From ec253b2945d83b114572fec379d1816082960411 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:47:41 +0200
 Subject: [PATCH 04/13] Utils: fetch timestamps of each collection locally
@@ -735,10 +736,10 @@ index a3e9e9b3f2..b32a8d8691 100644
  ]
  
 -- 
-2.53.0
+2.54.0
 
 
-From 23a8b7a6af65ba638b07fef159830fab7c6639ce Mon Sep 17 00:00:00 2001
+From ec1f3ae4c6f3e541cb55c390cf504174d52bc9f9 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:52:10 +0200
 Subject: [PATCH 05/13] Utils: disable offline checking
@@ -771,10 +772,10 @@ index cc7bfe9744..f6eaa7d958 100644
    },
  
 -- 
-2.53.0
+2.54.0
 
 
-From 2d574f889d0f30717adeac473aa9ae7cb45225df Mon Sep 17 00:00:00 2001
+From 25fca63a4d85d9c3095c6d9141e986f33deb6358 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:56:02 +0200
 Subject: [PATCH 06/13] Refactor hashing logic to a separate function
@@ -825,10 +826,10 @@ index e5b20d9b9d..a1eb1f6437 100644
  
    /**
 -- 
-2.53.0
+2.54.0
 
 
-From 21faac2d209be958f3963e0320685f432fb78e29 Mon Sep 17 00:00:00 2001
+From 43d1de582872d169e6318529287dfafdb7cb663a Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:05:02 +0200
 Subject: [PATCH 07/13] Client: Fetch and hash records from local dump
@@ -863,10 +864,10 @@ the upgrade to local-only setup.
  1 file changed, 33 insertions(+), 63 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 418418ba4e..ac76d9ff9e 100644
+index 99277f08cb..24f0ad6cff 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -776,8 +776,9 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -782,8 +782,9 @@ export class RemoteSettingsClient extends EventEmitter {
  
            // If the data is up-to-date but don't have metadata (records loaded from dump),
            // we fetch them and validate the signature immediately.
@@ -877,7 +878,7 @@ index 418418ba4e..ac76d9ff9e 100644
              const { metadata } = await this._fetchChangeset(
                expectedTimestamp,
                expectedTimestamp
-@@ -1069,62 +1070,29 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1075,62 +1076,29 @@ export class RemoteSettingsClient extends EventEmitter {
     *   The collection metadata, that contains the signature payload.
     */
    async validateCollectionSignature(records, timestamp, metadata) {
@@ -953,7 +954,7 @@ index 418418ba4e..ac76d9ff9e 100644
    }
  
    /**
-@@ -1325,24 +1293,26 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1331,24 +1299,26 @@ export class RemoteSettingsClient extends EventEmitter {
     * @param since timestamp of last sync (optional)
     */
    async _fetchChangeset(expectedTimestamp, since) {
@@ -997,10 +998,10 @@ index 418418ba4e..ac76d9ff9e 100644
        remoteRecords,
      };
 -- 
-2.53.0
+2.54.0
 
 
-From 43cde292c1297c3814ab486a8bb173811012f154 Mon Sep 17 00:00:00 2001
+From 8ebf4e8ee901dc3c6ded1b0e8b0b747ccbb99c65 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:42:56 +0200
 Subject: [PATCH 08/13] Client: start deferred sync on get() or on()
@@ -1022,7 +1023,7 @@ occurs during the session.
  1 file changed, 26 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index ac76d9ff9e..cdde6aefb6 100644
+index 24f0ad6cff..5213fcbdd2 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -1041,7 +1042,7 @@ index ac76d9ff9e..cdde6aefb6 100644
  
  ChromeUtils.defineLazyGetter(lazy, "console", () => lazy.Utils.log);
  
-@@ -344,6 +346,11 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -350,6 +352,11 @@ export class RemoteSettingsClient extends EventEmitter {
      this._lastCheckTimePref = lastCheckTimePref;
      this._verifier = null;
      this._syncRunning = false;
@@ -1053,7 +1054,7 @@ index ac76d9ff9e..cdde6aefb6 100644
  
      // This attribute allows signature verification to be disabled, when running tests
      // or when pulling data from a dev server.
-@@ -374,6 +381,11 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -380,6 +387,11 @@ export class RemoteSettingsClient extends EventEmitter {
      this.db.identifier = this.identifier;
    }
  
@@ -1065,7 +1066,7 @@ index ac76d9ff9e..cdde6aefb6 100644
    get identifier() {
      return `${this.bucketName}/${this.collectionName}`;
    }
-@@ -457,6 +469,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -463,6 +475,10 @@ export class RemoteSettingsClient extends EventEmitter {
        let lastModified = forceSync ? null : await this.db.getLastModified();
        let hasLocalData = lastModified !== null;
  
@@ -1076,7 +1077,7 @@ index ac76d9ff9e..cdde6aefb6 100644
        if (forceSync) {
          if (!this._importingPromise) {
            this._importingPromise = (async () => {
-@@ -606,7 +622,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -612,7 +628,10 @@ export class RemoteSettingsClient extends EventEmitter {
        // No need to verify signature on JSON dumps.
        // If local DB cannot be read, then we don't even try to do anything,
        // we return results early.
@@ -1088,7 +1089,7 @@ index ac76d9ff9e..cdde6aefb6 100644
      }
  
      if (this.verifySignature && verifySignature) {
-@@ -642,6 +661,12 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -648,6 +667,12 @@ export class RemoteSettingsClient extends EventEmitter {
      return final;
    }
  
@@ -1102,10 +1103,10 @@ index ac76d9ff9e..cdde6aefb6 100644
     * Synchronize the local database with the remote server.
     *
 -- 
-2.53.0
+2.54.0
 
 
-From 9d9ec3cc9583320e071453878c4523a9ec707f17 Mon Sep 17 00:00:00 2001
+From e3011e2657ab1a8a05f3adeba89f950fd8aba8f1 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:53:51 +0200
 Subject: [PATCH 09/13] Client: deep compare records if timestamps match
@@ -1127,7 +1128,7 @@ noticeable performance issues.
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index cdde6aefb6..f30c4180ff 100644
+index 5213fcbdd2..19a54575c7 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -10,6 +10,7 @@ import { Downloader } from "resource://services-settings/Attachments.sys.mjs";
@@ -1138,7 +1139,7 @@ index cdde6aefb6..f30c4180ff 100644
    ClientEnvironmentBase:
      "resource://gre/modules/components-utils/ClientEnvironment.sys.mjs",
    Database: "resource://services-settings/Database.sys.mjs",
-@@ -1293,7 +1294,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1299,7 +1300,10 @@ export class RemoteSettingsClient extends EventEmitter {
          const old = oldById.get(r.id);
          if (old) {
            oldById.delete(r.id);
@@ -1151,10 +1152,10 @@ index cdde6aefb6..f30c4180ff 100644
            }
          } else {
 -- 
-2.53.0
+2.54.0
 
 
-From 7fc456f62f7edb8742e7a33e3bca8673b47b2eea Mon Sep 17 00:00:00 2001
+From 26ec4e01e91e415f5252c62cab1d15de19de9266 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:01:39 +0200
 Subject: [PATCH 10/13] Client: delete more data on cleanup
@@ -1172,10 +1173,10 @@ logic gets the data about the attachments from those records.
  1 file changed, 8 insertions(+), 2 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index f30c4180ff..b032b22db9 100644
+index 19a54575c7..bb02aadf7f 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -1244,7 +1244,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1250,7 +1250,7 @@ export class RemoteSettingsClient extends EventEmitter {
            // Signature failed, clear local DB because it contains
            // bad data (local + remote changes).
            lazy.console.debug(`${this.identifier} clear local data`);
@@ -1184,7 +1185,7 @@ index f30c4180ff..b032b22db9 100644
            // Local data was tampered, throw and it will retry from empty DB.
            lazy.console.error(`${this.identifier} local data was corrupted`);
            throw new CorruptedDataError(this.identifier);
-@@ -1266,7 +1266,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1272,7 +1272,7 @@ export class RemoteSettingsClient extends EventEmitter {
              // _importJSONDump() only clears DB if dump is available,
              // therefore do it here!
              if (imported < 0) {
@@ -1193,7 +1194,7 @@ index f30c4180ff..b032b22db9 100644
              }
            }
          }
-@@ -1315,6 +1315,12 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1321,6 +1321,12 @@ export class RemoteSettingsClient extends EventEmitter {
      return syncResult;
    }
  
@@ -1207,10 +1208,10 @@ index f30c4180ff..b032b22db9 100644
     * Fetch information from changeset endpoint.
     *
 -- 
-2.53.0
+2.54.0
 
 
-From e9bfbedb2fa535ec84f4006c71537527b118ab2b Mon Sep 17 00:00:00 2001
+From 39d898220fab410379857ba38a507641d2ec6ad1 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:07:56 +0200
 Subject: [PATCH 11/13] Client: remove comparison of collection timestamps
@@ -1225,10 +1226,10 @@ necessary cleanup. So remove the checks.
  1 file changed, 19 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index b032b22db9..19a3fdf129 100644
+index bb02aadf7f..0ae4e078cf 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -1187,25 +1187,6 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1193,25 +1193,6 @@ export class RemoteSettingsClient extends EventEmitter {
        `${this.identifier} local timestamp: ${localTimestamp}, remote: ${remoteTimestamp} (expected: ${expectedTimestamp})`
      );
  
@@ -1255,10 +1256,10 @@ index b032b22db9..19a3fdf129 100644
        clear: retry,
      });
 -- 
-2.53.0
+2.54.0
 
 
-From 5753d97435b35f06d60ae14c5fcfe76208d9d411 Mon Sep 17 00:00:00 2001
+From b021571e561db3dc864f841437799421bb1bcc0c Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:15:44 +0200
 Subject: [PATCH 12/13] Attachments: load only from dump and drop cached
@@ -1268,7 +1269,7 @@ Subject: [PATCH 12/13] Attachments: load only from dump and drop cached
  1 file changed, 7 insertions(+), 35 deletions(-)
 
 diff --git a/services/settings/Attachments.sys.mjs b/services/settings/Attachments.sys.mjs
-index 3682160358..af147abeaa 100644
+index e266cb4e0a..e79cc72dda 100644
 --- a/services/settings/Attachments.sys.mjs
 +++ b/services/settings/Attachments.sys.mjs
 @@ -337,11 +337,12 @@ export class Downloader {
@@ -1347,10 +1348,10 @@ index 3682160358..af147abeaa 100644
  
    async _fetchAttachment(url) {
 -- 
-2.53.0
+2.54.0
 
 
-From c1906067ffd74bb328e5d460fc27223be3f3f9b1 Mon Sep 17 00:00:00 2001
+From 4ec252d0aaa0562a5f6665d96273092f1d9d9220 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:22:20 +0200
 Subject: [PATCH 13/13] Disable CRLite entirely for now
@@ -1375,10 +1376,10 @@ certificate revocations.
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index f36788f332..7cc095f1b3 100644
+index 990f1dc23e..a782670b06 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -17959,7 +17959,7 @@
+@@ -18001,7 +18001,7 @@
  #    security.OCSP.enable is 0).
  - name: security.pki.crlite_mode
    type: RelaxedAtomicUint32
@@ -1388,10 +1389,10 @@ index f36788f332..7cc095f1b3 100644
  
  # The CRLite filter channel to which the user is subscribed.
 diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp
-index e4c0899cd4..b6a6d5e6df 100644
+index 940278651e..0e35326fa0 100644
 --- a/security/manager/ssl/nsNSSComponent.cpp
 +++ b/security/manager/ssl/nsNSSComponent.cpp
-@@ -1071,6 +1071,7 @@ void nsNSSComponent::setValidationOptions(
+@@ -1070,6 +1070,7 @@ void nsNSSComponent::setValidationOptions(
    CRLiteMode defaultCRLiteMode = CRLiteMode::Enforce;
    CRLiteMode crliteMode =
        static_cast<CRLiteMode>(StaticPrefs::security_pki_crlite_mode());
@@ -1400,5 +1401,5 @@ index e4c0899cd4..b6a6d5e6df 100644
      case CRLiteMode::Disabled:
      case CRLiteMode::TelemetryOnly:
 -- 
-2.53.0
+2.54.0
 
diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index a43e254..ac89438 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1,4 +1,4 @@
-From 44031c199349f17fdd58706f5f6b594214822c92 Mon Sep 17 00:00:00 2001
+From 7768ec6e13e9bc273b426372b21c4819e686a152 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:09:05 +0300
 Subject: [PATCH 01/10] geolocation: Disable API and remove Google API URLs
@@ -23,10 +23,10 @@ default for now.
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index 7cc095f1b3..7bc997b76a 100644
+index a782670b06..1142032a49 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -6794,7 +6794,7 @@
+@@ -6880,7 +6880,7 @@
  # Is support for Navigator.geolocation enabled?
  - name: geo.enabled
    type: bool
@@ -36,10 +36,10 @@ index 7cc095f1b3..7bc997b76a 100644
  
  # Time, in milliseconds, to wait for the location provider to spin up.
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index d6a5717071..41abe3613c 100644
+index e0b2092b7a..7ebb8d5415 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3087,7 +3087,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
+@@ -3085,7 +3085,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
  // All the Geolocation preferences are here.
  //
  #ifndef ANDROID
@@ -49,10 +49,10 @@ index d6a5717071..41abe3613c 100644
    // Timeout to wait before sending the location request.
    pref("geo.provider.network.timeToWaitBeforeSending", 5000);
 -- 
-2.53.0
+2.54.0
 
 
-From 60d1eca409011499bc3206190bceabe0cd18e086 Mon Sep 17 00:00:00 2001
+From 228f650756f441c24d77fe325f61d93ca70b30ea Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:49:05 +0300
 Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
@@ -63,10 +63,10 @@ Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
  1 file changed, 8 insertions(+), 8 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 9a46511213..e5e40bb5f3 100644
+index a77cc20e81..baa5d5ca15 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2554,7 +2554,7 @@ pref("browser.contentblocking.report.proxy.enabled", false);
+@@ -2535,7 +2535,7 @@ pref("browser.contentblocking.report.proxy.enabled", false);
  #endif
  
  // Disable the mobile promotion by default.
@@ -75,7 +75,7 @@ index 9a46511213..e5e40bb5f3 100644
  
  // Locales in which Send to Device emails are supported
  // The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963
-@@ -2584,7 +2584,7 @@ pref("browser.promo.pin.enabled", true);
+@@ -2565,7 +2565,7 @@ pref("browser.promo.pin.enabled", true);
  // Set to true for Fx113 (see bug 1808611)
  pref("browser.promo.cookiebanners.enabled", false);
  
@@ -84,7 +84,7 @@ index 9a46511213..e5e40bb5f3 100644
  pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA");
  
  pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections");
-@@ -2595,12 +2595,12 @@ pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.fi
+@@ -2576,12 +2576,12 @@ pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.fi
  pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients");
  pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true");
  pref("browser.contentblocking.report.proxy_extension.url", "https://fpn.firefox.com/browser?utm_source=firefox-desktop&utm_medium=referral&utm_campaign=about-protections&utm_content=about-protections");
@@ -104,10 +104,10 @@ index 9a46511213..e5e40bb5f3 100644
  // Protection Report's SUMO urls
  pref("browser.contentblocking.report.lockwise.how_it_works.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/password-manager-report");
 -- 
-2.53.0
+2.54.0
 
 
-From 94667a5c4c0868a6489c00796d3d76c11e382422 Mon Sep 17 00:00:00 2001
+From 119edff89b11a54c044934329397573b332ff839 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 03/10] Remove some references to AMO
@@ -148,10 +148,10 @@ Subject: [PATCH 03/10] Remove some references to AMO
  6 files changed, 31 insertions(+), 46 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index e5e40bb5f3..8a199cd6d9 100644
+index baa5d5ca15..625e88f97c 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -24,7 +24,7 @@
+@@ -23,7 +23,7 @@
  #endif
  
  // Set add-ons abuse report related prefs specific to Firefox Desktop.
@@ -160,7 +160,7 @@ index e5e40bb5f3..8a199cd6d9 100644
  
  // Enables some extra Extension System Logging (can reduce performance)
  pref("extensions.logging.enabled", false);
-@@ -38,12 +38,12 @@ pref("extensions.postDownloadThirdPartyPrompt", true);
+@@ -37,12 +37,12 @@ pref("extensions.postDownloadThirdPartyPrompt", true);
  
  // Preferences for AMO integration
  pref("extensions.getAddons.cache.enabled", true);
@@ -179,7 +179,7 @@ index e5e40bb5f3..8a199cd6d9 100644
  
  // The URL for the privacy policy related to recommended extensions.
  pref("extensions.recommendations.privacyPolicyUrl", "https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=privacy-policy-link#addons");
-@@ -82,7 +82,7 @@ pref("xpinstall.signatures.required", true);
+@@ -81,7 +81,7 @@ pref("xpinstall.signatures.required", true);
  pref("extensions.dataCollectionPermissions.enabled", true);
  
  // Dictionary download preference
@@ -188,7 +188,7 @@ index e5e40bb5f3..8a199cd6d9 100644
  
  // At startup, should we check to see if the installation
  // date is older than some threshold
-@@ -2889,12 +2889,13 @@ pref("app.normandy.onsync_skew_sec", 600);
+@@ -2869,12 +2869,13 @@ pref("app.normandy.onsync_skew_sec", 600);
  //      the app and browser.
  #if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION)
    pref("intl.multilingual.enabled", true);
@@ -345,7 +345,7 @@ index bac9952132..c7d37b7580 100644
                  conservative = true,
              ),
 diff --git a/mobile/android/app/geckoview-prefs.js b/mobile/android/app/geckoview-prefs.js
-index e28a0abc2c..c282bc3d2a 100644
+index 5f88a18fb4..11f59bb7c2 100644
 --- a/mobile/android/app/geckoview-prefs.js
 +++ b/mobile/android/app/geckoview-prefs.js
 @@ -201,11 +201,11 @@ pref("extensions.experiments.enabled", false);
@@ -365,10 +365,10 @@ index e28a0abc2c..c282bc3d2a 100644
  // Don't let XPIProvider install distribution add-ons; we do our own thing on mobile
  pref("extensions.installDistroAddons", false);
 diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle
-index 245d757db6..bd110a6a0e 100644
+index 15b1d953a3..2744b53945 100644
 --- a/mobile/android/fenix/app/build.gradle
 +++ b/mobile/android/fenix/app/build.gradle
-@@ -78,7 +78,7 @@ android {
+@@ -79,7 +79,7 @@ android {
          buildConfigField "String", "AMO_COLLECTION_NAME", "\"Extensions-for-Android\""
          buildConfigField "String", "AMO_COLLECTION_USER", "\"mozilla\""
          // This should be the base URL used to call the AMO API.
@@ -378,10 +378,10 @@ index 245d757db6..bd110a6a0e 100644
          def deepLinkSchemeValue = "fenix-dev"
          buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\""
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 41abe3613c..4149034a2b 100644
+index 7ebb8d5415..f92aeb67b3 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -1768,8 +1768,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
+@@ -1764,8 +1764,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
  
  pref("extensions.abuseReport.enabled", false);
  // Whether Firefox integrated abuse reporting feature should be opening the new abuse report form hosted on AMO.
@@ -392,7 +392,7 @@ index 41abe3613c..4149034a2b 100644
  
  // Blocklist preferences
  pref("extensions.blocklist.enabled", true);
-@@ -3148,7 +3148,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
+@@ -3146,7 +3146,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
  // Whether to allow the inline options browser in HTML about:addons page.
  pref("extensions.htmlaboutaddons.inline-options.enabled", true);
  // Show recommendations on the extension and theme list views.
@@ -402,10 +402,10 @@ index 41abe3613c..4149034a2b 100644
  // The URL for the privacy policy related to recommended add-ons.
  pref("extensions.recommendations.privacyPolicyUrl", "");
 -- 
-2.53.0
+2.54.0
 
 
-From a8aa3b5831c17f1fcb17ef71a6af2afe2bf440d7 Mon Sep 17 00:00:00 2001
+From 4c42261efdc1b2ec37a8a403fd9d7c02d75b3d8f Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Jun 2023 13:16:40 +0200
 Subject: [PATCH 04/10] Disable Contile and autoupdate of system addons
@@ -425,10 +425,10 @@ only free software, remove them from the source code.
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 8a199cd6d9..a99a4199fe 100644
+index 625e88f97c..fbaf72c210 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -53,8 +53,8 @@ pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox
+@@ -52,8 +52,8 @@ pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox
  pref("extensions.update.autoUpdateDefault", true);
  
  // Check AUS for system add-on updates.
@@ -439,7 +439,7 @@ index 8a199cd6d9..a99a4199fe 100644
  
  // Disable add-ons that are not installed by the user in all scopes by default.
  // See the SCOPE constants in AddonManager.sys.mjs for values to use here.
-@@ -1839,8 +1839,8 @@ pref("browser.topsites.component.enabled", false);
+@@ -1795,8 +1795,8 @@ pref("browser.topsites.component.enabled", false);
  
  pref("browser.topsites.useRemoteSetting", true);
  // Fetch sponsored Top Sites from Mozilla Tiles Service (Contile)
@@ -451,10 +451,10 @@ index 8a199cd6d9..a99a4199fe 100644
  // The base URL for the Quick Suggest anonymizing proxy. To make a request to
  // the proxy, include a campaign ID in the path.
 -- 
-2.53.0
+2.54.0
 
 
-From 8f4d54eed49dead984fe0db12c7015dd8450c26e Mon Sep 17 00:00:00 2001
+From cf0d205a6c0f9a36c3b122a62b9725b19b8dabef Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 26 Sep 2023 21:27:34 +0200
 Subject: [PATCH 05/10] Disable Firefox Translations for now
@@ -504,10 +504,10 @@ probably has the same issues with the toolchain for the models.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index a99a4199fe..6718b17508 100644
+index fbaf72c210..5a5cda5bf4 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2400,7 +2400,7 @@ pref("browser.translation.neverForLanguages", "");
+@@ -2384,7 +2384,7 @@ pref("browser.translation.neverForLanguages", "");
  
  // Enable Firefox translations powered by the Bergamot translations
  // engine https://browser.mt/.
@@ -517,10 +517,10 @@ index a99a4199fe..6718b17508 100644
  // Enable Firefox Select translations powered by Bergamot translations
  // engine https://browser.mt/.
 -- 
-2.53.0
+2.54.0
 
 
-From e7e3bfd5d3cae8b84f71ebdc047d520890c9545a Mon Sep 17 00:00:00 2001
+From f441682d6ab40e975f438c1191baf10eb3339dc8 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 12 Jun 2024 00:17:17 +0200
 Subject: [PATCH 06/10] Remove some references to Pocket and disable
@@ -551,10 +551,10 @@ this nonfunctional by default.
  13 files changed, 27 insertions(+), 40 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 6718b17508..d2235da896 100644
+index 5a5cda5bf4..6abfbb9431 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2096,6 +2096,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
+@@ -2052,6 +2052,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
  
  // The pref controls if search hand-off is enabled for Activity Stream.
  pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true);
@@ -564,10 +564,10 @@ index 6718b17508..d2235da896 100644
  pref("browser.newtabpage.activity-stream.logowordmark.alwaysVisible", true);
  
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
-index 35c1cdb852..202eba980f 100644
+index 2d669df4cb..309c230436 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
-@@ -23,7 +23,6 @@ const PREF_NOVA_ENABLED = "nova.enabled";
+@@ -30,7 +30,6 @@ const PREF_NOVA_ENABLED = "nova.enabled";
  const ALLOWED_CSS_URL_PREFIXES = [
    "chrome://",
    "resource://",
@@ -591,7 +591,7 @@ index 02eb841077..9e2af9bae3 100644
    }
  
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSLinkMenu/DSLinkMenu.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSLinkMenu/DSLinkMenu.jsx
-index f2406b6264..23a48e83a7 100644
+index e62692c0c7..12de5726dd 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSLinkMenu/DSLinkMenu.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSLinkMenu/DSLinkMenu.jsx
 @@ -56,7 +56,7 @@ export class _DSLinkMenu extends React.PureComponent {
@@ -670,10 +670,10 @@ index 388cf808f4..8313a8ab43 100644
  
  A list of endpoints that are allowed to be used by Discovery Stream for remote content (eg: story metadata) and configuration (eg: remote layout definitions for experimentation).
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index daf4e1dca8..36eb74e928 100644
+index edb61ebece..c3e0e52fee 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -272,7 +272,7 @@ export const PREFS_CONFIG = new Map([
+@@ -332,7 +332,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsored",
      {
        title: "User pref for sponsored Pocket content",
@@ -682,7 +682,7 @@ index daf4e1dca8..36eb74e928 100644
      },
    ],
    [
-@@ -287,7 +287,7 @@ export const PREFS_CONFIG = new Map([
+@@ -347,7 +347,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsoredTopSites",
      {
        title: "Show sponsored top sites",
@@ -691,7 +691,7 @@ index daf4e1dca8..36eb74e928 100644
      },
    ],
    [
-@@ -1254,7 +1254,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1373,7 +1373,7 @@ export const PREFS_CONFIG = new Map([
        title:
          "Endpoint prefixes (comma-separated) that are allowed to be requested",
        value:
@@ -700,7 +700,7 @@ index daf4e1dca8..36eb74e928 100644
      },
    ],
    [
-@@ -1292,7 +1292,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1411,7 +1411,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Endpoint for when a user opts-out of sponsored content to delete the user's data from the ad server.",
@@ -709,7 +709,7 @@ index daf4e1dca8..36eb74e928 100644
      },
    ],
    [
-@@ -1473,7 +1473,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1592,7 +1592,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "'Support Firefox' pref on 'about:settings#home' page. Toggles all sponsored results on and off at the same time",
@@ -719,7 +719,7 @@ index daf4e1dca8..36eb74e928 100644
    ],
    [
 diff --git a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
-index d03863cf09..e68931d98a 100644
+index 6da2e6e5ee..52385da789 100644
 --- a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
 +++ b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
 @@ -52,7 +52,7 @@ const TOPIC_SELECTION_LAST_DISPLAYED =
@@ -731,7 +731,7 @@ index d03863cf09..e68931d98a 100644
  const PREF_CONFIG = "discoverystream.config";
  const PREF_ENDPOINTS = "discoverystream.endpoints";
  const PREF_IMPRESSION_ID = "browser.newtabpage.activity-stream.impressionId";
-@@ -2934,16 +2934,7 @@ getHardcodedLayout = ({
+@@ -2940,16 +2940,7 @@ getHardcodedLayout = ({
            newFooterSection,
            properties: {
              alignment: "left-align",
@@ -772,10 +772,10 @@ index 8225d3857b..7c1a2b2be8 100644
        },
      },
 diff --git a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-index a817ba5376..38126c6252 100644
+index dd0f51e41c..ff072542bf 100644
 --- a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
 +++ b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-@@ -1468,9 +1468,7 @@ export class TopSitesFeed {
+@@ -1470,9 +1470,7 @@ export class TopSitesFeed {
            // Also: force WebP, quality 75, no upscaling, no EXIF data
            // Uses Thumbor: https://thumbor.readthedocs.io/en/latest/usage.html
            // For now we wrap this in single quotes because this is being used in a url() css rule, and otherwise would cause a parsing error.
@@ -801,7 +801,7 @@ index 3db458069b..45e4ac26b7 100644
           * Returns a new instance of [PocketEndpointRaw].
           *
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
-index 0570c9b5dd..4d2b8051f7 100644
+index a4ea6265b6..aced4d6c28 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 @@ -21,12 +21,12 @@ import java.util.Locale
@@ -824,10 +824,10 @@ index 0570c9b5dd..4d2b8051f7 100644
      const val ANDROID_SUPPORT_SUMO_URL = "mzl.la/AndroidSupport"
      const val RELAY_MANAGE_URL = "https://relay.firefox.com"
 -- 
-2.53.0
+2.54.0
 
 
-From 07b9ba6ef2596933f4a5c706d9abe78dc4506c50 Mon Sep 17 00:00:00 2001
+From fe1ad39e9e38ad783bc0427934fe6fbef42dcc6f Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 19:19:31 +0200
 Subject: [PATCH 07/10] Disable experimental Machine Learning support
@@ -869,10 +869,10 @@ localhost and enable the feature if needed.
  13 files changed, 28 insertions(+), 566 deletions(-)
 
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 4149034a2b..87835afd67 100644
+index f92aeb67b3..8c86157ce3 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3677,11 +3677,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
+@@ -3654,11 +3654,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
  pref("browser.ai.control.smartWindow", "default");
  
  // Enable the experimental machine learning inference engine.
@@ -953,10 +953,10 @@ index bf6d29b6dc..c8ceb41bd8 100644
          cleanup_ml_services(mach_cmd)
  
 diff --git a/toolkit/components/aboutinference/content/aboutInference.js b/toolkit/components/aboutinference/content/aboutInference.js
-index 01533ad4c9..e34bf9dab7 100644
+index b8fae83dd0..483c14e7e8 100644
 --- a/toolkit/components/aboutinference/content/aboutInference.js
 +++ b/toolkit/components/aboutinference/content/aboutInference.js
-@@ -89,319 +89,7 @@ const TINY_ARTICLE =
+@@ -87,319 +87,7 @@ const TINY_ARTICLE =
  /**
   * Presets for the pad
   */
@@ -1277,7 +1277,7 @@ index 01533ad4c9..e34bf9dab7 100644
  
  const PREDEFINED = Object.keys(INFERENCE_PAD_PRESETS);
  
-@@ -928,7 +616,7 @@ async function runInference() {
+@@ -926,7 +614,7 @@ async function runInference() {
      } catch (e) {
        resultsConsole.addLine(e);
        if (
@@ -1286,7 +1286,7 @@ index 01533ad4c9..e34bf9dab7 100644
        ) {
          resultsConsole.addLine(
            "Make sure you started Firefox with MOZ_ALLOW_EXTERNAL_ML_HUB=1"
-@@ -1184,74 +872,7 @@ async function runBenchmark() {
+@@ -1182,74 +870,7 @@ async function runBenchmark() {
      repeatedSentences.push(...baseSentences);
    }
  
@@ -1714,10 +1714,10 @@ index eb2a2cf35d..e5f120fd0a 100644
          engineIds: [],
        },
 -- 
-2.53.0
+2.54.0
 
 
-From 63055ce9ea3d3ffed791562dbb481b5e3d1256da Mon Sep 17 00:00:00 2001
+From ab3a3b8e98574b3fa839edcb46045600783f10fb Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 22 Jul 2025 20:46:59 +0000
 Subject: [PATCH 08/10] Ensure 'Suggest more of my tabs' feature disabled
@@ -1733,10 +1733,10 @@ introducing them to pacman repositories.
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index d2235da896..c7ffed282c 100644
+index 6abfbb9431..1a57799658 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1084,7 +1084,7 @@ pref("browser.tabs.groups.enabled", true);
+@@ -1081,7 +1081,7 @@ pref("browser.tabs.groups.enabled", true);
  pref("browser.tabs.groups.hoverPreview.enabled", true);
  pref("browser.tabs.groups.alternateMenu", false);
  
@@ -1746,10 +1746,10 @@ index d2235da896..c7ffed282c 100644
  pref("browser.tabs.notes.enabled", false);
  
 diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
-index 8f8da3c4ca..046f5b358a 100644
+index 6f4cb34d16..a71eb8f217 100644
 --- a/browser/components/preferences/main.js
 +++ b/browser/components/preferences/main.js
-@@ -2012,6 +2012,7 @@ Preferences.addSetting({
+@@ -1882,6 +1882,7 @@ Preferences.addSetting({
    id: "smartTabGroups",
    pref: "browser.tabs.groups.smart.enabled",
  });
@@ -1758,10 +1758,10 @@ index 8f8da3c4ca..046f5b358a 100644
    id: "tabGroupSuggestions",
    pref: "browser.tabs.groups.smart.userEnabled",
 -- 
-2.53.0
+2.54.0
 
 
-From aab41db4618757af4d741d1821268eed08787ee8 Mon Sep 17 00:00:00 2001
+From c01789507001e53a76f89df92c75ad16a41424ef Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 9 Mar 2026 16:58:34 +0100
 Subject: [PATCH 09/10] Block and hide AI Controls in Preferences
@@ -1774,10 +1774,10 @@ Please see the previous patches for the reasons.
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index c7ffed282c..141a9ea3b9 100644
+index 1a57799658..2ad234fa73 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1389,7 +1389,7 @@ pref("browser.preferences.experimental.hidden", false);
+@@ -1386,7 +1386,7 @@ pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
  pref("browser.preferences.moreFromMozilla", true);
  // Whether we show the "AI Controls" pane.
@@ -1787,10 +1787,10 @@ index c7ffed282c..141a9ea3b9 100644
  // restrictions. This is intended for localizers to be able to see the strings.
  pref("browser.preferences.aiControls.showUnavailable", false);
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 81b4572ca9..869878aee6 100644
+index 3f505ccbd9..79e20bf615 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -2358,7 +2358,7 @@ preferences-ai-controls-key-points-control =
+@@ -2400,7 +2400,7 @@ preferences-ai-controls-key-points-control =
  
  preferences-ai-controls-sidebar-chatbot-group =
      .label = AI chatbot providers in sidebar
@@ -1800,10 +1800,10 @@ index 81b4572ca9..869878aee6 100644
  preferences-ai-controls-sidebar-chatbot-control =
      .label = Chatbot in sidebar
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 87835afd67..7fb665e92b 100644
+index 8c86157ce3..5548755a08 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3668,13 +3668,13 @@ pref("browser.translations.chaos.errors", false);
+@@ -3645,13 +3645,13 @@ pref("browser.translations.chaos.errors", false);
  pref("browser.translations.chaos.timeoutMS", 0);
  
  // AI controls
@@ -1825,10 +1825,10 @@ index 87835afd67..7fb665e92b 100644
  // Enable the experimental machine learning inference engine.
  pref("browser.ml.enable", false);
 -- 
-2.53.0
+2.54.0
 
 
-From 252f22945c29b16c33a29a85b49ea0ac68530ca9 Mon Sep 17 00:00:00 2001
+From e34d8e7f218cc57ba3fce1a157350337ab4795fa Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 16 Sep 2024 01:49:27 +0200
 Subject: [PATCH 10/10] Wipe Merino hostname, disable Weather & Yelp
@@ -1841,7 +1841,8 @@ example, nonfree JavaScript code. So remove Merino hostname and disable
 suggestions for Weather and Yelp since Iceweasel doesn't ship any
 providers for these.
 ---
- browser/app/profile/firefox.js                | 28 +++++++++----------
+ browser/app/profile/firefox.js                | 30 +++++++++----------
+ .../aiwindow/models/WCSMerinoClient.sys.mjs   |  2 +-
  .../quicksuggest/MerinoTestUtils.sys.mjs      |  2 +-
  .../CardSections/CardSections.jsx             |  2 +-
  .../newtab/lib/ActivityStream.sys.mjs         |  4 +--
@@ -1849,17 +1850,19 @@ providers for these.
  .../CardSections.test.jsx                     |  6 ++--
  .../test/unit/lib/DiscoveryStreamFeed.test.js |  2 +-
  .../newtab/test/xpcshell/topstories.json      |  2 +-
- docs/rust-components/topic-guides/merino.md   |  6 ++--
+ docs/rust-components/topic-guides/merino.md   | 26 ++++++++--------
+ .../components/browser/icons/IconRequest.kt   |  2 --
+ .../service/merino-manifest/README.md         |  1 -
  .../api/ContentRecommendationEndpointRaw.kt   |  5 +---
  .../api/ContentRecommendationsResponse.kt     |  6 ----
- .../components/viaduct/src/ohttp.rs           |  8 +++---
- 12 files changed, 34 insertions(+), 43 deletions(-)
+ .../components/viaduct/src/ohttp.rs           |  8 ++---
+ 15 files changed, 46 insertions(+), 58 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 141a9ea3b9..df0914c363 100644
+index 2ad234fa73..1f8560ed04 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -471,7 +471,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
+@@ -467,7 +467,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
  
  // If `browser.urlbar.weather.featureGate` is true, this controls whether
  // weather suggestions are turned on.
@@ -1868,7 +1871,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // If `browser.urlbar.trending.featureGate` is true, this controls whether
  // trending suggestions are turned on.
-@@ -668,13 +668,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
+@@ -664,13 +664,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
  pref("browser.urlbar.groupLabels.enabled", true);
  
  // The Merino endpoint URL, not including parameters.
@@ -1885,7 +1888,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // Timeout for Merino fetches (ms).
  pref("browser.urlbar.merino.timeoutMs", 500);
-@@ -683,8 +683,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
+@@ -679,8 +679,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
  pref("browser.urlbar.merino.providers", "");
  
  // Merino endpoint prefs to be used for weather widgets
@@ -1896,7 +1899,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // Comma-separated list of client variants to send to Merino
  pref("browser.urlbar.merino.clientVariants", "");
-@@ -725,7 +725,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
+@@ -721,7 +721,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
  
  // If `browser.urlbar.mdn.featureGate` is true, this controls whether
  // mdn suggestions are turned on.
@@ -1905,7 +1908,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // Feature gate pref for Yelp suggestions in the urlbar.
  pref("browser.urlbar.yelp.featureGate", false);
-@@ -747,7 +747,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
+@@ -743,7 +743,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
  
  // If `browser.urlbar.yelp.featureGate` is true, this controls whether
  // Yelp suggestions are turned on.
@@ -1914,7 +1917,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // Feature gate pref for Fakespot suggestions in the urlbar.
  // TODO Bug 1982966: Remove this after all experiments and rollouts using it
-@@ -1893,7 +1893,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
+@@ -1849,7 +1849,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
  pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true);
  
  // Weather widget for newtab
@@ -1923,7 +1926,7 @@ index 141a9ea3b9..df0914c363 100644
  pref("browser.newtabpage.activity-stream.weather.query", "");
  pref("browser.newtabpage.activity-stream.weather.display", "detailed");
  
-@@ -1903,10 +1903,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
+@@ -1859,10 +1859,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
  pref("browser.newtabpage.activity-stream.weather.locationSearchEnabled", true);
  
  // List of regions that get weather by default.
@@ -1936,7 +1939,7 @@ index 141a9ea3b9..df0914c363 100644
  
  // Promo card visibility
  pref("browser.newtabpage.activity-stream.discoverystream.promoCard.visible", true);
-@@ -2051,10 +2051,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
+@@ -2007,10 +2007,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
  // List of locales for contextual ads.
  pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.locale-config", "en-US,en-GB,en-CA");
  
@@ -1950,6 +1953,28 @@ index 141a9ea3b9..df0914c363 100644
  pref("browser.newtabpage.activity-stream.discoverystream.imageProxy.enabled", true);
  
  // List of regions that get spocs by default.
+@@ -2257,7 +2257,7 @@ pref("browser.smartwindow.firstrun.explainerURL", "https://www.firefox.com/en-US
+ 
+ // Smart Window: Merino World Cup Soccer tool call (bug 2038266)
+ pref("browser.smartwindow.worldcup.enabled", true);
+-pref("browser.smartwindow.worldcup.endpointURL", "https://merino.services.mozilla.com");
++pref("browser.smartwindow.worldcup.endpointURL", "");
+ pref("browser.smartwindow.worldcup.timeoutMs", 2000);
+ 
+ // Smart Window Logging
+diff --git a/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs b/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs
+index a82d93dbd3..6f2353d383 100644
+--- a/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs
++++ b/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs
+@@ -14,7 +14,7 @@
+ 
+ const ENDPOINT_PREF = "browser.smartwindow.worldcup.endpointURL";
+ const TIMEOUT_PREF = "browser.smartwindow.worldcup.timeoutMs";
+-const DEFAULT_ENDPOINT = "https://merino.services.mozilla.com";
++const DEFAULT_ENDPOINT = "";
+ const DEFAULT_TIMEOUT_MS = 2000;
+ 
+ const lazy = {};
 diff --git a/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs b/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs
 index fc8ca65216..06c3492aac 100644
 --- a/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs
@@ -1964,23 +1989,23 @@ index fc8ca65216..06c3492aac 100644
        score: 0,
        custom_details: {
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-index d5818ffe64..106cac560a 100644
+index 531eea8e14..bc8fda3235 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-@@ -43,7 +43,7 @@ const PREF_SPOCS_STARTUPCACHE_ENABLED =
+@@ -48,7 +48,7 @@ const PREF_NOVA_ENABLED = "nova.enabled";
  
  // Feed URL
  const CURATED_RECOMMENDATIONS_FEED_URL =
 -  "https://merino.services.mozilla.com/api/v1/curated-recommendations";
 +  "";
  
- function getLayoutData(responsiveLayouts, index) {
-   let layoutData = {
+ // Divides evenly by 2, 3, and 4 to avoid orphan cards in any column layout.
+ const DEFAULT_MAX_TILES = 12;
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index 36eb74e928..418f504ae4 100644
+index c3e0e52fee..78e7224a07 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -462,7 +462,7 @@ export const PREFS_CONFIG = new Map([
+@@ -522,7 +522,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the weather report",
@@ -1989,7 +2014,7 @@ index 36eb74e928..418f504ae4 100644
      },
    ],
    [
-@@ -471,7 +471,7 @@ export const PREFS_CONFIG = new Map([
+@@ -531,7 +531,7 @@ export const PREFS_CONFIG = new Map([
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the hourly forecasts to display in Weather Forecast widget",
        value:
@@ -1999,10 +2024,10 @@ index 36eb74e928..418f504ae4 100644
    ],
    [
 diff --git a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
-index 6e378c7922..ed03a11e3b 100644
+index 1a9f055057..456e1493e8 100644
 --- a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 +++ b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
-@@ -57,7 +57,7 @@ const DEFAULT_PROPS = {
+@@ -56,7 +56,7 @@ const DEFAULT_PROPS = {
    },
    feed: {
      embed_reference: null,
@@ -2011,7 +2036,7 @@ index 6e378c7922..ed03a11e3b 100644
    },
  };
  
-@@ -556,7 +556,7 @@ describe("<CardSections />", () => {
+@@ -643,7 +643,7 @@ describe("<CardSections />", () => {
            ...INITIAL_STATE.DiscoveryStream,
            feeds: {
              data: {
@@ -2020,7 +2045,7 @@ index 6e378c7922..ed03a11e3b 100644
                  {
                    data: {
                      recommendations: [
-@@ -594,7 +594,7 @@ describe("<CardSections />", () => {
+@@ -681,7 +681,7 @@ describe("<CardSections />", () => {
  
      it("should not render BriefingCard when fewer than 3 headlines available", () => {
        state.DiscoveryStream.feeds.data[
@@ -2030,7 +2055,7 @@ index 6e378c7922..ed03a11e3b 100644
  
        const { container } = render(
 diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
-index b7d96b4e52..a5748d4ef4 100644
+index 13ac94e24e..320b8d261f 100644
 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 +++ b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 @@ -71,7 +71,7 @@ const DEFAULT_PROPS = {
@@ -2042,7 +2067,7 @@ index b7d96b4e52..a5748d4ef4 100644
    },
  };
  
-@@ -937,7 +937,7 @@ describe("<CardSections />", () => {
+@@ -1013,7 +1013,7 @@ describe("<CardSections />", () => {
            ...INITIAL_STATE.DiscoveryStream,
            feeds: {
              data: {
@@ -2051,7 +2076,7 @@ index b7d96b4e52..a5748d4ef4 100644
                  {
                    data: {
                      recommendations: [
-@@ -978,7 +978,7 @@ describe("<CardSections />", () => {
+@@ -1054,7 +1054,7 @@ describe("<CardSections />", () => {
  
      it("should not render BriefingCard when fewer than 3 headlines available", () => {
        state.DiscoveryStream.feeds.data[
@@ -2061,10 +2086,10 @@ index b7d96b4e52..a5748d4ef4 100644
  
        const props = createBriefingSectionProps();
 diff --git a/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js b/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
-index 2660aa2ccd..919f5a9eea 100644
+index 5c00b10a20..90a7556497 100644
 --- a/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
 +++ b/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
-@@ -3384,7 +3384,7 @@ describe("DiscoveryStreamFeed", () => {
+@@ -3367,7 +3367,7 @@ describe("DiscoveryStreamFeed", () => {
        };
  
        feedsData = {
@@ -2087,18 +2112,50 @@ index e4e82bcb03..948c6e8d20 100644
        "receivedRank": 0,
        "features": { "t_business": 1.0 }
 diff --git a/docs/rust-components/topic-guides/merino.md b/docs/rust-components/topic-guides/merino.md
-index 006e0f3f98..96abdd28c4 100644
+index 0aa9ca94fa..4ba2c61133 100644
 --- a/docs/rust-components/topic-guides/merino.md
 +++ b/docs/rust-components/topic-guides/merino.md
-@@ -1,6 +1,6 @@
- # Curated Recommendations Client
+@@ -5,7 +5,7 @@ myst:
+ 
+ # Merino
+ 
+-The Merino component provides two clients for interacting with the [Merino service](https://merino.services.mozilla.com/docs):
++The Merino component provides two clients for interacting with the [Merino service](https://merino.example.invalid/docs):
+ 
+ - **`CuratedRecommendationsClient`** — Fetches personalized content recommendations, powering features like Firefox's New Tab page.
+ - **`SuggestClient`** — Fetches search suggestions, powering features like Firefox's address bar.
+@@ -24,8 +24,8 @@ import mozilla.appservices.viaduct.configureOhttpChannel
+ configureOhttpChannel(
+     channel = "merino",
+     config = OhttpConfig(
+-        relayUrl = "https://ohttp-merino.mozilla.fastly-edge.com",
+-        gatewayHost = "ohttp-gateway-merino.services.mozilla.com",
++        relayUrl = "",
++        gatewayHost = "ohttp-gateway-merino.example.invalid",
+     ),
+ )
+ ```
+@@ -33,8 +33,8 @@ configureOhttpChannel(
+ ```swift
+ // Configure the OHTTP channel before using SuggestClient
+ let config = OhttpConfig(
+-    relayUrl: "https://ohttp-merino.mozilla.fastly-edge.com",
+-    gatewayHost: "ohttp-gateway-merino.services.mozilla.com"
++    relayUrl: "",
++    gatewayHost: "ohttp-gateway-merino.example.invalid"
+ )
+ try configureOhttpChannel(channelId: "merino", config: config)
+ ```
+@@ -48,7 +48,7 @@ Both clients are synchronous — calling them directly will block the current th
+ 
+ ## Curated Recommendations Client
  
 -Fetches personalized content recommendations from the Merino Service. [Merino Curated Recommendations API Docs](https://merino.services.mozilla.com/docs#/default/curated_content_api_v1_curated_recommendations_post)
-+Fetches personalized content recommendations from the Merino Service.
++Fetches personalized content recommendations from the Merino Service. [Merino Curated Recommendations API Docs](https://merino.example.invalid/docs#/default/curated_content_api_v1_curated_recommendations_post)
  
- The API for the `CuratedRecommendationsClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/CuratedRecommendationsClient.html).
+ The API for the `CuratedRecommendationsClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-curated-recommendations-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/CuratedRecommendationsClient.html).
  
-@@ -38,7 +38,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
+@@ -77,7 +77,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
  ```kotlin
  
  val config = CuratedRecommendationsConfig(
@@ -2107,7 +2164,7 @@ index 006e0f3f98..96abdd28c4 100644
      userAgentHeader = "Mozilla/5.0"
  )
  
-@@ -49,7 +49,7 @@ val client = CuratedRecommendationsClient(config)
+@@ -88,7 +88,7 @@ val client = CuratedRecommendationsClient(config)
  ```swift
  
  let config = CuratedRecommendationsConfig(
@@ -2116,6 +2173,76 @@ index 006e0f3f98..96abdd28c4 100644
      userAgentHeader: "Mozilla/5.0"
  )
  
+@@ -237,7 +237,7 @@ func fetchCuratedRecommendations() {
+ 
+ ## Suggest Client
+ 
+-Fetches search suggestions from the Merino suggest endpoint. [Merino Suggest API Docs](https://merino.services.mozilla.com/docs#/default/suggest_api_v1_suggest_get)
++Fetches search suggestions from the Merino suggest endpoint.
+ 
+ The API for the `SuggestClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-suggest-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/SuggestClient.html).
+ 
+@@ -265,7 +265,7 @@ The `SuggestClient` is initialized using a `SuggestConfig` object with an option
+ ```kotlin
+ 
+ val config = SuggestConfig(
+-    baseHost = null // defaults to https://merino.services.mozilla.com
++    baseHost = null // defaults to https://merino.example.invalid
+ )
+ 
+ val client = SuggestClient(config)
+@@ -274,7 +274,7 @@ val client = SuggestClient(config)
+ 
+ ```swift
+ 
+-let config = SuggestConfig(baseHost: nil) // defaults to https://merino.services.mozilla.com
++let config = SuggestConfig(baseHost: nil) // defaults to https://merino.example.invalid
+ 
+ let client = try SuggestClient(config: config)
+ 
+@@ -337,7 +337,7 @@ do {
+ 
+ | **Field** | **Type** | **Description** |
+ |-----------|---------|----------------|
+-| `baseHost` | `string (optional)` | The base host for the Merino endpoint. Defaults to `https://merino.services.mozilla.com`. |
++| `baseHost` | `string (optional)` | The base host for the Merino endpoint. Defaults to `https://merino.example.invalid`. |
+ 
+ ### SuggestOptions
+ 
+@@ -356,7 +356,7 @@ All fields are optional — omitted fields are not sent to Merino.
+ 
+ ### Response
+ 
+-`getSuggestions()` returns the raw JSON response body as a string. The response follows the [Merino suggest API schema](https://merino.services.mozilla.com/docs#/default/suggest_api_v1_suggest_get).
++`getSuggestions()` returns the raw JSON response body as a string. The response follows the [Merino suggest API schema](https://merino.example.invalid/docs#/default/suggest_api_v1_suggest_get).
+ 
+ ## Error Handling
+ 
+diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
+index daba47117f..604c19c762 100644
+--- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
++++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
+@@ -133,8 +133,6 @@ data class IconRequest(
+ 
+             /**
+              * An icon found in Mozilla's Merino Manifest list.
+-             *
+-             * https://merino.services.mozilla.com/api/v1/manifest
+              */
+             MERINO_MANIFEST,
+ 
+diff --git a/mobile/android/android-components/components/service/merino-manifest/README.md b/mobile/android/android-components/components/service/merino-manifest/README.md
+index 2fb1e95797..b8a033a9b9 100644
+--- a/mobile/android/android-components/components/service/merino-manifest/README.md
++++ b/mobile/android/android-components/components/service/merino-manifest/README.md
+@@ -1,7 +1,6 @@
+ # [Android Components](../../../README.md) > Service > Merino Manifest
+ 
+ A library that provides metadata for popular websites using an embedded snapshot of the Merino manifest. The manifest is sourced from Mozilla's Merino service and includes icons, titles, and category information for top sites.
+-See https://merino.services.mozilla.com/docs#/manifest/get_manifest_api_v1_manifest_get.
+ 
+ ## Usage
+ 
 diff --git a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/recommendations/api/ContentRecommendationEndpointRaw.kt b/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/recommendations/api/ContentRecommendationEndpointRaw.kt
 index f574f1ce06..c01b8738ef 100644
 --- a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/recommendations/api/ContentRecommendationEndpointRaw.kt
@@ -2190,5 +2317,5 @@ index f6b9dc43b0..e962ddd2a7 100644
      )?;
  
 -- 
-2.53.0
+2.54.0
 
diff --git a/libre/iceweasel/9003-FSDG-urihandlers.patch b/libre/iceweasel/9003-FSDG-urihandlers.patch
index 7f6b971..cf61f0f 100644
--- a/libre/iceweasel/9003-FSDG-urihandlers.patch
+++ b/libre/iceweasel/9003-FSDG-urihandlers.patch
@@ -1,4 +1,4 @@
-From 85b46f40e83ea2163fcd06df86dc9b706f4d68ac Mon Sep 17 00:00:00 2001
+From 0591e49871c04ee2f9a9090092a99e86b790c74d Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH] Remove URI handlers that serve nonfree software
@@ -216,5 +216,5 @@ index e95d627c07..81f9218da9 100644
          ],
        },
 -- 
-2.53.0
+2.54.0
 
diff --git a/libre/iceweasel/9004-FSDG-misc.patch b/libre/iceweasel/9004-FSDG-misc.patch
index d66fc64..429015d 100644
--- a/libre/iceweasel/9004-FSDG-misc.patch
+++ b/libre/iceweasel/9004-FSDG-misc.patch
@@ -1,4 +1,4 @@
-From 277483df5b8ef213ce4a7eafafd4ac844e2f1cdd Mon Sep 17 00:00:00 2001
+From 2064606ab0b5e62c7b60031d0418e8f4107cb731 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 12 Mar 2022 17:14:25 +0100
 Subject: [PATCH 1/7] Replace upstream default bookmarks
@@ -78,10 +78,10 @@ index 2f764caf6f..a0f27ae8e7 100644
  </body>
  </html>
 -- 
-2.53.0
+2.54.0
 
 
-From ba186c07da661bdf30724820d5a86a5ff044a1ce Mon Sep 17 00:00:00 2001
+From 9509fef582f6258d031d797cb8a59898fb04dad0 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:46:48 +0200
 Subject: [PATCH 2/7] Remove 'More from Mozilla' section in Preferences
@@ -97,16 +97,16 @@ reasons as desktop Firefox.
  .../more-from-mozilla-qr-code-simple.svg      |  4 ---
  .../components/preferences/moreFromMozilla.js | 30 -------------------
  browser/components/preferences/preferences.js |  8 -----
- .../components/preferences/preferences.xhtml  | 12 --------
- 8 files changed, 1 insertion(+), 71 deletions(-)
+ .../components/preferences/preferences.xhtml  |  8 -----
+ 8 files changed, 1 insertion(+), 67 deletions(-)
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index df0914c363..3b803be1ca 100644
+index 1f8560ed04..ce98af43e8 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1387,7 +1387,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
+@@ -1384,7 +1384,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
  // Whether we had to hide the "Firefox Labs" section because it would be empty.
  pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
@@ -116,7 +116,7 @@ index df0914c363..3b803be1ca 100644
  pref("browser.preferences.aiControls", false);
  // Whether to show unavailable AI controls regardless of region/locale
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index 03b2b385f1..ff0e63e8db 100644
+index a663f5480b..2db38a7b98 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
 @@ -191,15 +191,6 @@ var allowlist = [
@@ -136,7 +136,7 @@ index 03b2b385f1..ff0e63e8db 100644
  
    // toolkit/mozapps/extensions/AddonContentPolicy.cpp
 diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
-index b2d65603ec..124b35b56f 100644
+index 78e38f98c1..1ff77095db 100644
 --- a/browser/components/preferences/jar.mn
 +++ b/browser/components/preferences/jar.mn
 @@ -15,12 +15,9 @@ browser.jar:
@@ -214,7 +214,7 @@ index d426bebcc1..1afa52e3c6 100644
          id: "mozilla-monitor",
          title_string_id: "more-from-moz-mozilla-monitor-title",
 diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
-index 2d6cba7fac..20fbd62717 100644
+index 9d13733318..46e5919275 100644
 --- a/browser/components/preferences/preferences.js
 +++ b/browser/components/preferences/preferences.js
 @@ -10,7 +10,6 @@
@@ -225,7 +225,7 @@ index 2d6cba7fac..20fbd62717 100644
  /* import-globals-from findInPage.js */
  /* import-globals-from /browser/base/content/utilityOverlay.js */
  /* import-globals-from /toolkit/content/preferencesBindings.js */
-@@ -359,13 +358,6 @@ function init_all() {
+@@ -412,13 +411,6 @@ function init_all() {
      document.getElementById("category-experimental").hidden = true;
    }
  
@@ -240,7 +240,7 @@ index 2d6cba7fac..20fbd62717 100644
    // registered and inititalized since many tests wait for the
    // "sync-pane-loaded" observer notification before starting the test.
 diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
-index b006d5e5e6..2c4f1b2ab4 100644
+index 3c4b3225c6..6247bd44c0 100644
 --- a/browser/components/preferences/preferences.xhtml
 +++ b/browser/components/preferences/preferences.xhtml
 @@ -46,7 +46,6 @@
@@ -251,24 +251,20 @@ index b006d5e5e6..2c4f1b2ab4 100644
    <link rel="localization" href="browser/preferences/preferences.ftl"/>
    <link rel="localization" href="toolkit/branding/brandings.ftl"/>
    <link rel="localization" href="toolkit/firefoxlabs/features.ftl"/>
-@@ -185,16 +184,6 @@
-           <image class="category-icon"/>
-           <label class="category-name" flex="1" data-l10n-id="settings-pane-labs-title"></label>
-         </richlistitem>
--        <richlistitem id="category-more-from-mozilla"
--                      class="category"
--                      hidden="true"
--                      data-l10n-id="more-from-moz-category"
--                      data-l10n-attrs="tooltiptext"
--                      value="paneMoreFromMozilla"
--                      align="center">
--          <image class="category-icon"/>
--          <label class="category-name" flex="1" data-l10n-id="more-from-moz-title"></label>
--        </richlistitem>
+@@ -158,12 +157,6 @@
+         iconsrc="chrome://global/skin/icons/experiments.svg"
+         data-l10n-id="settings-pane-labs-title">
+       </html:moz-page-nav-button>
+-      <html:moz-page-nav-button id="category-more-from-mozilla"
+-        hidden="true"
+-        view="paneMoreFromMozilla"
+-        iconsrc="chrome://browser/skin/preferences/mozilla-logo.svg"
+-        data-l10n-id="more-from-moz-title">
+-      </html:moz-page-nav-button>
  
-         <!-- The following <richlistitem> elements are hidden from the list of items via the hidden-category class.
-             The intent is that they act as sub-pages, accessible from the UI of one of the main pages, but are
-@@ -265,7 +254,6 @@
+       <!-- Hidden sub-page entries (CSS display:none via .hidden-category).
+            These keep gotoPref() routing working for sub-pages that are
+@@ -217,7 +210,6 @@
  #include containers.inc.xhtml
  #include sync.inc.xhtml
  #include experimental.inc.xhtml
@@ -277,10 +273,10 @@ index b006d5e5e6..2c4f1b2ab4 100644
        </vbox>
      </vbox>
 -- 
-2.53.0
+2.54.0
 
 
-From a6cdcc253857dcccecc943eff6fb792003dd6659 Mon Sep 17 00:00:00 2001
+From 82edc16bbbaecd8f2c318573f989223bd2f7d0fd Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:51:06 +0200
 Subject: [PATCH 3/7] Remove promos of Firefox Focus and Klar from Private
@@ -300,10 +296,10 @@ for the same reasons as the original Firefox.
  delete mode 100644 browser/components/privatebrowsing/content/assets/klar-qr-code.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 3b803be1ca..7b2cdee492 100644
+index ce98af43e8..94cd38b6df 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2577,7 +2577,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
+@@ -2558,7 +2558,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
  pref("browser.promo.focus.disallowed_regions", "cn");
  
  // Default to enabling focus promos to be shown where allowed.
@@ -313,7 +309,7 @@ index 3b803be1ca..7b2cdee492 100644
  // Default to enabling pin promos to be shown where allowed.
  pref("browser.promo.pin.enabled", true);
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index ff0e63e8db..5e2a1b6dff 100644
+index 2db38a7b98..d8fe7ddb01 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
 @@ -40,8 +40,6 @@ var gExceptionPaths = [
@@ -326,10 +322,10 @@ index ff0e63e8db..5e2a1b6dff 100644
    "chrome://browser/content/asrouter/assets/fox-with-devices.svg",
    "chrome://browser/content/asrouter/assets/fox-with-locked-box.svg",
 diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-index 5160df7604..a82a08a572 100644
+index 8ff0d708ad..5967db25c3 100644
 --- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-@@ -1460,315 +1460,6 @@ const BASE_MESSAGES = () => [
+@@ -1551,315 +1551,6 @@ const BASE_MESSAGES = () => [
        ],
      },
    },
@@ -646,10 +642,10 @@ index 5160df7604..a82a08a572 100644
      id: "PB_NEWTAB_PIN_PROMO",
      template: "pb_newtab",
 diff --git a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-index 787c76055d..2c660a4dc8 100644
+index be5ced8c97..009c0fedfb 100644
 --- a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-@@ -1826,85 +1826,6 @@ const MESSAGES = () => [
+@@ -1901,85 +1901,6 @@ const MESSAGES = () => [
      frequency: { lifetime: 3 },
      trigger: { id: "defaultBrowserCheck" },
    },
@@ -976,10 +972,10 @@ index 2217ca055c..0000000000
 -</defs>
 -</svg>
 -- 
-2.53.0
+2.54.0
 
 
-From 7c7d1684664291e9e05169548451d1ffd3011896 Mon Sep 17 00:00:00 2001
+From d2a29da94cb4009af27f2ab8d2c7afe14686a448 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 4/7] Remove 'Extensions for developers' menu item
@@ -1009,7 +1005,7 @@ index 12b33b3b5f..a910809c21 100644
  const DELAY_BEFORE_EXPAND_MS = 1000;
  const CATEGORY_ICONS = {
 diff --git a/devtools/client/framework/devtools-browser.js b/devtools/client/framework/devtools-browser.js
-index f660dae686..1c86c166b8 100644
+index c64750c2a1..e4d2c1e694 100644
 --- a/devtools/client/framework/devtools-browser.js
 +++ b/devtools/client/framework/devtools-browser.js
 @@ -131,8 +131,9 @@ var gDevToolsBrowser = (exports.gDevToolsBrowser = {
@@ -1037,10 +1033,10 @@ index 837e99fbfa..7c68c4f47f 100644
      },
    },
 -- 
-2.53.0
+2.54.0
 
 
-From 09db33789dd6af5b39fb0fbdc73261e1735bf914 Mon Sep 17 00:00:00 2001
+From 736630a267d14d9ae114af4a04b42f6a3cdc6f5a Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 12 Mar 2023 21:57:14 +0100
 Subject: [PATCH 5/7] Change DuckDuckGo URL to DuckDuckGo HTML URL
@@ -1099,10 +1095,10 @@ index 104eee6457..9a3279c622 100644
        "suggest_url_get_params": "q={searchTerms}&type=list"
      }
 -- 
-2.53.0
+2.54.0
 
 
-From b8fc0154c166b434b47fabeedcfdc6bba0ffa5c3 Mon Sep 17 00:00:00 2001
+From d07abc26b123ce454351f7f042bd506f37cb1840 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 22:12:44 +0200
 Subject: [PATCH 6/7] Remove references to nonfree Generative AI chats
@@ -1127,10 +1123,10 @@ to false.
  3 files changed, 5 insertions(+), 117 deletions(-)
 
 diff --git a/browser/components/genai/GenAI.sys.mjs b/browser/components/genai/GenAI.sys.mjs
-index 773b697e80..d51f3be16a 100644
+index 43fbf0ec69..bbef7d58ee 100644
 --- a/browser/components/genai/GenAI.sys.mjs
 +++ b/browser/components/genai/GenAI.sys.mjs
-@@ -80,7 +80,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
+@@ -82,7 +82,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
    lazy,
    "chatProviders",
    "browser.ml.chat.providers",
@@ -1139,7 +1135,7 @@ index 773b697e80..d51f3be16a 100644
    reorderChatProviders
  );
  XPCOMUtils.defineLazyPreferenceGetter(
-@@ -135,99 +135,10 @@ export const GenAI = {
+@@ -137,99 +137,10 @@ export const GenAI = {
    // will allow for additional UI shown such as populating dropdown with a name,
    // showing links, and other special behaviors needed for individual providers.
    chatProviders: new Map([
@@ -1239,7 +1235,7 @@ index 773b697e80..d51f3be16a 100644
          linksId: "genai-settings-chat-localhost-links",
          maxLength: 8192,
          name: "localhost",
-@@ -1121,7 +1032,7 @@ export const GenAI = {
+@@ -1130,7 +1041,7 @@ export const GenAI = {
    },
  
    /**
@@ -1248,7 +1244,7 @@ index 773b697e80..d51f3be16a 100644
     *
     * @param {Browser} browser - current browser
     * @param {string} prompt - prompt text
-@@ -1313,7 +1224,7 @@ export const GenAI = {
+@@ -1322,7 +1233,7 @@ export const GenAI = {
      }
      browser.fixupAndLoadURIString(url, options);
  
@@ -1307,10 +1303,10 @@ index f10084073c..b47aa5e5dd 100644
  ## Chatbot prompts
  ## Prompts are plain language ‘instructions’ sent to a chatbot.
 -- 
-2.53.0
+2.54.0
 
 
-From 0f0d55400b23c0fb305a1feae6c8436f993815ed Mon Sep 17 00:00:00 2001
+From 96c665d2563103118d1cb0d9d20ffa0f8a7f45c4 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH 7/7] Various patches
@@ -1344,10 +1340,10 @@ index fe018a08c7..0d1bff96d6 100644
  origin	remote-troubleshooting	1	https://support.mozilla.org
  
 diff --git a/browser/components/preferences/sync.inc.xhtml b/browser/components/preferences/sync.inc.xhtml
-index b889d42301..9007c3db2a 100644
+index c379e1a5f8..de642e7918 100644
 --- a/browser/components/preferences/sync.inc.xhtml
 +++ b/browser/components/preferences/sync.inc.xhtml
-@@ -35,24 +35,6 @@
+@@ -36,24 +36,6 @@
          </hbox>
        </vbox>
      </hbox>
@@ -1434,10 +1430,10 @@ index 84ffc25fb5..7a0c647616 100644
      const vpnBanner = this.doc.querySelector(".vpn-banner");
      const exitIcon = vpnBanner.querySelector(".exit-icon");
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 869878aee6..e7b3cfa0fc 100644
+index 79e20bf615..2cf3a6625e 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -1286,16 +1286,6 @@ sync-signedout-account-short =
+@@ -1301,16 +1301,6 @@ sync-signedout-account-short =
      .label = Sign in
      .accesskey = i
  
@@ -1555,5 +1551,5 @@ index d390fc6e8e..06d772fdc4 100644
 --firefoxlabs-brand-name = Firefox Labs
 +-firefoxlabs-brand-name = Iceweasel Labs
 -- 
-2.53.0
+2.54.0
 
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 7264fa3..0e4bce6 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=150.0.3
+pkgver=151.0
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -168,9 +168,7 @@ source=(
   $pkgname.desktop
   org.mozilla.$pkgname.metainfo.xml
   0001-Install-under-remoting-name.patch
-  0002-Bug-2033279-Make-enable-rust-simd-work-with-Rust-1.9.patch
-  0003-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
-  0004-Bug-2023597-Use-wasm32-wasip1-target-for-clang-22.1-.patch
+  0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
 )
 source=( ${source[*]/${pkgname}-symbolic.svg/} )  # branding over-ride
 source=( ${source[*]/org.mozilla./nu.parabola.} ) # branding over-ride
@@ -196,30 +194,26 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('0a0a539ccc96d928fec78af511884b9b89d0aec87f0d5a8852d9298b2d9332da'
+sha256sums=('39a17369335943f9451b26ebf79c9b4c4572399e57cdadc25c661cebecc0c21c'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
             'a6e4ab312203ae1df50537f4e6631417b84df46bac4cce2d51145751a405cd8f'  # nu.parabola.$pkgname.metainfo.xml
-            'a7364ddb3b6eab922873f35731ed5cfb61e8022a35d54edd2f80b95a4f5625ed'
-            '9f10d9bfcaa3a8dd86a8654431f820716a45a72a885c29fd6359bccc7bcdaefa'
-            'f579e02644ef9c29da5cd61d2c9213ba1c3f7a1aa8abf601bdf07cbbbadb1ce3'
-            'd6e1dbafe56bc52c8ab6cbf9542cf80e89c1857a71ce08bbbd82804909bcb76f')
+            'f0118f1b092e471fe3c81c1e8b49a76a37f72f3263d00a18e939dcde80c90dac'
+            'c7d6572fe1ac76f6adbfb10102f284fd55690396ac0a275a5cfea9a2efa22b58')
 sha256sums+=('86bd54db6026ff65bd24ac4f05d0679a645ff447e2f81b0ee44037c0c4285e06') # vendor.js.in
 sha256sums_armv7h=('883ca2fa723a7572269d18559d5b82412782ad63e5dd3820eeb0540e3fe34314')
 sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c1809'  # avoid-libxul-OOM-python-check.patch
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('c167496083203222116cac44d0b58a1931530fa6ca4edc5176466ed82928e4d17859b5c722796b748c08f7f26957183ed8c5ce343fa2f812a7ec9b3d176755a1'
+b2sums=('170cd234f7d4256523634c76f424dd460db91e220c6935b34e402befbce5edfaf6d1dba9d0aeb4b45a78b6c0681c8efd6a9c56deeb376305c8cead62da6344ae'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
         '80cf1f7644f9b509fe374cd51fea288ffcca73f735c7d4c8e2a22be7543aa7e0f3c84a619315e5fb4b82967f1cc7b2b4282658af859be1a08d2f29c39f2815d7'   # nu.parabola.$pkgname.metainfo.xml
-        'f5646fef13b59542438994a1593fb17b3a57ac5861fbc139269d44325159be0f13a9630a5e3838bad4d55ee9ce2e40810b4d8653dc15354e48caa04c3e9ba972'
-        '29772ea097f9f07abec2d79371885c1f9861b0655cdf03bcfb66517cb6433196f41791918bb36ccda3dceff30e46c0937d010ec43911a79e1cb025f014499660'
-        '01caaec5254c01cf7d11cd2cdc2a2909fc2105a9d9fa6c958c9520dbd49b95635d6f6ee69804218319ddbc533fe0860cfaf97fc9010341ca2edc1407d3d9e729'
-        'abf89c9a6c025f1a5c4b9dd8888eb2042ca412c966d1262a996735a171fdbdbc473461a8e751ec5c0e2f613f9d9dfd2c5d1975243e6fe074fd73a1462f78c759')
+        'c1cbb2de5011ed88e77c22c6abbc944ac2bd0f6c95bddb75f668f40566e6cad8d0090e65a5ff498055612a359f82484b41202f74e1312236e17d099e71bbc952'
+        '0420be311ae633c05d3a110b9fe5a8da288530d918ec9435c1a54d8d13bbbd06f5ee90977a9ee71d39e68bc26deb20264e712816e1dc5d7374b64a920e51b353')
 b2sums+=('f3f344196d03499f3f0392d5dfc5310e131d8c85772edd340faf1df3f04ebf2931eb1dda1b7fe6870d61d498618f4d8ae9f1dd446acbe83e0ce324e04b38f3f9') # vendor.js.in
 b2sums_armv7h=('8a894b01e405b628877483e40e9b018647977cb053b6af02afc901ed24d6e1f767f3db8c321070e33aea4a05ba16f1eb47ae600e5299b5f9caad03d20ba38cf5')
 b2sums_i686=('572bb35d7aee0ac847a864b4309f73390435f16b750b8fa3c78b986181d57cdad434bca006d7438c903b2fdc08385292d08fee1d68c87240af72688d60cb8657'  # avoid-libxul-OOM-python-check.patch
@@ -270,17 +264,17 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
             process-json-files.py )
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
-                '2d0846c9f966fcc5efb34f5ca0cdd21dd284b0344df9557d286e8cda98fb3b1b'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                'da6cf41706c7e399a6b2d51cd3ec73ead08203f365e7b76a6dcc3f741edba561'   # 9002-FSDG-preference-defaults.patch
-                'b8880edefbee77c5ed51830d3d2c4d8f7eb749dba5ae53828ffab4d489142aff'   # 9003-FSDG-urihandlers.patch
-                'e49b66abd14bb9d5b0c3aec0a8ee01fc057c38c30a2f0a5d300ecdad0da07f0f'   # 9004-FSDG-misc.patch
+                'd39c35ac1f6b83c31e05f36331b18827b4c7e29e0bfdf0792bc219f30231975f'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+                'f90eb4b8c2e7c605291930358b56dcb1a89d9fac878f7ffcfa1702c764addd93'   # 9002-FSDG-preference-defaults.patch
+                'dc29d095a0f55cb3c2decb68af3b03a67ddfd0b99823f7fc120c29d77104ebe5'   # 9003-FSDG-urihandlers.patch
+                '40281e012820eb0fb40eee1c4c18fe78a47f96e8716119ada2038768ed06c52b'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
-            'a2ea53346ec29a43ae29da118a6287f85a51806f8d33c64b6df190ff5c63fabe3681f01a16174b029e8942619e4c77b8ae5dc66ed8edba5ea9cb42cded317c03'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            '2c523aa33dcbc5bd902a1dd971b1b13a61c69bff8c40bafb48915b0ad77d4483e0b602d0c7bbda6b1cfc8bbd9109fa7cf4d117f6a48f62a630a93bff8f52fe50'   # 9002-FSDG-preference-defaults.patch
-            'fbdda325966c8a7e887f9424a62eacd30281c425f075a05a2f7fabd310a039b3af246e896db8dba7ffbfe8923bc7ef9beb41d9d3b659587bc98f41642a51bece'   # 9003-FSDG-urihandlers.patch
-            '68911b711f4f0eec11c28e083bdc2bfd7fc7d03e35fc66d24c90fa38e14d3db1d04570d3ab0047872b5f16c90354f3ddba43565f9773a2b2986933605124a693'   # 9004-FSDG-misc.patch
+            '12e5a04e9c63de5fe71b2e1ade3626119bcbae01865f856e56758a3fb162676db649d7eee8dd101d995a6b8db219f6cac1b95da82c6b9e307d2cd3c83c766f98'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+            'bd709384f2b415ce3d2c626fb8891b7fdf171be16d27ea6d016da8de05618f9eac3478ff6d32fd3f945b98cabfbf71ab04dbc08d1c12eb53710e6336a804d8af'   # 9002-FSDG-preference-defaults.patch
+            '66f4c3d75905e81268bce6564824e6b701fb97880018db71e3661d15b6ff86032291ef731ac44c5866c2d671f9fdd95bab3927fbb89794693fa2e25e110f24fa'   # 9003-FSDG-urihandlers.patch
+            'b034e84eb99155c702346ba1d9468932f155d04279e94d3499b1e8dce9d17b095c758b524e6a73a9fc207e8e5091fd10073b20b8dfc51192bb2c2217df6bf995'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
 source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
          ${source[*]:${_N_MKSOURCES}} )
@@ -521,6 +515,8 @@ mksource() {
   sed -i '/vendor\//d' toolkit/components/ml/jar.mn
   rm -frv toolkit/components/ml/vendor
 
+  rm -v mobile/android/android-components/components/service/merino-manifest/src/main/assets/manifest/manifest.json
+
   # Remove test-related networking dumps, because they contain code from
   # some Amazon webpage with no clear licensing, thus nonfree.
   # Also they interfere with checking of Remote Settings patching done later,
@@ -571,17 +567,9 @@ prepare() {
   # Make different channels installable in parallel
   patch -Np1 -i ../0001-Install-under-remoting-name.patch
 
-  # Fix build with Rust 1.95.0
-  # https://bugzilla.mozilla.org/show_bug.cgi?id=2033279
-  patch -Np1 -i ../0002-Bug-2033279-Make-enable-rust-simd-work-with-Rust-1.9.patch
-
   # Fix build with glibc 2.43
   # https://bugzilla.mozilla.org/show_bug.cgi?id=1999625
-  patch -Np1 -i ../0003-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
-
-  # Fix build with Clang 22
-  # https://bugzilla.mozilla.org/show_bug.cgi?id=2023597
-  patch -Np1 -i ../0004-Bug-2023597-Use-wasm32-wasip1-target-for-clang-22.1-.patch
+  patch -Np1 -i ../0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
 
   # Use system python-typing-extensions instead of the old vendored one to avoid
   # unresolvable dependency versions. They are probably downloaded when network
@@ -1136,6 +1124,7 @@ package() {
   cd firefox-$pkgver
   DESTDIR="$pkgdir" ./mach install
   local appdir="$pkgdir/usr/lib/$pkgname"
+  touch "$appdir/is-packaged-app"
 
   install -Dvm644 /dev/stdin "$appdir/browser/defaults/preferences/vendor.js" <<END
 // Use LANG environment variable to choose locale
@@ -1216,7 +1205,7 @@ END
 
   # Replace duplicate binary with wrapper
   # https://bugzilla.mozilla.org/show_bug.cgi?id=658850
-  ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/firefox-bin"
+  ln -srfv "$pkgdir/usr/bin/$pkgname" "$appdir/firefox-bin"
   mv "$pkgdir/usr/lib/$pkgname/firefox-bin" "$pkgdir/usr/lib/$pkgname/$pkgname-bin" # minimize diff
 
   # TODO: The code block below was removed from the upstream PKGBUILD in 140.0 release.

From f7128176476ba361a0947fb8a799999dae89a084 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 5/12] libre/iceweasel: WIP 151.0.3-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 0e4bce6..6bfb44b 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=151.0
+pkgver=151.0.3
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -194,7 +194,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('39a17369335943f9451b26ebf79c9b4c4572399e57cdadc25c661cebecc0c21c'
+sha256sums=('7820284ed489057a3750715ccaa22d87e1965fd54f6525d3565f1e70743bfe66'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -207,7 +207,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('170cd234f7d4256523634c76f424dd460db91e220c6935b34e402befbce5edfaf6d1dba9d0aeb4b45a78b6c0681c8efd6a9c56deeb376305c8cead62da6344ae'
+b2sums=('48000217630b1eeef424f4a82c3839d49d531728959a4356739cee42f14580521b8b3313b8fd0783b14fb64e2ce020912460982be77f8dca9311ab9fd3194c3d'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop

From 9fe72dd0ae7516931a6c85ac6a8e83e1482ae400 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 6/12] libre/iceweasel: 152.0-1, sync with changes from upstreams


Some offending files were removed (such as search engine extensions),
some were added, so this time there are more extensive patch updates.

---

diff --git a/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch b/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
deleted file mode 100644
index 7518098..0000000
--- a/libre/iceweasel/0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
+++ /dev/null
@@ -1,3108 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
-Date: Thu, 12 Feb 2026 09:31:45 +0100
-Subject: [PATCH] Patch glsl-optimizer to build with glibc 2.43
-
----
- .cargo/config.toml.in                         |   5 +
- Cargo.lock                                    |   3 +-
- Cargo.toml                                    |   2 +
- supply-chain/audits.toml                      |   6 +
- supply-chain/config.toml                      |   4 +
- third_party/rust/glslopt/.cargo-checksum.json |   2 +-
- third_party/rust/glslopt/.cargo_vcs_info.json |   6 -
- third_party/rust/glslopt/Cargo.lock           |  25 --
- third_party/rust/glslopt/Cargo.toml           |   4 +-
- third_party/rust/glslopt/Cargo.toml.orig      |  12 -
- .../rust/glslopt/glsl-optimizer/.cargo-ok     |   0
- .../rust/glslopt/glsl-optimizer/.gitignore    |   4 -
- .../glslopt/glsl-optimizer/generateParsers.sh |   6 +-
- .../include/c11/threads_posix.h               |   6 +
- .../src/compiler/glsl/ast_function.cpp        |   2 +-
- .../src/compiler/glsl/ast_to_hir.cpp          |  24 +-
- .../src/compiler/glsl/builtin_functions.cpp   |   2 +-
- .../src/compiler/glsl/glcpp/glcpp-lex.c       |   8 +-
- .../src/compiler/glsl/glcpp/glcpp-lex.l       |   6 +-
- .../glsl-optimizer/src/compiler/glsl/ir.cpp   |   4 +-
- .../glsl/ir_builder_print_visitor.cpp         |   6 +-
- .../compiler/glsl/ir_expression_operation.py  |  18 +-
- .../glsl/ir_expression_operation_constant.h   | 248 +++++++++---------
- .../compiler/glsl/ir_print_glsl_visitor.cpp   |   6 +-
- .../src/compiler/glsl/ir_print_visitor.cpp    |   4 +-
- .../src/compiler/glsl/linker.cpp              |   2 +-
- .../src/compiler/glsl/loop_analysis.cpp       |   4 +-
- .../glsl/lower_blend_equation_advanced.cpp    |   2 +-
- .../src/compiler/glsl/lower_buffer_access.cpp |   4 +-
- .../src/compiler/glsl/lower_distance.cpp      |   2 +-
- .../src/compiler/glsl/lower_ubo_reference.cpp |   4 +-
- .../src/compiler/glsl/opt_algebraic.cpp       |   2 +-
- .../src/compiler/glsl/opt_minmax.cpp          |   2 +-
- .../src/compiler/glsl/opt_vectorize.cpp       |   2 +-
- .../src/compiler/glsl_types.cpp               |  16 +-
- .../glsl-optimizer/src/compiler/glsl_types.h  |   2 +-
- .../src/compiler/shader_enums.c               |   4 +-
- .../glsl-optimizer/src/mesa/main/shaderobj.h  |  12 +-
- .../glslopt/glsl-optimizer/src/util/macros.h  |  22 +-
- third_party/rust/glslopt/src/bindings.rs      |  46 ++--
- 40 files changed, 263 insertions(+), 276 deletions(-)
- delete mode 100644 third_party/rust/glslopt/.cargo_vcs_info.json
- delete mode 100644 third_party/rust/glslopt/Cargo.lock
- delete mode 100644 third_party/rust/glslopt/Cargo.toml.orig
- copy .trackerignore => third_party/rust/glslopt/glsl-optimizer/.cargo-ok (100%)
- delete mode 100644 third_party/rust/glslopt/glsl-optimizer/.gitignore
-
-diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in
-index be917029832d..0af8c7b9c51b 100644
---- a/.cargo/config.toml.in
-+++ b/.cargo/config.toml.in
-@@ -5,6 +5,11 @@
- [source.crates-io]
- replace-with = "vendored-sources"
- 
-+[source."git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d"]
-+git = "https://github.com/Erk-/glslopt-rs"
-+rev = "92fa39d0910e9e73de40b0d391906e6e2940080d"
-+replace-with = "vendored-sources"
-+
- [source."git+https://github.com/FirefoxGraphics/aa-stroke?rev=5776bdfc8ad664a1503db668fab397d818a5f98a"]
- git = "https://github.com/FirefoxGraphics/aa-stroke"
- rev = "5776bdfc8ad664a1503db668fab397d818a5f98a"
-diff --git a/Cargo.lock b/Cargo.lock
-index 4c4d30dfbd38..0c71a15468cb 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -2897,8 +2897,7 @@ dependencies = [
- [[package]]
- name = "glslopt"
- version = "0.1.12"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"
-+source = "git+https://github.com/Erk-/glslopt-rs?rev=92fa39d0910e9e73de40b0d391906e6e2940080d#92fa39d0910e9e73de40b0d391906e6e2940080d"
- dependencies = [
-  "cc",
- ]
-diff --git a/Cargo.toml b/Cargo.toml
-index 2648c32ae57e..a6a6e93e9a73 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -289,6 +289,8 @@ harfbuzz = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a9
- harfbuzz-traits = { git = "https://github.com/hsivonen/rust-harfbuzz", rev = "9d58a23a98772a197291d04af93f7041b7093d95" }
- # Make --enable-rust-simd compatible with Rust 1.95
- encoding_rs = { git = "https://github.com/hsivonen/encoding_rs", rev = "1236d1bc423e6ba35a06485f74a6304db2d703b5" }
-+# Make glsl-optimizer compatible with glibc 2.43
-+glslopt = { git = "https://github.com/Erk-/glslopt-rs", rev = "92fa39d0910e9e73de40b0d391906e6e2940080d" }
- 
- # objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13
- objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" }
-diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
-index 44cb3a10d208..6814e05851f9 100644
---- a/supply-chain/audits.toml
-+++ b/supply-chain/audits.toml
-@@ -2996,6 +2996,12 @@ criteria = "safe-to-deploy"
- delta = "0.1.11 -> 0.1.12"
- notes = "Only a minor build tweak."
- 
-+[[audits.glslopt]]
-+who = "Jan Alexander Steffens (heftig) <heftig@archlinux.org>"
-+criteria = "safe-to-deploy"
-+delta = "0.1.12 -> 0.1.12@git:92fa39d0910e9e73de40b0d391906e6e2940080d"
-+importable = false
-+
- [[audits.goblin]]
- who = "Jan-Erik Rediger <jrediger@mozilla.com>"
- criteria = "safe-to-deploy"
-diff --git a/supply-chain/config.toml b/supply-chain/config.toml
-index 15deefbec057..88848c730671 100644
---- a/supply-chain/config.toml
-+++ b/supply-chain/config.toml
-@@ -60,6 +60,10 @@ notes = "Used for testing."
- dependency-criteria = { tokio-reactor = [], tokio-threadpool = [] }
- notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack to pin the version used by audioipc-{client,server}. Suppress vetting on those for the same reasons behind the policy entries."
- 
-+[policy.glslopt]
-+audit-as-crates-io = true
-+notes = "This is upstream plus a build fix for bug 1999625."
-+
- [policy.gluesmith]
- criteria = "safe-to-run"
- notes = "Used for fuzzing."
-diff --git a/third_party/rust/glslopt/.cargo-checksum.json b/third_party/rust/glslopt/.cargo-checksum.json
-index e3300c718103..975a4c8da7b6 100644
---- a/third_party/rust/glslopt/.cargo-checksum.json
-+++ b/third_party/rust/glslopt/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","Cargo.toml.orig":"c46463ed28492baaaa17c772384cd1654093f96e900cefdb13d578e10561974f","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"}
-\ No newline at end of file
-+{"files":{".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.toml":"cd1efadd7a6d266acd8c412df59df8c8beec33e393567d4a5b236a3315f35d93","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"e8f7af58b34d4e46b475e848a0af1d9926bd1d9aa52727b4a80cbf13d1c2ca47","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"5fa592653213459e2cce70b430715246d53fd1a10c1866acf427874530a69f92","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"7cccd240c080f5ab2ed73f5f1a6e1ce9ae9583a209338c026db8f76272a352f2","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"256de69fbedf79fd0711b0e0edc2dc061e6bdf0b04996b05f9237036a8e375d9","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"09731e48472b42038aeb8b8f06fecc2d919d2333a088b52b06a9711d8afb9732","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"6ed9a66b752877aec847bf9e39e2126860552a5d5f225e8c2523d6155b51eea8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"15fa8afa3011865ff181a54bbd5e4ddccb4c9ec5a862c98366cd84b295dcf446","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"ddeb4ced00afa00fc0e2b19c6120f0a37b8b05b4f8473fbb627ea9d7d13efe58","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"0fd7f92be11fb1482255541597018b56d7619925346504414404e46a60f4797b","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"85011f325e5d4a3068e4e41b7ea62adbc1deddc9d225b7c69eea0f3b63fe727e","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"cf575663c4922de6dbee3d8bc7ab80d4a65fcc7ff2e994eb296961e76b761a79","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"a8b89b9bd15575e2ea5af3a6822214295686f18c202f2562eee666891033e726","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"98e0ca92087edbc3a3c8b8bfacdc730751a767ea96bfa90b19e68cdc429b7a89","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"cfcbc7ed03b2de6e43505bd6eba42564cc415b0f293e9f73791a6fa7b9a59b4a","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"d3025c34e8010d49cd5abb86d30278263c40a2697b7724c20e804a2398660540","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"172ade61a513c00be842070615e1afa78ccc6136adaada06f00b988a62996254","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"af451edfaa3efde30b3a648c4cf3411672cadcef33d69966dce6f92333a8b763","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"7531858637a3149431162637de0e6ced99a15ccf7ee15f07ea9d6c88e3330cc2","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"e670dbbc1817f146ff7d53750569cf020364a2b49555de41d6944f161aef6276","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"538058c7be50e50e58f997dec4b1e0add25a8dc44abf2648366b90612bf95e41","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"0014e6b044f05e58d91add005d05cbdf8206f67ea1e593deea0cde947c26b8a2","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"4e3ae189d32a09cabef66ec46c2f1563ddcc634a85b9c4b77a8d39590a5aa8a4","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"e909cab91eccfbb31d13f544e561dd41799a92bf5a853f5afca66927d4ac3706","glsl-optimizer/src/compiler/glsl_types.h":"caeabddb68f47390ca3414b642813bc384715b1363f453c0b449098d423c4b23","glsl-optimizer/src/compiler/shader_enums.c":"282bab5b7c04d4af9a06ef4aec6be10a865865d5aab6f74c3d2c9add77c08a74","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"3597defbc142e4bd3b54f5f3c454f5c71ceae771f2fefed0f86d49f926335dbe","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"be115a17e3c18844a30813e3c3f9029b908e7f3fc1f47431345761098bbd88be","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"11b403241b456fbe3482951ec70d274bd3ebd54bf39c11b3e81d3b9721b1bdaf","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/glslopt/.cargo_vcs_info.json b/third_party/rust/glslopt/.cargo_vcs_info.json
-deleted file mode 100644
-index 3edfbe5942a8..000000000000
---- a/third_party/rust/glslopt/.cargo_vcs_info.json
-+++ /dev/null
-@@ -1,6 +0,0 @@
--{
--  "git": {
--    "sha1": "e1a7fe3ac8ccca62a31682a98d78cedf470aaf5e"
--  },
--  "path_in_vcs": ""
--}
-\ No newline at end of file
-diff --git a/third_party/rust/glslopt/Cargo.lock b/third_party/rust/glslopt/Cargo.lock
-deleted file mode 100644
-index 2034b562ee8d..000000000000
---- a/third_party/rust/glslopt/Cargo.lock
-+++ /dev/null
-@@ -1,25 +0,0 @@
--# This file is automatically @generated by Cargo.
--# It is not intended for manual editing.
--version = 4
--
--[[package]]
--name = "cc"
--version = "1.1.15"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
--dependencies = [
-- "shlex",
--]
--
--[[package]]
--name = "glslopt"
--version = "0.1.12"
--dependencies = [
-- "cc",
--]
--
--[[package]]
--name = "shlex"
--version = "1.3.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
-diff --git a/third_party/rust/glslopt/Cargo.toml b/third_party/rust/glslopt/Cargo.toml
-index a5a4b997ac1e..acd34d69d52f 100644
---- a/third_party/rust/glslopt/Cargo.toml
-+++ b/third_party/rust/glslopt/Cargo.toml
-@@ -36,5 +36,5 @@ repository = "https://github.com/jamienicol/glslopt-rs"
- name = "glslopt"
- path = "src/lib.rs"
- 
--[build-dependencies.cc]
--version = "1.0"
-+[build-dependencies]
-+cc = "1.0"
-diff --git a/third_party/rust/glslopt/Cargo.toml.orig b/third_party/rust/glslopt/Cargo.toml.orig
-deleted file mode 100644
-index 452381f9941a..000000000000
---- a/third_party/rust/glslopt/Cargo.toml.orig
-+++ /dev/null
-@@ -1,12 +0,0 @@
--[package]
--name = "glslopt"
--version = "0.1.12"
--authors = ["Jamie Nicol <jnicol@mozilla.com>"]
--edition = "2018"
--license = "MIT"
--description = "Optimizes GLSL shader code"
--keywords = ["opengl", "gl", "gles", "glsl", "shader"]
--repository = "https://github.com/jamienicol/glslopt-rs"
--
--[build-dependencies]
--cc = "1.0"
-diff --git a/.trackerignore b/third_party/rust/glslopt/glsl-optimizer/.cargo-ok
-similarity index 100%
-copy from .trackerignore
-copy to third_party/rust/glslopt/glsl-optimizer/.cargo-ok
-diff --git a/third_party/rust/glslopt/glsl-optimizer/.gitignore b/third_party/rust/glslopt/glsl-optimizer/.gitignore
-deleted file mode 100644
-index 825ad5fd1656..000000000000
---- a/third_party/rust/glslopt/glsl-optimizer/.gitignore
-+++ /dev/null
-@@ -1,4 +0,0 @@
--*.pyc
--*.pyo
--*.out
--build
-diff --git a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-index 1b4e63513609..8ecffa6d212c 100755
---- a/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-+++ b/third_party/rust/glslopt/glsl-optimizer/generateParsers.sh
-@@ -4,6 +4,6 @@ flex --nounistd -osrc/compiler/glsl/glsl_lexer.cpp src/compiler/glsl/glsl_lexer.
- bison -v -o "src/compiler/glsl/glcpp/glcpp-parse.c" -p "glcpp_parser_" --defines=src/compiler/glsl/glcpp/glcpp-parse.h src/compiler/glsl/glcpp/glcpp-parse.y
- bison -v -o "src/compiler/glsl/glsl_parser.cpp" -p "_mesa_glsl_" --defines=src/compiler/glsl/glsl_parser.h src/compiler/glsl/glsl_parser.yy
- 
--python "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
--python "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
--python "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "enum" >src/compiler/glsl/ir_expression_operation.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "strings" >src/compiler/glsl/ir_expression_operation_strings.h
-+python3 "src/compiler/glsl/ir_expression_operation.py" "constant" >src/compiler/glsl/ir_expression_operation_constant.h
-diff --git a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-index 45cb6075e6e0..5f22aca6f1e7 100644
---- a/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h
-@@ -51,50 +51,56 @@ Configuration macro:
- #include <pthread.h>
- 
- /*---------------------------- macros ----------------------------*/
-+#ifndef __once_flag_defined
- #define ONCE_FLAG_INIT PTHREAD_ONCE_INIT
-+#endif
- #ifdef INIT_ONCE_STATIC_INIT
- #define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
- #else
- #define TSS_DTOR_ITERATIONS 1  // assume TSS dtor MAY be called at least once.
- #endif
- 
- // FIXME: temporary non-standard hack to ease transition
- #define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER
- 
- /*---------------------------- types ----------------------------*/
- typedef pthread_cond_t  cnd_t;
- typedef pthread_t       thrd_t;
- typedef pthread_key_t   tss_t;
- typedef pthread_mutex_t mtx_t;
-+#ifndef __once_flag_defined
- typedef pthread_once_t  once_flag;
-+#endif
- 
- 
- /*
- Implementation limits:
-   - Conditionally emulation for "mutex with timeout"
-     (see EMULATED_THREADS_USE_NATIVE_TIMEDLOCK macro)
- */
- struct impl_thrd_param {
-     thrd_start_t func;
-     void *arg;
- };
- 
- static inline void *
- impl_thrd_routine(void *p)
- {
-     struct impl_thrd_param pack = *((struct impl_thrd_param *)p);
-     free(p);
-     return (void*)(intptr_t)pack.func(pack.arg);
- }
- 
- 
- /*--------------- 7.25.2 Initialization functions ---------------*/
- // 7.25.2.1
-+#ifndef __once_flag_defined
- static inline void
- call_once(once_flag *flag, void (*func)(void))
- {
-     pthread_once(flag, func);
- }
-+#endif
- 
- 
- /*------------- 7.25.3 Condition variable functions -------------*/
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-index b6b81bf1e142..0924d5b57f6e 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_function.cpp
-@@ -2464,7 +2464,7 @@ ast_function_expression::hir(exec_list *instructions,
-       return value;
-    }
- 
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- bool
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-index c00298a16051..6bb0ebd9ea22 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp
-@@ -1413,7 +1413,7 @@ ast_expression::do_hir(exec_list *instructions,
- 
-    switch (this->oper) {
-    case ast_aggregate:
--      unreachable("ast_aggregate: Should never get here.");
-+      UNREACHABLE("ast_aggregate: Should never get here.");
- 
-    case ast_assign: {
-       this->subexpressions[0]->set_is_lhs(true);
-@@ -2004,13 +2004,13 @@ ast_expression::do_hir(exec_list *instructions,
-    }
- 
-    case ast_unsized_array_dim:
--      unreachable("ast_unsized_array_dim: Should never get here.");
-+      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
- 
-    case ast_function_call:
-       /* Should *NEVER* get here.  ast_function_call should always be handled
-        * by ast_function_expression::hir.
-        */
--      unreachable("ast_function_call: handled elsewhere ");
-+      UNREACHABLE("ast_function_call: handled elsewhere ");
- 
-    case ast_identifier: {
-       /* ast_identifier can appear several places in a full abstract syntax
-@@ -2225,10 +2225,10 @@ ast_expression::has_sequence_subexpression() const
-       return false;
- 
-    case ast_function_call:
--      unreachable("should be handled by ast_function_expression::hir");
-+      UNREACHABLE("should be handled by ast_function_expression::hir");
- 
-    case ast_unsized_array_dim:
--      unreachable("ast_unsized_array_dim: Should never get here.");
-+      UNREACHABLE("ast_unsized_array_dim: Should never get here.");
-    }
- 
-    return false;
-@@ -2529,7 +2529,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[type_idx];
-          }
-          default:
--            unreachable("Unsupported sampler/image dimensionality");
-+            UNREACHABLE("Unsupported sampler/image dimensionality");
-          } /* sampler/image float dimensionality */
-          break;
-       case GLSL_TYPE_INT:
-@@ -2584,7 +2584,7 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[offset + type_idx];
-          }
-          default:
--            unreachable("Unsupported isampler/iimage dimensionality");
-+            UNREACHABLE("Unsupported isampler/iimage dimensionality");
-          } /* sampler/image int dimensionality */
-          break;
-       case GLSL_TYPE_UINT:
-@@ -2639,17 +2639,17 @@ get_type_name_for_precision_qualifier(const glsl_type *type)
-             return names[offset + type_idx];
-          }
-          default:
--            unreachable("Unsupported usampler/uimage dimensionality");
-+            UNREACHABLE("Unsupported usampler/uimage dimensionality");
-          } /* sampler/image uint dimensionality */
-          break;
-       default:
--         unreachable("Unsupported sampler/image type");
-+         UNREACHABLE("Unsupported sampler/image type");
-       } /* sampler/image type */
-       break;
-    } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */
-    break;
-    default:
--      unreachable("Unsupported type");
-+      UNREACHABLE("Unsupported type");
-    } /* base type */
- }
- 
-@@ -5013,28 +5013,28 @@ ast_declarator_list::hir(exec_list *instructions,
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
-             break;
-          default:
--            unreachable("Unknown image format");
-+            UNREACHABLE("Unknown image format");
-          }
-          this->type->qualifier.image_base_type = GLSL_TYPE_FLOAT;
-       } else if (strncmp(this->type->specifier->type_name, "uimage", strlen("uimage")) == 0) {
-          switch (this->type->qualifier.image_format) {
-          case PIPE_FORMAT_R8_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R8_UINT;
-             break;
-          case PIPE_FORMAT_R16_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R16_UINT;
-             break;
-          case PIPE_FORMAT_R32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32_UINT;
-             break;
-          case PIPE_FORMAT_R32G32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32_UINT;
-             break;
-          case PIPE_FORMAT_R32G32B32A32_SINT:
-             this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_UINT;
-             break;
-          default:
--            unreachable("Unknown image format");
-+            UNREACHABLE("Unknown image format");
-          }
-          this->type->qualifier.image_base_type = GLSL_TYPE_UINT;
-       } else if (strncmp(this->type->specifier->type_name, "iimage", strlen("iimage")) == 0) {
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-index 3dafcf0c77e8..603c7f645820 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
-@@ -5414,7 +5414,7 @@ builtin_builder::_isinf(builtin_available_predicate avail, const glsl_type *type
-          infinities.d[i] = INFINITY;
-          break;
-       default:
--         unreachable("unknown type");
-+         UNREACHABLE("unknown type");
-       }
-    }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-index 973d1140783b..6081b8aee8fc 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c
-@@ -1032,7 +1032,7 @@ characters that appear in any other expressions. */
- #define DONE 3
- #define HASH 4
- #define NEWLINE_CATCHUP 5
--#define UNREACHABLE 6
-+#define NOT_REACHABLE 6
- 
- #define YY_EXTRA_TYPE glcpp_parser_t *
- 
-@@ -1953,25 +1953,25 @@ YY_RULE_SETUP
- {
- 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
- 
--	/* We don't actually use the UNREACHABLE start condition. We
-+	/* We don't actually use the NOT_REACHABLE start condition. We
- 	only have this block here so that we can pretend to call some
- 	generated functions, (to avoid "defined but not used"
- 	warnings. */
--        if (YY_START == UNREACHABLE) {
-+        if (YY_START == NOT_REACHABLE) {
- 		unput('.');
- 		yy_top_state(yyextra);
- 	}
- }
- 	YY_BREAK
- case 54:
- YY_RULE_SETUP
- #line 616 "src/compiler/glsl/glcpp/glcpp-lex.l"
- YY_FATAL_ERROR( "flex scanner jammed" );
- 	YY_BREAK
- #line 1971 "src/compiler/glsl/glcpp/glcpp-lex.c"
- case YY_STATE_EOF(DONE):
- case YY_STATE_EOF(NEWLINE_CATCHUP):
--case YY_STATE_EOF(UNREACHABLE):
-+case YY_STATE_EOF(NOT_REACHABLE):
- 	yyterminate();
- 
- 	case YY_END_OF_BUFFER:
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-index e07739b657c3..f831b58c8aa9 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l
-@@ -178,7 +178,7 @@ glcpp_lex_update_state_per_token (glcpp_parser_t *parser, int token)
- 	 * update the "Internal compiler error" catch-all rule near the end of
- 	 * this file. */
- 
--%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP UNREACHABLE
-+%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP NOT_REACHABLE
- 
- SPACE		[[:space:]]
- NONSPACE	[^[:space:]]
-@@ -602,11 +602,11 @@ PATH			["][]^./ _A-Za-z0-9+*%[(){}|&~=!:;,?-]*["]
- <*>. {
- 	glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext);
- 
--	/* We don't actually use the UNREACHABLE start condition. We
-+	/* We don't actually use the NOT_REACHABLE start condition. We
- 	only have this block here so that we can pretend to call some
- 	generated functions, (to avoid "defined but not used"
- 	warnings. */
--        if (YY_START == UNREACHABLE) {
-+        if (YY_START == NOT_REACHABLE) {
- 		unput('.');
- 		yy_top_state(yyextra);
- 	}
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-index 9ea8e00d310a..75b43d77537d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp
-@@ -550,7 +550,7 @@ ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
-          base = GLSL_TYPE_UINT64;
-          break;
-       default:
--         unreachable(!"Invalid base type.");
-+         UNREACHABLE("Invalid base type.");
-       }
- 
-       this->type = glsl_type::get_instance(base, op0->type->vector_elements, 1);
-@@ -623,7 +623,7 @@ ir_expression::get_num_operands(ir_expression_operation op)
-    if (op <= ir_last_quadop)
-       return 4;
- 
--   unreachable("Could not calculate number of operands");
-+   UNREACHABLE("Could not calculate number of operands");
- }
- 
- #include "ir_expression_operation_strings.h"
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-index 5ab50a58415f..edd2107745fb 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp
-@@ -196,33 +196,33 @@ ir_builder_print_visitor::print_without_declaration(const ir_rvalue *ir)
-       print_without_declaration((ir_expression *) ir);
-       break;
-    default:
--      unreachable("Invalid IR type.");
-+      UNREACHABLE("Invalid IR type.");
-    }
- }
- 
- ir_visitor_status
- ir_builder_print_visitor::visit(ir_variable *ir)
- {
-    const unsigned my_index = next_ir_index++;
- 
-    _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index);
- 
-    const char *mode_str;
-    switch (ir->data.mode) {
-    case ir_var_auto: mode_str = "ir_var_auto"; break;
-    case ir_var_uniform: mode_str = "ir_var_uniform"; break;
-    case ir_var_shader_storage: mode_str = "ir_var_shader_storage"; break;
-    case ir_var_shader_shared: mode_str = "ir_var_shader_shared"; break;
-    case ir_var_shader_in: mode_str = "ir_var_shader_in"; break;
-    case ir_var_shader_out: mode_str = "ir_var_shader_out"; break;
-    case ir_var_function_in: mode_str = "ir_var_function_in"; break;
-    case ir_var_function_out: mode_str = "ir_var_function_out"; break;
-    case ir_var_function_inout: mode_str = "ir_var_function_inout"; break;
-    case ir_var_const_in: mode_str = "ir_var_const_in"; break;
-    case ir_var_system_value: mode_str = "ir_var_system_value"; break;
-    case ir_var_temporary: mode_str = "ir_var_temporary"; break;
-    default:
--      unreachable("Invalid variable mode");
-+      UNREACHABLE("Invalid variable mode");
-    }
- 
-    if (ir->data.mode == ir_var_temporary) {
-@@ -420,7 +420,7 @@ ir_builder_print_visitor::visit(ir_constant *ir)
-                print_with_indent("r%04X_data.u[%u] = 1;\n", my_index, i);
-             break;
-          default:
--            unreachable("Invalid constant type");
-+            UNREACHABLE("Invalid constant type");
-          }
-       }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-index 160626e6ef6f..58c9b44a0d4e 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation.py
-@@ -106,7 +106,7 @@ constant_template_common = mako.template.Template("""\
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
-@@ -137,30 +137,30 @@ constant_template_vector_scalar = mako.template.Template("""\
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
- 
- # This template is for multiplication.  It is unique because it has to support
- # matrix * vector and matrix * matrix operations, and those are just different.
- constant_template_mul = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       /* Check for equal types, or unequal types involving scalars */
-       if ((op[0]->type == op[1]->type && !op[0]->type->is_matrix())
-           || op0_scalar || op1_scalar) {
-          for (unsigned c = 0, c0 = 0, c1 = 0;
-               c < components;
-               c0 += c0_inc, c1 += c1_inc, c++) {
- 
-             switch (op[0]->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-             case ${src_types[0].glsl_type}:
-                data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))};
-                break;
-     % endfor
-             default:
--               unreachable("invalid type");
-+               UNREACHABLE("invalid type");
-             }
-          }
-       } else {
-@@ -218,99 +218,99 @@ constant_template_horizontal = mako.template.Template("""\
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;""")
- 
- # This template is for ir_binop_vector_extract.
- constant_template_vector_extract = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       const int c = CLAMP(op[1]->value.i[0], 0,
-                           (int) op[0]->type->vector_elements - 1);
- 
-       switch (op[0]->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-       case ${src_types[0].glsl_type}:
-          data.${dst_type.union_field}[0] = op[0]->value.${src_types[0].union_field}[c];
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }""")
- 
- # This template is for ir_triop_vector_insert.
- constant_template_vector_insert = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       const unsigned idx = op[2]->value.u[0];
- 
-       memcpy(&data, &op[0]->value, sizeof(data));
- 
-       switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-       case ${src_types[0].glsl_type}:
-          data.${dst_type.union_field}[idx] = op[1]->value.${src_types[0].union_field}[0];
-          break;
-     % endfor
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }""")
- 
- # This template is for ir_quadop_vector.
- constant_template_vector = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       for (unsigned c = 0; c < this->type->vector_elements; c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[0].glsl_type}:
-             data.${dst_type.union_field}[c] = op[c]->value.${src_types[0].union_field}[0];
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
- 
- # This template is for ir_triop_lrp.
- constant_template_lrp = mako.template.Template("""\
-    case ${op.get_enum_name()}: {
-       assert(op[0]->type->is_float() || op[0]->type->is_double());
-       assert(op[1]->type->is_float() || op[1]->type->is_double());
-       assert(op[2]->type->is_float() || op[2]->type->is_double());
- 
-       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
-       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[0].glsl_type}:
-             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c", "c", "c2"))};
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-    }""")
- 
- # This template is for ir_triop_csel.  This expression is really unique
- # because not all of the operands are the same type, and the second operand
- # determines the type of the expression (instead of the first).
- constant_template_csel = mako.template.Template("""\
-    case ${op.get_enum_name()}:
-       for (unsigned c = 0; c < components; c++) {
-          switch (this->type->base_type) {
-     % for dst_type, src_types in op.signatures():
-          case ${src_types[1].glsl_type}:
-             data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types)};
-             break;
-     % endfor
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;""")
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-index ef5c4e792772..76cd18f03398 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h
-@@ -15,1018 +15,1018 @@
-             data.i64[c] = ~ op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_logic_not:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = !op[0]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_neg:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = -((int) op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = -op[0]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = -op[0]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = -op[0]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = -((int64_t) op[0]->value.u64[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = -op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_abs:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c] < 0 ? -op[0]->value.i[c] : op[0]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = fabsf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = fabs(op[0]->value.d[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c] < 0 ? -op[0]->value.i64[c] : op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sign:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] > 0) - (op[0]->value.i[c] < 0);
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = float((op[0]->value.f[c] > 0.0F) - (op[0]->value.f[c] < 0.0F));
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = double((op[0]->value.d[c] > 0.0) - (op[0]->value.d[c] < 0.0));
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] > 0) - (op[0]->value.i64[c] < 0);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_rcp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 1.0F / op[0]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = 1.0 / op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_rsq:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = 1.0 / sqrt(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sqrt:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = sqrtf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = sqrt(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_exp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = expf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_log:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = logf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_exp2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = exp2f(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_log2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = log2f(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i[c] = (int) op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u[c] = (unsigned) op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.f[c] = (float) op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] != 0.0F ? true : false;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2f16:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] ? true : false;
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] ? true : false;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.i[c] = op[0]->value.b[c] ? 1 : 0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.f[c] = (float) op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.u[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.f[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.d[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2f16:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2fmp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f162f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.d[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.d[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] != 0.0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f162b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] != 0.0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_i2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.f[c] = bitcast_u2f(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_f2i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i[c] = bitcast_f2u(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_u2f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.f[c] = bitcast_u2f(op[0]->value.u[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_f2u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u[c] = bitcast_f2u(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_u642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.d[c] = bitcast_u642d(op[0]->value.u64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_i642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.d[c] = bitcast_i642d(op[0]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_d2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u64[c] = bitcast_d2u64(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bitcast_d2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i64[c] = bitcast_d2i64(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.i[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642i:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.i[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.u[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642u:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.u[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642b:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] != 0;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.f[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642f:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.f[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.d[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642d:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.d[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.i64[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i64[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_b2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.i64[c] = op[0]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.i64[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.i64[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT:
-             data.u64[c] = op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u64[c] = op[0]->value.u[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_f2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.u64[c] = op[0]->value.f[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_d2u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_DOUBLE:
-             data.u64[c] = op[0]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_u642i64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT64:
-             data.i64[c] = op[0]->value.u64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_i642u64:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_INT64:
-             data.u64[c] = op[0]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_trunc:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = truncf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = trunc(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_ceil:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = ceilf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = ceil(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_floor:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = floorf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = floor(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_fract:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] - floorf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] - floor(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_round_even:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = _mesa_roundevenf(op[0]->value.f[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = _mesa_roundeven(op[0]->value.d[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_sin:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = sinf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_cos:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = cosf(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_atan:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = atan(op[0]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx_coarse:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdx_fine:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy_coarse:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_dFdy_fine:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = 0.0f;
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_pack_snorm_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_snorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_snorm_4x8:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_4x8(pack_snorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_unorm_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_unorm_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_unorm_4x8:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_4x8(pack_unorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-    case ir_unop_pack_half_2x16:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.u[0] = pack_2x16(pack_half_1x16, op[0]->value.f[0], op[0]->value.f[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-@@ -1060,76 +1060,76 @@
-             data.i[c] = bitfield_reverse(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_bit_count:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = util_bitcount(op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = util_bitcount(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_find_msb:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = find_msb_uint(op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = find_msb_int(op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_find_lsb:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = find_msb_uint(op[0]->value.u[c] & -op[0]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = find_msb_uint(op[0]->value.i[c] & -op[0]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_clz:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (unsigned)(31 - find_msb_uint(op[0]->value.u[c]));
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_unop_saturate:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = CLAMP(op[0]->value.f[c], 0.0f, 1.0f);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1200,7 +1200,7 @@
-             data.i64[c] = op[0]->value.i64[c0] + op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1231,112 +1231,112 @@
-             data.i64[c] = op[0]->value.i64[c0] - op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_add_sat:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] + op[1]->value.u[c]) < op[0]->value.u[c] ? UINT32_MAX : (op[0]->value.u[c] + op[1]->value.u[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = iadd_saturate(op[0]->value.i[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] + op[1]->value.u64[c]) < op[0]->value.u64[c] ? UINT64_MAX : (op[0]->value.u64[c] + op[1]->value.u64[c]);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = iadd64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_sub_sat:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? 0 : op[0]->value.u[c] - op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = isub_saturate(op[0]->value.i[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? 0 : op[0]->value.u64[c] - op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = isub64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_abs_sub:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? op[1]->value.u[c] - op[0]->value.u[c] : op[0]->value.u[c] - op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[1]->value.i[c] > op[0]->value.i[c]) ? (unsigned)op[1]->value.i[c] - (unsigned)op[0]->value.i[c] : (unsigned)op[0]->value.i[c] - (unsigned)op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? op[1]->value.u64[c] - op[0]->value.u64[c] : op[0]->value.u64[c] - op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[1]->value.i64[c] > op[0]->value.i64[c]) ? (uint64_t)op[1]->value.i64[c] - (uint64_t)op[0]->value.i64[c] : (uint64_t)op[0]->value.i64[c] - (uint64_t)op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_avg:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] & op[1]->value.u[c]) & 1);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] & op[1]->value.i[c]) & 1);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] & op[1]->value.u64[c]) & 1);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] & op[1]->value.i64[c]) & 1);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_avg_round:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] | op[1]->value.u[c]) & 1);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] | op[1]->value.i[c]) & 1);
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] | op[1]->value.u64[c]) & 1);
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] | op[1]->value.i64[c]) & 1);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1369,7 +1369,7 @@
-                data.i64[c] = op[0]->value.i64[c0] * op[1]->value.i64[c1];
-                break;
-             default:
--               unreachable("invalid type");
-+               UNREACHABLE("invalid type");
-             }
-          }
-       } else {
-@@ -1411,7 +1411,7 @@
-             data.i[c] = op[0]->value.i[c] * (int16_t)op[0]->value.i[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1442,7 +1442,7 @@
-             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] / op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1473,61 +1473,61 @@
-             data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] % op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_less:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] < op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] < op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] < op[1]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] < op[1]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.b[c] = op[0]->value.u64[c] < op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] < op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_gequal:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c];
-             break;
-          case GLSL_TYPE_INT:
-             data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c];
-             break;
-          case GLSL_TYPE_FLOAT:
-             data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.b[c] = op[0]->value.d[c] >= op[1]->value.d[c];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.b[c] = op[0]->value.u64[c] >= op[1]->value.u64[c];
-             break;
-          case GLSL_TYPE_INT64:
-             data.b[c] = op[0]->value.i64[c] >= op[1]->value.i64[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1557,7 +1557,7 @@
-             data.b[c] = op[0]->value.b[c] == op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1587,7 +1587,7 @@
-             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1627,7 +1627,7 @@
-             data.i64[c] = op[0]->value.i64[c0] << op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1659,132 +1659,132 @@
-             data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_and:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] & op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] & op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] & op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] & op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_xor:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] ^ op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] ^ op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] ^ op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] ^ op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_bit_or:
-       assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
-       for (unsigned c = 0, c0 = 0, c1 = 0;
-            c < components;
-            c0 += c0_inc, c1 += c1_inc, c++) {
- 
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = op[0]->value.u[c0] | op[1]->value.u[c1];
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = op[0]->value.i[c0] | op[1]->value.i[c1];
-             break;
-          case GLSL_TYPE_UINT64:
-             data.u64[c] = op[0]->value.u64[c0] | op[1]->value.u64[c1];
-             break;
-          case GLSL_TYPE_INT64:
-             data.i64[c] = op[0]->value.i64[c0] | op[1]->value.i64[c1];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_and:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] && op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_xor:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_logic_or:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_BOOL:
-             data.b[c] = op[0]->value.b[c] || op[1]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_dot:
-       switch (op[0]->type->base_type) {
-       case GLSL_TYPE_FLOAT:
-          data.f[0] = dot_f(op[0], op[1]);
-          break;
-       case GLSL_TYPE_DOUBLE:
-          data.d[0] = dot_d(op[0], op[1]);
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
- 
-@@ -1814,7 +1814,7 @@
-             data.i64[c] = MIN2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1845,34 +1845,34 @@
-             data.i64[c] = MAX2(op[0]->value.i64[c0], op[1]->value.i64[c1]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_pow:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = powf(op[0]->value.f[c], op[1]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_binop_ldexp:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = ldexpf_flush_subnormal(op[0]->value.f[c], op[1]->value.i[c]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = ldexp_flush_subnormal(op[0]->value.d[c], op[1]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1904,54 +1904,54 @@
-          data.b[0] = op[0]->value.b[c];
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }
- 
-    case ir_binop_atan2:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = atan2(op[0]->value.f[c], op[1]->value.f[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_fma:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] * op[1]->value.f[c] + op[2]->value.f[c];
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] * op[1]->value.d[c] + op[2]->value.d[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_lrp: {
-       assert(op[0]->type->is_float() || op[0]->type->is_double());
-       assert(op[1]->type->is_float() || op[1]->type->is_double());
-       assert(op[2]->type->is_float() || op[2]->type->is_double());
- 
-       unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1;
-       for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) {
-          switch (this->type->base_type) {
-          case GLSL_TYPE_FLOAT:
-             data.f[c] = op[0]->value.f[c] * (1.0f - op[2]->value.f[c2]) + (op[1]->value.f[c] * op[2]->value.f[c2]);
-             break;
-          case GLSL_TYPE_DOUBLE:
-             data.d[c] = op[0]->value.d[c] * (1.0 - op[2]->value.d[c2]) + (op[1]->value.d[c] * op[2]->value.d[c2]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -1982,22 +1982,22 @@
-             data.b[c] = op[0]->value.b[c] ? op[1]->value.b[c] : op[2]->value.b[c];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
- 
-    case ir_triop_bitfield_extract:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.i[c] = bitfield_extract_uint(op[0]->value.u[c], op[1]->value.i[c], op[2]->value.i[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = bitfield_extract_int(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -2030,22 +2030,22 @@
-          data.b[idx] = op[1]->value.b[0];
-          break;
-       default:
--         unreachable("invalid type");
-+         UNREACHABLE("invalid type");
-       }
-       break;
-    }
- 
-    case ir_quadop_bitfield_insert:
-       for (unsigned c = 0; c < op[0]->type->components(); c++) {
-          switch (op[0]->type->base_type) {
-          case GLSL_TYPE_UINT:
-             data.u[c] = bitfield_insert(op[0]->value.u[c], op[1]->value.u[c], op[2]->value.i[c], op[3]->value.i[c]);
-             break;
-          case GLSL_TYPE_INT:
-             data.i[c] = bitfield_insert(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c], op[3]->value.i[c]);
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-@@ -2075,7 +2075,7 @@
-             data.b[c] = op[c]->value.b[0];
-             break;
-          default:
--            unreachable("invalid type");
-+            UNREACHABLE("invalid type");
-          }
-       }
-       break;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-index d15bfd0e5640..b7618753c2c3 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp
-@@ -835,7 +835,7 @@ static const char* operator_glsl_str(ir_expression_operation op, const glsl_type
- 	case ir_triop_lrp:
- 		return "mix";
- 	default:
--		unreachable("Unexpected operator in operator_glsl_str");
-+		UNREACHABLE("Unexpected operator in operator_glsl_str");
- 		return "UNIMPLEMENTED";
- 	}
- }
-@@ -1891,21 +1891,21 @@ interface_packing_string(enum glsl_interface_packing packing)
- 	case GLSL_INTERFACE_PACKING_STD430:
- 		return "std430";
- 	default:
--		unreachable("Unexpected interface packing");
-+		UNREACHABLE("Unexpected interface packing");
- 		return "UNKNOWN";
- 	}
- }
- 
- static const char*
- interface_variable_mode_string(enum ir_variable_mode mode)
- {
- 	switch (mode) {
- 	case ir_var_uniform:
- 		return "uniform";
- 	case ir_var_shader_storage:
- 		return "buffer";
- 	default:
--		unreachable("Unexpected interface variable mode");
-+		UNREACHABLE("Unexpected interface variable mode");
- 		return "UNKOWN";
- 	}
- }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-index d621c2670032..964177fd11b7 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp
-@@ -381,7 +381,7 @@ void ir_print_visitor::visit(ir_texture *ir)
-       ir->lod_info.component->accept(this);
-       break;
-    case ir_samples_identical:
--      unreachable("ir_samples_identical was already handled");
-+      UNREACHABLE("ir_samples_identical was already handled");
-    };
-    fprintf(f, ")");
- }
-@@ -522,7 +522,7 @@ void ir_print_visitor::visit(ir_constant *ir)
-                fprintf(f, "%f", ir->value.d[i]);
-             break;
- 	 default:
--            unreachable("Invalid constant type");
-+            UNREACHABLE("Invalid constant type");
- 	 }
-       }
-    }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-index 212abf084b2e..112076d40733 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/linker.cpp
-@@ -3988,7 +3988,7 @@ add_packed_varyings(const struct gl_context *ctx,
-             iface = GL_PROGRAM_OUTPUT;
-             break;
-          default:
--            unreachable("unexpected type");
-+            UNREACHABLE("unexpected type");
-          }
- 
-          if (type == iface) {
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-index 9429e69c2a7f..445bfd06c01b 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp
-@@ -171,7 +171,7 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
-          iter = new(mem_ctx) ir_constant(double(iter_value + bias[i]));
-          break;
-       default:
--          unreachable("Unsupported type for loop iterator.");
-+          UNREACHABLE("Unsupported type for loop iterator.");
-       }
- 
-       ir_expression *const mul =
-@@ -238,7 +238,7 @@ incremented_before_terminator(ir_loop *loop, ir_variable *var,
-       }
-    }
- 
--   unreachable("Unable to find induction variable");
-+   UNREACHABLE("Unable to find induction variable");
- }
- 
- /**
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-index c85b39bcaa34..1a7b8d4e8d6a 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp
-@@ -386,7 +386,7 @@ calc_blend_result(ir_factory f,
-          break;
-       case BLEND_NONE:
-       case BLEND_ALL:
--         unreachable("not real cases");
-+         UNREACHABLE("not real cases");
-       }
- 
-       if (val)
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-index a6e2f741ebe6..c97f497c384d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp
-@@ -244,19 +244,19 @@ lower_buffer_access::is_dereferenced_thing_row_major(const ir_rvalue *deref)
-             return matrix || deref->type->without_array()->is_struct();
-          }
- 
--         unreachable("invalid matrix layout");
-+         UNREACHABLE("invalid matrix layout");
-          break;
-       }
- 
-       default:
-          return false;
-       }
-    }
- 
-    /* The tree must have ended with a dereference that wasn't an
-     * ir_dereference_variable.  That is invalid, and it should be impossible.
-     */
--   unreachable("invalid dereference tree");
-+   UNREACHABLE("invalid dereference tree");
-    return false;
- }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-index b4e730c64fbd..749bfc509748 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_distance.cpp
-@@ -155,7 +155,7 @@ lower_distance_visitor::visit(ir_variable *ir)
-       old_var = &old_distance_in_var;
-       new_var = &new_distance_in_var;
-    } else {
--      unreachable("not reached");
-+      UNREACHABLE("not reached");
-    }
- 
-    this->progress = true;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-index 08d4f72efa0a..3a44c60c7abe 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp
-@@ -549,7 +549,7 @@ lower_ubo_reference_visitor::insert_buffer_access(void *mem_ctx,
-       }
-       break;
-    default:
--      unreachable("invalid buffer_access_type in insert_buffer_access");
-+      UNREACHABLE("invalid buffer_access_type in insert_buffer_access");
-    }
- }
- 
-@@ -730,7 +730,7 @@ lower_ubo_reference_visitor::calculate_unsized_array_stride(ir_dereference *dere
-       break;
-    }
-    default:
--      unreachable("Unsupported dereference type");
-+      UNREACHABLE("Unsupported dereference type");
-    }
-    return array_stride;
- }
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-index 7cef4fc6ef93..ecb592d5c13d 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp
-@@ -995,7 +995,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
-             break;
-          default:
-             one = NULL;
--            unreachable("unexpected type");
-+            UNREACHABLE("unexpected type");
-          }
- 
-          return mul(ir->operands[0], add(one, neg(ir->operands[2])));
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-index 36fe0a9f05b6..a56ef38b81b1 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_minmax.cpp
-@@ -154,7 +154,7 @@ compare_components(ir_constant *a, ir_constant *b)
-             foundequal = true;
-          break;
-       default:
--         unreachable("not reached");
-+         UNREACHABLE("not reached");
-       }
-    }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-index 88318cd8a6eb..9475467629c9 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp
-@@ -228,7 +228,7 @@ write_mask_to_swizzle(unsigned write_mask)
-    case WRITEMASK_Z: return SWIZZLE_Z;
-    case WRITEMASK_W: return SWIZZLE_W;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- /**
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-index 445659599c22..77ea8b11ff87 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp
-@@ -459,7 +459,7 @@ const glsl_type *glsl_type::get_bare_type() const
-       return this;
-    }
- 
--   unreachable("Invalid base type");
-+   UNREACHABLE("Invalid base type");
- }
- 
- const glsl_type *glsl_type::get_float16_type() const
-@@ -899,7 +899,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim,
-       return error_type;
-    }
- 
--   unreachable("switch statement above should be complete");
-+   UNREACHABLE("switch statement above should be complete");
- }
- 
- const glsl_type *
-@@ -998,7 +998,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim,
-       return error_type;
-    }
- 
--   unreachable("switch statement above should be complete");
-+   UNREACHABLE("switch statement above should be complete");
- }
- 
- const glsl_type *
-@@ -2015,7 +2015,7 @@ glsl_type::get_explicit_std140_type(bool row_major) const
-       delete[] fields;
-       return type;
-    } else {
--      unreachable("Invalid type for UBO or SSBO");
-+      UNREACHABLE("Invalid type for UBO or SSBO");
-    }
- }
- 
-@@ -2373,7 +2373,7 @@ glsl_type::get_explicit_std430_type(bool row_major) const
-       delete[] fields;
-       return type;
-    } else {
--      unreachable("Invalid type for SSBO");
-+      UNREACHABLE("Invalid type for SSBO");
-    }
- }
- 
-@@ -2447,7 +2447,7 @@ glsl_type::get_explicit_type_for_size_align(glsl_type_size_align_func type_info,
-       return glsl_type::get_instance(this->base_type, this->vector_elements,
-                                      this->matrix_columns, stride, false);
-    } else {
--      unreachable("Unhandled type.");
-+      UNREACHABLE("Unhandled type.");
-    }
- }
- 
-@@ -2583,7 +2583,7 @@ glsl_type::count_dword_slots(bool is_bindless) const
-    case GLSL_TYPE_ERROR:
-    case GLSL_TYPE_FUNCTION:
-    default:
--      unreachable("invalid type in st_glsl_type_dword_size()");
-+      UNREACHABLE("invalid type in st_glsl_type_dword_size()");
-    }
- 
-    return 0;
-@@ -2947,7 +2947,7 @@ glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim)
-    case GLSL_SAMPLER_DIM_CUBE:
-       return 3;
-    default:
--      unreachable("Unknown sampler dim");
-+      UNREACHABLE("Unknown sampler dim");
-    }
- }
- 
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-index f709bdd702e2..45d608ce47e3 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.h
-@@ -187,7 +187,7 @@ glsl_base_type_get_bit_size(const enum glsl_base_type base_type)
-       return 64;
- 
-    default:
--      unreachable("unknown base type");
-+      UNREACHABLE("unknown base type");
-    }
- 
-    return 0;
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-index a2a5eb82a61f..6df48d39abc0 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/shader_enums.c
-@@ -66,27 +66,27 @@ _mesa_shader_stage_to_string(unsigned stage)
-    case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
-    }
- 
--   unreachable("Unknown shader stage.");
-+   UNREACHABLE("Unknown shader stage.");
- }
- 
- /**
-  * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)
-  * for debug printouts and error messages.
-  */
- const char *
- _mesa_shader_stage_to_abbrev(unsigned stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:   return "VS";
-    case MESA_SHADER_FRAGMENT: return "FS";
-    case MESA_SHADER_GEOMETRY: return "GS";
-    case MESA_SHADER_COMPUTE:  return "CS";
-    case MESA_SHADER_KERNEL:   return "CL";
-    case MESA_SHADER_TESS_CTRL: return "TCS";
-    case MESA_SHADER_TESS_EVAL: return "TES";
-    }
- 
--   unreachable("Unknown shader stage.");
-+   UNREACHABLE("Unknown shader stage.");
- }
- 
- const char *
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-index 0d512550de47..3f105d64d21b 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h
-@@ -140,7 +140,7 @@ _mesa_shader_enum_to_shader_stage(GLenum v)
-    case GL_COMPUTE_SHADER:
-       return MESA_SHADER_COMPUTE;
-    default:
--      unreachable("bad value in _mesa_shader_enum_to_shader_stage()");
-+      UNREACHABLE("bad value in _mesa_shader_enum_to_shader_stage()");
-    }
- }
- 
-@@ -184,75 +184,75 @@ _mesa_shader_stage_from_subroutine_uniform(GLenum subuniform)
-    case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM:
-       return MESA_SHADER_TESS_EVAL;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline gl_shader_stage
- _mesa_shader_stage_from_subroutine(GLenum subroutine)
- {
-    switch (subroutine) {
-    case GL_VERTEX_SUBROUTINE:
-       return MESA_SHADER_VERTEX;
-    case GL_GEOMETRY_SUBROUTINE:
-       return MESA_SHADER_GEOMETRY;
-    case GL_FRAGMENT_SUBROUTINE:
-       return MESA_SHADER_FRAGMENT;
-    case GL_COMPUTE_SUBROUTINE:
-       return MESA_SHADER_COMPUTE;
-    case GL_TESS_CONTROL_SUBROUTINE:
-       return MESA_SHADER_TESS_CTRL;
-    case GL_TESS_EVALUATION_SUBROUTINE:
-       return MESA_SHADER_TESS_EVAL;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline GLenum
- _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:
-       return GL_VERTEX_SUBROUTINE;
-    case MESA_SHADER_GEOMETRY:
-       return GL_GEOMETRY_SUBROUTINE;
-    case MESA_SHADER_FRAGMENT:
-       return GL_FRAGMENT_SUBROUTINE;
-    case MESA_SHADER_COMPUTE:
-       return GL_COMPUTE_SUBROUTINE;
-    case MESA_SHADER_TESS_CTRL:
-       return GL_TESS_CONTROL_SUBROUTINE;
-    case MESA_SHADER_TESS_EVAL:
-       return GL_TESS_EVALUATION_SUBROUTINE;
-    case MESA_SHADER_NONE:
-       break;
-    case MESA_SHADER_KERNEL:
--      unreachable("not reached");
-+      UNREACHABLE("not reached");
-       break;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- static inline GLenum
- _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
- {
-    switch (stage) {
-    case MESA_SHADER_VERTEX:
-       return GL_VERTEX_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_GEOMETRY:
-       return GL_GEOMETRY_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_FRAGMENT:
-       return GL_FRAGMENT_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_COMPUTE:
-       return GL_COMPUTE_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_TESS_CTRL:
-       return GL_TESS_CONTROL_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_TESS_EVAL:
-       return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
-    case MESA_SHADER_NONE:
-    case MESA_SHADER_KERNEL:
-       break;
-    }
--   unreachable("not reached");
-+   UNREACHABLE("not reached");
- }
- 
- extern bool
-diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-index fcace4e351d6..e4dfd67c8cc2 100644
---- a/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-+++ b/third_party/rust/glslopt/glsl-optimizer/src/util/macros.h
-@@ -68,24 +68,34 @@
-    } while (0)
- 
- 
-+/**
-+ * Unreachable macro. Useful for suppressing "control reaches end of non-void
-+ * function" warnings.
-+ */
- /**
-  * Unreachable macro. Useful for suppressing "control reaches end of non-void
-  * function" warnings.
-  */
- #if defined(HAVE___BUILTIN_UNREACHABLE) || __has_builtin(__builtin_unreachable)
--#define unreachable(str)    \
-+#define UNREACHABLE(str)    \
- do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-    assert(!str);            \
-    __builtin_unreachable(); \
- } while (0)
- #elif defined (_MSC_VER)
--#define unreachable(str)    \
-+#define UNREACHABLE(str)    \
- do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-    assert(!str);            \
-    __assume(0);             \
- } while (0)
- #else
--#define unreachable(str) assert(!str)
-+#define UNREACHABLE(str)    \
-+do {                        \
-+   (void)"" str; /* str must be a string literal */ \
-+   assert(!str);            \
-+} while (0)
- #endif
- 
- /**
-@@ -190,8 +200,10 @@ do {                       \
-  * performs no action and all member variables and base classes are
-  * trivially destructible themselves.
-  */
--#   if (defined(__clang__) && defined(__has_feature))
--#      if __has_feature(has_trivial_destructor)
-+#   if defined(__clang__)
-+#      if __has_builtin(__is_trivially_destructible)
-+#         define HAS_TRIVIAL_DESTRUCTOR(T) __is_trivially_destructible(T)
-+#      elif (defined(__has_feature) && __has_feature(has_trivial_destructor))
- #         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
- #      endif
- #   elif defined(__GNUC__)
-diff --git a/third_party/rust/glslopt/src/bindings.rs b/third_party/rust/glslopt/src/bindings.rs
-index f4e5bebd08ba..5c1ca487d5e9 100644
---- a/third_party/rust/glslopt/src/bindings.rs
-+++ b/third_party/rust/glslopt/src/bindings.rs
-@@ -1,131 +1,131 @@
--/* automatically generated by rust-bindgen */
-+/* automatically generated by rust-bindgen 0.72.1 */
- 
- #[repr(C)]
- #[derive(Debug, Copy, Clone)]
- pub struct glslopt_shader {
-     _unused: [u8; 0],
- }
- #[repr(C)]
- #[derive(Debug, Copy, Clone)]
- pub struct glslopt_ctx {
-     _unused: [u8; 0],
- }
- pub const glslopt_shader_type_kGlslOptShaderVertex: glslopt_shader_type = 0;
- pub const glslopt_shader_type_kGlslOptShaderFragment: glslopt_shader_type = 1;
--pub type glslopt_shader_type = u32;
-+pub type glslopt_shader_type = ::std::os::raw::c_uint;
- pub const glslopt_options_kGlslOptionSkipPreprocessor: glslopt_options = 1;
- pub const glslopt_options_kGlslOptionNotFullShader: glslopt_options = 2;
--pub type glslopt_options = u32;
-+pub type glslopt_options = ::std::os::raw::c_uint;
- pub const glslopt_target_kGlslTargetOpenGL: glslopt_target = 0;
- pub const glslopt_target_kGlslTargetOpenGLES20: glslopt_target = 1;
- pub const glslopt_target_kGlslTargetOpenGLES30: glslopt_target = 2;
- pub const glslopt_target_kGlslTargetMetal: glslopt_target = 3;
--pub type glslopt_target = u32;
-+pub type glslopt_target = ::std::os::raw::c_uint;
- pub const glslopt_basic_type_kGlslTypeFloat: glslopt_basic_type = 0;
- pub const glslopt_basic_type_kGlslTypeInt: glslopt_basic_type = 1;
- pub const glslopt_basic_type_kGlslTypeBool: glslopt_basic_type = 2;
- pub const glslopt_basic_type_kGlslTypeTex2D: glslopt_basic_type = 3;
- pub const glslopt_basic_type_kGlslTypeTex3D: glslopt_basic_type = 4;
- pub const glslopt_basic_type_kGlslTypeTexCube: glslopt_basic_type = 5;
- pub const glslopt_basic_type_kGlslTypeTex2DShadow: glslopt_basic_type = 6;
- pub const glslopt_basic_type_kGlslTypeTex2DArray: glslopt_basic_type = 7;
- pub const glslopt_basic_type_kGlslTypeOther: glslopt_basic_type = 8;
- pub const glslopt_basic_type_kGlslTypeCount: glslopt_basic_type = 9;
--pub type glslopt_basic_type = u32;
-+pub type glslopt_basic_type = ::std::os::raw::c_uint;
- pub const glslopt_precision_kGlslPrecHigh: glslopt_precision = 0;
- pub const glslopt_precision_kGlslPrecMedium: glslopt_precision = 1;
- pub const glslopt_precision_kGlslPrecLow: glslopt_precision = 2;
- pub const glslopt_precision_kGlslPrecCount: glslopt_precision = 3;
--pub type glslopt_precision = u32;
--extern "C" {
-+pub type glslopt_precision = ::std::os::raw::c_uint;
-+unsafe extern "C" {
-     pub fn glslopt_initialize(target: glslopt_target) -> *mut glslopt_ctx;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_cleanup(ctx: *mut glslopt_ctx);
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_set_max_unroll_iterations(
-         ctx: *mut glslopt_ctx,
-         iterations: ::std::os::raw::c_uint,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_optimize(
-         ctx: *mut glslopt_ctx,
-         type_: glslopt_shader_type,
-         shaderSource: *const ::std::os::raw::c_char,
-         options: ::std::os::raw::c_uint,
-     ) -> *mut glslopt_shader;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_status(shader: *mut glslopt_shader) -> bool;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_raw_output(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_get_log(shader: *mut glslopt_shader) -> *const ::std::os::raw::c_char;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_delete(shader: *mut glslopt_shader);
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_input_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_input_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_total_size(
-         shader: *mut glslopt_shader,
-     ) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_uniform_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_texture_count(shader: *mut glslopt_shader) -> ::std::os::raw::c_int;
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_texture_desc(
-         shader: *mut glslopt_shader,
-         index: ::std::os::raw::c_int,
-         outName: *mut *const ::std::os::raw::c_char,
-         outType: *mut glslopt_basic_type,
-         outPrec: *mut glslopt_precision,
-         outVecSize: *mut ::std::os::raw::c_int,
-         outMatSize: *mut ::std::os::raw::c_int,
-         outArraySize: *mut ::std::os::raw::c_int,
-         outLocation: *mut ::std::os::raw::c_int,
-     );
- }
--extern "C" {
-+unsafe extern "C" {
-     pub fn glslopt_shader_get_stats(
-         shader: *mut glslopt_shader,
-         approxMath: *mut ::std::os::raw::c_int,
diff --git a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
index 879d7b0..5dd5e8f 100644
--- a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
@@ -1,4 +1,4 @@
-From fcfe298c635dbdc8d7477ac5f5d8581b548c99e7 Mon Sep 17 00:00:00 2001
+From 312eb52cad2cf011c797808ef76de10aaa733f80 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:20:39 +0200
 Subject: [PATCH 01/13] Point to local omni.ja files, not remote server
@@ -22,37 +22,41 @@ If necessary, missing files can be added later.
 [1] https://remote-settings.readthedocs.io/en/latest/introduction.html
 [2] https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#license-rules
 ---
- browser/base/content/spotlight.html                  |  2 +-
- browser/components/asrouter/bin/import-rollouts.js   |  4 ++--
- .../components/ASRouterAdmin/ASRouterAdmin.jsx       |  4 ++--
- .../asrouter/content/asrouter-admin.bundle.js        |  6 +++---
- .../search/telemetry/SerpTelemetryRepository.kt      |  2 +-
- .../support/remotesettings/RemoteSettingsClient.kt   |  2 +-
- .../remotesettings/RemoteSettingsClientTest.kt       |  2 +-
- .../docs/_posts/2018-08-10-fretboard.md              |  2 +-
- .../main/java/org/mozilla/fenix/components/Core.kt   |  6 +++---
- .../mozilla/focus/telemetry/GleanMetricsService.kt   |  4 ++--
- netwerk/protocol/http/metrics.yaml                   |  4 ++--
- netwerk/protocol/http/nsHttpChannel.cpp              |  6 ------
- python/mozperftest/mozperftest/system/ml_services.py |  7 +------
- services/settings/Utils.sys.mjs                      |  2 +-
- services/settings/docs/index.rst                     |  4 ++--
- .../scripts/periodic_file_updates.sh                 |  2 +-
- .../functional/safebrowsing/test_initial_download.py |  2 +-
- .../components/remote_settings/src/client.rs         |  2 +-
- .../components/remote_settings/src/config.rs         | 12 ++++++------
- .../antitracking/docs/query-stripping/index.md       |  2 +-
- .../backgroundtasks/BackgroundTask_message.sys.mjs   |  6 +++---
- toolkit/components/ml/ml.d.ts                        |  4 ++--
- .../components/search/docs/DefaultSearchEngines.rst  |  2 +-
- .../search/docs/SearchEngineConfiguration.rst        |  8 ++++----
- .../search/docs/SearchEngineConfigurationArchive.rst |  2 +-
- .../xpcshell/searchconfigs/head_searchconfig.js      |  8 ++++----
- toolkit/modules/AppConstants.sys.mjs                 |  6 +-----
- 27 files changed, 49 insertions(+), 64 deletions(-)
+ browser/base/content/spotlight.html           |  2 +-
+ .../asrouter/bin/import-rollouts.js           |  4 ++--
+ .../ASRouterAdmin/ASRouterAdmin.jsx           |  4 ++--
+ .../asrouter/content/asrouter-admin.bundle.js |  6 ++---
+ .../components/asrouter/docs/remote_cfr.md    | 20 ++++++++--------
+ browser/components/topsites/docs/tippytop.md  |  2 +-
+ devtools/client/responsive/docs/devices.md    |  4 ++--
+ devtools/shared/compatibility/README.md       |  2 +-
+ .../docs/_posts/2018-08-10-fretboard.md       |  2 +-
+ .../java/org/mozilla/fenix/components/Core.kt |  6 ++---
+ .../focus/telemetry/GleanMetricsService.kt    |  4 ++--
+ netwerk/protocol/http/metrics.yaml            |  4 ++--
+ netwerk/protocol/http/nsHttpChannel.cpp       |  6 -----
+ .../mozperftest/system/ml_services.py         |  7 +-----
+ services/settings/Utils.sys.mjs               |  2 +-
+ services/settings/docs/index.rst              |  4 ++--
+ .../scripts/periodic_file_updates.sh          |  2 +-
+ .../safebrowsing/test_initial_download.py     |  2 +-
+ .../components/remote_settings/src/config.rs  | 24 +++++++++----------
+ .../docs/query-stripping/index.md             |  2 +-
+ .../antitracking/docs/tracking-lists/index.md |  6 +----
+ .../BackgroundTask_message.sys.mjs            |  6 ++---
+ toolkit/components/ml/ml.d.ts                 |  4 ++--
+ .../search/docs/DefaultSearchEngines.rst      |  2 +-
+ .../search/docs/SearchEngineConfiguration.rst |  8 +++----
+ .../docs/SearchEngineConfigurationArchive.rst |  2 +-
+ .../searchconfigs/head_searchconfig.js        |  8 +++----
+ .../bergamot-translator/upload-bergamot.py    | 12 ++++------
+ .../docs/resources/02_contributing.md         | 11 +--------
+ .../docs/resources/03_bergamot.md             |  6 ++---
+ toolkit/modules/AppConstants.sys.mjs          |  6 +----
+ 31 files changed, 74 insertions(+), 106 deletions(-)
 
 diff --git a/browser/base/content/spotlight.html b/browser/base/content/spotlight.html
-index ccb05596f1..df0f7a519a 100644
+index e6bc327bee..1116e20f89 100644
 --- a/browser/base/content/spotlight.html
 +++ b/browser/base/content/spotlight.html
 @@ -8,7 +8,7 @@
@@ -65,7 +69,7 @@ index ccb05596f1..df0f7a519a 100644
      <meta name="referrer" content="no-referrer" />
      <link
 diff --git a/browser/components/asrouter/bin/import-rollouts.js b/browser/components/asrouter/bin/import-rollouts.js
-index 65d8d57c3b..2f4386f9a1 100644
+index 47a26d7213..07dfbd76e8 100644
 --- a/browser/components/asrouter/bin/import-rollouts.js
 +++ b/browser/components/asrouter/bin/import-rollouts.js
 @@ -36,7 +36,7 @@ const jsonschema = require("../../../../third_party/js/cfworker/json-schema.js")
@@ -109,10 +113,10 @@ index 753fbc633f..a0d49902a8 100644
                    >
                      nimbus-desktop-experiments
 diff --git a/browser/components/asrouter/content/asrouter-admin.bundle.js b/browser/components/asrouter/content/asrouter-admin.bundle.js
-index ec2bba72f7..22bab5c84d 100644
+index 179464f771..35d600a153 100644
 --- a/browser/components/asrouter/content/asrouter-admin.bundle.js
 +++ b/browser/components/asrouter/content/asrouter-admin.bundle.js
-@@ -1148,14 +1148,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
+@@ -1149,14 +1149,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
          label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", null, "remote settings (", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("a", {
            className: "small-text",
            target: "_blank",
@@ -129,54 +133,134 @@ index ec2bba72f7..22bab5c84d 100644
            rel: "noopener noreferrer"
          }, "nimbus-desktop-experiments"), ")");
        }
-@@ -1521,4 +1521,4 @@ function renderASRouterAdmin() {
+@@ -1522,4 +1522,4 @@ function renderASRouterAdmin() {
  
  ASRouterAdminRenderUtils = __webpack_exports__;
  /******/ })()
 -;
 \ No newline at end of file
 +;
-diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepository.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepository.kt
-index 20eab9e438..b6b1817e89 100644
---- a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepository.kt
-+++ b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepository.kt
-@@ -16,7 +16,7 @@ import org.json.JSONException
- import org.json.JSONObject
- import java.io.File
- 
--internal const val REMOTE_PROD_ENDPOINT_URL = "https://firefox.settings.services.mozilla.com"
-+internal const val REMOTE_PROD_ENDPOINT_URL = "resource://app/defaults/settings"
- internal const val REMOTE_ENDPOINT_BUCKET_NAME = "main"
+diff --git a/browser/components/asrouter/docs/remote_cfr.md b/browser/components/asrouter/docs/remote_cfr.md
+index fc2d5a5cbc..eccb34d7a7 100644
+--- a/browser/components/asrouter/docs/remote_cfr.md
++++ b/browser/components/asrouter/docs/remote_cfr.md
+@@ -4,9 +4,9 @@ Starting in Firefox 68, CFR messages will be defined using [Remote Settings](htt
+ 
+ ## Environments
+ There are three environments available for Remote Settings:
+-* DEV - `https://remote-settings-dev.allizom.org/v1/`
+-* STAGING - `https://remote-settings.allizom.org/v1/`
+-* PROD - `https://remote-settings.mozilla.org/v1/`
++* DEV
++* STAGING
++* PROD
+ 
+ DEV is primarily used for testing the Remote Settings API and exploring new use cases. Messaging validation and QA are conducted in the STAGING environment, while finalized and validated messages are delivered in the PROD environment. Both STAGING and PROD follow the [Multi Signoff Workflow](https://remote-settings.readthedocs.io/en/latest/tutorial-multi-signoff.html). During the review process, messages are served in the `main-preview` bucket. Once reviewed, they are moved to the `main` bucket.
+ 
+@@ -25,7 +25,7 @@ For release and ESR, for security reasons, you will also need to run the applica
+ ## Add Message using Remote Settings Admin UI
+ 
+ 1. **Log in to the Remote Settings Admin UI**
+-   - Use your LDAP identity to log in and start testing in [STAGING](https://remote-settings.allizom.org/v1/admin/#/).
++   - Use your LDAP identity to log in and start testing in STAGING.
+ 
+ 2. **Add Messaging System JSON**
+    - On the left-hand side, under the **Workspace** bucket, click on the `cfr` collection.
+@@ -54,7 +54,7 @@ For release and ESR, for security reasons, you will also need to run the applica
+    - Once the review has been approved, we can test the message again, pointing to `staging` instead of `staging-preview`.
+ 
+ 5. **Deploy to PROD**
+-   - Follow the same steps for the [PROD Environment](https://remote-settings.mozilla.org/v1/admin/#/).
++   - Follow the same steps for the PROD Environment.
+    - Use the `prod-preview` and `prod` buckets for final testing and deployment.
+ 
+ ## Remote l10n
+@@ -74,18 +74,18 @@ This can be done through browser-based authentication or through the Admin porta
+ 2. In your terminal, run `python` with the following:
+ ```python
+ >>> import kinto_http
+->>> c = kinto_http.Client(server_url='https://remote-settings-dev.allizom.org/v1', auth=kinto_http.BrowserOAuth())
++>>> c = kinto_http.Client(server_url='', auth=kinto_http.BrowserOAuth())
+ >>> c.server_info()["user"]
+ ```
+ 3. This will open the browser with a login successful page with your credentials in the terminal
+ 
+ ### Admin portal
+-1. [Login on the Admin UI](https://remote-settings-dev.allizom.org/v1/admin/) using your LDAP identity
++1. Login on the Admin UI using your LDAP identity
+ 2. Copy the authentication header (📋 icon in the top bar)
+ 3. Test your credentials with ``curl``. When reaching out the server root URL with this bearer token you should see a ``user`` entry whose ``id`` field is ``ldap:<you>@mozilla.com``.
+ 
+ ```bash
+-SERVER=https://settings.dev.mozaws.net/v1
++SERVER=https://settings.invalid/v1
+ BEARER_TOKEN="Bearer uLdb-Yafefe....2Hyl5_w"
+ 
+ curl -s ${SERVER}/ -H "Authorization:${BEARER_TOKEN}" | jq .user
+@@ -115,7 +115,7 @@ curl -X PATCH ${SERVER}/buckets/main-workspace/collections/${CID} \
+      -H "Authorization:${BEARER_TOKEN}"
+ ```
+ 
+-Now this new record should be listed here: https://settings.dev.mozaws.net/v1/buckets/main-preview/collections/cfr/records
++Now this new record should be listed here: https://settings.invalid/v1/buckets/main-preview/collections/cfr/records
+ 
+ **3. Set Remote Settings prefs to use the dev server.**
+ 
+@@ -125,7 +125,7 @@ Until [support for the DEV environment](https://github.com/mozilla-extensions/re
+ 
+ ```javascript
+   Services.prefs.setCharPref("services.settings.loglevel", "debug");
+-  Services.prefs.setCharPref("services.settings.server", "https://settings.dev.mozaws.net/v1");
++  Services.prefs.setCharPref("services.settings.server", "https://settings.invalid/v1");
+   // Pull data from the preview bucket.
+   RemoteSettings.enablePreviewMode(true);
+ ```
+diff --git a/browser/components/topsites/docs/tippytop.md b/browser/components/topsites/docs/tippytop.md
+index 37111135c7..d365876de1 100644
+--- a/browser/components/topsites/docs/tippytop.md
++++ b/browser/components/topsites/docs/tippytop.md
+@@ -34,7 +34,7 @@ $ source .venv/bin/activate
+ $ ./upload2remotesettings.py prod
+ ```
+ 
+-After uploading it to Remote Setting, you can request for review in the [dashboard](https://remote-settings.mozilla.org/v1/admin/). Note that you will need to log in the Mozilla LDAP VPN for both uploading and accessing Remote Setting's dashboard. Once your request gets approved by the reviewer, the new manifest will be content signed and published to production.
++After uploading it to Remote Setting, you can request for review in the dashboard. Note that you will need to log in the Mozilla LDAP VPN for both uploading and accessing Remote Setting's dashboard. Once your request gets approved by the reviewer, the new manifest will be content signed and published to production.
+ 
+ ## TippyTop Viewer
+ You can use this [viewer](https://mozilla.github.io/tippy-top-sites/manifest-viewer/) to load all the icons in the current manifest.
+diff --git a/devtools/client/responsive/docs/devices.md b/devtools/client/responsive/docs/devices.md
+index 3d2c0d2a8d..b85529a316 100644
+--- a/devtools/client/responsive/docs/devices.md
++++ b/devtools/client/responsive/docs/devices.md
+@@ -77,11 +77,11 @@ Each device has a user agent specified. We can get this value by:
+ 
+ First, make sure you can have access to RemoteSettings (see https://remote-settings.readthedocs.io/en/latest/getting-started.html#getting-started).
+ 
+-You should then be able to add the device to the [RemoteSettings Stage instance](https://remote-settings.allizom.org/v1/admin/#/buckets/main-workspace/collections/devtools-devices/) using the interface.
++You should then be able to add the device to the RemoteSettings Stage instance using the interface.
+ Then use the RemoteSettings DevTools to make Firefox pull the devices list from the Stage instance (see https://remote-settings.readthedocs.io/en/latest/support.html?highlight=devtools#how-do-i-setup-firefox-to-pull-data-from-stage)
+ Once that is done, open RDM and make sure you can see the new addition in the Devices modal.
+ 
+-If everything is good, you can then ask for review on the data change. Once this get approved, you can replicate the same changes to the [RemoteSettings Prod instance](https://remote-settings.mozilla.org/v1/admin/#/buckets/main-workspace/collections/devtools-devices/), reset the RemoteSettings DevTools settings, check RDM again just to be sure and finally ask for review on the data change.
++If everything is good, you can then ask for review on the data change. Once this get approved, you can replicate the same changes to the RemoteSettings Prod instance, reset the RemoteSettings DevTools settings, check RDM again just to be sure and finally ask for review on the data change.
+ 
+ ## Things to consider in the future
+ 
+diff --git a/devtools/shared/compatibility/README.md b/devtools/shared/compatibility/README.md
+index 946cb02591..d60370a887 100644
+--- a/devtools/shared/compatibility/README.md
++++ b/devtools/shared/compatibility/README.md
+@@ -26,7 +26,7 @@ Before submitting for review, run our internal tests:
+ The browsers data are stored in a RemoteSettings collection, and updates are handled by a script in https://github.com/firefox-devtools/remote-settings-mdn-browser-compat-data .
+ The script is run every day in automation, and if the data are updated, the team should receive a data review email.
+ 
+-To review the data update, you need to be connected to the Mozilla Corporate VPN (See https://mana.mozilla.org/wiki/display/SD/VPN), log into https://remote-settings.allizom.org/v1/admin/#/buckets/main/collections/devtools-compatibility-browsers/records (Using `OpenID Connect (LDAP)`)
++To review the data update, you need to be connected to the Mozilla Corporate VPN (See https://mana.mozilla.org/wiki/display/SD/VPN), log into Remote Settings (Using `OpenID Connect (LDAP)`)
+ Then run Firefox, and use the [RemoteSettings DevTools WebExtension](https://github.com/mozilla-extensions/remote-settings-devtools) to use the `Prod (preview)` environment and restart the browser.
+ Then open the compatibility panel and make sure that the updated browsers do appear in the `Settings` panel.
  
- /**
-diff --git a/mobile/android/android-components/components/support/remotesettings/src/main/java/mozilla/components/support/remotesettings/RemoteSettingsClient.kt b/mobile/android/android-components/components/support/remotesettings/src/main/java/mozilla/components/support/remotesettings/RemoteSettingsClient.kt
-index 8a13299ef8..be867c70dd 100644
---- a/mobile/android/android-components/components/support/remotesettings/src/main/java/mozilla/components/support/remotesettings/RemoteSettingsClient.kt
-+++ b/mobile/android/android-components/components/support/remotesettings/src/main/java/mozilla/components/support/remotesettings/RemoteSettingsClient.kt
-@@ -45,7 +45,7 @@ import mozilla.appservices.remotesettings.InternalException as UniffiInternalExc
- 
- class RemoteSettingsClient(
-     private val storageRootDirectory: File,
--    private val serverUrl: String = "https://firefox.settings.services.mozilla.com",
-+    private val serverUrl: String = "resource://app/defaults/settings",
-     private val bucketName: String = "main",
-     private val collectionName: String,
- ) {
-diff --git a/mobile/android/android-components/components/support/remotesettings/src/test/java/mozilla/components/support/remotesettings/RemoteSettingsClientTest.kt b/mobile/android/android-components/components/support/remotesettings/src/test/java/mozilla/components/support/remotesettings/RemoteSettingsClientTest.kt
-index e6b153a9a4..afca8776f5 100644
---- a/mobile/android/android-components/components/support/remotesettings/src/test/java/mozilla/components/support/remotesettings/RemoteSettingsClientTest.kt
-+++ b/mobile/android/android-components/components/support/remotesettings/src/test/java/mozilla/components/support/remotesettings/RemoteSettingsClientTest.kt
-@@ -37,7 +37,7 @@ class RemoteSettingsClientTest {
-         mockFileReader = mock()
-         mockJsonObject = mock()
-         mockRemoteSettings = mock()
--        remoteSettingsClient = RemoteSettingsClient(File(""), "https://firefox.settings.services.mozilla.com", "", "")
-+        remoteSettingsClient = RemoteSettingsClient(File(""), "resource://app/defaults/settings", "", "")
-     }
- 
-     @Test
 diff --git a/mobile/android/android-components/docs/_posts/2018-08-10-fretboard.md b/mobile/android/android-components/docs/_posts/2018-08-10-fretboard.md
-index f4f852eeb1..b877808e79 100644
+index 180ff2a727..e2898f8b98 100644
 --- a/mobile/android/android-components/docs/_posts/2018-08-10-fretboard.md
 +++ b/mobile/android/android-components/docs/_posts/2018-08-10-fretboard.md
 @@ -8,7 +8,7 @@ author: fernando
@@ -189,10 +273,10 @@ index f4f852eeb1..b877808e79 100644
  The purpose of this Google Summer of Code project, which is called Fretboard, was to develop an A/B testing framework written in Kotlin based on the existing code from Fennec, but making it independent of both the server used and the local storage mechanism, allowing it to be used on other apps, such as Firefox Focus, which started to need to do some A/B tests.
  
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-index aa1ce7fc80..a0ebc4ee48 100644
+index f7aaa39f39..3102078696 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-@@ -821,8 +821,8 @@ class Core(
+@@ -816,8 +816,8 @@ class Core(
  
          // collection name to fetch from server for SERP telemetry
          const val COLLECTION_NAME = "search-telemetry-v2"
@@ -205,7 +289,7 @@ index aa1ce7fc80..a0ebc4ee48 100644
      }
  }
 diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt
-index 4cbfe77a32..8c56e3b306 100644
+index 74d5469ece..0b1c598999 100644
 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt
 +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt
 @@ -65,8 +65,8 @@ class GleanMetricsService(
@@ -220,10 +304,10 @@ index 4cbfe77a32..8c56e3b306 100644
          private val isEnabledByDefault: Boolean
              get() = !AppConstants.isKlarBuild
 diff --git a/netwerk/protocol/http/metrics.yaml b/netwerk/protocol/http/metrics.yaml
-index dab8efd3d0..2d7b7342c3 100644
+index 8e9e8346f6..4ab98d2f44 100644
 --- a/netwerk/protocol/http/metrics.yaml
 +++ b/netwerk/protocol/http/metrics.yaml
-@@ -1016,7 +1016,7 @@ network:
+@@ -1027,7 +1027,7 @@ network:
    system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -232,7 +316,7 @@ index dab8efd3d0..2d7b7342c3 100644
  
    system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
-@@ -1046,7 +1046,7 @@ network:
+@@ -1057,7 +1057,7 @@ network:
    retried_system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -242,10 +326,10 @@ index dab8efd3d0..2d7b7342c3 100644
    retried_system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
 diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
-index 6d6381581b..6fdd9c042c 100644
+index 42ee24d0b9..036c9c991f 100644
 --- a/netwerk/protocol/http/nsHttpChannel.cpp
 +++ b/netwerk/protocol/http/nsHttpChannel.cpp
-@@ -8755,12 +8755,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
+@@ -8842,12 +8842,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
    if (domain == "aus5.mozilla.org"_ns) {
      return EssentialDomainCategory::Aus5MozillaOrg;
    }
@@ -315,10 +399,10 @@ index 7d25a1a739..305d1fd640 100644
  #. Add the filename to the relevant ``FINAL_TARGET_FILES`` list in ``services/settings/dumps/main/moz.build``
  
 diff --git a/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh b/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
-index 8d67fc01f9..0e87ca255e 100755
+index 7f17c5a51d..cedb22cbc4 100755
 --- a/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
 +++ b/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
-@@ -406,7 +406,7 @@ function compare_suffix_lists {
+@@ -411,7 +411,7 @@ function compare_suffix_lists {
  function compare_remote_settings_files {
    # cd "${TOPSRCDIR}"
  
@@ -340,46 +424,47 @@ index 2e4cdf7534..71917129ef 100644
          "browser.safebrowsing.debug": True,
          "browser.safebrowsing.update.enabled": True,
      }
-diff --git a/third_party/application-services/components/remote_settings/src/client.rs b/third_party/application-services/components/remote_settings/src/client.rs
-index d274ade65d..87f95f62d7 100644
---- a/third_party/application-services/components/remote_settings/src/client.rs
-+++ b/third_party/application-services/components/remote_settings/src/client.rs
-@@ -1305,7 +1305,7 @@ mod test {
-         };
-         let client = Client::new(config).unwrap();
-         assert_eq!(
--            Url::parse("https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/the-collection").unwrap(),
-+            Url::parse("resource://app/defaults/settings/main/the-collection.json").unwrap(),
-             client.endpoints.collection_url
-         );
-     }
 diff --git a/third_party/application-services/components/remote_settings/src/config.rs b/third_party/application-services/components/remote_settings/src/config.rs
-index 5b43a1aa2e..3f24aa4f8f 100644
+index 57493a8f51..d266dee383 100644
 --- a/third_party/application-services/components/remote_settings/src/config.rs
 +++ b/third_party/application-services/components/remote_settings/src/config.rs
-@@ -95,9 +95,9 @@ impl RemoteSettingsServer {
- 
+@@ -78,14 +78,14 @@ impl RemoteSettingsServer {
      fn raw_url(&self) -> &str {
          match self {
+             // v1 routes, current default
 -            Self::Prod => "https://firefox.settings.services.mozilla.com/v1",
 -            Self::Stage => "https://firefox.settings.services.allizom.org/v1",
 -            Self::Dev => "https://remote-settings-dev.allizom.org/v1",
 +            Self::Prod => "resource://app/defaults/settings",
 +            Self::Stage => "resource://app/defaults/settings",
 +            Self::Dev => "resource://app/defaults/settings",
+ 
+             // v2 routes, optional for now but will be default later
+-            Self::ProdV2 => "https://firefox.settings.services.mozilla.com/v2",
+-            Self::StageV2 => "https://firefox.settings.services.allizom.org/v2",
+-            Self::DevV2 => "https://remote-settings-dev.allizom.org/v2",
++            Self::ProdV2 => "resource://app/defaults/settings",
++            Self::StageV2 => "resource://app/defaults/settings",
++            Self::DevV2 => "resource://app/defaults/settings",
+ 
+             // custom, not currently implemented in android or iOS
              Self::Custom { url } => url,
-         }
-     }
-@@ -108,9 +108,9 @@ impl RemoteSettingsServer {
+@@ -98,12 +98,12 @@ impl RemoteSettingsServer {
      /// inside the crate.
      pub fn get_url(&self) -> Result<Url> {
          Ok(match self {
 -            Self::Prod => Url::parse("https://firefox.settings.services.mozilla.com/v1")?,
 -            Self::Stage => Url::parse("https://firefox.settings.services.allizom.org/v1")?,
 -            Self::Dev => Url::parse("https://remote-settings-dev.allizom.org/v1")?,
+-            Self::ProdV2 => Url::parse("https://firefox.settings.services.mozilla.com/v2")?,
+-            Self::StageV2 => Url::parse("https://firefox.settings.services.allizom.org/v2")?,
+-            Self::DevV2 => Url::parse("https://remote-settings-dev.allizom.org/v2")?,
 +            Self::Prod => Url::parse("resource://app/defaults/settings")?,
 +            Self::Stage => Url::parse("resource://app/defaults/settings")?,
 +            Self::Dev => Url::parse("resource://app/defaults/settings")?,
++            Self::ProdV2 => Url::parse("resource://app/defaults/settings")?,
++            Self::StageV2 => Url::parse("resource://app/defaults/settings")?,
++            Self::DevV2 => Url::parse("resource://app/defaults/settings")?,
              Self::Custom { url } => {
                  let mut url = Url::parse(url)?;
                  // Custom URLs are weird and require a couple tricks for backwards compatibility.
@@ -396,8 +481,25 @@ index e49d8513ba..c1c6ae5deb 100644
  Note that some records have a *filter\_expression* that limits where
  they apply.
  
+diff --git a/toolkit/components/antitracking/docs/tracking-lists/index.md b/toolkit/components/antitracking/docs/tracking-lists/index.md
+index c12638a72d..5f06f97352 100644
+--- a/toolkit/components/antitracking/docs/tracking-lists/index.md
++++ b/toolkit/components/antitracking/docs/tracking-lists/index.md
+@@ -88,11 +88,7 @@ The remote settings upload logic is contained within the [shavar-list-creation](
+ 1. Set your environment variables using `export KEY=value` in your terminal or directly in your bash/zshrc file
+ 
+ ```
+-# The server locations are as follows
+-# dev: https://remote-settings-dev.allizom.org/v1
+-# stage: https://remote-settings.allizom.org/v1
+-# prod: https://remote-settings.mozilla.org/v1
+-export SERVER="server_location"
++export SERVER="$server_location"
+ 
+ # For testing purposes, we use auth tokens, but the server uses userpass. To run locally, set the auth method to tokens
+ export REMOTE_SETTINGS_AUTH_METHOD="token"
 diff --git a/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs b/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
-index 4a8cda6603..f1f2cd3d93 100644
+index ec34176270..9247419b3c 100644
 --- a/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
 +++ b/toolkit/components/backgroundtasks/BackgroundTask_message.sys.mjs
 @@ -18,8 +18,8 @@
@@ -421,10 +523,10 @@ index 4a8cda6603..f1f2cd3d93 100644
  // Default profile targeting snapshot.
  let defaultProfileTargetingSnapshot = {};
 diff --git a/toolkit/components/ml/ml.d.ts b/toolkit/components/ml/ml.d.ts
-index be451e8b14..f49537be7c 100644
+index d8acc0eba5..f3c7a5a1d6 100644
 --- a/toolkit/components/ml/ml.d.ts
 +++ b/toolkit/components/ml/ml.d.ts
-@@ -241,7 +241,7 @@ interface BaseRecord {
+@@ -245,7 +245,7 @@ interface BaseRecord {
  interface RecordsMLUnique {
    /**
     * Allow or deny URL Prefixes.
@@ -433,7 +535,7 @@ index be451e8b14..f49537be7c 100644
     */
    "ml-model-allow-deny-list": {
      filter: "ALLOW" | "DENY";
-@@ -252,7 +252,7 @@ interface RecordsMLUnique {
+@@ -256,7 +256,7 @@ interface RecordsMLUnique {
    /**
     * Specific configuration options for different tasks. Filters can be used
     * to select specific features, tasks or models.
@@ -453,12 +555,12 @@ index 46ffc30641..af5b46dfc5 100644
 -.. _search-default-override-allowlist bucket: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-default-override-allowlist/records
 +.. _search-default-override-allowlist bucket: resource://app/defaults/settings/main/search-default-override-allowlist.json
 diff --git a/toolkit/components/search/docs/SearchEngineConfiguration.rst b/toolkit/components/search/docs/SearchEngineConfiguration.rst
-index ca6009a0ef..66ef611e73 100644
+index 30a3ea6533..51513f3490 100644
 --- a/toolkit/components/search/docs/SearchEngineConfiguration.rst
 +++ b/toolkit/components/search/docs/SearchEngineConfiguration.rst
-@@ -40,7 +40,7 @@ An outline of the schemas may be found on the `Search Configuration Schema`_ pag
+@@ -39,7 +39,7 @@ An outline of the schemas may be found on the `Search Configuration Schema`_ pag
+ .. _remote settings: /services/settings/index.html
  .. _JSON schema: https://json-schema.org/
- .. _stored in mozilla-central: https://searchfox.org/mozilla-central/source/toolkit/components/search/schema/
  .. _Search Configuration Schema: SearchConfigurationSchema.html
 -.. _viewed live: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-v2/records
 -.. _search-config-icons: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-icons/records
@@ -469,12 +571,12 @@ index ca6009a0ef..66ef611e73 100644
 +.. _search-config-overrides-v2: resource://app/defaults/settings/main/search-config-overrides-v2.json
 +.. _search-default-override-allowlist: resource://app/defaults/settings/main/search-default-override-allowlist.json
 diff --git a/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst b/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
-index a6aba91a42..0700ab0b69 100644
+index 70475f226e..2dfc33d8cd 100644
 --- a/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
 +++ b/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
-@@ -68,5 +68,5 @@ related. As a result several situations may occur:
+@@ -67,5 +67,5 @@ related. As a result several situations may occur:
+ .. _the remote settings: /services/settings/index.html
  .. _JSON schema: https://json-schema.org/
- .. _stored in mozilla-central: https://searchfox.org/mozilla-central/source/toolkit/components/search/schema/
  .. _Search Configuration Schema: SearchConfigurationSchema.html
 -.. _viewed live: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config/records
 +.. _viewed live: resource://app/defaults/settings/main/search-config.json
@@ -501,8 +603,97 @@ index d4c6b6a4c1..a071522019 100644
  };
  
  /**
+diff --git a/toolkit/components/translations/bergamot-translator/upload-bergamot.py b/toolkit/components/translations/bergamot-translator/upload-bergamot.py
+index 3fed8dbbe4..418025eead 100755
+--- a/toolkit/components/translations/bergamot-translator/upload-bergamot.py
++++ b/toolkit/components/translations/bergamot-translator/upload-bergamot.py
+@@ -9,11 +9,7 @@ Uploads the bergamot wasm file to Remote Settings. This just uploads the build a
+ approval and deployment will still need to be done through Remote Settings. You must
+ run ./build-bergamot.py first to generate the wasm artifact.
+ 
+-Log in to Remote Settings via LDAP to either dev or prod:
+-
+-    Dev:   https://remote-settings-dev.allizom.org/v1/admin
+-    Stage: https://remote-settings.allizom.org/v1/admin
+-    Prod:  https://remote-settings.mozilla.org/v1/admin
++Log in to Remote Settings via LDAP to either dev or prod.
+ 
+ In the header click the little clipboard icon to get the authentication header.
+ Set the BEARER_TOKEN environment variable to use the bearer token. In zsh this can
+@@ -44,9 +40,9 @@ import yaml
+ REMOTE_SETTINGS_VERSION = "4.0"
+ 
+ COLLECTION_NAME = "translations-wasm-v2"
+-DEV_SERVER = "https://remote-settings-dev.allizom.org/v1"
+-PROD_SERVER = "https://remote-settings.mozilla.org/v1"
+-STAGE_SERVER = "https://remote-settings.allizom.org/v1"
++DEV_SERVER = ""
++PROD_SERVER = ""
++STAGE_SERVER = ""
+ 
+ DIR_PATH = os.path.realpath(os.path.dirname(__file__))
+ MOZ_YAML_PATH = os.path.join(DIR_PATH, "moz.yaml")
+diff --git a/toolkit/components/translations/docs/resources/02_contributing.md b/toolkit/components/translations/docs/resources/02_contributing.md
+index 3f04309a55..efa045909a 100644
+--- a/toolkit/components/translations/docs/resources/02_contributing.md
++++ b/toolkit/components/translations/docs/resources/02_contributing.md
+@@ -58,22 +58,13 @@ The machine-learning models and [WASM] binaries are all hosted in Remote Setting
+ In order to get access to Translations content in the Remote Settings admin dashboards, you will need to request
+ access in the Remote Settings component on [Bugzilla].
+ 
+-Once you have access to Translations content in Remote Settings, you will be able to view it in the admin dashboards:
+-
+-**Dev**<br>
+-> [https://settings.dev.mozaws.net/v0/admin](https://settings.dev.mozaws.net/v1/admin)
+-
+-**Stage**<br>
+-> [https://remote-settings.allizom.org/v0/admin](https://settings-writer.stage.mozaws.net/v1/admin)
++Once you have access to Translations content in Remote Settings, you will be able to view it in the admin dashboards.
+ 
+ ### Prod Admin Access
+ 
+ In order to access the prod admin dashboard, you must also have access to a VPN that is authorized to view the dashboard.
+ To gain access to the VPN, follow [Step 3] on this page in the Remote Settings documentation.
+ 
+-**Prod**<br>
+-> [https://remote-settings.mozilla.org/v1/admin](https://settings-writer.prod.mozaws.net/v1/admin)
+-
+ 
+ ### Pulling From Different Sources
+ 
+diff --git a/toolkit/components/translations/docs/resources/03_bergamot.md b/toolkit/components/translations/docs/resources/03_bergamot.md
+index 4758b2f1e4..1e47271814 100644
+--- a/toolkit/components/translations/docs/resources/03_bergamot.md
++++ b/toolkit/components/translations/docs/resources/03_bergamot.md
+@@ -52,7 +52,7 @@ If the Bergamot Translator has a breaking change, then the `BERGAMOT_MAJOR_VERSI
+ 
+ 1. Request review on the changes.
+     - Log in to the [Mozilla Corporate VPN](https://mozilla-hub.atlassian.net/wiki/spaces/IT/pages/15761733/Mozilla+Corporate+VPN)
+-    - Log into the [Remote Settings admin](https://remote-settings.mozilla.org/v1/admin)
++    - Log into the Remote Settings admin
+     - If this is a major change, then the `filter_expression` can be removed, as the change will ride the trains.
+     - Request review on the changes.
+ 
+@@ -65,7 +65,7 @@ If the Bergamot Translator has a breaking change, then the `BERGAMOT_MAJOR_VERSI
+     - Verify that it is working in Nightly by trigging different translations.
+ 
+ 1. Update CI by updating `taskcluster/kinds/fetch/translations-fetch.yml` with the new artifact information. e.g. [D230447](https://phabricator.services.mozilla.com/D230447)
+-    - Find the record in Remote Settings' [translations-wasm](https://remote-settings.mozilla.org/v1/admin/#/buckets/main-workspace/collections/translations-wasm/records) view.
++    - Find the record in Remote Settings' `translations-wasm` view.
+     - At this point the record could still be in Preview, as the attachment won't change once it's approved.
+     - Double click the newest record.
+     - Update the `url`, `sha256`, `size`, and `description` fields for `tr8ns.inference` in `translations-fetch.yml`.
+@@ -78,7 +78,7 @@ If the Bergamot Translator has a breaking change, then the `BERGAMOT_MAJOR_VERSI
+ 1. Prepare to publish to Beta / Release
+     - (Do not do this step if it's a major release.)
+     - Wait a few days to verify there are no issues on Nightly.
+-    - Log into the [Remote Settings admin](https://remote-settings.mozilla.org/v1/admin)
++    - Log into the Remote Settings admin
+     - Remove the "filter_expression" text from the `bergamot-translator` version.
+     - Request review.
+     - Repeat Step 5 to verify for Beta and Release.
 diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs
-index 13a523a989..9962529dde 100644
+index a26725ead2..3070e01ace 100644
 --- a/toolkit/modules/AppConstants.sys.mjs
 +++ b/toolkit/modules/AppConstants.sys.mjs
 @@ -213,11 +213,7 @@ export var AppConstants = Object.freeze({
@@ -522,7 +713,7 @@ index 13a523a989..9962529dde 100644
 2.54.0
 
 
-From bece0cb90ba78f8b1f18b48aaf6fead250d80433 Mon Sep 17 00:00:00 2001
+From 736365de5bfb52c792635ac306dfd91057c621bb Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:34:08 +0200
 Subject: [PATCH 02/13] Remove polling triggered by push broadcasts
@@ -594,7 +785,7 @@ index 2330fb011f..a5e3b6a10d 100644
 2.54.0
 
 
-From 7587ae0fb173b28d4a23c31bf5e14ebebc48da52 Mon Sep 17 00:00:00 2001
+From 0c289de5276c586f514b74630ce498f76f04bb73 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:41:54 +0200
 Subject: [PATCH 03/13] Remove timer that triggers polling for changes
@@ -639,7 +830,7 @@ index c9c2370d2c..85c4a5cafe 100644
 2.54.0
 
 
-From ec253b2945d83b114572fec379d1816082960411 Mon Sep 17 00:00:00 2001
+From 781931075bdea9e23aca56fb6a7d283d987a2375 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:47:41 +0200
 Subject: [PATCH 04/13] Utils: fetch timestamps of each collection locally
@@ -739,7 +930,7 @@ index a3e9e9b3f2..b32a8d8691 100644
 2.54.0
 
 
-From ec1f3ae4c6f3e541cb55c390cf504174d52bc9f9 Mon Sep 17 00:00:00 2001
+From 879dde3f5cbc82339fee869f5e2b545be56faa96 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:52:10 +0200
 Subject: [PATCH 05/13] Utils: disable offline checking
@@ -775,7 +966,7 @@ index cc7bfe9744..f6eaa7d958 100644
 2.54.0
 
 
-From 25fca63a4d85d9c3095c6d9141e986f33deb6358 Mon Sep 17 00:00:00 2001
+From c3671a478339df732af43a93aade92f93e5d7515 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:56:02 +0200
 Subject: [PATCH 06/13] Refactor hashing logic to a separate function
@@ -829,7 +1020,7 @@ index e5b20d9b9d..a1eb1f6437 100644
 2.54.0
 
 
-From 43d1de582872d169e6318529287dfafdb7cb663a Mon Sep 17 00:00:00 2001
+From b110f5e1ecd43b3ec9374e3e61dc31741b9f802b Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:05:02 +0200
 Subject: [PATCH 07/13] Client: Fetch and hash records from local dump
@@ -1001,7 +1192,7 @@ index 99277f08cb..24f0ad6cff 100644
 2.54.0
 
 
-From 8ebf4e8ee901dc3c6ded1b0e8b0b747ccbb99c65 Mon Sep 17 00:00:00 2001
+From b8c260ab9261ab201e58deb24e4740b28ccd8a91 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:42:56 +0200
 Subject: [PATCH 08/13] Client: start deferred sync on get() or on()
@@ -1106,7 +1297,7 @@ index 24f0ad6cff..5213fcbdd2 100644
 2.54.0
 
 
-From e3011e2657ab1a8a05f3adeba89f950fd8aba8f1 Mon Sep 17 00:00:00 2001
+From 1909e876fd9f7279b01e84471c02c83214cbb5c2 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:53:51 +0200
 Subject: [PATCH 09/13] Client: deep compare records if timestamps match
@@ -1155,7 +1346,7 @@ index 5213fcbdd2..19a54575c7 100644
 2.54.0
 
 
-From 26ec4e01e91e415f5252c62cab1d15de19de9266 Mon Sep 17 00:00:00 2001
+From a9038656fd1e55a066fdb7e117deddc2593e4b61 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:01:39 +0200
 Subject: [PATCH 10/13] Client: delete more data on cleanup
@@ -1211,7 +1402,7 @@ index 19a54575c7..bb02aadf7f 100644
 2.54.0
 
 
-From 39d898220fab410379857ba38a507641d2ec6ad1 Mon Sep 17 00:00:00 2001
+From 9bbec41f1e03c320f3b0197e69804db255576238 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:07:56 +0200
 Subject: [PATCH 11/13] Client: remove comparison of collection timestamps
@@ -1259,7 +1450,7 @@ index bb02aadf7f..0ae4e078cf 100644
 2.54.0
 
 
-From b021571e561db3dc864f841437799421bb1bcc0c Mon Sep 17 00:00:00 2001
+From 8ec49fc629ecd30d4a767568e307413807c69380 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:15:44 +0200
 Subject: [PATCH 12/13] Attachments: load only from dump and drop cached
@@ -1351,7 +1542,7 @@ index e266cb4e0a..e79cc72dda 100644
 2.54.0
 
 
-From 4ec252d0aaa0562a5f6665d96273092f1d9d9220 Mon Sep 17 00:00:00 2001
+From 4632bd8444073349f0d8e1549ebe5d86ab895af9 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:22:20 +0200
 Subject: [PATCH 13/13] Disable CRLite entirely for now
@@ -1376,10 +1567,10 @@ certificate revocations.
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index 990f1dc23e..a782670b06 100644
+index b96e9d02be..99dbc49798 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -18001,7 +18001,7 @@
+@@ -18309,7 +18309,7 @@
  #    security.OCSP.enable is 0).
  - name: security.pki.crlite_mode
    type: RelaxedAtomicUint32
@@ -1389,10 +1580,10 @@ index 990f1dc23e..a782670b06 100644
  
  # The CRLite filter channel to which the user is subscribed.
 diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp
-index 940278651e..0e35326fa0 100644
+index 2903a8146b..587c01d178 100644
 --- a/security/manager/ssl/nsNSSComponent.cpp
 +++ b/security/manager/ssl/nsNSSComponent.cpp
-@@ -1070,6 +1070,7 @@ void nsNSSComponent::setValidationOptions(
+@@ -1073,6 +1073,7 @@ void nsNSSComponent::setValidationOptions(
    CRLiteMode defaultCRLiteMode = CRLiteMode::Enforce;
    CRLiteMode crliteMode =
        static_cast<CRLiteMode>(StaticPrefs::security_pki_crlite_mode());
diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index ac89438..1de4d6c 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1,4 +1,4 @@
-From 7768ec6e13e9bc273b426372b21c4819e686a152 Mon Sep 17 00:00:00 2001
+From 6a398eb55fdaa2bd215b535d4fe1af37b54a5ac9 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:09:05 +0300
 Subject: [PATCH 01/10] geolocation: Disable API and remove Google API URLs
@@ -23,10 +23,10 @@ default for now.
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index a782670b06..1142032a49 100644
+index 99dbc49798..724aced1d6 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -6880,7 +6880,7 @@
+@@ -6927,7 +6927,7 @@
  # Is support for Navigator.geolocation enabled?
  - name: geo.enabled
    type: bool
@@ -36,13 +36,13 @@ index a782670b06..1142032a49 100644
  
  # Time, in milliseconds, to wait for the location provider to spin up.
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index e0b2092b7a..7ebb8d5415 100644
+index d186a3c705..9680e4fb69 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3085,7 +3085,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
+@@ -3073,7 +3073,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
  // All the Geolocation preferences are here.
  //
- #ifndef ANDROID
+ #if !defined(ANDROID) && !defined(XP_WIN)
 -  pref("geo.provider.network.url", "https://www.googleapis.com/geolocation/v1/geolocate?key=%GOOGLE_LOCATION_SERVICE_API_KEY%&solution_channel=%OS%");
 +  pref("geo.provider.network.url", "");
  
@@ -52,7 +52,7 @@ index e0b2092b7a..7ebb8d5415 100644
 2.54.0
 
 
-From 228f650756f441c24d77fe325f61d93ca70b30ea Mon Sep 17 00:00:00 2001
+From 9f6808755a79773d29bcbe69871650a221cf4276 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:49:05 +0300
 Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
@@ -63,10 +63,10 @@ Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
  1 file changed, 8 insertions(+), 8 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index a77cc20e81..baa5d5ca15 100644
+index 2b852e0225..c2863e7255 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2535,7 +2535,7 @@ pref("browser.contentblocking.report.proxy.enabled", false);
+@@ -2556,7 +2556,7 @@ pref("browser.contentblocking.report.monitor.enabled", false);
  #endif
  
  // Disable the mobile promotion by default.
@@ -75,7 +75,7 @@ index a77cc20e81..baa5d5ca15 100644
  
  // Locales in which Send to Device emails are supported
  // The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963
-@@ -2565,7 +2565,7 @@ pref("browser.promo.pin.enabled", true);
+@@ -2586,7 +2586,7 @@ pref("browser.promo.pin.enabled", true);
  // Set to true for Fx113 (see bug 1808611)
  pref("browser.promo.cookiebanners.enabled", false);
  
@@ -84,10 +84,10 @@ index a77cc20e81..baa5d5ca15 100644
  pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA");
  
  pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections");
-@@ -2576,12 +2576,12 @@ pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.fi
+@@ -2596,12 +2596,12 @@ pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.
+ pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard");
  pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients");
  pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true");
- pref("browser.contentblocking.report.proxy_extension.url", "https://fpn.firefox.com/browser?utm_source=firefox-desktop&utm_medium=referral&utm_campaign=about-protections&utm_content=about-protections");
 -pref("browser.contentblocking.report.mobile-ios.url", "https://apps.apple.com/app/firefox-private-safe-browser/id989804926");
 -pref("browser.contentblocking.report.mobile-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox&referrer=utm_source%3Dprotection_report%26utm_content%3Dmobile_promotion");
 -pref("browser.contentblocking.report.vpn.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-card");
@@ -107,7 +107,7 @@ index a77cc20e81..baa5d5ca15 100644
 2.54.0
 
 
-From 119edff89b11a54c044934329397573b332ff839 Mon Sep 17 00:00:00 2001
+From 4e8d590f0b610940ae6a9b4cbbbd563faef1dda1 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 03/10] Remove some references to AMO
@@ -148,7 +148,7 @@ Subject: [PATCH 03/10] Remove some references to AMO
  6 files changed, 31 insertions(+), 46 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index baa5d5ca15..625e88f97c 100644
+index c2863e7255..c6d6a3da11 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -23,7 +23,7 @@
@@ -179,7 +179,7 @@ index baa5d5ca15..625e88f97c 100644
  
  // The URL for the privacy policy related to recommended extensions.
  pref("extensions.recommendations.privacyPolicyUrl", "https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_content=privacy-policy-link#addons");
-@@ -81,7 +81,7 @@ pref("xpinstall.signatures.required", true);
+@@ -77,7 +77,7 @@ pref("xpinstall.signatures.required", true);
  pref("extensions.dataCollectionPermissions.enabled", true);
  
  // Dictionary download preference
@@ -188,7 +188,7 @@ index baa5d5ca15..625e88f97c 100644
  
  // At startup, should we check to see if the installation
  // date is older than some threshold
-@@ -2869,12 +2869,13 @@ pref("app.normandy.onsync_skew_sec", 600);
+@@ -2889,12 +2889,13 @@ pref("app.normandy.onsync_skew_sec", 600);
  //      the app and browser.
  #if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION)
    pref("intl.multilingual.enabled", true);
@@ -204,11 +204,11 @@ index baa5d5ca15..625e88f97c 100644
    pref("intl.multilingual.liveReload", false);
    pref("intl.multilingual.liveReloadBidirectional", false);
 diff --git a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
-index 3250823bc6..83ec8bba1b 100644
+index a5bf9d4c97..d33520c9bf 100644
 --- a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
 +++ b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
-@@ -38,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap
- import java.util.concurrent.TimeUnit
+@@ -39,7 +39,7 @@ import java.util.concurrent.TimeUnit
+ import kotlin.collections.set
  
  internal const val API_VERSION = "api/v4"
 -internal const val DEFAULT_SERVER_URL = "https://services.addons.mozilla.org"
@@ -217,10 +217,10 @@ index 3250823bc6..83ec8bba1b 100644
  internal const val DEFAULT_COLLECTION_NAME = "7e8d6dc651b54ab385fb8791bf9dac"
  internal const val COLLECTION_FILE_NAME_PREFIX = "mozilla_components_addon_collection"
 diff --git a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
-index bac9952132..c7d37b7580 100644
+index a858caa38b..07ea22bfea 100644
 --- a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
 +++ b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
-@@ -80,8 +80,7 @@ class AMOAddonsProviderTest {
+@@ -82,8 +82,7 @@ class AMOAddonsProviderTest {
          assertNull(addon.author)
          verify(client).fetch(
              Request(
@@ -230,7 +230,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -148,8 +147,7 @@ class AMOAddonsProviderTest {
+@@ -150,8 +149,7 @@ class AMOAddonsProviderTest {
  
          verify(client).fetch(
              Request(
@@ -250,7 +250,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(5, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -423,8 +420,7 @@ class AMOAddonsProviderTest {
+@@ -420,8 +417,7 @@ class AMOAddonsProviderTest {
          provider.getFeaturedAddons()
          verify(mockedClient).fetch(
              Request(
@@ -260,7 +260,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -450,8 +446,7 @@ class AMOAddonsProviderTest {
+@@ -447,8 +443,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -270,7 +270,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -469,8 +464,7 @@ class AMOAddonsProviderTest {
+@@ -466,8 +461,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -280,7 +280,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -488,8 +482,7 @@ class AMOAddonsProviderTest {
+@@ -485,8 +479,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -290,7 +290,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -507,8 +500,7 @@ class AMOAddonsProviderTest {
+@@ -504,8 +497,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -300,7 +300,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -526,8 +518,7 @@ class AMOAddonsProviderTest {
+@@ -523,8 +515,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -310,7 +310,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -545,8 +536,7 @@ class AMOAddonsProviderTest {
+@@ -542,8 +533,7 @@ class AMOAddonsProviderTest {
  
          verify(mockedClient).fetch(
              Request(
@@ -320,7 +320,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -571,10 +561,7 @@ class AMOAddonsProviderTest {
+@@ -566,10 +556,7 @@ class AMOAddonsProviderTest {
          provider.getFeaturedAddons()
          verify(mockedClient).fetch(
              Request(
@@ -332,7 +332,7 @@ index bac9952132..c7d37b7580 100644
                  readTimeout = Pair(DEFAULT_READ_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS),
                  conservative = true,
              ),
-@@ -599,10 +586,7 @@ class AMOAddonsProviderTest {
+@@ -594,10 +581,7 @@ class AMOAddonsProviderTest {
          provider.getFeaturedAddons()
          verify(mockedClient).fetch(
              Request(
@@ -345,7 +345,7 @@ index bac9952132..c7d37b7580 100644
                  conservative = true,
              ),
 diff --git a/mobile/android/app/geckoview-prefs.js b/mobile/android/app/geckoview-prefs.js
-index 5f88a18fb4..11f59bb7c2 100644
+index 2f5b02eed2..0cc5708dcc 100644
 --- a/mobile/android/app/geckoview-prefs.js
 +++ b/mobile/android/app/geckoview-prefs.js
 @@ -201,11 +201,11 @@ pref("extensions.experiments.enabled", false);
@@ -365,10 +365,10 @@ index 5f88a18fb4..11f59bb7c2 100644
  // Don't let XPIProvider install distribution add-ons; we do our own thing on mobile
  pref("extensions.installDistroAddons", false);
 diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle
-index 15b1d953a3..2744b53945 100644
+index ad28bfb8c8..80c6b1157e 100644
 --- a/mobile/android/fenix/app/build.gradle
 +++ b/mobile/android/fenix/app/build.gradle
-@@ -79,7 +79,7 @@ android {
+@@ -80,7 +80,7 @@ android {
          buildConfigField "String", "AMO_COLLECTION_NAME", "\"Extensions-for-Android\""
          buildConfigField "String", "AMO_COLLECTION_USER", "\"mozilla\""
          // This should be the base URL used to call the AMO API.
@@ -378,10 +378,10 @@ index 15b1d953a3..2744b53945 100644
          def deepLinkSchemeValue = "fenix-dev"
          buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\""
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 7ebb8d5415..f92aeb67b3 100644
+index 9680e4fb69..22e50d1c9a 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -1764,8 +1764,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
+@@ -1752,8 +1752,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
  
  pref("extensions.abuseReport.enabled", false);
  // Whether Firefox integrated abuse reporting feature should be opening the new abuse report form hosted on AMO.
@@ -392,7 +392,7 @@ index 7ebb8d5415..f92aeb67b3 100644
  
  // Blocklist preferences
  pref("extensions.blocklist.enabled", true);
-@@ -3146,7 +3146,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
+@@ -3134,7 +3134,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
  // Whether to allow the inline options browser in HTML about:addons page.
  pref("extensions.htmlaboutaddons.inline-options.enabled", true);
  // Show recommendations on the extension and theme list views.
@@ -405,7 +405,7 @@ index 7ebb8d5415..f92aeb67b3 100644
 2.54.0
 
 
-From 4c42261efdc1b2ec37a8a403fd9d7c02d75b3d8f Mon Sep 17 00:00:00 2001
+From 75926bf078e8b87510b110c2f6363f5e2dbec75a Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Jun 2023 13:16:40 +0200
 Subject: [PATCH 04/10] Disable Contile and autoupdate of system addons
@@ -425,7 +425,7 @@ only free software, remove them from the source code.
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 625e88f97c..fbaf72c210 100644
+index c6d6a3da11..ba16758380 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -52,8 +52,8 @@ pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox
@@ -439,7 +439,7 @@ index 625e88f97c..fbaf72c210 100644
  
  // Disable add-ons that are not installed by the user in all scopes by default.
  // See the SCOPE constants in AddonManager.sys.mjs for values to use here.
-@@ -1795,8 +1795,8 @@ pref("browser.topsites.component.enabled", false);
+@@ -1808,8 +1808,8 @@ pref("browser.topsites.component.enabled", false);
  
  pref("browser.topsites.useRemoteSetting", true);
  // Fetch sponsored Top Sites from Mozilla Tiles Service (Contile)
@@ -454,7 +454,7 @@ index 625e88f97c..fbaf72c210 100644
 2.54.0
 
 
-From cf0d205a6c0f9a36c3b122a62b9725b19b8dabef Mon Sep 17 00:00:00 2001
+From 12b4ae60c431d6a53e6f1071fa901b88e9590ebc Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 26 Sep 2023 21:27:34 +0200
 Subject: [PATCH 05/10] Disable Firefox Translations for now
@@ -504,10 +504,10 @@ probably has the same issues with the toolchain for the models.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index fbaf72c210..5a5cda5bf4 100644
+index ba16758380..d21025e9c8 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2384,7 +2384,7 @@ pref("browser.translation.neverForLanguages", "");
+@@ -2408,7 +2408,7 @@ pref("browser.translation.neverForLanguages", "");
  
  // Enable Firefox translations powered by the Bergamot translations
  // engine https://browser.mt/.
@@ -520,7 +520,7 @@ index fbaf72c210..5a5cda5bf4 100644
 2.54.0
 
 
-From f441682d6ab40e975f438c1191baf10eb3339dc8 Mon Sep 17 00:00:00 2001
+From 4697bbfb56a96a4cf17289673eea0ec5cef20d65 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 12 Jun 2024 00:17:17 +0200
 Subject: [PATCH 06/10] Remove some references to Pocket and disable
@@ -551,10 +551,10 @@ this nonfunctional by default.
  13 files changed, 27 insertions(+), 40 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 5a5cda5bf4..6abfbb9431 100644
+index d21025e9c8..b83a32f4a4 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2052,6 +2052,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
+@@ -2067,6 +2067,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
  
  // The pref controls if search hand-off is enabled for Activity Stream.
  pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true);
@@ -670,10 +670,10 @@ index 388cf808f4..8313a8ab43 100644
  
  A list of endpoints that are allowed to be used by Discovery Stream for remote content (eg: story metadata) and configuration (eg: remote layout definitions for experimentation).
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index edb61ebece..c3e0e52fee 100644
+index d88bc01e9a..0d74e98031 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -332,7 +332,7 @@ export const PREFS_CONFIG = new Map([
+@@ -338,7 +338,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsored",
      {
        title: "User pref for sponsored Pocket content",
@@ -682,7 +682,7 @@ index edb61ebece..c3e0e52fee 100644
      },
    ],
    [
-@@ -347,7 +347,7 @@ export const PREFS_CONFIG = new Map([
+@@ -353,7 +353,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsoredTopSites",
      {
        title: "Show sponsored top sites",
@@ -691,7 +691,7 @@ index edb61ebece..c3e0e52fee 100644
      },
    ],
    [
-@@ -1373,7 +1373,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1473,7 +1473,7 @@ export const PREFS_CONFIG = new Map([
        title:
          "Endpoint prefixes (comma-separated) that are allowed to be requested",
        value:
@@ -700,7 +700,7 @@ index edb61ebece..c3e0e52fee 100644
      },
    ],
    [
-@@ -1411,7 +1411,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1511,7 +1511,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Endpoint for when a user opts-out of sponsored content to delete the user's data from the ad server.",
@@ -709,7 +709,7 @@ index edb61ebece..c3e0e52fee 100644
      },
    ],
    [
-@@ -1592,7 +1592,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1692,7 +1692,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "'Support Firefox' pref on 'about:settings#home' page. Toggles all sponsored results on and off at the same time",
@@ -772,10 +772,10 @@ index 8225d3857b..7c1a2b2be8 100644
        },
      },
 diff --git a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-index dd0f51e41c..ff072542bf 100644
+index 6b7f30a900..3ba31520cc 100644
 --- a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
 +++ b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-@@ -1470,9 +1470,7 @@ export class TopSitesFeed {
+@@ -1480,9 +1480,7 @@ export class TopSitesFeed {
            // Also: force WebP, quality 75, no upscaling, no EXIF data
            // Uses Thumbor: https://thumbor.readthedocs.io/en/latest/usage.html
            // For now we wrap this in single quotes because this is being used in a url() css rule, and otherwise would cause a parsing error.
@@ -801,7 +801,7 @@ index 3db458069b..45e4ac26b7 100644
           * Returns a new instance of [PocketEndpointRaw].
           *
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
-index a4ea6265b6..aced4d6c28 100644
+index 63cee0ad25..7725c8cdb4 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 @@ -21,12 +21,12 @@ import java.util.Locale
@@ -827,7 +827,7 @@ index a4ea6265b6..aced4d6c28 100644
 2.54.0
 
 
-From fe1ad39e9e38ad783bc0427934fe6fbef42dcc6f Mon Sep 17 00:00:00 2001
+From ec97ffe8adac532e68f0e06dace54808ee64b258 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 19:19:31 +0200
 Subject: [PATCH 07/10] Disable experimental Machine Learning support
@@ -860,19 +860,20 @@ localhost and enable the feature if needed.
  .../ml/content/EngineProcess.sys.mjs          |  12 +-
  .../components/ml/content/ModelHub.sys.mjs    |   8 +-
  toolkit/components/ml/docs/api.rst            |  52 +--
+ toolkit/components/ml/docs/architecture.rst   |   4 +-
  toolkit/components/ml/docs/models.rst         |   2 +-
  .../ml/tests/browser/browser_ml_cache.js      |   2 +-
  .../browser/browser_ml_static_embeddings.js   |   4 +-
  .../ml/tests/browser/browser_ml_utils.js      |  65 ---
  .../internal/ModelHubProvider.sys.mjs         |   6 +-
  .../test/xpcshell/test_ModelHubProvider.js    |  12 +-
- 13 files changed, 28 insertions(+), 566 deletions(-)
+ 14 files changed, 29 insertions(+), 569 deletions(-)
 
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index f92aeb67b3..8c86157ce3 100644
+index 22e50d1c9a..a75bb8dc37 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3654,11 +3654,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
+@@ -3642,11 +3642,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
  pref("browser.ai.control.smartWindow", "default");
  
  // Enable the experimental machine learning inference engine.
@@ -1363,10 +1364,10 @@ index b8fae83dd0..483c14e7e8 100644
    let results = [];
  
 diff --git a/toolkit/components/ml/content/EngineProcess.sys.mjs b/toolkit/components/ml/content/EngineProcess.sys.mjs
-index 246c900e30..44ff5063d5 100644
+index 19384465b7..cc92db67bb 100644
 --- a/toolkit/components/ml/content/EngineProcess.sys.mjs
 +++ b/toolkit/components/ml/content/EngineProcess.sys.mjs
-@@ -232,18 +232,12 @@ class PipelineOptionsValidationError extends Error {
+@@ -237,18 +237,12 @@ class PipelineOptionsValidationError extends Error {
   * @enum {string}
   */
  export const ModelHub = {
@@ -1389,7 +1390,7 @@ index 246c900e30..44ff5063d5 100644
          options.modelRevision = "main";
          break;
 diff --git a/toolkit/components/ml/content/ModelHub.sys.mjs b/toolkit/components/ml/content/ModelHub.sys.mjs
-index a3f7cee6e6..211b8fb5d8 100644
+index 7aee254d12..acb04a45ed 100644
 --- a/toolkit/components/ml/content/ModelHub.sys.mjs
 +++ b/toolkit/components/ml/content/ModelHub.sys.mjs
 @@ -45,8 +45,8 @@ const ALLOWED_HEADERS_KEYS = [
@@ -1403,7 +1404,7 @@ index a3f7cee6e6..211b8fb5d8 100644
  const MOCHITESTS_HOSTNAME = "mochitests";
  const DEFAULT_CONTENT_TYPE = "application/octet-stream";
  const DEFAULT_DELETE_TIMEOUT_MS = 5000;
-@@ -79,7 +79,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
+@@ -87,7 +87,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
    lazy,
    "DEFAULT_ROOT_URL",
    "browser.ml.modelHubRootUrl",
@@ -1412,7 +1413,7 @@ index a3f7cee6e6..211b8fb5d8 100644
  );
  
  const ONE_GIB = 1024 * 1024 * 1024;
-@@ -165,7 +165,7 @@ class ModelOwner {
+@@ -173,7 +173,7 @@ class ModelOwner {
  
      // Switch from Mozilla to Hugging Face if needed
      if (this.hostname === MOZILLA_HUB_HOSTNAME) {
@@ -1422,7 +1423,7 @@ index a3f7cee6e6..211b8fb5d8 100644
  
      const hubRootUrl = `https://${this.hostname}/`;
 diff --git a/toolkit/components/ml/docs/api.rst b/toolkit/components/ml/docs/api.rst
-index 29c5c07fd1..dbb2957d14 100644
+index 4f89dfab05..7a618573d4 100644
 --- a/toolkit/components/ml/docs/api.rst
 +++ b/toolkit/components/ml/docs/api.rst
 @@ -56,7 +56,7 @@ To get access to the full toolbox, set the **devtools.debugger.remote-enabled**
@@ -1434,7 +1435,7 @@ index 29c5c07fd1..dbb2957d14 100644
  which contains a curated list of models.
  
  Available Options
-@@ -137,13 +137,6 @@ Each record comes with the following fields:
+@@ -144,13 +144,6 @@ Each record comes with the following fields:
  
  When the API is about to fetch a file, its URL is controlled in the allow/deny list.
  
@@ -1448,7 +1449,7 @@ index 29c5c07fd1..dbb2957d14 100644
  Each URL is tested and needs to be included in the allowlist and not in the denylist
  
  To bypass this check and allow Firefox to download any file for runnings models,
-@@ -153,49 +146,6 @@ If you want to add a new hub, organization or a specific model, ask us by
+@@ -160,49 +153,6 @@ If you want to add a new hub, organization or a specific model, ask us by
  `opening a ticket <https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Machine%20Learning>`_.
  
  
@@ -1498,11 +1499,26 @@ index 29c5c07fd1..dbb2957d14 100644
  Running the internal APIs
  :::::::::::::::::::::::::
  
+diff --git a/toolkit/components/ml/docs/architecture.rst b/toolkit/components/ml/docs/architecture.rst
+index 8e19a84d97..300cbf8ed0 100644
+--- a/toolkit/components/ml/docs/architecture.rst
++++ b/toolkit/components/ml/docs/architecture.rst
+@@ -162,9 +162,7 @@ is passed to the backend where it can be streamed into memory.
+       subgraph ModelHub["Model Hub"]
+          direction LR
+          Allowed["Allowed hubs"]
+-         Allowed --> MH["model-hub.mozilla.org"]
+-         Allowed --> HF1["huggingface.co/Mozilla"]
+-         Allowed --> HF2["huggingface.co/Xenova"]
++         Allowed --> MH["localhost"]
+          Allowed --> ETC["..."]
+       end
+ 
 diff --git a/toolkit/components/ml/docs/models.rst b/toolkit/components/ml/docs/models.rst
-index 253f128bb2..bcfd27c363 100644
+index d21112388f..c95e424aa1 100644
 --- a/toolkit/components/ml/docs/models.rst
 +++ b/toolkit/components/ml/docs/models.rst
-@@ -107,7 +107,7 @@ By doing this, you will be able to create an engine with this simple call:
+@@ -113,7 +113,7 @@ By doing this, you will be able to create an engine with this simple call:
  Our Model hub follows the same structure than Hugging Face, each file for a model is under
  a unique URL:
  
@@ -1512,7 +1528,7 @@ index 253f128bb2..bcfd27c363 100644
  Where:
  - `organization` and `name` are the model id. example " `mozilla/distivit`"
 diff --git a/toolkit/components/ml/tests/browser/browser_ml_cache.js b/toolkit/components/ml/tests/browser/browser_ml_cache.js
-index 15a2e23e80..a4722d08b7 100644
+index c3c8069e76..ca5d7eda14 100644
 --- a/toolkit/components/ml/tests/browser/browser_ml_cache.js
 +++ b/toolkit/components/ml/tests/browser/browser_ml_cache.js
 @@ -52,7 +52,7 @@ const FAKE_ONNX_MODEL_ARGS = {
@@ -1717,7 +1733,7 @@ index eb2a2cf35d..e5f120fd0a 100644
 2.54.0
 
 
-From ab3a3b8e98574b3fa839edcb46045600783f10fb Mon Sep 17 00:00:00 2001
+From e81d26ca2c5f0002c5b383e26f191e8c43e95044 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 22 Jul 2025 20:46:59 +0000
 Subject: [PATCH 08/10] Ensure 'Suggest more of my tabs' feature disabled
@@ -1728,15 +1744,14 @@ PKGBUILD (see removals from 'toolkit/components/ml/'), and don't build
 them either, because of potential freedom issues and complexity of
 introducing them to pacman repositories.
 ---
- browser/app/profile/firefox.js         | 2 +-
- browser/components/preferences/main.js | 1 +
- 2 files changed, 2 insertions(+), 1 deletion(-)
+ browser/app/profile/firefox.js | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 6abfbb9431..1a57799658 100644
+index b83a32f4a4..1eac6a6c70 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1081,7 +1081,7 @@ pref("browser.tabs.groups.enabled", true);
+@@ -1094,7 +1094,7 @@ pref("browser.tabs.groups.enabled", true);
  pref("browser.tabs.groups.hoverPreview.enabled", true);
  pref("browser.tabs.groups.alternateMenu", false);
  
@@ -1745,23 +1760,11 @@ index 6abfbb9431..1a57799658 100644
  
  pref("browser.tabs.notes.enabled", false);
  
-diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
-index 6f4cb34d16..a71eb8f217 100644
---- a/browser/components/preferences/main.js
-+++ b/browser/components/preferences/main.js
-@@ -1882,6 +1882,7 @@ Preferences.addSetting({
-   id: "smartTabGroups",
-   pref: "browser.tabs.groups.smart.enabled",
- });
-+// Patch should fail once upstream does changes to surrounding lines
- Preferences.addSetting({
-   id: "tabGroupSuggestions",
-   pref: "browser.tabs.groups.smart.userEnabled",
 -- 
 2.54.0
 
 
-From c01789507001e53a76f89df92c75ad16a41424ef Mon Sep 17 00:00:00 2001
+From b01d92c5e7f891563d77692f6669f925c040f974 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 9 Mar 2026 16:58:34 +0100
 Subject: [PATCH 09/10] Block and hide AI Controls in Preferences
@@ -1774,10 +1777,10 @@ Please see the previous patches for the reasons.
  3 files changed, 9 insertions(+), 9 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 1a57799658..2ad234fa73 100644
+index 1eac6a6c70..8ef7a9b34a 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1386,7 +1386,7 @@ pref("browser.preferences.experimental.hidden", false);
+@@ -1399,7 +1399,7 @@ pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
  pref("browser.preferences.moreFromMozilla", true);
  // Whether we show the "AI Controls" pane.
@@ -1786,11 +1789,20 @@ index 1a57799658..2ad234fa73 100644
  // Whether to show unavailable AI controls regardless of region/locale
  // restrictions. This is intended for localizers to be able to see the strings.
  pref("browser.preferences.aiControls.showUnavailable", false);
+@@ -2214,7 +2214,7 @@ pref("sidebar.updatedBookmarks.enabled", false);
+ 
+ pref("sidebar.notification.badge.aichat", false);
+ 
+-pref("browser.ml.chat.enabled", true);
++pref("browser.ml.chat.enabled", false);
+ pref("browser.ml.chat.hideLocalhost", true);
+ pref("browser.ml.chat.maxLength", 7000);
+ pref("browser.ml.chat.menu", true);
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 3f505ccbd9..79e20bf615 100644
+index 50904cb360..8c25c7bf3f 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -2400,7 +2400,7 @@ preferences-ai-controls-key-points-control =
+@@ -2554,7 +2554,7 @@ preferences-ai-controls-key-points-control =
  
  preferences-ai-controls-sidebar-chatbot-group =
      .label = AI chatbot providers in sidebar
@@ -1800,10 +1812,10 @@ index 3f505ccbd9..79e20bf615 100644
  preferences-ai-controls-sidebar-chatbot-control =
      .label = Chatbot in sidebar
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 8c86157ce3..5548755a08 100644
+index a75bb8dc37..c372d42770 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3645,13 +3645,13 @@ pref("browser.translations.chaos.errors", false);
+@@ -3633,13 +3633,13 @@ pref("browser.translations.chaos.errors", false);
  pref("browser.translations.chaos.timeoutMS", 0);
  
  // AI controls
@@ -1828,7 +1840,7 @@ index 8c86157ce3..5548755a08 100644
 2.54.0
 
 
-From e34d8e7f218cc57ba3fce1a157350337ab4795fa Mon Sep 17 00:00:00 2001
+From f1116883ad14c8302e8f90fc39b98133aa0ba536 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 16 Sep 2024 01:49:27 +0200
 Subject: [PATCH 10/10] Wipe Merino hostname, disable Weather & Yelp
@@ -1841,28 +1853,42 @@ example, nonfree JavaScript code. So remove Merino hostname and disable
 suggestions for Weather and Yelp since Iceweasel doesn't ship any
 providers for these.
 ---
- browser/app/profile/firefox.js                | 30 +++++++++----------
+ browser/app/profile/firefox.js                | 30 ++++++++---------
  .../aiwindow/models/WCSMerinoClient.sys.mjs   |  2 +-
  .../quicksuggest/MerinoTestUtils.sys.mjs      |  2 +-
  .../CardSections/CardSections.jsx             |  2 +-
- .../newtab/lib/ActivityStream.sys.mjs         |  4 +--
+ .../newtab/lib/ActivityStream.sys.mjs         |  8 ++---
  .../CardSections.test.jsx                     |  6 ++--
  .../CardSections.test.jsx                     |  6 ++--
  .../test/unit/lib/DiscoveryStreamFeed.test.js |  2 +-
+ .../newtab/test/xpcshell/test_SportsFeed.js   | 20 ++++++------
  .../newtab/test/xpcshell/topstories.json      |  2 +-
- docs/rust-components/topic-guides/merino.md   | 26 ++++++++--------
+ docs/rust-components/topic-guides/merino.md   | 32 +++++++++----------
  .../components/browser/icons/IconRequest.kt   |  2 --
+ .../fxsuggest/client/SuggestMerinoClient.kt   |  4 +--
  .../service/merino-manifest/README.md         |  1 -
- .../api/ContentRecommendationEndpointRaw.kt   |  5 +---
+ .../api/ContentRecommendationEndpointRaw.kt   |  5 +--
  .../api/ContentRecommendationsResponse.kt     |  6 ----
+ .../scripts/update_mobile_merino_manifest.py  |  2 +-
+ .../components/merino/README.md               |  2 +-
+ .../merino/src/curated_recommendations/mod.rs |  2 +-
+ .../src/curated_recommendations/tests.rs      | 24 +++++++-------
+ .../components/merino/src/suggest/http.rs     |  4 +--
+ .../components/merino/src/suggest/mod.rs      |  2 +-
+ .../components/merino/src/suggest/tests.rs    | 24 +++++++-------
+ .../components/merino/src/worldcup/http.rs    |  4 +--
+ .../components/merino/src/worldcup/mod.rs     |  2 +-
+ .../components/merino/src/worldcup/tests.rs   | 20 ++++++------
  .../components/viaduct/src/ohttp.rs           |  8 ++---
- 15 files changed, 46 insertions(+), 58 deletions(-)
+ .../examples/merino-cli/src/main.rs           |  4 +--
+ .../examples/viaduct-cli/src/main.rs          |  2 +-
+ 29 files changed, 109 insertions(+), 121 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 2ad234fa73..1f8560ed04 100644
+index 8ef7a9b34a..8434fca4a3 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -467,7 +467,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
+@@ -484,7 +484,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
  
  // If `browser.urlbar.weather.featureGate` is true, this controls whether
  // weather suggestions are turned on.
@@ -1871,7 +1897,7 @@ index 2ad234fa73..1f8560ed04 100644
  
  // If `browser.urlbar.trending.featureGate` is true, this controls whether
  // trending suggestions are turned on.
-@@ -664,13 +664,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
+@@ -681,13 +681,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
  pref("browser.urlbar.groupLabels.enabled", true);
  
  // The Merino endpoint URL, not including parameters.
@@ -1888,7 +1914,7 @@ index 2ad234fa73..1f8560ed04 100644
  
  // Timeout for Merino fetches (ms).
  pref("browser.urlbar.merino.timeoutMs", 500);
-@@ -679,8 +679,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
+@@ -696,8 +696,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
  pref("browser.urlbar.merino.providers", "");
  
  // Merino endpoint prefs to be used for weather widgets
@@ -1899,7 +1925,7 @@ index 2ad234fa73..1f8560ed04 100644
  
  // Comma-separated list of client variants to send to Merino
  pref("browser.urlbar.merino.clientVariants", "");
-@@ -721,7 +721,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
+@@ -738,7 +738,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
  
  // If `browser.urlbar.mdn.featureGate` is true, this controls whether
  // mdn suggestions are turned on.
@@ -1908,7 +1934,7 @@ index 2ad234fa73..1f8560ed04 100644
  
  // Feature gate pref for Yelp suggestions in the urlbar.
  pref("browser.urlbar.yelp.featureGate", false);
-@@ -743,7 +743,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
+@@ -760,7 +760,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
  
  // If `browser.urlbar.yelp.featureGate` is true, this controls whether
  // Yelp suggestions are turned on.
@@ -1917,7 +1943,7 @@ index 2ad234fa73..1f8560ed04 100644
  
  // Feature gate pref for Fakespot suggestions in the urlbar.
  // TODO Bug 1982966: Remove this after all experiments and rollouts using it
-@@ -1849,7 +1849,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
+@@ -1864,7 +1864,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
  pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true);
  
  // Weather widget for newtab
@@ -1926,20 +1952,20 @@ index 2ad234fa73..1f8560ed04 100644
  pref("browser.newtabpage.activity-stream.weather.query", "");
  pref("browser.newtabpage.activity-stream.weather.display", "detailed");
  
-@@ -1859,10 +1859,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
+@@ -1874,10 +1874,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
  pref("browser.newtabpage.activity-stream.weather.locationSearchEnabled", true);
  
  // List of regions that get weather by default.
--pref("browser.newtabpage.activity-stream.discoverystream.region-weather-config", "US,CA");
+-pref("browser.newtabpage.activity-stream.discoverystream.region-weather-config", "AT,BE,BG,CA,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LI,LT,LV,MT,NL,NO,PL,PT,RO,SE,SI,SK,US");
 +pref("browser.newtabpage.activity-stream.discoverystream.region-weather-config", "");
  
  // List of locales that weather widget supports.
--pref("browser.newtabpage.activity-stream.discoverystream.locale-weather-config", "en-US,en-GB,en-CA");
+-pref("browser.newtabpage.activity-stream.discoverystream.locale-weather-config", "bg,cs,da,de,el,en-CA,en-GB,en-US,es-ES,et,fi,fr,hr,hu,is,it,lv,nb-NO,nl,pl,pt-PT,ro,sk,sl,sv-SE,tr");
 +pref("browser.newtabpage.activity-stream.discoverystream.locale-weather-config", "");
  
  // Promo card visibility
  pref("browser.newtabpage.activity-stream.discoverystream.promoCard.visible", true);
-@@ -2007,10 +2007,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
+@@ -2022,10 +2022,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
  // List of locales for contextual ads.
  pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.locale-config", "en-US,en-GB,en-CA");
  
@@ -1953,7 +1979,7 @@ index 2ad234fa73..1f8560ed04 100644
  pref("browser.newtabpage.activity-stream.discoverystream.imageProxy.enabled", true);
  
  // List of regions that get spocs by default.
-@@ -2257,7 +2257,7 @@ pref("browser.smartwindow.firstrun.explainerURL", "https://www.firefox.com/en-US
+@@ -2274,7 +2274,7 @@ pref("browser.smartwindow.allowTables", true);
  
  // Smart Window: Merino World Cup Soccer tool call (bug 2038266)
  pref("browser.smartwindow.worldcup.enabled", true);
@@ -1989,10 +2015,10 @@ index fc8ca65216..06c3492aac 100644
        score: 0,
        custom_details: {
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-index 531eea8e14..bc8fda3235 100644
+index 5a9a884a6a..0aa155380c 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-@@ -48,7 +48,7 @@ const PREF_NOVA_ENABLED = "nova.enabled";
+@@ -50,7 +50,7 @@ const PREF_NOVA_ENABLED = "nova.enabled";
  
  // Feed URL
  const CURATED_RECOMMENDATIONS_FEED_URL =
@@ -2002,10 +2028,10 @@ index 531eea8e14..bc8fda3235 100644
  // Divides evenly by 2, 3, and 4 to avoid orphan cards in any column layout.
  const DEFAULT_MAX_TILES = 12;
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index c3e0e52fee..78e7224a07 100644
+index 0d74e98031..e4ab54cbbf 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -522,7 +522,7 @@ export const PREFS_CONFIG = new Map([
+@@ -528,7 +528,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the weather report",
@@ -2014,7 +2040,7 @@ index c3e0e52fee..78e7224a07 100644
      },
    ],
    [
-@@ -531,7 +531,7 @@ export const PREFS_CONFIG = new Map([
+@@ -537,21 +537,21 @@ export const PREFS_CONFIG = new Map([
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the hourly forecasts to display in Weather Forecast widget",
        value:
@@ -2023,6 +2049,22 @@ index c3e0e52fee..78e7224a07 100644
      },
    ],
    [
+     "sports.worldCup.teamsEndpoint",
+     {
+       title: "The Merino endpoint for fetching available World Cup teams data",
+-      value: "https://merino.services.mozilla.com/api/v1/wcs/teams",
++      value: "",
+     },
+   ],
+   [
+     "sports.worldCup.matchesEndpoint",
+     {
+       title: "The Merino endpoint for fetching World Cup match data",
+-      value: "https://merino.services.mozilla.com/api/v1/wcs/matches",
++      value: "",
+     },
+   ],
+   [
 diff --git a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 index 1a9f055057..456e1493e8 100644
 --- a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
@@ -2098,6 +2140,76 @@ index 5c00b10a20..90a7556497 100644
            data: {
              sections: [
                {
+diff --git a/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js b/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
+index 38a79a3b1e..558fc86be2 100644
+--- a/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
++++ b/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
+@@ -24,7 +24,7 @@ function makeFeed({ enabled = true, systemEnabled = true } = {}) {
+         values: {
+           [PREF_SPORTS_ENABLED]: enabled,
+           [PREF_SYSTEM_SPORTS_ENABLED]: systemEnabled,
+-          "discoverystream.endpoints": "https://merino.services.mozilla.com/",
++          "discoverystream.endpoints": "",
+         },
+       },
+     },
+@@ -311,9 +311,9 @@ add_task(async function test_fetchSportsData_dispatches_teams_and_matches() {
+   sinon.stub(feed.merino, "fetchSportsMatches").resolves(mockMatches);
+ 
+   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/teams";
++    "";
+   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/matches";
++    "";
+ 
+   info(
+     "fetchSportsData should dispatch WIDGETS_SPORTS_WIDGET_SET with teams and matches"
+@@ -341,9 +341,9 @@ add_task(async function test_fetchSportsData_dispatches_teams_and_matches() {
+ 
+ add_task(async function test_fetchSportsData_reads_endpoint_prefs() {
+   const feed = makeFeed();
+-  const teamsEndpoint = "https://merino.services.mozilla.com/api/v1/wcs/teams";
++  const teamsEndpoint = "";
+   const matchesEndpoint =
+-    "https://merino.services.mozilla.com/api/v1/wcs/matches";
++    "";
+ 
+   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
+     teamsEndpoint;
+@@ -375,7 +375,7 @@ add_task(
+     const trainhopMatchesEndpoint = "https://trainhop.example.com/matches";
+ 
+     feed.store.state.Prefs.values["discoverystream.endpoints"] =
+-      "https://merino.services.mozilla.com/,https://trainhop.example.com/";
++      "";
+     feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
+       "https://pref.example.com/teams";
+     feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
+@@ -447,9 +447,9 @@ add_task(async function test_fetchSportsData_caches_teams_and_matches() {
+   sinon.stub(feed.merino, "fetchSportsMatches").resolves(mockMatches);
+ 
+   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/teams";
++    "";
+   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/matches";
++    "";
+ 
+   const setStub = sinon.stub(feed.cache, "set").resolves();
+ 
+@@ -472,9 +472,9 @@ add_task(async function test_fetchSportsData_blocks_disallowed_endpoints() {
+   feed.store.state.Prefs.values["discoverystream.endpoints"] =
+     "https://allowed.example.com/";
+   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/teams";
++    "";
+   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
+-    "https://merino.services.mozilla.com/api/v1/wcs/matches";
++    "";
+ 
+   const teamsStub = sinon.stub(feed.merino, "fetchSportsTeams").resolves([]);
+   const matchesStub = sinon
 diff --git a/browser/extensions/newtab/test/xpcshell/topstories.json b/browser/extensions/newtab/test/xpcshell/topstories.json
 index e4e82bcb03..948c6e8d20 100644
 --- a/browser/extensions/newtab/test/xpcshell/topstories.json
@@ -2112,19 +2224,19 @@ index e4e82bcb03..948c6e8d20 100644
        "receivedRank": 0,
        "features": { "t_business": 1.0 }
 diff --git a/docs/rust-components/topic-guides/merino.md b/docs/rust-components/topic-guides/merino.md
-index 0aa9ca94fa..4ba2c61133 100644
+index 5c35861646..633250ee61 100644
 --- a/docs/rust-components/topic-guides/merino.md
 +++ b/docs/rust-components/topic-guides/merino.md
 @@ -5,7 +5,7 @@ myst:
  
  # Merino
  
--The Merino component provides two clients for interacting with the [Merino service](https://merino.services.mozilla.com/docs):
-+The Merino component provides two clients for interacting with the [Merino service](https://merino.example.invalid/docs):
+-The Merino component provides three clients for interacting with the [Merino service](https://merino.services.mozilla.com/docs):
++The Merino component provides three clients for interacting with the Merino service:
  
  - **`CuratedRecommendationsClient`** — Fetches personalized content recommendations, powering features like Firefox's New Tab page.
  - **`SuggestClient`** — Fetches search suggestions, powering features like Firefox's address bar.
-@@ -24,8 +24,8 @@ import mozilla.appservices.viaduct.configureOhttpChannel
+@@ -25,8 +25,8 @@ import mozilla.appservices.viaduct.configureOhttpChannel
  configureOhttpChannel(
      channel = "merino",
      config = OhttpConfig(
@@ -2135,7 +2247,7 @@ index 0aa9ca94fa..4ba2c61133 100644
      ),
  )
  ```
-@@ -33,8 +33,8 @@ configureOhttpChannel(
+@@ -34,8 +34,8 @@ configureOhttpChannel(
  ```swift
  // Configure the OHTTP channel before using SuggestClient
  let config = OhttpConfig(
@@ -2146,16 +2258,16 @@ index 0aa9ca94fa..4ba2c61133 100644
  )
  try configureOhttpChannel(channelId: "merino", config: config)
  ```
-@@ -48,7 +48,7 @@ Both clients are synchronous — calling them directly will block the current th
+@@ -49,7 +49,7 @@ All clients are synchronous — calling them directly will block the current thr
  
  ## Curated Recommendations Client
  
 -Fetches personalized content recommendations from the Merino Service. [Merino Curated Recommendations API Docs](https://merino.services.mozilla.com/docs#/default/curated_content_api_v1_curated_recommendations_post)
-+Fetches personalized content recommendations from the Merino Service. [Merino Curated Recommendations API Docs](https://merino.example.invalid/docs#/default/curated_content_api_v1_curated_recommendations_post)
++Fetches personalized content recommendations from the Merino Service. Merino Curated Recommendations API Docs
  
  The API for the `CuratedRecommendationsClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-curated-recommendations-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/CuratedRecommendationsClient.html).
  
-@@ -77,7 +77,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
+@@ -78,7 +78,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
  ```kotlin
  
  val config = CuratedRecommendationsConfig(
@@ -2164,7 +2276,7 @@ index 0aa9ca94fa..4ba2c61133 100644
      userAgentHeader = "Mozilla/5.0"
  )
  
-@@ -88,7 +88,7 @@ val client = CuratedRecommendationsClient(config)
+@@ -89,7 +89,7 @@ val client = CuratedRecommendationsClient(config)
  ```swift
  
  let config = CuratedRecommendationsConfig(
@@ -2173,7 +2285,7 @@ index 0aa9ca94fa..4ba2c61133 100644
      userAgentHeader: "Mozilla/5.0"
  )
  
-@@ -237,7 +237,7 @@ func fetchCuratedRecommendations() {
+@@ -238,7 +238,7 @@ func fetchCuratedRecommendations() {
  
  ## Suggest Client
  
@@ -2182,42 +2294,69 @@ index 0aa9ca94fa..4ba2c61133 100644
  
  The API for the `SuggestClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-suggest-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/SuggestClient.html).
  
-@@ -265,7 +265,7 @@ The `SuggestClient` is initialized using a `SuggestConfig` object with an option
+@@ -266,7 +266,7 @@ The `SuggestClient` is initialized using a `SuggestConfig` object with an option
  ```kotlin
  
  val config = SuggestConfig(
 -    baseHost = null // defaults to https://merino.services.mozilla.com
-+    baseHost = null // defaults to https://merino.example.invalid
++    baseHost = null
  )
  
  val client = SuggestClient(config)
-@@ -274,7 +274,7 @@ val client = SuggestClient(config)
+@@ -275,7 +275,7 @@ val client = SuggestClient(config)
  
  ```swift
  
 -let config = SuggestConfig(baseHost: nil) // defaults to https://merino.services.mozilla.com
-+let config = SuggestConfig(baseHost: nil) // defaults to https://merino.example.invalid
++let config = SuggestConfig(baseHost: nil)
  
  let client = try SuggestClient(config: config)
  
-@@ -337,7 +337,7 @@ do {
+@@ -338,7 +338,7 @@ do {
  
  | **Field** | **Type** | **Description** |
  |-----------|---------|----------------|
 -| `baseHost` | `string (optional)` | The base host for the Merino endpoint. Defaults to `https://merino.services.mozilla.com`. |
-+| `baseHost` | `string (optional)` | The base host for the Merino endpoint. Defaults to `https://merino.example.invalid`. |
++| `baseHost` | `string (optional)` | The base host for the Merino endpoint.
  
  ### SuggestOptions
  
-@@ -356,7 +356,7 @@ All fields are optional — omitted fields are not sent to Merino.
+@@ -357,7 +357,7 @@ All fields are optional — omitted fields are not sent to Merino.
  
  ### Response
  
 -`getSuggestions()` returns the raw JSON response body as a string. The response follows the [Merino suggest API schema](https://merino.services.mozilla.com/docs#/default/suggest_api_v1_suggest_get).
-+`getSuggestions()` returns the raw JSON response body as a string. The response follows the [Merino suggest API schema](https://merino.example.invalid/docs#/default/suggest_api_v1_suggest_get).
++`getSuggestions()` returns the raw JSON response body as a string. The response follows the Merino suggest API schema.
  
  ## Error Handling
  
+@@ -447,7 +447,7 @@ The `WorldCupClient` is initialized using a `WorldCupConfig` object with an opti
+ ```kotlin
+ 
+ val config = WorldCupConfig(
+-    baseHost = null // defaults to https://merino.services.mozilla.com
++    baseHost = null
+ )
+ 
+ val client = WorldCupClient(config)
+@@ -456,7 +456,7 @@ val client = WorldCupClient(config)
+ 
+ ```swift
+ 
+-let config = WorldCupConfig(baseHost: nil) // defaults to https://merino.services.mozilla.com
++let config = WorldCupConfig(baseHost: nil)
+ 
+ let client = try WorldCupClient(config: config)
+ 
+@@ -515,7 +515,7 @@ do {
+ 
+ | **Field** | **Type** | **Description** |
+ |-----------|---------|----------------|
+-| `baseHost` | `string (optional)` | The base host for the Merino endpoint. Defaults to `https://merino.services.mozilla.com`. |
++| `baseHost` | `string (optional)` | The base host for the Merino endpoint. |
+ 
+ ### WorldCupOptions
+ 
 diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
 index daba47117f..604c19c762 100644
 --- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
@@ -2231,6 +2370,20 @@ index daba47117f..604c19c762 100644
               */
              MERINO_MANIFEST,
  
+diff --git a/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt b/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
+index 5d951c4fae..869b64ee4a 100644
+--- a/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
++++ b/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
+@@ -70,7 +70,7 @@ class SuggestMerinoClient : MerinoClient {
+             "Unexpected error when fetching Online Suggestions"
+         private const val PROVIDERS = "flightaware,polygon,sports"
+         private const val MERINO = "merino"
+-        private const val RELAY_URL = "https://ohttp-merino.mozilla.fastly-edge.com"
+-        private const val GATEWAY_HOST = "ohttp-gateway-merino.services.mozilla.com"
++        private const val RELAY_URL = ""
++        private const val GATEWAY_HOST = ""
+     }
+ }
 diff --git a/mobile/android/android-components/components/service/merino-manifest/README.md b/mobile/android/android-components/components/service/merino-manifest/README.md
 index 2fb1e95797..b8a033a9b9 100644
 --- a/mobile/android/android-components/components/service/merino-manifest/README.md
@@ -2290,6 +2443,428 @@ index a177ae9a99..52b4ee18df 100644
   * @property corpusItemId A content identifier that corresponds uniquely to the URL.
   * @property scheduledCorpusItemId The ID of the scheduled corpus item for this recommendation.
   * @property url The url of the recommendation.
+diff --git a/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py b/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
+index 743f2ba9fd..4892d71676 100644
+--- a/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
++++ b/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
+@@ -17,7 +17,7 @@ import certifi
+ import mozpack.path as mozpath
+ from redo import retry
+ 
+-MERINO_MANIFEST_URL = "https://merino.services.mozilla.com/api/v1/manifest"
++MERINO_MANIFEST_URL = ""
+ MERINO_MANIFEST_PATH = mozpath.join(
+     buildconfig.topsrcdir,
+     "mobile/android/android-components/components/service/merino-manifest/src/main/assets/manifest/manifest.json",
+diff --git a/third_party/application-services/components/merino/README.md b/third_party/application-services/components/merino/README.md
+index 63f8fd33bf..77bb4543f9 100644
+--- a/third_party/application-services/components/merino/README.md
++++ b/third_party/application-services/components/merino/README.md
+@@ -1,6 +1,6 @@
+ # Merino
+ 
+-A cross-platform Rust client for Mozilla's [Merino](https://merino.services.mozilla.com) service. This library provides a `CuratedRecommendationsClient` that fetches a subset of information from the Merino backend via its REST API (`/api/v1/curated-recommendations`). It uses [UniFFI](https://mozilla.github.io/uniffi-rs/) to generate cross-platform bindings that those platforms will consume.
++A cross-platform Rust client for Mozilla's Merino service. This library provides a `CuratedRecommendationsClient` that fetches a subset of information from the Merino backend via its REST API (`/api/v1/curated-recommendations`). It uses [UniFFI](https://mozilla.github.io/uniffi-rs/) to generate cross-platform bindings that those platforms will consume.
+ 
+ ## Testing
+ 
+diff --git a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
+index d1421e2375..59941e4be9 100644
+--- a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
++++ b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
+@@ -25,7 +25,7 @@ use error_support::handle_error;
+ use url::Url;
+ 
+ /// Default base host for the Merino curated recommendations API.
+-const DEFAULT_BASE_HOST: &str = "https://merino.services.mozilla.com";
++const DEFAULT_BASE_HOST: &str = "";
+ 
+ /// Client for fetching curated recommendations from the Merino service.
+ ///
+diff --git a/third_party/application-services/components/merino/src/curated_recommendations/tests.rs b/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
+index 07c54a10a4..d359d5572d 100644
+--- a/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
++++ b/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
+@@ -48,7 +48,7 @@ impl http::HttpClientTrait for FakeHttpClientSuccess {
+                     publisher: "CBC".to_string(),
+                     is_time_sensitive: false,
+                     image_url: "https://i.cbc.ca/1.7334557.1727356371!/fileImage/httpImage/image.jpg_gen/derivatives/16x9_1180/housing-20240812.jpg?im=Resize%3D620".to_string(),
+-                    icon_url: Option::from("https://merino-images.services.mozilla.com/favicons/ccd270c8c839b5560cc10386689067bbdbcedc437c0f6f5caa2db3a4c69eb01c_4792.svg".to_string()),
++                    icon_url: Option::from("".to_string()),
+                     tile_id: Some(2140274178832306),
+                     received_rank: 1,
+                 },
+@@ -62,7 +62,7 @@ impl http::HttpClientTrait for FakeHttpClientSuccess {
+                     publisher: "NBC News".to_string(),
+                     is_time_sensitive: true,
+                     image_url: "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/4089978e-4a96-4b53-a715-5ca40079773d.jpeg".to_string(),
+-                    icon_url: Option::from("https://merino-images.services.mozilla.com/favicons/f72a169d901fe296f4cc35642ffc42d1c946bd56e81f9fa2fdbe0cf5ecdf1fc9_5052.png".to_string()),
++                    icon_url: Option::from("".to_string()),
+                     tile_id: Some(4434955254511817),
+                     received_rank: 2,
+                 },
+@@ -76,7 +76,7 @@ impl http::HttpClientTrait for FakeHttpClientSuccess {
+                     publisher: "BBC".to_string(),
+                     is_time_sensitive: true,
+                     image_url: "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/a7eeb1b7-e06a-4ce5-9259-d661176f3e43.png".to_string(),
+-                    icon_url: Option::from("https://merino-images.services.mozilla.com/favicons/388231ac048528715ffc2aebad84b58c19231d92156179d21c94d0b98d4f1d9b_751.svg".to_string()),
++                    icon_url: Option::from("".to_string()),
+                     tile_id: Some(1271137535326463),
+                     received_rank: 3,
+                 }
+@@ -179,7 +179,7 @@ fn test_get_curated_recommendations_success() {
+     let response_result = client_inner.get_curated_recommendations(
+         &request,
+         "Rust-HTTP-Client/0.1",
+-        &Url::parse("https://merino.services.mozilla.com").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(response_result.is_ok(), "Expected a successful response");
+@@ -210,7 +210,7 @@ fn test_get_curated_recommendations_success() {
+         second_item.scheduled_corpus_item_id,
+         Some("2de2453f-b38b-4713-8dcb-82660856efd7".to_string())
+     );
+-    assert_eq!(second_item.icon_url, Option::from("https://merino-images.services.mozilla.com/favicons/ccd270c8c839b5560cc10386689067bbdbcedc437c0f6f5caa2db3a4c69eb01c_4792.svg".to_string()));
++    assert_eq!(second_item.icon_url, Option::from("".to_string()));
+ 
+     assert_eq!(third_item.publisher, "NBC News".to_string());
+     assert!(third_item.is_time_sensitive);
+@@ -239,7 +239,7 @@ fn test_get_curated_recommendations_validation_error() {
+     let response = client_inner.get_curated_recommendations(
+         &request,
+         "Rust-HTTP-Client/0.1",
+-        &Url::parse("https://merino.services.mozilla.com").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+     assert!(response.is_err());
+ 
+@@ -274,7 +274,7 @@ fn test_get_curated_recommendations_server_error() {
+     let response = client_inner.get_curated_recommendations(
+         &request,
+         "Rust-HTTP-Client/0.1",
+-        &Url::parse("https://merino.services.mozilla.com").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+     assert!(response.is_err());
+ 
+@@ -309,7 +309,7 @@ fn test_get_curated_recommendations_bad_request_error() {
+     let response = client_inner.get_curated_recommendations(
+         &request,
+         "Rust-HTTP-Client/0.1",
+-        &Url::parse("https://merino.services.mozilla.com").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+     assert!(response.is_err());
+ 
+@@ -371,7 +371,7 @@ fn test_builder_uses_default_base_host_if_none_provided() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/curated-recommendations"
++        ""
+     );
+ }
+ 
+@@ -654,7 +654,7 @@ impl http::HttpClientTrait for FakeHttpClientSectionsSuccess {
+                             publisher: "The Guardian".to_string(),
+                             is_time_sensitive: false,
+                             image_url: "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/c9207928.jpeg".to_string(),
+-                            icon_url: Some("https://prod-images.merino.prod.webservices.mozgcp.net/favicons/6df36ad9.svg".to_string()),
++                            icon_url: Some("".to_string()),
+                             tile_id: None,
+                             received_rank: 0,
+                         },
+@@ -704,7 +704,7 @@ impl http::HttpClientTrait for FakeHttpClientSectionsSuccess {
+                             publisher: "The New York Times".to_string(),
+                             is_time_sensitive: false,
+                             image_url: "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/1852dfb5.jpeg".to_string(),
+-                            icon_url: Some("https://prod-images.merino.prod.webservices.mozgcp.net/favicons/68d17fe3.png".to_string()),
++                            icon_url: Some("".to_string()),
+                             tile_id: None,
+                             received_rank: 0,
+                         },
+@@ -757,7 +757,7 @@ fn test_get_curated_recommendations_sections_success() {
+         .get_curated_recommendations(
+             &request,
+             "Rust-HTTP-Client/0.1",
+-            &Url::parse("https://merino.services.mozilla.com").unwrap(),
++            &Url::parse("").unwrap(),
+         )
+         .unwrap();
+ 
+diff --git a/third_party/application-services/components/merino/src/suggest/http.rs b/third_party/application-services/components/merino/src/suggest/http.rs
+index e24971485e..9651b46b3e 100644
+--- a/third_party/application-services/components/merino/src/suggest/http.rs
++++ b/third_party/application-services/components/merino/src/suggest/http.rs
+@@ -108,7 +108,7 @@ impl HttpClientTrait for HttpClient {
+ mod tests {
+     use super::*;
+ 
+-    const BASE_URL: &str = "https://merino.services.mozilla.com/api/v1/suggest";
++    const BASE_URL: &str = "";
+ 
+     fn base_url() -> Url {
+         Url::parse(BASE_URL).unwrap()
+@@ -184,7 +184,7 @@ mod tests {
+         let url = build_suggest_url("apple", &options, base_url());
+         assert_eq!(
+             url.as_str(),
+-            "https://merino.services.mozilla.com/api/v1/suggest\
++            "https://merino.invalid/api/v1/suggest\
+             ?q=apple\
+             &country=US\
+             &region=CA\
+diff --git a/third_party/application-services/components/merino/src/suggest/mod.rs b/third_party/application-services/components/merino/src/suggest/mod.rs
+index f06ee0e015..b663d76ea1 100644
+--- a/third_party/application-services/components/merino/src/suggest/mod.rs
++++ b/third_party/application-services/components/merino/src/suggest/mod.rs
+@@ -14,7 +14,7 @@ use url::Url;
+ pub use error::{ApiResult, Error, MerinoSuggestApiError, Result};
+ pub use schema::{SuggestConfig, SuggestOptions};
+ 
+-const DEFAULT_BASE_HOST: &str = "https://merino.services.mozilla.com";
++const DEFAULT_BASE_HOST: &str = "";
+ 
+ /// A client for the merino suggest endpoint.
+ ///
+diff --git a/third_party/application-services/components/merino/src/suggest/tests.rs b/third_party/application-services/components/merino/src/suggest/tests.rs
+index ddc8782b08..7681a0f0ac 100644
+--- a/third_party/application-services/components/merino/src/suggest/tests.rs
++++ b/third_party/application-services/components/merino/src/suggest/tests.rs
+@@ -14,7 +14,7 @@ const SAMPLE_RESPONSE: &str = r#"{
+       "provider": "wikipedia",
+       "is_sponsored": false,
+       "score": 0.23,
+-      "icon": "https://merino-images.services.mozilla.com/favicons/4c8bf96d667fa2e9f072bdd8e9f25c8ba6ba2ad55df1af7d9ea0dd575c12abee_1313.png",
++      "icon": "",
+       "categories": [6],
+       "full_keyword": "apple",
+       "advertiser": "dynamic-wikipedia",
+@@ -29,7 +29,7 @@ const SAMPLE_RESPONSE: &str = r#"{
+ fn make_response(status: u16, body: &str) -> Response {
+     Response {
+         request_method: Method::Get,
+-        url: Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        url: Url::parse("").unwrap(),
+         status,
+         headers: Headers::new(),
+         body: body.as_bytes().to_vec(),
+@@ -171,7 +171,7 @@ fn test_get_suggestions_success() {
+     let result = client_inner.get_suggestions(
+         "apple",
+         default_options(),
+-        &Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(result.is_ok());
+@@ -184,7 +184,7 @@ fn test_get_suggestions_no_content() {
+     let result = client_inner.get_suggestions(
+         "apple",
+         default_options(),
+-        &Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(result.is_ok());
+@@ -197,7 +197,7 @@ fn test_get_suggestions_validation_error() {
+     let result = client_inner.get_suggestions(
+         "apple",
+         default_options(),
+-        &Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(result.is_err());
+@@ -216,7 +216,7 @@ fn test_get_suggestions_server_error() {
+     let result = client_inner.get_suggestions(
+         "apple",
+         default_options(),
+-        &Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(result.is_err());
+@@ -235,7 +235,7 @@ fn test_get_suggestions_bad_request_error() {
+     let result = client_inner.get_suggestions(
+         "apple",
+         default_options(),
+-        &Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap(),
++        &Url::parse("").unwrap(),
+     );
+ 
+     assert!(result.is_err());
+@@ -261,7 +261,7 @@ fn test_builder_uses_default_base_host() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/suggest"
++        ""
+     );
+ }
+ 
+@@ -273,7 +273,7 @@ fn test_builder_uses_custom_base_host() {
+     });
+ 
+     let client = SuggestClientBuilder::new()
+-        .base_host("https://stage.merino.services.mozilla.com".to_string())
++        .base_host("".to_string())
+         .build()
+         .unwrap();
+     let _ = client_inner.get_suggestions("apple", default_options(), &client.endpoint_url);
+@@ -281,7 +281,7 @@ fn test_builder_uses_custom_base_host() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://stage.merino.services.mozilla.com/api/v1/suggest"
++        ""
+     );
+ }
+ 
+@@ -302,7 +302,7 @@ fn test_providers_and_client_variants_joined_as_comma_separated() {
+         ..default_options()
+     };
+ 
+-    let endpoint = Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap();
++    let endpoint = Url::parse("").unwrap();
+     let _ = client_inner.get_suggestions("apple", options, &endpoint);
+ 
+     let captured = captured_url.lock().unwrap();
+@@ -326,7 +326,7 @@ fn test_empty_providers_and_client_variants_omitted() {
+         ..default_options()
+     };
+ 
+-    let endpoint = Url::parse("https://merino.services.mozilla.com/api/v1/suggest").unwrap();
++    let endpoint = Url::parse("").unwrap();
+     let _ = client_inner.get_suggestions("apple", options, &endpoint);
+ 
+     let captured = captured_url.lock().unwrap();
+diff --git a/third_party/application-services/components/merino/src/worldcup/http.rs b/third_party/application-services/components/merino/src/worldcup/http.rs
+index b16de88b10..3c5463c0da 100644
+--- a/third_party/application-services/components/merino/src/worldcup/http.rs
++++ b/third_party/application-services/components/merino/src/worldcup/http.rs
+@@ -80,7 +80,7 @@ fn send_get(url: Url, accept_language: Option<String>) -> Result<Option<Response
+ mod tests {
+     use super::*;
+ 
+-    const BASE_URL: &str = "https://merino.services.mozilla.com/api/v1/wcs/teams";
++    const BASE_URL: &str = "";
+ 
+     fn base_url() -> Url {
+         Url::parse(BASE_URL).unwrap()
+@@ -141,7 +141,7 @@ mod tests {
+         let url = build_url(base_url(), &options);
+         assert_eq!(
+             url.to_string(),
+-            "https://merino.services.mozilla.com/api/v1/wcs/teams\
++            "\
+             ?limit=3\
+             &teams=FRA"
+         );
+diff --git a/third_party/application-services/components/merino/src/worldcup/mod.rs b/third_party/application-services/components/merino/src/worldcup/mod.rs
+index 9c80ff2c11..bde4092b97 100644
+--- a/third_party/application-services/components/merino/src/worldcup/mod.rs
++++ b/third_party/application-services/components/merino/src/worldcup/mod.rs
+@@ -14,7 +14,7 @@ use url::Url;
+ pub use error::{ApiResult, Error, MerinoWorldCupApiError, Result};
+ pub use schema::{WorldCupConfig, WorldCupOptions};
+ 
+-pub(crate) const DEFAULT_BASE_URL: &str = "https://merino.services.mozilla.com/api/v1/wcs/";
++pub(crate) const DEFAULT_BASE_URL: &str = "";
+ 
+ /// A client for the merino wcs endpoint.
+ ///
+diff --git a/third_party/application-services/components/merino/src/worldcup/tests.rs b/third_party/application-services/components/merino/src/worldcup/tests.rs
+index 616e9a9344..f9455c7676 100644
+--- a/third_party/application-services/components/merino/src/worldcup/tests.rs
++++ b/third_party/application-services/components/merino/src/worldcup/tests.rs
+@@ -70,7 +70,7 @@ fn test_get_teams_success() {
+         Ok(Some(make_response(
+             200,
+             TEAMS_RESPONSE,
+-            Url::parse("https://merino.services.mozilla.com/api/v1/wcs/").unwrap(),
++            Url::parse("https://merino.invalid").unwrap(),
+             None,
+         )))
+     }
+@@ -86,7 +86,7 @@ fn test_get_matches_success() {
+         Ok(Some(make_response(
+             200,
+             MATCH_RESPONSE,
+-            Url::parse("https://merino.services.mozilla.com/api/v1/wcs/").unwrap(),
++            Url::parse("https://merino.invalid").unwrap(),
+             None,
+         )))
+     }
+@@ -102,7 +102,7 @@ fn test_get_live_success() {
+         Ok(Some(make_response(
+             200,
+             LIVE_RESPONSE,
+-            Url::parse("https://merino.services.mozilla.com/api/v1/wcs/").unwrap(),
++            Url::parse("https://merino.invalid").unwrap(),
+             None,
+         )))
+     }
+@@ -152,7 +152,7 @@ fn test_accept_language_is_passed_as_header() {
+         Ok(Some(make_response(
+             200,
+             "",
+-            Url::parse("https://merino.services.mozilla.com/api/v1/wcs/").unwrap(),
++            Url::parse("https://merino.invalid").unwrap(),
+             params.accept_language,
+         )))
+     }
+@@ -179,12 +179,12 @@ fn test_builder_uses_default_base_host() {
+ #[test]
+ fn test_builder_uses_custom_base_host() {
+     let client = WorldCupClientBuilder::new()
+-        .base_host("https://stage.merino.services.mozilla.com".to_string())
++        .base_host("".to_string())
+         .build()
+         .unwrap();
+     assert_eq!(
+         client.base_url.as_str(),
+-        "https://stage.merino.services.mozilla.com/api/v1/wcs/"
++        ""
+     );
+ }
+ 
+@@ -198,7 +198,7 @@ fn test_teams_endpoint_url() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/wcs/teams"
++        ""
+     );
+ }
+ 
+@@ -220,7 +220,7 @@ fn test_matches_endpoint_url_with_limit() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/wcs/matches?limit=2"
++        "?limit=2"
+     );
+ }
+ 
+@@ -234,7 +234,7 @@ fn test_live_endpoint_url() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/wcs/live"
++        ""
+     );
+ }
+ 
+@@ -268,6 +268,6 @@ fn test_matches_endpoint_url_with_date() {
+     let captured = captured_url.lock().unwrap();
+     assert_eq!(
+         captured.as_ref().unwrap().as_str(),
+-        "https://merino.services.mozilla.com/api/v1/wcs/matches?date=2026-06-14"
++        "?date=2026-06-14"
+     );
+ }
 diff --git a/third_party/application-services/components/viaduct/src/ohttp.rs b/third_party/application-services/components/viaduct/src/ohttp.rs
 index f6b9dc43b0..e962ddd2a7 100644
 --- a/third_party/application-services/components/viaduct/src/ohttp.rs
@@ -2316,6 +2891,37 @@ index f6b9dc43b0..e962ddd2a7 100644
          },
      )?;
  
+diff --git a/third_party/application-services/examples/merino-cli/src/main.rs b/third_party/application-services/examples/merino-cli/src/main.rs
+index 1bd22286f7..a765f65e7d 100644
+--- a/third_party/application-services/examples/merino-cli/src/main.rs
++++ b/third_party/application-services/examples/merino-cli/src/main.rs
+@@ -43,11 +43,11 @@ enum Commands {
+     /// Fetch suggestions
+     Suggest {
+         /// OHTTP relay URL
+-        #[arg(long, default_value = "https://ohttp-merino.mozilla.fastly-edge.com")]
++        #[arg(long, default_value = "")]
+         relay_url: String,
+ 
+         /// OHTTP gateway host
+-        #[arg(long, default_value = "ohttp-gateway-merino.services.mozilla.com")]
++        #[arg(long, default_value = "")]
+         gateway_host: String,
+ 
+         /// Search query
+diff --git a/third_party/application-services/examples/viaduct-cli/src/main.rs b/third_party/application-services/examples/viaduct-cli/src/main.rs
+index 423cb4f465..98c55fd75c 100644
+--- a/third_party/application-services/examples/viaduct-cli/src/main.rs
++++ b/third_party/application-services/examples/viaduct-cli/src/main.rs
+@@ -171,7 +171,7 @@ fn run_ohttp_example(
+ 
+     // Step 4: Make request
+     println!("Creating request...");
+-    let request = Request::get(Url::parse("https://merino.services.mozilla.com/docs")?);
++    let request = Request::get(Url::parse("https://merino.invalid")?);
+     println!("Sending request...");
+     let response = client.send_sync(request)?;
+ 
 -- 
 2.54.0
 
diff --git a/libre/iceweasel/9003-FSDG-urihandlers.patch b/libre/iceweasel/9003-FSDG-urihandlers.patch
index cf61f0f..db4f781 100644
--- a/libre/iceweasel/9003-FSDG-urihandlers.patch
+++ b/libre/iceweasel/9003-FSDG-urihandlers.patch
@@ -1,4 +1,4 @@
-From 0591e49871c04ee2f9a9090092a99e86b790c74d Mon Sep 17 00:00:00 2001
+From 2173df418d624cdc460d45d909d707f9bb6d041b Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH] Remove URI handlers that serve nonfree software
diff --git a/libre/iceweasel/9004-FSDG-misc.patch b/libre/iceweasel/9004-FSDG-misc.patch
index 429015d..d97c94e 100644
--- a/libre/iceweasel/9004-FSDG-misc.patch
+++ b/libre/iceweasel/9004-FSDG-misc.patch
@@ -1,7 +1,7 @@
-From 2064606ab0b5e62c7b60031d0418e8f4107cb731 Mon Sep 17 00:00:00 2001
+From 5dd4b6062909f405eb943b66588889446e90cb2f Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 12 Mar 2022 17:14:25 +0100
-Subject: [PATCH 1/7] Replace upstream default bookmarks
+Subject: [PATCH 1/6] Replace upstream default bookmarks
 
 ---
  browser/base/content/default-bookmarks.html | 50 +++++++++------------
@@ -81,10 +81,10 @@ index 2f764caf6f..a0f27ae8e7 100644
 2.54.0
 
 
-From 9509fef582f6258d031d797cb8a59898fb04dad0 Mon Sep 17 00:00:00 2001
+From d1e942e1601a6037318dc946655e2a3fe395c7dc Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:46:48 +0200
-Subject: [PATCH 2/7] Remove 'More from Mozilla' section in Preferences
+Subject: [PATCH 2/6] Remove 'More from Mozilla' section in Preferences
 
 Currently it contains functionality to provide links to nonfree software
 like Firefox Mobile, which is not compatible with the FSDG for the same
@@ -92,21 +92,21 @@ reasons as desktop Firefox.
 ---
  browser/app/profile/firefox.js                |  2 +-
  .../static/browser_all_files_referenced.js    |  9 ------
- browser/components/preferences/jar.mn         |  3 --
+ browser/components/preferences/jar.mn         |  4 ---
  .../more-from-mozilla-qr-code-simple-cn.svg   |  4 ---
  .../more-from-mozilla-qr-code-simple.svg      |  4 ---
  .../components/preferences/moreFromMozilla.js | 30 -------------------
- browser/components/preferences/preferences.js |  8 -----
+ browser/components/preferences/preferences.js | 17 -----------
  .../components/preferences/preferences.xhtml  |  8 -----
- 8 files changed, 1 insertion(+), 67 deletions(-)
+ 8 files changed, 1 insertion(+), 77 deletions(-)
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 1f8560ed04..ce98af43e8 100644
+index 8434fca4a3..fbe035cbf4 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1384,7 +1384,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
+@@ -1397,7 +1397,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
  // Whether we had to hide the "Firefox Labs" section because it would be empty.
  pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
@@ -116,10 +116,10 @@ index 1f8560ed04..ce98af43e8 100644
  pref("browser.preferences.aiControls", false);
  // Whether to show unavailable AI controls regardless of region/locale
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index a663f5480b..2db38a7b98 100644
+index 371164db26..eb167a5f6c 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
-@@ -191,15 +191,6 @@ var allowlist = [
+@@ -189,15 +189,6 @@ var allowlist = [
    // extensions/pref/autoconfig/src/nsReadConfig.cpp
    { file: "resource://gre/defaults/autoconfig/prefcalls.js" },
  
@@ -136,13 +136,13 @@ index a663f5480b..2db38a7b98 100644
  
    // toolkit/mozapps/extensions/AddonContentPolicy.cpp
 diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
-index 78e38f98c1..1ff77095db 100644
+index aec7888f59..98f881ee1a 100644
 --- a/browser/components/preferences/jar.mn
 +++ b/browser/components/preferences/jar.mn
-@@ -15,12 +15,9 @@ browser.jar:
+@@ -14,12 +14,9 @@ browser.jar:
+    content/browser/preferences/privacy.js
     content/browser/preferences/containers.js
     content/browser/preferences/sync.js
-    content/browser/preferences/experimental.js
 -   content/browser/preferences/moreFromMozilla.js
     content/browser/preferences/fxaPairDevice.xhtml
     content/browser/preferences/fxaPairDevice.js
@@ -152,28 +152,36 @@ index 78e38f98c1..1ff77095db 100644
     content/browser/preferences/browser-layout-horizontal.svg
     content/browser/preferences/browser-layout-vertical.svg
     content/browser/preferences/web-appearance-dark.svg
+@@ -34,7 +31,6 @@ browser.jar:
+    content/browser/preferences/config/appearance.mjs                    (config/appearance.mjs)
+    content/browser/preferences/config/aiFeatures.mjs                    (config/aiFeatures.mjs)
+    content/browser/preferences/config/firefoxLabs.mjs                   (config/firefoxLabs.mjs)
+-   content/browser/preferences/config/moreFromMozilla.mjs               (config/moreFromMozilla.mjs)
+    content/browser/preferences/config/downloads.mjs                     (config/downloads.mjs)
+    content/browser/preferences/config/passwords-autofill.mjs            (config/passwords-autofill.mjs)
+    content/browser/preferences/config/block-ai-confirmation-dialog.css  (config/block-ai-confirmation-dialog.css)
 diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
 deleted file mode 100644
-index edcad0f36c..0000000000
+index 931d90618c..0000000000
 --- a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
 +++ /dev/null
 @@ -1,4 +0,0 @@
 -<!-- This Source Code Form is subject to the terms of the Mozilla Public
 -   - License, v. 2.0. If a copy of the MPL was not distributed with this
 -   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
--<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 2h72a2 2 0 0 1 2 2v72a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2ZM0 4a4 4 0 0 1 4-4h72a4 4 0 0 1 4 4v72a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V4Zm7.08 3.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm18.163-2.27h4.541v2.27h2.27v2.27h-2.27v2.27h-2.27v2.271h4.54v-4.54h2.27V9.35h2.271v6.811h-2.27v2.27h2.27v4.541h-2.27v-2.27h-2.27v-2.27h-2.27v2.27h-2.271v-2.27h-2.27V7.08Zm0 13.622v-2.27h-2.27V9.35h-2.27v13.622h2.27v2.27h-9.081v2.271h-2.27v2.27H13.89v-4.54h-2.27v2.27H7.08v2.27h2.27v2.27h2.27v2.271h9.081v2.27h2.271v2.27h-2.27v2.271h-2.27v-2.27h-2.27v-2.27H7.08v2.27h4.54v2.27H9.35v2.27h6.811v-2.27h2.27v4.54h6.811v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-4.54h2.27v-2.271h-4.54v-2.27h2.27v-2.271h2.27v-4.54h2.27v2.27h4.541v2.27h-2.27v2.27h2.27v-2.27h2.27v-4.54h-2.27v-2.271h-2.27v2.27h-2.27v-2.27h-2.27Zm0 0h-2.27v2.27h2.27v-2.27Zm-9.081 11.352v2.27h2.27v2.27h2.27v-4.54h-4.54Zm4.54 9.081h-4.54v2.27h4.54v-2.27Zm-4.54-9.081v-2.27h2.27v-2.271h-4.54v4.54h2.27Zm-9.082 0v-2.27h2.27v2.27h-2.27ZM41.135 9.35V7.08h2.27v2.27h-2.27Zm2.27 20.433h-2.27v-4.54h2.27v2.27h2.27v-2.27h2.271v-4.541h2.27v2.27h2.271v-4.54h2.27V25.242h2.27v2.271h-4.54v-2.27h-2.27v4.54h-6.811Zm9.082 2.27v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v4.541h-2.27v4.541h2.27v4.54h-2.27v4.541h-4.541v2.271h-2.27v-2.27h-2.27v2.27h2.27v2.27h-4.541v-4.54h-6.811v2.27h-2.27v-4.54h-4.541v2.27h-2.27v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54H13.89v2.27h-2.27v-4.541H9.35v2.27H7.08v2.27h4.54v2.271H7.08v2.27h4.54v-2.27h2.27v2.27h2.271v-2.27h2.27v2.27h6.811v6.811h2.271v2.27h2.27v2.271h-4.54v2.27h2.27v2.271h2.27v-4.54h2.27v-2.271h-2.27v-4.54h4.541v2.27h2.27v2.27h-2.27v2.27h2.27v4.541h-2.27v2.27h2.27v-2.27h2.27v2.27h6.811v-2.27h4.541v-4.54h4.541v2.27h-2.27v4.54h2.27v-2.27h2.27v2.27h9.082V66.11h2.27v2.27h4.541v-2.27h-2.27v-6.811h2.27V45.675h-2.27v13.622h-2.27v-2.27h-2.27v-4.541h-6.811v-2.27h-4.541v-6.811h2.27v4.54h4.54v-4.54h-2.27v-2.27h-6.811v-2.271h2.27v-2.27h2.27v2.27h2.271v-4.54h4.54v9.08h2.271v-2.27h2.27v-2.27h-2.27v-6.811h2.27v-2.27h2.271v2.27h2.27v-4.541h-2.27v-2.27H59.299v2.27h-2.271v2.27h-2.27v2.27Zm2.27 0v2.271h-2.27v-2.27h2.27Zm2.271-2.27h2.27v2.27h2.27v-4.54h-4.54v2.27Zm0 0v2.27h-2.27v-2.27h2.27Zm9.082 29.515h-2.27v2.27h-2.271v2.27h4.54v-4.54ZM54.757 66.11h2.27v2.27h2.271v2.271h4.54v-2.27h-2.27v-2.27h-2.27v-2.271h-4.54v2.27Zm-6.81-2.27v2.27h2.27v-2.27h-2.27Zm-2.271 0v-2.27h-6.811v-2.27h2.27v-2.271h2.27v-2.27h9.082v4.54h-4.54v-2.27h-2.271v2.27h2.27v4.54h-2.27Zm0 0h-9.081v2.27h2.27v2.27h2.27v2.271h2.27v-2.27h2.27v-4.541Zm-9.082-6.811v2.27h-2.27v-2.27h2.27Zm0-2.27h2.27v2.27h-2.27v-2.27Zm0 0h-2.27v-2.271h2.27v2.27Zm-6.81 4.54v-6.811h-2.271v6.811h2.27ZM47.945 7.08h4.541v4.54h-2.27V9.35h-2.27V7.08Zm0 2.27v2.27h2.27v2.27h4.541v2.271h-4.54v2.27h-6.811v-2.27h2.27v-2.27h-2.27v-2.27h2.27V9.35h2.27Zm9.082-2.27H72.92v15.892H57.028V7.08Zm4.54 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm49.949 0H68.379v6.811H61.57V11.621Zm-18.163 9.082h2.27v2.27h-2.27v-2.27ZM68.38 34.324h2.27v2.27h-2.27v-2.27Zm2.27 2.27h2.27v4.541h-2.27v-4.54Zm-4.54 11.352h2.27v2.27h-2.27v-2.27Zm-9.082 6.811h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Zm59.03 9.082h2.27v2.27h-2.27v-2.27Z"/></svg>
+-<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M4 2h72a2 2 0 0 1 2 2v72a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2ZM0 4a4 4 0 0 1 4-4h72a4 4 0 0 1 4 4v72a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V4Zm7.08 3.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm18.163-2.27h4.541v2.27h2.27v2.27h-2.27v2.27h-2.27v2.271h4.54v-4.54h2.27V9.35h2.271v6.811h-2.27v2.27h2.27v4.541h-2.27v-2.27h-2.27v-2.27h-2.27v2.27h-2.271v-2.27h-2.27V7.08Zm0 13.622v-2.27h-2.27V9.35h-2.27v13.622h2.27v2.27h-9.081v2.271h-2.27v2.27H13.89v-4.54h-2.27v2.27H7.08v2.27h2.27v2.27h2.27v2.271h9.081v2.27h2.271v2.27h-2.27v2.271h-2.27v-2.27h-2.27v-2.27H7.08v2.27h4.54v2.27H9.35v2.27h6.811v-2.27h2.27v4.54h6.811v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-4.54h2.27v-2.271h-4.54v-2.27h2.27v-2.271h2.27v-4.54h2.27v2.27h4.541v2.27h-2.27v2.27h2.27v-2.27h2.27v-4.54h-2.27v-2.271h-2.27v2.27h-2.27v-2.27h-2.27Zm0 0h-2.27v2.27h2.27v-2.27Zm-9.081 11.352v2.27h2.27v2.27h2.27v-4.54h-4.54Zm4.54 9.081h-4.54v2.27h4.54v-2.27Zm-4.54-9.081v-2.27h2.27v-2.271h-4.54v4.54h2.27Zm-9.082 0v-2.27h2.27v2.27h-2.27ZM41.135 9.35V7.08h2.27v2.27h-2.27Zm2.27 20.433h-2.27v-4.54h2.27v2.27h2.27v-2.27h2.271v-4.541h2.27v2.27h2.271v-4.54h2.27V25.242h2.27v2.271h-4.54v-2.27h-2.27v4.54h-6.811Zm9.082 2.27v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v4.541h-2.27v4.541h2.27v4.54h-2.27v4.541h-4.541v2.271h-2.27v-2.27h-2.27v2.27h2.27v2.27h-4.541v-4.54h-6.811v2.27h-2.27v-4.54h-4.541v2.27h-2.27v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54H13.89v2.27h-2.27v-4.541H9.35v2.27H7.08v2.27h4.54v2.271H7.08v2.27h4.54v-2.27h2.27v2.27h2.271v-2.27h2.27v2.27h6.811v6.811h2.271v2.27h2.27v2.271h-4.54v2.27h2.27v2.271h2.27v-4.54h2.27v-2.271h-2.27v-4.54h4.541v2.27h2.27v2.27h-2.27v2.27h2.27v4.541h-2.27v2.27h2.27v-2.27h2.27v2.27h6.811v-2.27h4.541v-4.54h4.541v2.27h-2.27v4.54h2.27v-2.27h2.27v2.27h9.082V66.11h2.27v2.27h4.541v-2.27h-2.27v-6.811h2.27V45.675h-2.27v13.622h-2.27v-2.27h-2.27v-4.541h-6.811v-2.27h-4.541v-6.811h2.27v4.54h4.54v-4.54h-2.27v-2.27h-6.811v-2.271h2.27v-2.27h2.27v2.27h2.271v-4.54h4.54v9.08h2.271v-2.27h2.27v-2.27h-2.27v-6.811h2.27v-2.27h2.271v2.27h2.27v-4.541h-2.27v-2.27H59.299v2.27h-2.271v2.27h-2.27v2.27Zm2.27 0v2.271h-2.27v-2.27h2.27Zm2.271-2.27h2.27v2.27h2.27v-4.54h-4.54v2.27Zm0 0v2.27h-2.27v-2.27h2.27Zm9.082 29.515h-2.27v2.27h-2.271v2.27h4.54v-4.54ZM54.757 66.11h2.27v2.27h2.271v2.271h4.54v-2.27h-2.27v-2.27h-2.27v-2.271h-4.54v2.27Zm-6.81-2.27v2.27h2.27v-2.27h-2.27Zm-2.271 0v-2.27h-6.811v-2.27h2.27v-2.271h2.27v-2.27h9.082v4.54h-4.54v-2.27h-2.271v2.27h2.27v4.54h-2.27Zm0 0h-9.081v2.27h2.27v2.27h2.27v2.271h2.27v-2.27h2.27v-4.541Zm-9.082-6.811v2.27h-2.27v-2.27h2.27Zm0-2.27h2.27v2.27h-2.27v-2.27Zm0 0h-2.27v-2.271h2.27v2.27Zm-6.81 4.54v-6.811h-2.271v6.811h2.27ZM47.945 7.08h4.541v4.54h-2.27V9.35h-2.27V7.08Zm0 2.27v2.27h2.27v2.27h4.541v2.271h-4.54v2.27h-6.811v-2.27h2.27v-2.27h-2.27v-2.27h2.27V9.35h2.27Zm9.082-2.27H72.92v15.892H57.028V7.08Zm4.54 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm49.949 0H68.379v6.811H61.57V11.621Zm-18.163 9.082h2.27v2.27h-2.27v-2.27ZM68.38 34.324h2.27v2.27h-2.27v-2.27Zm2.27 2.27h2.27v4.541h-2.27v-4.54Zm-4.54 11.352h2.27v2.27h-2.27v-2.27Zm-9.082 6.811h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Zm59.03 9.082h2.27v2.27h-2.27v-2.27Z"/></svg>
 diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 deleted file mode 100644
-index bb847abdd1..0000000000
+index f187ff3e4c..0000000000
 --- a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 +++ /dev/null
 @@ -1,4 +0,0 @@
 -<!-- This Source Code Form is subject to the terms of the Mozilla Public
 -   - License, v. 2.0. If a copy of the MPL was not distributed with this
 -   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
--<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M76 2H4a2 2 0 0 0-2 2v72a2 2 0 0 0 2 2h72a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM4 0a4 4 0 0 0-4 4v72a4 4 0 0 0 4 4h72a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4Zm3.08 7.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm20.434-2.27h2.27v2.27h2.27V7.08h4.541v2.27h2.27v2.27H36.596v2.27h-4.541v2.271h-2.27v-2.27h-2.271v-2.27h2.27V9.35h2.27V7.08Zm-4.541 4.54h-2.27V9.35h2.27v2.27Zm2.27 11.352v-4.54h2.27v-2.27h4.541V13.89h4.541v2.27h4.54v2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.271v2.271h-2.27Zm-4.54 2.27V18.433h2.27v4.54h2.27v2.27h-4.54Zm0 0v2.271h-9.081v-2.27h9.08Zm11.351-2.27h-2.27v-2.27h2.27v2.27Zm2.27 0h-2.27v4.541h-2.27v-2.27h-2.27v2.27h2.27v2.27h4.54V22.973Zm2.271 0v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v6.811h4.54v-2.27h-2.27v-4.54Zm2.27 0h-2.27v-2.27h2.27v2.27Zm4.542-6.81h-2.27V22.971h-2.271v2.27h2.27v2.271h2.27v2.27h-2.27v2.27h2.27v-2.27h2.271v2.27h2.27v2.271h2.27v-4.54h2.271v2.27h2.27v2.27h-2.27v2.27h-2.27v2.27h-4.541v6.811h2.27v2.271h4.541v4.541h-6.811v-2.27h-2.27v2.27h-2.27v-2.27h-4.541v2.27h-4.541v-2.27h-4.54v2.27h2.27v2.27h2.27v2.27H45.675v4.541h2.271v2.27h-2.27v2.271h-2.27v-4.54h-4.541v-2.27h-2.27v-2.271h-2.27v2.27h2.27v2.27h-2.27v2.27h-2.271v-2.27h-2.27v-2.27h-2.271v-4.54h2.27v2.27h2.27v-2.27h-2.27v-2.271h2.27v-2.27h-4.54v-2.27h2.27v-2.271h-2.27v-4.54h2.27v-2.271h-2.27v-6.811h2.27v-2.27h-2.27v2.27h-4.54v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54h-2.27V36.593H13.89v-4.54h-2.27v-2.27h2.27v-2.271H7.08v6.811h2.27v4.54h4.54v2.271h-2.27v2.27H9.35v-2.27H7.08v2.27h2.27v2.27H7.08v2.271h2.27v-2.27h2.27v2.27h2.27v-4.54h4.541v-2.27h-2.27v-4.541h2.27v2.27h2.27v2.27h2.271v2.27h-2.27v2.27h-2.27v2.271h-2.27v2.27H11.62v2.271H7.08v2.27h4.54v-2.27h4.541v2.27h9.081v9.081h4.541v4.541h-2.27v4.541h4.54v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-2.271h2.27v-2.27h2.27v2.27h2.271v2.27h-2.27v6.811H45.675v-4.54h2.271v4.54h2.27v-4.54h2.271v4.54h6.811v-2.27h2.27v2.27h2.27v-2.27h-2.27v-2.27h-4.54v-2.27h-9.081v-2.271H59.297v2.27h2.27v-2.27h2.27v4.54h4.541v4.541h2.271v-2.27h2.27v-4.54h-2.27v-2.271h2.27v-2.27h-2.27v-2.27h2.27v-4.541h-2.27v-4.541h2.27V27.513h-2.27v-2.27h-2.27v2.27h-6.811v-2.27h-4.541v2.27h-2.27v-2.27h-2.271v-2.27h2.27v-4.541h-4.54v-2.27Zm2.27-6.812h2.27v4.54h-2.27v2.271h-2.27v-4.54h2.27V9.35Zm0 0h-6.811V7.08h6.811v2.27Zm0 13.622v-2.27h-2.27v2.27h2.27Zm9.081 6.811v2.27h2.27v2.271h-2.27v2.27h-2.27v4.541h-4.54v2.27h2.27v2.27h4.54v-2.27h2.27v4.541h-2.27v4.541h2.27v6.811h2.271v2.27h-2.27v2.27h4.54v-4.54h2.271v-4.54h-2.27v-4.541h2.27v-4.541h-2.27v-4.54h2.27v-6.811h-2.27v-2.271h2.27v-2.27h-4.54v2.27h-2.271v-2.27h-2.27Zm6.812 24.974h-2.27v2.27h2.27v-2.27Zm0-4.54h-4.541v-2.27h4.54v2.27Zm-4.541-9.082h2.27v2.27h-2.27v-2.27Zm-2.27 0v-4.54h2.27v4.54h-2.27Zm4.54-4.54v-2.27h-2.27v2.27h2.27Zm0 0h2.27v2.27h-2.27v-2.27Zm-4.54 4.54v2.27h-2.27v-2.27h2.27Zm0-11.352v-2.27h-2.27v2.27h2.27ZM57.028 68.38h-2.27v2.27h2.27v-2.27Zm-24.974 0h-2.27v2.27h2.27v-2.27ZM20.702 47.946v2.27h2.27v2.271h-4.54v-4.54h2.27Zm2.27-2.27v2.27h-2.27v-2.27h2.27Zm2.27 0v2.27h2.271v-2.27h-2.27Zm0 0h-2.27v-2.27h2.27v2.27Zm-2.27-9.082v2.27h-2.27v-2.27h2.27Zm0 0h2.27v-2.27h-2.27v2.27ZM9.35 34.324v-2.27h2.27v2.27H9.35Zm15.893 20.433h2.27v-2.27h-2.27v2.27ZM41.135 66.11v4.541h2.27v-4.54h-2.27Zm6.811-4.54v-2.27h2.27v2.27h-2.27Zm-2.27-6.812h-2.27v-2.27h2.27v2.27Zm0 0v2.27h2.27v-2.27h-2.27Zm4.54-20.433v2.27h2.271v-2.27h-2.27Zm2.271-9.081h-2.27v2.27h2.27v-2.27Zm4.54-18.163H72.92v15.892H57.028V7.08Zm4.541 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm34.056 0h2.27v2.27h-2.27v-2.27Zm15.892 0h6.811v6.811H61.57V11.621Zm-4.54 43.137h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Z"/></svg>
+-<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M76 2H4a2 2 0 0 0-2 2v72a2 2 0 0 0 2 2h72a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM4 0a4 4 0 0 0-4 4v72a4 4 0 0 0 4 4h72a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4Zm3.08 7.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm20.434-2.27h2.27v2.27h2.27V7.08h4.541v2.27h2.27v2.27H36.596v2.27h-4.541v2.271h-2.27v-2.27h-2.271v-2.27h2.27V9.35h2.27V7.08Zm-4.541 4.54h-2.27V9.35h2.27v2.27Zm2.27 11.352v-4.54h2.27v-2.27h4.541V13.89h4.541v2.27h4.54v2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.271v2.271h-2.27Zm-4.54 2.27V18.433h2.27v4.54h2.27v2.27h-4.54Zm0 0v2.271h-9.081v-2.27h9.08Zm11.351-2.27h-2.27v-2.27h2.27v2.27Zm2.27 0h-2.27v4.541h-2.27v-2.27h-2.27v2.27h2.27v2.27h4.54V22.973Zm2.271 0v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v6.811h4.54v-2.27h-2.27v-4.54Zm2.27 0h-2.27v-2.27h2.27v2.27Zm4.542-6.81h-2.27V22.971h-2.271v2.27h2.27v2.271h2.27v2.27h-2.27v2.27h2.27v-2.27h2.271v2.27h2.27v2.271h2.27v-4.54h2.271v2.27h2.27v2.27h-2.27v2.27h-2.27v2.27h-4.541v6.811h2.27v2.271h4.541v4.541h-6.811v-2.27h-2.27v2.27h-2.27v-2.27h-4.541v2.27h-4.541v-2.27h-4.54v2.27h2.27v2.27h2.27v2.27H45.675v4.541h2.271v2.27h-2.27v2.271h-2.27v-4.54h-4.541v-2.27h-2.27v-2.271h-2.27v2.27h2.27v2.27h-2.27v2.27h-2.271v-2.27h-2.27v-2.27h-2.271v-4.54h2.27v2.27h2.27v-2.27h-2.27v-2.271h2.27v-2.27h-4.54v-2.27h2.27v-2.271h-2.27v-4.54h2.27v-2.271h-2.27v-6.811h2.27v-2.27h-2.27v2.27h-4.54v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54h-2.27V36.593H13.89v-4.54h-2.27v-2.27h2.27v-2.271H7.08v6.811h2.27v4.54h4.54v2.271h-2.27v2.27H9.35v-2.27H7.08v2.27h2.27v2.27H7.08v2.271h2.27v-2.27h2.27v2.27h2.27v-4.54h4.541v-2.27h-2.27v-4.541h2.27v2.27h2.27v2.27h2.271v2.27h-2.27v2.27h-2.27v2.271h-2.27v2.27H11.62v2.271H7.08v2.27h4.54v-2.27h4.541v2.27h9.081v9.081h4.541v4.541h-2.27v4.541h4.54v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-2.271h2.27v-2.27h2.27v2.27h2.271v2.27h-2.27v6.811H45.675v-4.54h2.271v4.54h2.27v-4.54h2.271v4.54h6.811v-2.27h2.27v2.27h2.27v-2.27h-2.27v-2.27h-4.54v-2.27h-9.081v-2.271H59.297v2.27h2.27v-2.27h2.27v4.54h4.541v4.541h2.271v-2.27h2.27v-4.54h-2.27v-2.271h2.27v-2.27h-2.27v-2.27h2.27v-4.541h-2.27v-4.541h2.27V27.513h-2.27v-2.27h-2.27v2.27h-6.811v-2.27h-4.541v2.27h-2.27v-2.27h-2.271v-2.27h2.27v-4.541h-4.54v-2.27Zm2.27-6.812h2.27v4.54h-2.27v2.271h-2.27v-4.54h2.27V9.35Zm0 0h-6.811V7.08h6.811v2.27Zm0 13.622v-2.27h-2.27v2.27h2.27Zm9.081 6.811v2.27h2.27v2.271h-2.27v2.27h-2.27v4.541h-4.54v2.27h2.27v2.27h4.54v-2.27h2.27v4.541h-2.27v4.541h2.27v6.811h2.271v2.27h-2.27v2.27h4.54v-4.54h2.271v-4.54h-2.27v-4.541h2.27v-4.541h-2.27v-4.54h2.27v-6.811h-2.27v-2.271h2.27v-2.27h-4.54v2.27h-2.271v-2.27h-2.27Zm6.812 24.974h-2.27v2.27h2.27v-2.27Zm0-4.54h-4.541v-2.27h4.54v2.27Zm-4.541-9.082h2.27v2.27h-2.27v-2.27Zm-2.27 0v-4.54h2.27v4.54h-2.27Zm4.54-4.54v-2.27h-2.27v2.27h2.27Zm0 0h2.27v2.27h-2.27v-2.27Zm-4.54 4.54v2.27h-2.27v-2.27h2.27Zm0-11.352v-2.27h-2.27v2.27h2.27ZM57.028 68.38h-2.27v2.27h2.27v-2.27Zm-24.974 0h-2.27v2.27h2.27v-2.27ZM20.702 47.946v2.27h2.27v2.271h-4.54v-4.54h2.27Zm2.27-2.27v2.27h-2.27v-2.27h2.27Zm2.27 0v2.27h2.271v-2.27h-2.27Zm0 0h-2.27v-2.27h2.27v2.27Zm-2.27-9.082v2.27h-2.27v-2.27h2.27Zm0 0h2.27v-2.27h-2.27v2.27ZM9.35 34.324v-2.27h2.27v2.27H9.35Zm15.893 20.433h2.27v-2.27h-2.27v2.27ZM41.135 66.11v4.541h2.27v-4.54h-2.27Zm6.811-4.54v-2.27h2.27v2.27h-2.27Zm-2.27-6.812h-2.27v-2.27h2.27v2.27Zm0 0v2.27h2.27v-2.27h-2.27Zm4.54-20.433v2.27h2.271v-2.27h-2.27Zm2.271-9.081h-2.27v2.27h2.27v-2.27Zm4.54-18.163H72.92v15.892H57.028V7.08Zm4.541 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm34.056 0h2.27v2.27h-2.27v-2.27Zm15.892 0h6.811v6.811H61.57V11.621Zm-4.54 43.137h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Z"/></svg>
 diff --git a/browser/components/preferences/moreFromMozilla.js b/browser/components/preferences/moreFromMozilla.js
-index d426bebcc1..1afa52e3c6 100644
+index 21e2c7dda8..0c3f120176 100644
 --- a/browser/components/preferences/moreFromMozilla.js
 +++ b/browser/components/preferences/moreFromMozilla.js
 @@ -82,36 +82,6 @@ var gMoreFromMozillaPane = {
@@ -214,33 +222,49 @@ index d426bebcc1..1afa52e3c6 100644
          id: "mozilla-monitor",
          title_string_id: "more-from-moz-mozilla-monitor-title",
 diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
-index 9d13733318..46e5919275 100644
+index 57add34d87..3f09fa6517 100644
 --- a/browser/components/preferences/preferences.js
 +++ b/browser/components/preferences/preferences.js
-@@ -10,7 +10,6 @@
+@@ -9,7 +9,6 @@
+ /* import-globals-from containers.js */
  /* import-globals-from privacy.js */
  /* import-globals-from sync.js */
- /* import-globals-from experimental.js */
 -/* import-globals-from moreFromMozilla.js */
  /* import-globals-from findInPage.js */
  /* import-globals-from /browser/base/content/utilityOverlay.js */
  /* import-globals-from /toolkit/content/preferencesBindings.js */
-@@ -412,13 +411,6 @@ function init_all() {
-     document.getElementById("category-experimental").hidden = true;
+@@ -426,14 +425,6 @@ const CONFIG_PANES = Object.freeze({
+     module: "chrome://browser/content/preferences/config/account-sync.mjs",
+     replaces: "sync",
+   },
+-  moreFromMozilla: {
+-    l10nId: "more-from-moz-page-header",
+-    iconSrc: "chrome://browser/skin/preferences/mozilla-16.svg",
+-    groupIds: ["moreFromMozillaPromo", "moreFromMozillaProducts"],
+-    module: "chrome://browser/content/preferences/config/moreFromMozilla.mjs",
+-    visible: () => NimbusFeatures.moreFromMozilla.getVariable("enabled"),
+-    replaces: "moreFromMozilla",
+-  },
+   tabsBrowsing: {
+     l10nId: "tabs-browsing-section",
+     groupIds: [
+@@ -568,14 +559,6 @@ function init_all() {
+       groupIds: ["customHomepage"],
+       module: "chrome://browser/content/preferences/config/home-startup.mjs",
+     });
+-  } else {
+-    NimbusFeatures.moreFromMozilla.recordExposureEvent({ once: true });
+-    if (NimbusFeatures.moreFromMozilla.getVariable("enabled")) {
+-      document.getElementById("category-more-from-mozilla").hidden = false;
+-      gMoreFromMozillaPane.option =
+-        NimbusFeatures.moreFromMozilla.getVariable("template");
+-      register_module("paneMoreFromMozilla", gMoreFromMozillaPane);
+-    }
    }
  
--  NimbusFeatures.moreFromMozilla.recordExposureEvent({ once: true });
--  if (NimbusFeatures.moreFromMozilla.getVariable("enabled")) {
--    document.getElementById("category-more-from-mozilla").hidden = false;
--    gMoreFromMozillaPane.option =
--      NimbusFeatures.moreFromMozilla.getVariable("template");
--    register_module("paneMoreFromMozilla", gMoreFromMozillaPane);
--  }
-   // The Sync category needs to be the last of the "real" categories
-   // registered and inititalized since many tests wait for the
-   // "sync-pane-loaded" observer notification before starting the test.
+   gSearchResultsPane.init();
 diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
-index 3c4b3225c6..6247bd44c0 100644
+index 9760a4a35b..1ae6b16072 100644
 --- a/browser/components/preferences/preferences.xhtml
 +++ b/browser/components/preferences/preferences.xhtml
 @@ -46,7 +46,6 @@
@@ -251,23 +275,23 @@ index 3c4b3225c6..6247bd44c0 100644
    <link rel="localization" href="browser/preferences/preferences.ftl"/>
    <link rel="localization" href="toolkit/branding/brandings.ftl"/>
    <link rel="localization" href="toolkit/firefoxlabs/features.ftl"/>
-@@ -158,12 +157,6 @@
-         iconsrc="chrome://global/skin/icons/experiments.svg"
-         data-l10n-id="settings-pane-labs-title">
+@@ -194,12 +193,6 @@
+         iconsrc="chrome://browser/skin/sidebar/firefox.svg"
+         data-l10n-id="pane-about-firefox-title">
        </html:moz-page-nav-button>
 -      <html:moz-page-nav-button id="category-more-from-mozilla"
 -        hidden="true"
 -        view="paneMoreFromMozilla"
--        iconsrc="chrome://browser/skin/preferences/mozilla-logo.svg"
--        data-l10n-id="more-from-moz-title">
+-        iconsrc="chrome://browser/skin/preferences/mozilla-16.svg"
+-        data-l10n-id="more-from-moz-title2">
 -      </html:moz-page-nav-button>
  
        <!-- Hidden sub-page entries (CSS display:none via .hidden-category).
             These keep gotoPref() routing working for sub-pages that are
-@@ -217,7 +210,6 @@
+@@ -252,7 +245,6 @@
+ #include privacy.inc.xhtml
  #include containers.inc.xhtml
  #include sync.inc.xhtml
- #include experimental.inc.xhtml
 -#include moreFromMozilla.inc.xhtml
          </vbox>
        </vbox>
@@ -276,10 +300,10 @@ index 3c4b3225c6..6247bd44c0 100644
 2.54.0
 
 
-From 82edc16bbbaecd8f2c318573f989223bd2f7d0fd Mon Sep 17 00:00:00 2001
+From 861dfecd524f70284ad316eab64ad58e9bacfb01 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:51:06 +0200
-Subject: [PATCH 3/7] Remove promos of Firefox Focus and Klar from Private
+Subject: [PATCH 3/6] Remove promos of Firefox Focus and Klar from Private
  Browsing
 
 Please correct me if I'm wrong, but these are not compatible with FSDG
@@ -296,10 +320,10 @@ for the same reasons as the original Firefox.
  delete mode 100644 browser/components/privatebrowsing/content/assets/klar-qr-code.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index ce98af43e8..94cd38b6df 100644
+index fbe035cbf4..993c6975be 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2558,7 +2558,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
+@@ -2579,7 +2579,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
  pref("browser.promo.focus.disallowed_regions", "cn");
  
  // Default to enabling focus promos to be shown where allowed.
@@ -309,7 +333,7 @@ index ce98af43e8..94cd38b6df 100644
  // Default to enabling pin promos to be shown where allowed.
  pref("browser.promo.pin.enabled", true);
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index 2db38a7b98..d8fe7ddb01 100644
+index eb167a5f6c..e8aecab453 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
 @@ -40,8 +40,6 @@ var gExceptionPaths = [
@@ -322,7 +346,7 @@ index 2db38a7b98..d8fe7ddb01 100644
    "chrome://browser/content/asrouter/assets/fox-with-devices.svg",
    "chrome://browser/content/asrouter/assets/fox-with-locked-box.svg",
 diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-index 8ff0d708ad..5967db25c3 100644
+index 53cb1c3d13..fffc66161e 100644
 --- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
 @@ -1551,315 +1551,6 @@ const BASE_MESSAGES = () => [
@@ -642,10 +666,10 @@ index 8ff0d708ad..5967db25c3 100644
      id: "PB_NEWTAB_PIN_PROMO",
      template: "pb_newtab",
 diff --git a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-index be5ced8c97..009c0fedfb 100644
+index 4d92f26473..e297839e57 100644
 --- a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-@@ -1901,85 +1901,6 @@ const MESSAGES = () => [
+@@ -1981,85 +1981,6 @@ const MESSAGES = () => [
      frequency: { lifetime: 3 },
      trigger: { id: "defaultBrowserCheck" },
    },
@@ -975,10 +999,10 @@ index 2217ca055c..0000000000
 2.54.0
 
 
-From d2a29da94cb4009af27f2ab8d2c7afe14686a448 Mon Sep 17 00:00:00 2001
+From 5c74357508c2228744b1f604093637f33c6b7134 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
-Subject: [PATCH 4/7] Remove 'Extensions for developers' menu item
+Subject: [PATCH 4/6] Remove 'Extensions for developers' menu item
 
 Main menu -> 'More tools' -> 'Extensions for developers' opens
  addons.mozilla.org (AMO), a third-party repository, not compatible with the
@@ -992,7 +1016,7 @@ Main menu -> 'More tools' -> 'Extensions for developers' opens
  3 files changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/browser/components/asrouter/modules/CFRPageActions.sys.mjs b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
-index 12b33b3b5f..a910809c21 100644
+index e492572855..ee96a375ec 100644
 --- a/browser/components/asrouter/modules/CFRPageActions.sys.mjs
 +++ b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
 @@ -43,7 +43,7 @@ const SUMO_BASE_URL = Services.urlFormatter.formatURLPref(
@@ -1036,72 +1060,10 @@ index 837e99fbfa..7c68c4f47f 100644
 2.54.0
 
 
-From 736630a267d14d9ae114af4a04b42f6a3cdc6f5a Mon Sep 17 00:00:00 2001
-From: grizzlyuser <grizzlyuser@protonmail.com>
-Date: Sun, 12 Mar 2023 21:57:14 +0100
-Subject: [PATCH 5/7] Change DuckDuckGo URL to DuckDuckGo HTML URL
-
-Some of JavaScript files from the regular DDG URL lack license info, and
-I couldn't find their freely licensed sources, so they can be considered
-nonfree.
-
-Replace the regular DDG URL with DDG HTML URL and rename the search
-engine accordingly. Currently, it looks like HTML version does not have
-any JS.
-
-Also:
-1. Change search method from GET to POST, because with GET, DDG HTML
-   will mangle URLs in search results, so that [1] becomes [2]. Not sure
-why that is done. Probably to avoid leaking search terms to visited
-sites (via Referer header?) at the cost of leaking clicked URLs to DDG,
-so this can still be a privacy concern.  BTW, POST is the default search
-method when searching directly from DDG HTML home page.
-
-2. Remove suspicious t=ffab URL parameter, because it can tell DDG that
-   this particular search extension is the origin of the search.
-
-Private search engine that doesn't track its users, huh?
-
-[1] https://www.gnu.org/
-[2] https://duckduckgo.com/l/?uddg=https%3A%2F%2Fwww.gnu.org%2F&rut=b1ab1ab1a...
----
- browser/components/search/extensions/ddg/manifest.json | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/browser/components/search/extensions/ddg/manifest.json b/browser/components/search/extensions/ddg/manifest.json
-index 104eee6457..9a3279c622 100644
---- a/browser/components/search/extensions/ddg/manifest.json
-+++ b/browser/components/search/extensions/ddg/manifest.json
-@@ -1,6 +1,6 @@
- {
--  "name": "DuckDuckGo",
--  "description": "Search DuckDuckGo",
-+  "name": "DuckDuckGo HTML",
-+  "description": "Search DuckDuckGo HTML",
-   "manifest_version": 2,
-   "version": "1.5",
-   "browser_specific_settings": {
-@@ -12,9 +12,9 @@
-   "chrome_settings_overrides": {
-     "search_provider": {
-       "keyword": ["@duckduckgo", "@ddg"],
--      "name": "DuckDuckGo",
--      "search_url": "https://duckduckgo.com/",
--      "search_url_get_params": "t=ffab&q={searchTerms}",
-+      "name": "DuckDuckGo HTML",
-+      "search_url": "https://html.duckduckgo.com/html/",
-+      "search_url_post_params": "q={searchTerms}",
-       "suggest_url": "https://ac.duckduckgo.com/ac/",
-       "suggest_url_get_params": "q={searchTerms}&type=list"
-     }
--- 
-2.54.0
-
-
-From d07abc26b123ce454351f7f042bd506f37cb1840 Mon Sep 17 00:00:00 2001
+From 038823b4de87e8cbb6d180e6bc4c71e8d4908de6 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 22:12:44 +0200
-Subject: [PATCH 6/7] Remove references to nonfree Generative AI chats
+Subject: [PATCH 5/6] Remove references to nonfree Generative AI chats
 
 The GenAI chatbot feature opens the chat with the provider selected by
 the user in the side panel, and essentially loads all the software
@@ -1123,10 +1085,10 @@ to false.
  3 files changed, 5 insertions(+), 117 deletions(-)
 
 diff --git a/browser/components/genai/GenAI.sys.mjs b/browser/components/genai/GenAI.sys.mjs
-index 43fbf0ec69..bbef7d58ee 100644
+index 85294ad2cf..6b428a8a63 100644
 --- a/browser/components/genai/GenAI.sys.mjs
 +++ b/browser/components/genai/GenAI.sys.mjs
-@@ -82,7 +82,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
+@@ -83,7 +83,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
    lazy,
    "chatProviders",
    "browser.ml.chat.providers",
@@ -1135,7 +1097,7 @@ index 43fbf0ec69..bbef7d58ee 100644
    reorderChatProviders
  );
  XPCOMUtils.defineLazyPreferenceGetter(
-@@ -137,99 +137,10 @@ export const GenAI = {
+@@ -138,99 +138,10 @@ export const GenAI = {
    // will allow for additional UI shown such as populating dropdown with a name,
    // showing links, and other special behaviors needed for individual providers.
    chatProviders: new Map([
@@ -1235,7 +1197,7 @@ index 43fbf0ec69..bbef7d58ee 100644
          linksId: "genai-settings-chat-localhost-links",
          maxLength: 8192,
          name: "localhost",
-@@ -1130,7 +1041,7 @@ export const GenAI = {
+@@ -1131,7 +1042,7 @@ export const GenAI = {
    },
  
    /**
@@ -1244,7 +1206,7 @@ index 43fbf0ec69..bbef7d58ee 100644
     *
     * @param {Browser} browser - current browser
     * @param {string} prompt - prompt text
-@@ -1322,7 +1233,7 @@ export const GenAI = {
+@@ -1323,7 +1234,7 @@ export const GenAI = {
      }
      browser.fixupAndLoadURIString(url, options);
  
@@ -1306,10 +1268,10 @@ index f10084073c..b47aa5e5dd 100644
 2.54.0
 
 
-From 96c665d2563103118d1cb0d9d20ffa0f8a7f45c4 Mon Sep 17 00:00:00 2001
+From d6ccd3e2a2ea6108afb5bbf55d51e3496a326fb4 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
-Subject: [PATCH 7/7] Various patches
+Subject: [PATCH 6/6] Various patches
 
 I'm too lazy to find the history for each, just making the whole patch
 set compatible with 'git am' and easier to manage. If needed, it can be
@@ -1317,10 +1279,10 @@ found using git.
 ---
  browser/app/permissions                       |  3 --
  browser/components/preferences/sync.inc.xhtml | 18 -----------
- .../protections/content/protections.ftl       |  2 +-
  .../protections/content/protections.html      | 10 ------
  .../protections/content/vpn-card.mjs          | 16 ----------
  .../en-US/browser/preferences/preferences.ftl | 10 ------
+ browser/locales/en-US/browser/protections.ftl |  2 +-
  .../en-US/toolkit/about/aboutAddons.ftl       | 14 ++++----
  .../en-US/toolkit/branding/brandings.ftl      | 32 +++++++++----------
  8 files changed, 25 insertions(+), 80 deletions(-)
@@ -1368,42 +1330,29 @@ index c379e1a5f8..de642e7918 100644
    </groupbox>
  
    <vbox id="hasFxaAccount">
-diff --git a/browser/components/protections/content/protections.ftl b/browser/components/protections/content/protections.ftl
-index 0f5b96e7ff..9617795e92 100644
---- a/browser/components/protections/content/protections.ftl
-+++ b/browser/components/protections/content/protections.ftl
-@@ -18,7 +18,7 @@ get-vpn-link = Get { -mozilla-vpn-brand-name }
- 
- vpn-title-subscribed = VPN: Subscribed
- # Note This text is not being translated, and the <br> will need to be removed if or when it does get translated
--vpn-header-content-subscribed = Using the { -mozilla-vpn-brand-name } encrypts all your traffic and hides your location — on up to 5 devices. Get the most from your subscription — add it from <br> the <a data-l10n-name="vpn-google-playstore-link">Google Play Store</a> or <a data-l10n-name="vpn-app-store-link">Apple App Store</a>.
-+vpn-header-content-subscribed = Using the { -mozilla-vpn-brand-name } encrypts all your traffic and hides your location — on up to 5 devices.
- 
- vpn-banner-header = Protection that extends beyond the browser
- # Note This text is not being translated, and the <br> will need to be removed if or when it does get translated
 diff --git a/browser/components/protections/content/protections.html b/browser/components/protections/content/protections.html
-index 3b40c972be..0e7a2c6acf 100644
+index 8a1b8f7d3c..c0e89c5b7b 100644
 --- a/browser/components/protections/content/protections.html
 +++ b/browser/components/protections/content/protections.html
-@@ -562,16 +562,6 @@
-                 class="content subscribed"
-                 data-l10n-id="vpn-header-content-subscribed"
+@@ -548,16 +548,6 @@
+                 data-l10n-id="protections-vpn-header-content-subscribed"
+                 data-l10n-args='{"count": 5}'
                >
 -                <a
 -                  target="_blank"
 -                  id="vpn-google-playstore-link"
--                  data-l10n-name="vpn-google-playstore-link"
+-                  data-l10n-name="playstore-link"
 -                ></a>
 -                <a
 -                  target="_blank"
 -                  id="vpn-app-store-link"
--                  data-l10n-name="vpn-app-store-link"
+-                  data-l10n-name="appstore-link"
 -                ></a>
                </p>
              </div>
              <a
 diff --git a/browser/components/protections/content/vpn-card.mjs b/browser/components/protections/content/vpn-card.mjs
-index 84ffc25fb5..7a0c647616 100644
+index 7b1024de12..adb1316420 100644
 --- a/browser/components/protections/content/vpn-card.mjs
 +++ b/browser/components/protections/content/vpn-card.mjs
 @@ -22,22 +22,6 @@ export default class VPNCard {
@@ -1430,10 +1379,10 @@ index 84ffc25fb5..7a0c647616 100644
      const vpnBanner = this.doc.querySelector(".vpn-banner");
      const exitIcon = vpnBanner.querySelector(".exit-icon");
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 79e20bf615..2cf3a6625e 100644
+index 8c25c7bf3f..7baf1c4ad2 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -1301,16 +1301,6 @@ sync-signedout-account-short =
+@@ -1379,16 +1379,6 @@ sync-signedout-account-short =
      .label = Sign in
      .accesskey = i
  
@@ -1450,8 +1399,21 @@ index 79e20bf615..2cf3a6625e 100644
  ## Firefox account - Signed in
  
  sync-profile-picture-with-alt =
+diff --git a/browser/locales/en-US/browser/protections.ftl b/browser/locales/en-US/browser/protections.ftl
+index 5a20984cb9..aacf47451a 100644
+--- a/browser/locales/en-US/browser/protections.ftl
++++ b/browser/locales/en-US/browser/protections.ftl
+@@ -285,7 +285,7 @@ protections-vpn-title-subscribed = VPN: Subscribed
+ #   $count (number): Number of devices
+ protections-vpn-header-content-subscribed =
+     { $count ->
+-       *[other] Using the { -mozilla-vpn-brand-name } encrypts all your traffic and hides your location — on up to { $count } devices. Get the most from your subscription — add it from the <a data-l10n-name="playstore-link">Google Play Store</a> or <a data-l10n-name="appstore-link">Apple App Store</a>.
++       *[other] Using the { -mozilla-vpn-brand-name } encrypts all your traffic and hides your location — on up to { $count } devices.
+     }
+ 
+ protections-vpn-banner-header = Protection that extends beyond the browser
 diff --git a/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl b/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
-index 5b2ddf8947..807b825830 100644
+index e1c9ac6e2b..16a8d4d9f2 100644
 --- a/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
 +++ b/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
 @@ -5,7 +5,7 @@
@@ -1492,7 +1454,7 @@ index 5b2ddf8947..807b825830 100644
  addon-page-options-button =
      .title = Tools for all add-ons
 diff --git a/toolkit/locales/en-US/toolkit/branding/brandings.ftl b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
-index d390fc6e8e..06d772fdc4 100644
+index 97f695334a..8581941dfa 100644
 --- a/toolkit/locales/en-US/toolkit/branding/brandings.ftl
 +++ b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
 @@ -15,17 +15,17 @@
@@ -1520,7 +1482,7 @@ index d390fc6e8e..06d772fdc4 100644
  -relay-brand-short-name = Relay
  -fakespot-brand-name = Fakespot
  -solo-ai-brand-name = Solo
-@@ -38,20 +38,20 @@
+@@ -40,20 +40,20 @@
  # The particle "by" can be localized, "Fakespot" and "Mozilla" should not be localized or transliterated.
  -fakespot-brand-full-name = Fakespot by Mozilla
  
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 6bfb44b..172abee 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=151.0.3
+pkgver=152.0
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -168,7 +168,6 @@ source=(
   $pkgname.desktop
   org.mozilla.$pkgname.metainfo.xml
   0001-Install-under-remoting-name.patch
-  0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
 )
 source=( ${source[*]/${pkgname}-symbolic.svg/} )  # branding over-ride
 source=( ${source[*]/org.mozilla./nu.parabola.} ) # branding over-ride
@@ -194,26 +193,24 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('7820284ed489057a3750715ccaa22d87e1965fd54f6525d3565f1e70743bfe66'
+sha256sums=('5e5f9acb550d065a43934e0fcd11ed3ec22f7266fc9ad63df757406b432a5127'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
             'a6e4ab312203ae1df50537f4e6631417b84df46bac4cce2d51145751a405cd8f'  # nu.parabola.$pkgname.metainfo.xml
-            'f0118f1b092e471fe3c81c1e8b49a76a37f72f3263d00a18e939dcde80c90dac'
-            'c7d6572fe1ac76f6adbfb10102f284fd55690396ac0a275a5cfea9a2efa22b58')
+            'f0118f1b092e471fe3c81c1e8b49a76a37f72f3263d00a18e939dcde80c90dac')
 sha256sums+=('86bd54db6026ff65bd24ac4f05d0679a645ff447e2f81b0ee44037c0c4285e06') # vendor.js.in
 sha256sums_armv7h=('883ca2fa723a7572269d18559d5b82412782ad63e5dd3820eeb0540e3fe34314')
 sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c1809'  # avoid-libxul-OOM-python-check.patch
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('48000217630b1eeef424f4a82c3839d49d531728959a4356739cee42f14580521b8b3313b8fd0783b14fb64e2ce020912460982be77f8dca9311ab9fd3194c3d'
+b2sums=('526bb2b2b83bc20561de86f200e3e4922d7ffc5e25ed6a342350399c390bfddf39db5421d843d3803ebbc7c4abd981ae55aa67c82e9158beb6510c091a111319'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
         '80cf1f7644f9b509fe374cd51fea288ffcca73f735c7d4c8e2a22be7543aa7e0f3c84a619315e5fb4b82967f1cc7b2b4282658af859be1a08d2f29c39f2815d7'   # nu.parabola.$pkgname.metainfo.xml
-        'c1cbb2de5011ed88e77c22c6abbc944ac2bd0f6c95bddb75f668f40566e6cad8d0090e65a5ff498055612a359f82484b41202f74e1312236e17d099e71bbc952'
-        '0420be311ae633c05d3a110b9fe5a8da288530d918ec9435c1a54d8d13bbbd06f5ee90977a9ee71d39e68bc26deb20264e712816e1dc5d7374b64a920e51b353')
+        'c1cbb2de5011ed88e77c22c6abbc944ac2bd0f6c95bddb75f668f40566e6cad8d0090e65a5ff498055612a359f82484b41202f74e1312236e17d099e71bbc952')
 b2sums+=('f3f344196d03499f3f0392d5dfc5310e131d8c85772edd340faf1df3f04ebf2931eb1dda1b7fe6870d61d498618f4d8ae9f1dd446acbe83e0ce324e04b38f3f9') # vendor.js.in
 b2sums_armv7h=('8a894b01e405b628877483e40e9b018647977cb053b6af02afc901ed24d6e1f767f3db8c321070e33aea4a05ba16f1eb47ae600e5299b5f9caad03d20ba38cf5')
 b2sums_i686=('572bb35d7aee0ac847a864b4309f73390435f16b750b8fa3c78b986181d57cdad434bca006d7438c903b2fdc08385292d08fee1d68c87240af72688d60cb8657'  # avoid-libxul-OOM-python-check.patch
@@ -264,17 +261,17 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
             process-json-files.py )
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
-                'd39c35ac1f6b83c31e05f36331b18827b4c7e29e0bfdf0792bc219f30231975f'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                'f90eb4b8c2e7c605291930358b56dcb1a89d9fac878f7ffcfa1702c764addd93'   # 9002-FSDG-preference-defaults.patch
-                'dc29d095a0f55cb3c2decb68af3b03a67ddfd0b99823f7fc120c29d77104ebe5'   # 9003-FSDG-urihandlers.patch
-                '40281e012820eb0fb40eee1c4c18fe78a47f96e8716119ada2038768ed06c52b'   # 9004-FSDG-misc.patch
+                '517eb3b251695979dffe995702f7668616b316b745ae212f4f2f46d5cbaf0c3e'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+                '6d286d28e9c985ddfd26e5ce1bfc1cc566f3ae8ead92b38cb0215fd4a35b1c31'   # 9002-FSDG-preference-defaults.patch
+                '2cb40bc6a98a9f88edf1e945b5335136f80768934d71f81f6d184028531873ca'   # 9003-FSDG-urihandlers.patch
+                'f58e934dfc10e7d639caecd27424a6f55f0e9df976859b11b25c294c72298ef5'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
-            '12e5a04e9c63de5fe71b2e1ade3626119bcbae01865f856e56758a3fb162676db649d7eee8dd101d995a6b8db219f6cac1b95da82c6b9e307d2cd3c83c766f98'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            'bd709384f2b415ce3d2c626fb8891b7fdf171be16d27ea6d016da8de05618f9eac3478ff6d32fd3f945b98cabfbf71ab04dbc08d1c12eb53710e6336a804d8af'   # 9002-FSDG-preference-defaults.patch
-            '66f4c3d75905e81268bce6564824e6b701fb97880018db71e3661d15b6ff86032291ef731ac44c5866c2d671f9fdd95bab3927fbb89794693fa2e25e110f24fa'   # 9003-FSDG-urihandlers.patch
-            'b034e84eb99155c702346ba1d9468932f155d04279e94d3499b1e8dce9d17b095c758b524e6a73a9fc207e8e5091fd10073b20b8dfc51192bb2c2217df6bf995'   # 9004-FSDG-misc.patch
+            '1ac13c0d00365f6296fc307f3c9cf6f262d4d2aae3be46d8170a52760a2c15c8315e8276ecd1a9754b8f4854557351a11236f7f82d7425dcfb18a22651537baf'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+            'aa5e37227c85066e0fd19ed42b8dc59396dc7350ffc368a26ef5d670c1790f080abb705955b244c6dd44e2a81994446bd9a094c12680d0bdd5b852d2660fa9ee'   # 9002-FSDG-preference-defaults.patch
+            '90ca48afd995e574978fd22e77c55dd6253d4b3a0cb2ba34a0aebe904aef1eaa0ed3c52fcded5bedfb521f3f547e117c9587c18d61b5c338de41b0cf284f3b8c'   # 9003-FSDG-urihandlers.patch
+            '09aeebadf3eb481b9b19f511de837676b8213a15b930ba6dd3f4653f975ae3936e1fc768c3c079c0137f3a54b1857b3f0331e4fe4596a0929710ec6ebec34261'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
 source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
          ${source[*]:${_N_MKSOURCES}} )
@@ -383,7 +380,7 @@ _check_patching() {
   pushd "${srcdir}"/firefox-${pkgver} > /dev/null
 
   # Remote Settings
-  local settings_server_regex='firefox.?settings.*\.(mozilla|allizom)(-backup)?\.(com|org)'
+  local settings_server_regex='settings[^\s:/]*\.(mozilla|allizom|mozaws)(-backup)?\.(com|org|net)'
   local settings_err_msg="ERROR: 9001-FSDG-sync-remote-settings-with-local-dump.patch needs reworking"
   ! grep -qrE $settings_server_regex || ! echo "${settings_err_msg}" || return 1
 
@@ -393,7 +390,7 @@ _check_patching() {
   ! grep -qrE $model_hub_server_regex || ! echo "${model_hub_err_msg}" || return 1
 
   # Merino
-  local merino_server_regex='.*merino.*(\.(mozilla|allizom)(-backup)?\.com|mozgcp\.net|mozilla\.fastly-edge\.com|edgecompute\.app)'
+  local merino_server_regex='\S*merino\S*(\.(mozilla|allizom)(-backup)?\.com|mozgcp\.net|mozilla\.fastly-edge\.com|edgecompute\.app)'
   local merino_err_msg="ERROR: Found ${merino_server_regex} in the sources. 9002-FSDG-preference-defaults.patch needs reworking"
   ! grep -qrE $merino_server_regex || ! echo "${merino_err_msg}" || return 1
 
@@ -567,10 +564,6 @@ prepare() {
   # Make different channels installable in parallel
   patch -Np1 -i ../0001-Install-under-remoting-name.patch
 
-  # Fix build with glibc 2.43
-  # https://bugzilla.mozilla.org/show_bug.cgi?id=1999625
-  patch -Np1 -i ../0002-Patch-glsl-optimizer-to-build-with-glibc-2.43.patch
-
   # Use system python-typing-extensions instead of the old vendored one to avoid
   # unresolvable dependency versions. They are probably downloaded when network
   # connectivity is enabled at built time, but that is not the case for Parabola.
@@ -941,20 +934,6 @@ browser.startup.homepage=\"https://www.parabola.nu\"" >> "${distini}"
 
   # misc branding
   sed -i "s|({ \$bits }-bit)|($CARCH)|" browser/locales/en-US/browser/aboutDialog.ftl
-
-
-  ## search-engines ##
-
-  pushd browser/components/search/extensions > /dev/null
-
-  # Delete unused search engine configs
-  echo "deleting unused search engine configs"
-  find -mindepth 1 -maxdepth 1 \
-       -not -name ddg          \
-       -not -name wikipedia    \
-       -exec rm -fr {} \;
-
-  popd > /dev/null
 }
 
 build() {

From 75b538321de632b741d977fb84a1083496eada17 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 7/12] libre/iceweasel: 152.0.4-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index 1de4d6c..d69820e 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1836,6 +1836,165 @@ index a75bb8dc37..c372d42770 100644
  
  // Enable the experimental machine learning inference engine.
  pref("browser.ml.enable", false);
+diff --git a/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs b/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs
+index 1559f95d9a..3ceb056a1a 100644
+--- a/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs
++++ b/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs
+@@ -42,62 +42,5 @@ const Template = ({ tabs }) => html`
+ 
+ export const Default = Template.bind({});
+ Default.args = {
+-  tabs: [
+-    {
+-      linkedPanel: "tab-1",
+-      title: "Mozilla Developer Network - Web Docs",
+-      iconSrc: "chrome://branding/content/about-logo.svg",
+-      url: "https://developer.mozilla.org",
+-      checked: true,
+-    },
+-    {
+-      linkedPanel: "tab-2",
+-      title: "Stack Overflow - Where Developers Learn",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://stackoverflow.com",
+-      checked: false,
+-    },
+-    {
+-      linkedPanel: "tab-3",
+-      title: "GitHub - Build and ship software",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://github.com",
+-      checked: true,
+-    },
+-    {
+-      linkedPanel: "tab-4",
+-      title: "MDN Web Docs - Resources for developers",
+-      iconSrc: "chrome://branding/content/about-logo.svg",
+-      url: "https://developer.mozilla.org/en-US/",
+-      checked: false,
+-    },
+-    {
+-      linkedPanel: "tab-5",
+-      title: "W3Schools - Learn to Code",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://www.w3schools.com",
+-      checked: true,
+-    },
+-    {
+-      linkedPanel: "tab-6",
+-      title: "CSS-Tricks - Tips, Tricks, and Techniques",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://css-tricks.com",
+-      checked: false,
+-    },
+-    {
+-      linkedPanel: "tab-7",
+-      title: "JavaScript.info - The Modern JavaScript Tutorial",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://javascript.info",
+-      checked: true,
+-    },
+-    {
+-      linkedPanel: "tab-8",
+-      title: "React - A JavaScript library for building user interfaces",
+-      iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-      url: "https://reactjs.org",
+-      checked: false,
+-    },
+-  ],
++  tabs: [ ],
+ };
+diff --git a/browser/components/aiwindow/ui/components/ai-website-select/ai-website-select.stories.mjs b/browser/components/aiwindow/ui/components/ai-website-select/ai-website-select.stories.mjs
+index 721d882cc6..d284256585 100644
+--- a/browser/components/aiwindow/ui/components/ai-website-select/ai-website-select.stories.mjs
++++ b/browser/components/aiwindow/ui/components/ai-website-select/ai-website-select.stories.mjs
+@@ -43,10 +43,4 @@ const Template = ({ linkedPanel, label, iconSrc, url, checked }) => html`
+ `;
+ 
+ export const Default = Template.bind({});
+-Default.args = {
+-  linkedPanel: "tab-1",
+-  label: "Mozilla Developer Network - Web Docs",
+-  iconSrc: "chrome://branding/content/about-logo.svg",
+-  url: "https://developer.mozilla.org",
+-  checked: false,
+-};
++Default.args = { };
+diff --git a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
+index dc7bf04280..84448c86af 100644
+--- a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
++++ b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
+@@ -21,36 +21,7 @@
+       // Setup test data after components are defined
+       customElements.whenDefined("ai-website-confirmation").then(() => {
+         const mixedConfirmation = document.getElementById("test-confirmation-mixed");
+-        mixedConfirmation.tabs = [
+-          {
+-            linkedPanel: "tab-1",
+-            title: "Mozilla Developer Network",
+-            iconSrc: "chrome://branding/content/icon16.png",
+-            url: "https://developer.mozilla.org",
+-            checked: true,
+-          },
+-          {
+-            linkedPanel: "tab-2",
+-            title: "Stack Overflow",
+-            iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-            url: "https://stackoverflow.com",
+-            checked: false,
+-          },
+-          {
+-            linkedPanel: "tab-3",
+-            title: "GitHub",
+-            iconSrc: "chrome://branding/content/about-logo.svg",
+-            url: "https://github.com",
+-            checked: true,
+-          },
+-          {
+-            linkedPanel: "tab-4",
+-            title: "Example Site",
+-            iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
+-            url: "https://example.com",
+-            checked: false,
+-          },
+-        ];
++        mixedConfirmation.tabs = [ ];
+ 
+         const allCheckedConfirmation = document.getElementById("test-confirmation-all-checked");
+         allCheckedConfirmation.tabs = [
+diff --git a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
+index 63416ca020..6825c62fb8 100644
+--- a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
++++ b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
+@@ -8,28 +8,5 @@
+     <link rel="localization" href="preview/aiWindow.ftl">
+   </head>
+   <body>
+-    <ai-website-select
+-      id="test-select-unchecked"
+-      linkedPanel="test-select-unchecked"
+-      label="Mozilla Developer Network"
+-      iconSrc="chrome://branding/content/icon16.png"
+-      url="https://developer.mozilla.org">
+-    </ai-website-select>
+-
+-    <ai-website-select
+-      id="test-select-checked"
+-      linkedPanel="test-select-checked"
+-      label="Firefox Browser"
+-      iconSrc="chrome://branding/content/about-logo.svg"
+-      url="https://www.mozilla.org/firefox/"
+-      checked>
+-    </ai-website-select>
+-
+-    <ai-website-select
+-      id="test-select-no-icon"
+-      linkedPanel="test-select-no-icon"
+-      label="Example Site Without Icon"
+-      url="https://example.com">
+-    </ai-website-select>
+   </body>
+ </html>
 -- 
 2.54.0
 
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 172abee..983e60a 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=152.0
+pkgver=152.0.4
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -193,7 +193,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('5e5f9acb550d065a43934e0fcd11ed3ec22f7266fc9ad63df757406b432a5127'
+sha256sums=('fd89982202cda5353a27307d85d48902d46576d46d1c9e36d55740e63b5216bb'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -205,7 +205,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('526bb2b2b83bc20561de86f200e3e4922d7ffc5e25ed6a342350399c390bfddf39db5421d843d3803ebbc7c4abd981ae55aa67c82e9158beb6510c091a111319'
+b2sums=('8840923ae6c464fd8f8c54676e994897de7a6e9229d1b70fc798df261cc878ab1cfccad162eb0aeb8632cbddb52b7a809c06cde9bffc7f9cc5b7c288a60bf45c'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
@@ -262,14 +262,14 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
                 '517eb3b251695979dffe995702f7668616b316b745ae212f4f2f46d5cbaf0c3e'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                '6d286d28e9c985ddfd26e5ce1bfc1cc566f3ae8ead92b38cb0215fd4a35b1c31'   # 9002-FSDG-preference-defaults.patch
+                '7c88d2e6ca71045be5a3cd8fc41b1dfbb11cf68b1e42099df070cdab3a2f4758'   # 9002-FSDG-preference-defaults.patch
                 '2cb40bc6a98a9f88edf1e945b5335136f80768934d71f81f6d184028531873ca'   # 9003-FSDG-urihandlers.patch
                 'f58e934dfc10e7d639caecd27424a6f55f0e9df976859b11b25c294c72298ef5'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
             '1ac13c0d00365f6296fc307f3c9cf6f262d4d2aae3be46d8170a52760a2c15c8315e8276ecd1a9754b8f4854557351a11236f7f82d7425dcfb18a22651537baf'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            'aa5e37227c85066e0fd19ed42b8dc59396dc7350ffc368a26ef5d670c1790f080abb705955b244c6dd44e2a81994446bd9a094c12680d0bdd5b852d2660fa9ee'   # 9002-FSDG-preference-defaults.patch
+            'c4a92f244c486034844bb097e33964368fc68f0cc385a213558f1179da38b19e00481b9f9f63f880945ea1c81b6a08bcadc259011c8ad81e106d321418d7d920'   # 9002-FSDG-preference-defaults.patch
             '90ca48afd995e574978fd22e77c55dd6253d4b3a0cb2ba34a0aebe904aef1eaa0ed3c52fcded5bedfb521f3f547e117c9587c18d61b5c338de41b0cf284f3b8c'   # 9003-FSDG-urihandlers.patch
             '09aeebadf3eb481b9b19f511de837676b8213a15b930ba6dd3f4653f975ae3936e1fc768c3c079c0137f3a54b1857b3f0331e4fe4596a0929710ec6ebec34261'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
@@ -1073,7 +1073,7 @@ END
 
     echo "Building optimized browser..."
     cat >.mozconfig ../mozconfig - <<END
-ac_add_options --enable-lto=cross,full
+ac_add_options --enable-lto=cross
 ac_add_options --enable-profile-use=cross
 ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
 ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog

From e06482e83e66cadd62203e0a011b355d22980040 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 8/12] libre/iceweasel: 152.0.6-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index d69820e..32c67d2 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1921,15 +1921,16 @@ index 721d882cc6..d284256585 100644
 -};
 +Default.args = { };
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
-index dc7bf04280..84448c86af 100644
+index 5c46cb8662..da0cb449c4 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
 +++ b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
-@@ -21,36 +21,7 @@
+@@ -21,40 +21,7 @@
        // Setup test data after components are defined
        customElements.whenDefined("ai-website-confirmation").then(() => {
          const mixedConfirmation = document.getElementById("test-confirmation-mixed");
 -        mixedConfirmation.tabs = [
 -          {
+-            token: "tab-1",
 -            linkedPanel: "tab-1",
 -            title: "Mozilla Developer Network",
 -            iconSrc: "chrome://branding/content/icon16.png",
@@ -1937,6 +1938,7 @@ index dc7bf04280..84448c86af 100644
 -            checked: true,
 -          },
 -          {
+-            token: "tab-2",
 -            linkedPanel: "tab-2",
 -            title: "Stack Overflow",
 -            iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
@@ -1944,6 +1946,7 @@ index dc7bf04280..84448c86af 100644
 -            checked: false,
 -          },
 -          {
+-            token: "tab-3",
 -            linkedPanel: "tab-3",
 -            title: "GitHub",
 -            iconSrc: "chrome://branding/content/about-logo.svg",
@@ -1951,6 +1954,7 @@ index dc7bf04280..84448c86af 100644
 -            checked: true,
 -          },
 -          {
+-            token: "tab-4",
 -            linkedPanel: "tab-4",
 -            title: "Example Site",
 -            iconSrc: "chrome://global/skin/icons/defaultFavicon.svg",
@@ -1962,6 +1966,32 @@ index dc7bf04280..84448c86af 100644
  
          const allCheckedConfirmation = document.getElementById("test-confirmation-all-checked");
          allCheckedConfirmation.tabs = [
+diff --git a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
+index c8620d9ef5..9f0416f2e7 100644
+--- a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
++++ b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
+@@ -25,21 +25,6 @@ const sampleSites = [
+     label: "Wikipedia",
+     favicon: "https://www.wikipedia.org/static/favicon/wikipedia.ico",
+   },
+-  {
+-    url: "https://www.youtube.com/",
+-    label: "YouTube",
+-    favicon: "https://www.youtube.com/favicon.ico",
+-  },
+-  {
+-    url: "https://apnews.com/",
+-    label: "AP News",
+-    favicon: "https://apnews.com/favicon.ico",
+-  },
+-  {
+-    url: "https://www.reddit.com/",
+-    label: "Reddit",
+-    favicon: "https://www.reddit.com/favicon.ico",
+-  },
+ ];
+ 
+ const Template = ({ sites }) => html`
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
 index 63416ca020..6825c62fb8 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 983e60a..d6667ee 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=152.0.4
+pkgver=152.0.6
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -193,7 +193,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('fd89982202cda5353a27307d85d48902d46576d46d1c9e36d55740e63b5216bb'
+sha256sums=('ea220c4f8d19d4edaa20e6dadfd3c4aeb07dbed017ade2828fd814d660660f0e'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -205,7 +205,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('8840923ae6c464fd8f8c54676e994897de7a6e9229d1b70fc798df261cc878ab1cfccad162eb0aeb8632cbddb52b7a809c06cde9bffc7f9cc5b7c288a60bf45c'
+b2sums=('d0a55f6f30a78516d244037d593ccb08f6803498b582508af35d5b2811097f00584c5b1760c488ae6e7073837b88087ff94ab36eee9af8d7a110350515fc94eb'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
@@ -262,14 +262,14 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
                 '517eb3b251695979dffe995702f7668616b316b745ae212f4f2f46d5cbaf0c3e'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                '7c88d2e6ca71045be5a3cd8fc41b1dfbb11cf68b1e42099df070cdab3a2f4758'   # 9002-FSDG-preference-defaults.patch
+                'dcb1a20b8c81fedd24b628f5b8eec3209f1c58223559e8e754e2c5c3f5744f68'   # 9002-FSDG-preference-defaults.patch
                 '2cb40bc6a98a9f88edf1e945b5335136f80768934d71f81f6d184028531873ca'   # 9003-FSDG-urihandlers.patch
                 'f58e934dfc10e7d639caecd27424a6f55f0e9df976859b11b25c294c72298ef5'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
             '1ac13c0d00365f6296fc307f3c9cf6f262d4d2aae3be46d8170a52760a2c15c8315e8276ecd1a9754b8f4854557351a11236f7f82d7425dcfb18a22651537baf'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            'c4a92f244c486034844bb097e33964368fc68f0cc385a213558f1179da38b19e00481b9f9f63f880945ea1c81b6a08bcadc259011c8ad81e106d321418d7d920'   # 9002-FSDG-preference-defaults.patch
+            '898fd23768d67ff3ebedd37bad510de86912c4f862da56b68ba509c3f3676345533e97eb16b5218d08d599837eaea5eab487cf47e6cfe01228ba200aa680e8d6'   # 9002-FSDG-preference-defaults.patch
             '90ca48afd995e574978fd22e77c55dd6253d4b3a0cb2ba34a0aebe904aef1eaa0ed3c52fcded5bedfb521f3f547e117c9587c18d61b5c338de41b0cf284f3b8c'   # 9003-FSDG-urihandlers.patch
             '09aeebadf3eb481b9b19f511de837676b8213a15b930ba6dd3f4653f975ae3936e1fc768c3c079c0137f3a54b1857b3f0331e4fe4596a0929710ec6ebec34261'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py

From d913a66cc7a599a7fd3c5abcc2f6c9b916291124 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 9/12] libre/iceweasel: Build with vendored libevent


With system libevent, the build fails with the following error:
> /build/iceweasel/src/firefox-153.0/ipc/chromium/src/base/message_pump_libevent.cc:42:1: error: use of undeclared identifier 'EVENT__SIZEOF_TIME_T'

---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index d6667ee..3c2973e 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -677,7 +677,6 @@ END
 ac_add_options --with-system-ffi
 ac_add_options --with-system-icu
 ac_add_options --with-system-jpeg
-ac_add_options --with-system-libevent
 ac_add_options --with-system-libvpx
 ac_add_options --with-system-nspr
 ac_add_options --with-system-nss

From e254cf7b56987e1446b917beaa5e9db0860682b8 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 10/12] libre/iceweasel: 153.0-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
index 5dd5e8f..5d10a55 100644
--- a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
@@ -1,4 +1,4 @@
-From 312eb52cad2cf011c797808ef76de10aaa733f80 Mon Sep 17 00:00:00 2001
+From 9ae363df3501ac3046461ae1bace6df7c35f126e Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:20:39 +0200
 Subject: [PATCH 01/13] Point to local omni.ja files, not remote server
@@ -34,7 +34,7 @@ If necessary, missing files can be added later.
  .../java/org/mozilla/fenix/components/Core.kt |  6 ++---
  .../focus/telemetry/GleanMetricsService.kt    |  4 ++--
  netwerk/protocol/http/metrics.yaml            |  4 ++--
- netwerk/protocol/http/nsHttpChannel.cpp       |  6 -----
+ netwerk/protocol/http/nsHttpChannel.cpp       |  8 -------
  .../mozperftest/system/ml_services.py         |  7 +-----
  services/settings/Utils.sys.mjs               |  2 +-
  services/settings/docs/index.rst              |  4 ++--
@@ -53,7 +53,7 @@ If necessary, missing files can be added later.
  .../docs/resources/02_contributing.md         | 11 +--------
  .../docs/resources/03_bergamot.md             |  6 ++---
  toolkit/modules/AppConstants.sys.mjs          |  6 +----
- 31 files changed, 74 insertions(+), 106 deletions(-)
+ 31 files changed, 74 insertions(+), 108 deletions(-)
 
 diff --git a/browser/base/content/spotlight.html b/browser/base/content/spotlight.html
 index e6bc327bee..1116e20f89 100644
@@ -113,10 +113,10 @@ index 753fbc633f..a0d49902a8 100644
                    >
                      nimbus-desktop-experiments
 diff --git a/browser/components/asrouter/content/asrouter-admin.bundle.js b/browser/components/asrouter/content/asrouter-admin.bundle.js
-index 179464f771..35d600a153 100644
+index ffb8391d2f..a4f4ba0efe 100644
 --- a/browser/components/asrouter/content/asrouter-admin.bundle.js
 +++ b/browser/components/asrouter/content/asrouter-admin.bundle.js
-@@ -1149,14 +1149,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
+@@ -1150,14 +1150,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
          label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", null, "remote settings (", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("a", {
            className: "small-text",
            target: "_blank",
@@ -133,7 +133,7 @@ index 179464f771..35d600a153 100644
            rel: "noopener noreferrer"
          }, "nimbus-desktop-experiments"), ")");
        }
-@@ -1522,4 +1522,4 @@ function renderASRouterAdmin() {
+@@ -1523,4 +1523,4 @@ function renderASRouterAdmin() {
  
  ASRouterAdminRenderUtils = __webpack_exports__;
  /******/ })()
@@ -273,10 +273,10 @@ index 180ff2a727..e2898f8b98 100644
  The purpose of this Google Summer of Code project, which is called Fretboard, was to develop an A/B testing framework written in Kotlin based on the existing code from Fennec, but making it independent of both the server used and the local storage mechanism, allowing it to be used on other apps, such as Firefox Focus, which started to need to do some A/B tests.
  
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-index f7aaa39f39..3102078696 100644
+index 5e4c49f47f..1e6b6b73d3 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-@@ -816,8 +816,8 @@ class Core(
+@@ -819,8 +819,8 @@ class Core(
  
          // collection name to fetch from server for SERP telemetry
          const val COLLECTION_NAME = "search-telemetry-v2"
@@ -304,10 +304,10 @@ index 74d5469ece..0b1c598999 100644
          private val isEnabledByDefault: Boolean
              get() = !AppConstants.isKlarBuild
 diff --git a/netwerk/protocol/http/metrics.yaml b/netwerk/protocol/http/metrics.yaml
-index 8e9e8346f6..4ab98d2f44 100644
+index fa05126580..6c412c9ddf 100644
 --- a/netwerk/protocol/http/metrics.yaml
 +++ b/netwerk/protocol/http/metrics.yaml
-@@ -1027,7 +1027,7 @@ network:
+@@ -1071,7 +1071,7 @@ network:
    system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -316,7 +316,7 @@ index 8e9e8346f6..4ab98d2f44 100644
  
    system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
-@@ -1057,7 +1057,7 @@ network:
+@@ -1101,7 +1101,7 @@ network:
    retried_system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -326,14 +326,16 @@ index 8e9e8346f6..4ab98d2f44 100644
    retried_system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
 diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
-index 42ee24d0b9..036c9c991f 100644
+index c6d926448e..19e4dd8cc3 100644
 --- a/netwerk/protocol/http/nsHttpChannel.cpp
 +++ b/netwerk/protocol/http/nsHttpChannel.cpp
-@@ -8842,12 +8842,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
+@@ -8952,14 +8952,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
    if (domain == "aus5.mozilla.org"_ns) {
      return EssentialDomainCategory::Aus5MozillaOrg;
    }
--  if (domain == "firefox.settings.services.mozilla.com"_ns) {
+-  if (domain == "firefox.settings.services.mozilla.com"_ns ||
+-      domain == "firefox-settings-attachments.cdn.mozilla.net"_ns ||
+-      domain == "content-signature-2.cdn.mozilla.net"_ns) {
 -    return EssentialDomainCategory::RemoteSettings;
 -  }
 -  if (domain == "incoming.telemetry.mozilla.com"_ns) {
@@ -368,7 +370,7 @@ index 0ca3527113..9e38b73cd9 100644
  }
  
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index da12049e14..925302a3fe 100644
+index 76f69ab74e..658978202a 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
 @@ -105,7 +105,7 @@ export var Utils = {
@@ -381,7 +383,7 @@ index da12049e14..925302a3fe 100644
    /**
     * Logger instance.
 diff --git a/services/settings/docs/index.rst b/services/settings/docs/index.rst
-index 7d25a1a739..305d1fd640 100644
+index adc5fe0e24..6486306a00 100644
 --- a/services/settings/docs/index.rst
 +++ b/services/settings/docs/index.rst
 @@ -188,11 +188,11 @@ It is possible to package a dump of the server records that will be loaded into
@@ -523,10 +525,10 @@ index ec34176270..9247419b3c 100644
  // Default profile targeting snapshot.
  let defaultProfileTargetingSnapshot = {};
 diff --git a/toolkit/components/ml/ml.d.ts b/toolkit/components/ml/ml.d.ts
-index d8acc0eba5..f3c7a5a1d6 100644
+index d543b79c65..d4315dd2c3 100644
 --- a/toolkit/components/ml/ml.d.ts
 +++ b/toolkit/components/ml/ml.d.ts
-@@ -245,7 +245,7 @@ interface BaseRecord {
+@@ -252,7 +252,7 @@ interface BaseRecord {
  interface RecordsMLUnique {
    /**
     * Allow or deny URL Prefixes.
@@ -535,7 +537,7 @@ index d8acc0eba5..f3c7a5a1d6 100644
     */
    "ml-model-allow-deny-list": {
      filter: "ALLOW" | "DENY";
-@@ -256,7 +256,7 @@ interface RecordsMLUnique {
+@@ -263,7 +263,7 @@ interface RecordsMLUnique {
    /**
     * Specific configuration options for different tasks. Filters can be used
     * to select specific features, tasks or models.
@@ -710,10 +712,10 @@ index a26725ead2..3070e01ace 100644
    REMOTE_SETTINGS_VERIFY_SIGNATURE:
  #ifdef MOZ_THUNDERBIRD
 -- 
-2.54.0
+2.55.0
 
 
-From 736365de5bfb52c792635ac306dfd91057c621bb Mon Sep 17 00:00:00 2001
+From a52c3013efa5937e3e977388239464edaa89f160 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:34:08 +0200
 Subject: [PATCH 02/13] Remove polling triggered by push broadcasts
@@ -754,10 +756,10 @@ index d8bbb7645c..c3f820cd2a 100644
     * Call the listeners of the specified broadcasts.
     *
 diff --git a/services/settings/remote-settings.sys.mjs b/services/settings/remote-settings.sys.mjs
-index 2330fb011f..a5e3b6a10d 100644
+index b180cfc850..a3f4b83190 100644
 --- a/services/settings/remote-settings.sys.mjs
 +++ b/services/settings/remote-settings.sys.mjs
-@@ -765,11 +765,7 @@ function remoteSettingsFunction() {
+@@ -760,11 +760,7 @@ function remoteSettingsFunction() {
        moduleURI: import.meta.url,
        symbolName: "remoteSettingsBroadcastHandler",
      };
@@ -770,7 +772,7 @@ index 2330fb011f..a5e3b6a10d 100644
    };
  
    return remoteSettings;
-@@ -789,9 +785,6 @@ export var remoteSettingsBroadcastHandler = {
+@@ -784,9 +780,6 @@ export var remoteSettingsBroadcastHandler = {
        `Push notification received (version=${version} phase=${phase})`
      );
  
@@ -782,10 +784,10 @@ index 2330fb011f..a5e3b6a10d 100644
    },
  };
 -- 
-2.54.0
+2.55.0
 
 
-From 0c289de5276c586f514b74630ce498f76f04bb73 Mon Sep 17 00:00:00 2001
+From eae80cb6b749aff1ba66a26ba473d98ffd3339fb Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:41:54 +0200
 Subject: [PATCH 03/13] Remove timer that triggers polling for changes
@@ -827,10 +829,10 @@ index c9c2370d2c..85c4a5cafe 100644
 -category update-timer RemoteSettingsComponents @mozilla.org/services/settings;1,getService,services-settings-poll-changes,services.settings.poll_interval,21600,86400
 +
 -- 
-2.54.0
+2.55.0
 
 
-From 781931075bdea9e23aca56fb6a7d283d987a2375 Mon Sep 17 00:00:00 2001
+From 2f31de5dd8d0711d578ad76b68e0043bb4a85d16 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:47:41 +0200
 Subject: [PATCH 04/13] Utils: fetch timestamps of each collection locally
@@ -848,10 +850,10 @@ code that expects them.
  create mode 100644 services/settings/dumps/monitor/moz.build
 
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index 925302a3fe..cc7bfe9744 100644
+index 658978202a..58f2c4ead2 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
-@@ -428,7 +428,7 @@ export var Utils = {
+@@ -431,7 +431,7 @@ export var Utils = {
    async fetchLatestChanges(serverUrl, options = {}) {
      const { expectedTimestamp, lastEtag = "", filters = {} } = options;
  
@@ -860,7 +862,7 @@ index 925302a3fe..cc7bfe9744 100644
      const params = {
        ...filters,
        _expected: expectedTimestamp ?? 0,
-@@ -443,7 +443,21 @@ export var Utils = {
+@@ -446,7 +446,21 @@ export var Utils = {
            .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
            .join("&");
      }
@@ -883,7 +885,7 @@ index 925302a3fe..cc7bfe9744 100644
  
      if (response.status >= 500) {
        throw new Error(`Server error ${response.status} ${response.statusText}`);
-@@ -478,7 +492,15 @@ export var Utils = {
+@@ -481,7 +495,15 @@ export var Utils = {
        }
      }
  
@@ -927,10 +929,10 @@ index a3e9e9b3f2..b32a8d8691 100644
  ]
  
 -- 
-2.54.0
+2.55.0
 
 
-From 879dde3f5cbc82339fee869f5e2b545be56faa96 Mon Sep 17 00:00:00 2001
+From 327640dde9e449ce431e1dacba4219fe11b76871 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:52:10 +0200
 Subject: [PATCH 05/13] Utils: disable offline checking
@@ -942,10 +944,10 @@ current and any future code that relies on it.
  1 file changed, 10 deletions(-)
 
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index cc7bfe9744..f6eaa7d958 100644
+index 58f2c4ead2..2363e15abd 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
-@@ -208,16 +208,6 @@ export var Utils = {
+@@ -211,16 +211,6 @@ export var Utils = {
     * @return {bool} Whether network is down or not.
     */
    get isOffline() {
@@ -963,10 +965,10 @@ index cc7bfe9744..f6eaa7d958 100644
    },
  
 -- 
-2.54.0
+2.55.0
 
 
-From c3671a478339df732af43a93aade92f93e5d7515 Mon Sep 17 00:00:00 2001
+From 1b4e01c392f5a5b6c37787fe0d1a3b8ce24c8f62 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:56:02 +0200
 Subject: [PATCH 06/13] Refactor hashing logic to a separate function
@@ -1017,10 +1019,10 @@ index e5b20d9b9d..a1eb1f6437 100644
  
    /**
 -- 
-2.54.0
+2.55.0
 
 
-From b110f5e1ecd43b3ec9374e3e61dc31741b9f802b Mon Sep 17 00:00:00 2001
+From f98f83969cd0c0389c6a5862aee07c77671347a0 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:05:02 +0200
 Subject: [PATCH 07/13] Client: Fetch and hash records from local dump
@@ -1055,10 +1057,10 @@ the upgrade to local-only setup.
  1 file changed, 33 insertions(+), 63 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 99277f08cb..24f0ad6cff 100644
+index 3ee4ae65a4..ddc8bbfd68 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -782,8 +782,9 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -775,8 +775,9 @@ export class RemoteSettingsClient extends EventEmitter {
  
            // If the data is up-to-date but don't have metadata (records loaded from dump),
            // we fetch them and validate the signature immediately.
@@ -1069,7 +1071,7 @@ index 99277f08cb..24f0ad6cff 100644
              const { metadata } = await this._fetchChangeset(
                expectedTimestamp,
                expectedTimestamp
-@@ -1075,62 +1076,29 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1064,62 +1065,29 @@ export class RemoteSettingsClient extends EventEmitter {
     *   The collection metadata, that contains the signature payload.
     */
    async validateCollectionSignature(records, timestamp, metadata) {
@@ -1145,7 +1147,7 @@ index 99277f08cb..24f0ad6cff 100644
    }
  
    /**
-@@ -1331,24 +1299,26 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1320,24 +1288,26 @@ export class RemoteSettingsClient extends EventEmitter {
     * @param since timestamp of last sync (optional)
     */
    async _fetchChangeset(expectedTimestamp, since) {
@@ -1189,10 +1191,10 @@ index 99277f08cb..24f0ad6cff 100644
        remoteRecords,
      };
 -- 
-2.54.0
+2.55.0
 
 
-From b8c260ab9261ab201e58deb24e4740b28ccd8a91 Mon Sep 17 00:00:00 2001
+From 78ef2066684fc0ec786b79f9429292b74309a4a9 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:42:56 +0200
 Subject: [PATCH 08/13] Client: start deferred sync on get() or on()
@@ -1210,11 +1212,11 @@ false, it triggers a sync. Then adds a flag if the client has been
 correctly synchronized with the dump, so that no metadata checking
 occurs during the session.
 ---
- .../settings/RemoteSettingsClient.sys.mjs     | 27 ++++++++++++++++++-
- 1 file changed, 26 insertions(+), 1 deletion(-)
+ .../settings/RemoteSettingsClient.sys.mjs     | 28 ++++++++++++++++++-
+ 1 file changed, 27 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 24f0ad6cff..5213fcbdd2 100644
+index ddc8bbfd68..41c06c025f 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -1225,15 +1227,16 @@ index 24f0ad6cff..5213fcbdd2 100644
    IDBHelpers: "resource://services-settings/IDBHelpers.sys.mjs",
    KintoHttpClient: "resource://services-common/kinto-http-client.sys.mjs",
    ObjectUtils: "resource://gre/modules/ObjectUtils.sys.mjs",
-@@ -25,6 +26,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
+@@ -24,6 +25,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
+   Utils: "resource://services-settings/Utils.sys.mjs",
  });
  
- const TELEMETRY_COMPONENT = "Remotesettings";
 +const DEFERRED_SYNC_DELAY_MILLISECONDS = 1000;
- 
++
  ChromeUtils.defineLazyGetter(lazy, "console", () => lazy.Utils.log);
  
-@@ -350,6 +352,11 @@ export class RemoteSettingsClient extends EventEmitter {
+ /**
+@@ -347,6 +350,11 @@ export class RemoteSettingsClient extends EventEmitter {
      this._lastCheckTimePref = lastCheckTimePref;
      this._verifier = null;
      this._syncRunning = false;
@@ -1245,7 +1248,7 @@ index 24f0ad6cff..5213fcbdd2 100644
  
      // This attribute allows signature verification to be disabled, when running tests
      // or when pulling data from a dev server.
-@@ -380,6 +387,11 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -377,6 +385,11 @@ export class RemoteSettingsClient extends EventEmitter {
      this.db.identifier = this.identifier;
    }
  
@@ -1257,7 +1260,7 @@ index 24f0ad6cff..5213fcbdd2 100644
    get identifier() {
      return `${this.bucketName}/${this.collectionName}`;
    }
-@@ -463,6 +475,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -460,6 +473,10 @@ export class RemoteSettingsClient extends EventEmitter {
        let lastModified = forceSync ? null : await this.db.getLastModified();
        let hasLocalData = lastModified !== null;
  
@@ -1268,7 +1271,7 @@ index 24f0ad6cff..5213fcbdd2 100644
        if (forceSync) {
          if (!this._importingPromise) {
            this._importingPromise = (async () => {
-@@ -612,7 +628,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -609,7 +626,10 @@ export class RemoteSettingsClient extends EventEmitter {
        // No need to verify signature on JSON dumps.
        // If local DB cannot be read, then we don't even try to do anything,
        // we return results early.
@@ -1280,7 +1283,7 @@ index 24f0ad6cff..5213fcbdd2 100644
      }
  
      if (this.verifySignature && verifySignature) {
-@@ -648,6 +667,12 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -645,6 +665,12 @@ export class RemoteSettingsClient extends EventEmitter {
      return final;
    }
  
@@ -1294,10 +1297,10 @@ index 24f0ad6cff..5213fcbdd2 100644
     * Synchronize the local database with the remote server.
     *
 -- 
-2.54.0
+2.55.0
 
 
-From 1909e876fd9f7279b01e84471c02c83214cbb5c2 Mon Sep 17 00:00:00 2001
+From fe5e778d4c5f793cce1aa53e386f51eeda42c470 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:53:51 +0200
 Subject: [PATCH 09/13] Client: deep compare records if timestamps match
@@ -1319,7 +1322,7 @@ noticeable performance issues.
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 5213fcbdd2..19a54575c7 100644
+index 41c06c025f..2bc791b0c8 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -10,6 +10,7 @@ import { Downloader } from "resource://services-settings/Attachments.sys.mjs";
@@ -1330,7 +1333,7 @@ index 5213fcbdd2..19a54575c7 100644
    ClientEnvironmentBase:
      "resource://gre/modules/components-utils/ClientEnvironment.sys.mjs",
    Database: "resource://services-settings/Database.sys.mjs",
-@@ -1299,7 +1300,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1289,7 +1290,10 @@ export class RemoteSettingsClient extends EventEmitter {
          const old = oldById.get(r.id);
          if (old) {
            oldById.delete(r.id);
@@ -1343,10 +1346,10 @@ index 5213fcbdd2..19a54575c7 100644
            }
          } else {
 -- 
-2.54.0
+2.55.0
 
 
-From a9038656fd1e55a066fdb7e117deddc2593e4b61 Mon Sep 17 00:00:00 2001
+From 6bfb7815da677093869b93f0112ffca708e7da18 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:01:39 +0200
 Subject: [PATCH 10/13] Client: delete more data on cleanup
@@ -1364,10 +1367,10 @@ logic gets the data about the attachments from those records.
  1 file changed, 8 insertions(+), 2 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 19a54575c7..bb02aadf7f 100644
+index 2bc791b0c8..0070f29b4c 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -1250,7 +1250,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1240,7 +1240,7 @@ export class RemoteSettingsClient extends EventEmitter {
            // Signature failed, clear local DB because it contains
            // bad data (local + remote changes).
            lazy.console.debug(`${this.identifier} clear local data`);
@@ -1376,7 +1379,7 @@ index 19a54575c7..bb02aadf7f 100644
            // Local data was tampered, throw and it will retry from empty DB.
            lazy.console.error(`${this.identifier} local data was corrupted`);
            throw new CorruptedDataError(this.identifier);
-@@ -1272,7 +1272,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1262,7 +1262,7 @@ export class RemoteSettingsClient extends EventEmitter {
              // _importJSONDump() only clears DB if dump is available,
              // therefore do it here!
              if (imported < 0) {
@@ -1385,7 +1388,7 @@ index 19a54575c7..bb02aadf7f 100644
              }
            }
          }
-@@ -1321,6 +1321,12 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1311,6 +1311,12 @@ export class RemoteSettingsClient extends EventEmitter {
      return syncResult;
    }
  
@@ -1399,10 +1402,10 @@ index 19a54575c7..bb02aadf7f 100644
     * Fetch information from changeset endpoint.
     *
 -- 
-2.54.0
+2.55.0
 
 
-From 9bbec41f1e03c320f3b0197e69804db255576238 Mon Sep 17 00:00:00 2001
+From b3b8ad4e74ede5b8ee208d638dc58dc2105b9a12 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:07:56 +0200
 Subject: [PATCH 11/13] Client: remove comparison of collection timestamps
@@ -1417,10 +1420,10 @@ necessary cleanup. So remove the checks.
  1 file changed, 19 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index bb02aadf7f..0ae4e078cf 100644
+index 0070f29b4c..7953afda0e 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -1193,25 +1193,6 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1183,25 +1183,6 @@ export class RemoteSettingsClient extends EventEmitter {
        `${this.identifier} local timestamp: ${localTimestamp}, remote: ${remoteTimestamp} (expected: ${expectedTimestamp})`
      );
  
@@ -1447,10 +1450,10 @@ index bb02aadf7f..0ae4e078cf 100644
        clear: retry,
      });
 -- 
-2.54.0
+2.55.0
 
 
-From 8ec49fc629ecd30d4a767568e307413807c69380 Mon Sep 17 00:00:00 2001
+From 44609050aa0018922922e6ce44e523b45294e5c2 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:15:44 +0200
 Subject: [PATCH 12/13] Attachments: load only from dump and drop cached
@@ -1539,10 +1542,10 @@ index e266cb4e0a..e79cc72dda 100644
  
    async _fetchAttachment(url) {
 -- 
-2.54.0
+2.55.0
 
 
-From 4632bd8444073349f0d8e1549ebe5d86ab895af9 Mon Sep 17 00:00:00 2001
+From da4bc73f0d23274958ad8086f6718a020cca4e14 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:22:20 +0200
 Subject: [PATCH 13/13] Disable CRLite entirely for now
@@ -1567,10 +1570,10 @@ certificate revocations.
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index b96e9d02be..99dbc49798 100644
+index 3d33f9916a..bc80c7fab4 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -18309,7 +18309,7 @@
+@@ -18565,7 +18565,7 @@
  #    security.OCSP.enable is 0).
  - name: security.pki.crlite_mode
    type: RelaxedAtomicUint32
@@ -1580,10 +1583,10 @@ index b96e9d02be..99dbc49798 100644
  
  # The CRLite filter channel to which the user is subscribed.
 diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp
-index 2903a8146b..587c01d178 100644
+index b160fbbda3..06adf92489 100644
 --- a/security/manager/ssl/nsNSSComponent.cpp
 +++ b/security/manager/ssl/nsNSSComponent.cpp
-@@ -1073,6 +1073,7 @@ void nsNSSComponent::setValidationOptions(
+@@ -1072,6 +1072,7 @@ void nsNSSComponent::setValidationOptions(
    CRLiteMode defaultCRLiteMode = CRLiteMode::Enforce;
    CRLiteMode crliteMode =
        static_cast<CRLiteMode>(StaticPrefs::security_pki_crlite_mode());
@@ -1592,5 +1595,5 @@ index 2903a8146b..587c01d178 100644
      case CRLiteMode::Disabled:
      case CRLiteMode::TelemetryOnly:
 -- 
-2.54.0
+2.55.0
 
diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index 32c67d2..cff6e08 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1,4 +1,4 @@
-From 6a398eb55fdaa2bd215b535d4fe1af37b54a5ac9 Mon Sep 17 00:00:00 2001
+From 9f62c07e0ae018d34331e27185757225a3b27ec7 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:09:05 +0300
 Subject: [PATCH 01/10] geolocation: Disable API and remove Google API URLs
@@ -23,10 +23,10 @@ default for now.
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index 99dbc49798..724aced1d6 100644
+index bc80c7fab4..b74ea07e41 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -6927,7 +6927,7 @@
+@@ -7057,7 +7057,7 @@
  # Is support for Navigator.geolocation enabled?
  - name: geo.enabled
    type: bool
@@ -36,7 +36,7 @@ index 99dbc49798..724aced1d6 100644
  
  # Time, in milliseconds, to wait for the location provider to spin up.
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index d186a3c705..9680e4fb69 100644
+index 7f57c5510c..f581ef2a8e 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
 @@ -3073,7 +3073,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
@@ -49,10 +49,10 @@ index d186a3c705..9680e4fb69 100644
    // Timeout to wait before sending the location request.
    pref("geo.provider.network.timeToWaitBeforeSending", 5000);
 -- 
-2.54.0
+2.55.0
 
 
-From 9f6808755a79773d29bcbe69871650a221cf4276 Mon Sep 17 00:00:00 2001
+From a23cc74b405d9731dd7635f2550f1f69e00a71d7 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:49:05 +0300
 Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
@@ -63,10 +63,10 @@ Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
  1 file changed, 8 insertions(+), 8 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 2b852e0225..c2863e7255 100644
+index d7f3045f1f..40a75ae096 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2556,7 +2556,7 @@ pref("browser.contentblocking.report.monitor.enabled", false);
+@@ -2558,7 +2558,7 @@ pref("browser.contentblocking.report.monitor.enabled", false);
  #endif
  
  // Disable the mobile promotion by default.
@@ -75,7 +75,7 @@ index 2b852e0225..c2863e7255 100644
  
  // Locales in which Send to Device emails are supported
  // The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963
-@@ -2586,7 +2586,7 @@ pref("browser.promo.pin.enabled", true);
+@@ -2588,7 +2588,7 @@ pref("browser.promo.pin.enabled", true);
  // Set to true for Fx113 (see bug 1808611)
  pref("browser.promo.cookiebanners.enabled", false);
  
@@ -84,7 +84,7 @@ index 2b852e0225..c2863e7255 100644
  pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA");
  
  pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections");
-@@ -2596,12 +2596,12 @@ pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.
+@@ -2598,12 +2598,12 @@ pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.
  pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard");
  pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients");
  pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true");
@@ -104,10 +104,10 @@ index 2b852e0225..c2863e7255 100644
  // Protection Report's SUMO urls
  pref("browser.contentblocking.report.lockwise.how_it_works.url", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/password-manager-report");
 -- 
-2.54.0
+2.55.0
 
 
-From 4e8d590f0b610940ae6a9b4cbbbd563faef1dda1 Mon Sep 17 00:00:00 2001
+From 30f692a294bc2fb4e8a3ad3dc2dfe1bb011ccbc8 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 03/10] Remove some references to AMO
@@ -148,7 +148,7 @@ Subject: [PATCH 03/10] Remove some references to AMO
  6 files changed, 31 insertions(+), 46 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index c2863e7255..c6d6a3da11 100644
+index 40a75ae096..d5afa0ab0d 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -23,7 +23,7 @@
@@ -188,7 +188,7 @@ index c2863e7255..c6d6a3da11 100644
  
  // At startup, should we check to see if the installation
  // date is older than some threshold
-@@ -2889,12 +2889,13 @@ pref("app.normandy.onsync_skew_sec", 600);
+@@ -2891,12 +2891,13 @@ pref("app.normandy.onsync_skew_sec", 600);
  //      the app and browser.
  #if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION)
    pref("intl.multilingual.enabled", true);
@@ -365,10 +365,10 @@ index 2f5b02eed2..0cc5708dcc 100644
  // Don't let XPIProvider install distribution add-ons; we do our own thing on mobile
  pref("extensions.installDistroAddons", false);
 diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle
-index ad28bfb8c8..80c6b1157e 100644
+index d867c71ba5..81ce21bf27 100644
 --- a/mobile/android/fenix/app/build.gradle
 +++ b/mobile/android/fenix/app/build.gradle
-@@ -80,7 +80,7 @@ android {
+@@ -75,7 +75,7 @@ android {
          buildConfigField "String", "AMO_COLLECTION_NAME", "\"Extensions-for-Android\""
          buildConfigField "String", "AMO_COLLECTION_USER", "\"mozilla\""
          // This should be the base URL used to call the AMO API.
@@ -378,7 +378,7 @@ index ad28bfb8c8..80c6b1157e 100644
          def deepLinkSchemeValue = "fenix-dev"
          buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\""
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 9680e4fb69..22e50d1c9a 100644
+index f581ef2a8e..b11dff1a1b 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
 @@ -1752,8 +1752,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
@@ -402,10 +402,10 @@ index 9680e4fb69..22e50d1c9a 100644
  // The URL for the privacy policy related to recommended add-ons.
  pref("extensions.recommendations.privacyPolicyUrl", "");
 -- 
-2.54.0
+2.55.0
 
 
-From 75926bf078e8b87510b110c2f6363f5e2dbec75a Mon Sep 17 00:00:00 2001
+From 18ff4093317d3528ca4d70eef28570988ab65f35 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Jun 2023 13:16:40 +0200
 Subject: [PATCH 04/10] Disable Contile and autoupdate of system addons
@@ -425,7 +425,7 @@ only free software, remove them from the source code.
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index c6d6a3da11..ba16758380 100644
+index d5afa0ab0d..002d7a71ca 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -52,8 +52,8 @@ pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox
@@ -439,7 +439,7 @@ index c6d6a3da11..ba16758380 100644
  
  // Disable add-ons that are not installed by the user in all scopes by default.
  // See the SCOPE constants in AddonManager.sys.mjs for values to use here.
-@@ -1808,8 +1808,8 @@ pref("browser.topsites.component.enabled", false);
+@@ -1823,8 +1823,8 @@ pref("browser.topsites.component.enabled", false);
  
  pref("browser.topsites.useRemoteSetting", true);
  // Fetch sponsored Top Sites from Mozilla Tiles Service (Contile)
@@ -451,10 +451,10 @@ index c6d6a3da11..ba16758380 100644
  // The base URL for the Quick Suggest anonymizing proxy. To make a request to
  // the proxy, include a campaign ID in the path.
 -- 
-2.54.0
+2.55.0
 
 
-From 12b4ae60c431d6a53e6f1071fa901b88e9590ebc Mon Sep 17 00:00:00 2001
+From 78518be3c980a4ec64c516acd2a309a32ba7681d Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 26 Sep 2023 21:27:34 +0200
 Subject: [PATCH 05/10] Disable Firefox Translations for now
@@ -504,10 +504,10 @@ probably has the same issues with the toolchain for the models.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index ba16758380..d21025e9c8 100644
+index 002d7a71ca..c647133d69 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2408,7 +2408,7 @@ pref("browser.translation.neverForLanguages", "");
+@@ -2410,7 +2410,7 @@ pref("browser.translation.neverForLanguages", "");
  
  // Enable Firefox translations powered by the Bergamot translations
  // engine https://browser.mt/.
@@ -517,10 +517,10 @@ index ba16758380..d21025e9c8 100644
  // Enable Firefox Select translations powered by Bergamot translations
  // engine https://browser.mt/.
 -- 
-2.54.0
+2.55.0
 
 
-From 4697bbfb56a96a4cf17289673eea0ec5cef20d65 Mon Sep 17 00:00:00 2001
+From 62b119ec39a9144fcf29c8a01d3fe95e68f7a079 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 12 Jun 2024 00:17:17 +0200
 Subject: [PATCH 06/10] Remove some references to Pocket and disable
@@ -551,10 +551,10 @@ this nonfunctional by default.
  13 files changed, 27 insertions(+), 40 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index d21025e9c8..b83a32f4a4 100644
+index c647133d69..26d2404747 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2067,6 +2067,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
+@@ -2082,6 +2082,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
  
  // The pref controls if search hand-off is enabled for Activity Stream.
  pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true);
@@ -564,10 +564,10 @@ index d21025e9c8..b83a32f4a4 100644
  pref("browser.newtabpage.activity-stream.logowordmark.alwaysVisible", true);
  
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
-index 2d669df4cb..309c230436 100644
+index b6cf5a11b3..4566b2af13 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
-@@ -30,7 +30,6 @@ const PREF_NOVA_ENABLED = "nova.enabled";
+@@ -31,7 +31,6 @@ const PREF_NOVA_ENABLED = "nova.enabled";
  const ALLOWED_CSS_URL_PREFIXES = [
    "chrome://",
    "resource://",
@@ -670,10 +670,10 @@ index 388cf808f4..8313a8ab43 100644
  
  A list of endpoints that are allowed to be used by Discovery Stream for remote content (eg: story metadata) and configuration (eg: remote layout definitions for experimentation).
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index d88bc01e9a..0d74e98031 100644
+index 571bb78def..9fbf508dd6 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -338,7 +338,7 @@ export const PREFS_CONFIG = new Map([
+@@ -345,7 +345,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsored",
      {
        title: "User pref for sponsored Pocket content",
@@ -682,7 +682,7 @@ index d88bc01e9a..0d74e98031 100644
      },
    ],
    [
-@@ -353,7 +353,7 @@ export const PREFS_CONFIG = new Map([
+@@ -360,7 +360,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsoredTopSites",
      {
        title: "Show sponsored top sites",
@@ -691,7 +691,7 @@ index d88bc01e9a..0d74e98031 100644
      },
    ],
    [
-@@ -1473,7 +1473,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1558,7 +1558,7 @@ export const PREFS_CONFIG = new Map([
        title:
          "Endpoint prefixes (comma-separated) that are allowed to be requested",
        value:
@@ -700,7 +700,7 @@ index d88bc01e9a..0d74e98031 100644
      },
    ],
    [
-@@ -1511,7 +1511,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1596,7 +1596,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Endpoint for when a user opts-out of sponsored content to delete the user's data from the ad server.",
@@ -709,7 +709,7 @@ index d88bc01e9a..0d74e98031 100644
      },
    ],
    [
-@@ -1692,7 +1692,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1791,7 +1791,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "'Support Firefox' pref on 'about:settings#home' page. Toggles all sponsored results on and off at the same time",
@@ -750,10 +750,10 @@ index 6da2e6e5ee..52385da789 100644
                url: "https://www.mozilla.org/privacy/firefox/#recommend-relevant-content",
                title: {
 diff --git a/browser/extensions/newtab/lib/SectionsManager.sys.mjs b/browser/extensions/newtab/lib/SectionsManager.sys.mjs
-index 8225d3857b..7c1a2b2be8 100644
+index 36dbeb3d4d..14556f59f6 100644
 --- a/browser/extensions/newtab/lib/SectionsManager.sys.mjs
 +++ b/browser/extensions/newtab/lib/SectionsManager.sys.mjs
-@@ -58,7 +58,7 @@ const BUILT_IN_SECTIONS = () => ({
+@@ -59,7 +59,7 @@ const BUILT_IN_SECTIONS = () => ({
        ],
        learnMore: {
          link: {
@@ -762,7 +762,7 @@ index 8225d3857b..7c1a2b2be8 100644
            id: "home-prefs-recommended-by-learn-more",
          },
        },
-@@ -71,7 +71,7 @@ const BUILT_IN_SECTIONS = () => ({
+@@ -72,7 +72,7 @@ const BUILT_IN_SECTIONS = () => ({
      },
      learnMore: {
        link: {
@@ -801,7 +801,7 @@ index 3db458069b..45e4ac26b7 100644
           * Returns a new instance of [PocketEndpointRaw].
           *
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
-index 63cee0ad25..7725c8cdb4 100644
+index d27d1f0063..dfe54e198a 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 @@ -21,12 +21,12 @@ import java.util.Locale
@@ -824,10 +824,10 @@ index 63cee0ad25..7725c8cdb4 100644
      const val ANDROID_SUPPORT_SUMO_URL = "mzl.la/AndroidSupport"
      const val RELAY_MANAGE_URL = "https://relay.firefox.com"
 -- 
-2.54.0
+2.55.0
 
 
-From ec97ffe8adac532e68f0e06dace54808ee64b258 Mon Sep 17 00:00:00 2001
+From eaf1b8a7321888a98929aed06f0c54948324fc3b Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 19:19:31 +0200
 Subject: [PATCH 07/10] Disable experimental Machine Learning support
@@ -870,7 +870,7 @@ localhost and enable the feature if needed.
  14 files changed, 29 insertions(+), 569 deletions(-)
 
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 22e50d1c9a..a75bb8dc37 100644
+index b11dff1a1b..c129f942c8 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
 @@ -3642,11 +3642,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
@@ -1364,10 +1364,10 @@ index b8fae83dd0..483c14e7e8 100644
    let results = [];
  
 diff --git a/toolkit/components/ml/content/EngineProcess.sys.mjs b/toolkit/components/ml/content/EngineProcess.sys.mjs
-index 19384465b7..cc92db67bb 100644
+index 025d5aaacf..1fdebbdbb8 100644
 --- a/toolkit/components/ml/content/EngineProcess.sys.mjs
 +++ b/toolkit/components/ml/content/EngineProcess.sys.mjs
-@@ -237,18 +237,12 @@ class PipelineOptionsValidationError extends Error {
+@@ -241,18 +241,12 @@ class PipelineOptionsValidationError extends Error {
   * @enum {string}
   */
  export const ModelHub = {
@@ -1541,7 +1541,7 @@ index c3c8069e76..ca5d7eda14 100644
  });
  
 diff --git a/toolkit/components/ml/tests/browser/browser_ml_static_embeddings.js b/toolkit/components/ml/tests/browser/browser_ml_static_embeddings.js
-index 62788e9637..4b7a16b37d 100644
+index ac950b9a36..82801ffcfa 100644
 --- a/toolkit/components/ml/tests/browser/browser_ml_static_embeddings.js
 +++ b/toolkit/components/ml/tests/browser/browser_ml_static_embeddings.js
 @@ -47,9 +47,9 @@ function getMockedValues() {
@@ -1730,10 +1730,10 @@ index eb2a2cf35d..e5f120fd0a 100644
          engineIds: [],
        },
 -- 
-2.54.0
+2.55.0
 
 
-From e81d26ca2c5f0002c5b383e26f191e8c43e95044 Mon Sep 17 00:00:00 2001
+From 203bea547e9033d26a8807e4beb6d641c13202e1 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 22 Jul 2025 20:46:59 +0000
 Subject: [PATCH 08/10] Ensure 'Suggest more of my tabs' feature disabled
@@ -1748,10 +1748,10 @@ introducing them to pacman repositories.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index b83a32f4a4..1eac6a6c70 100644
+index 26d2404747..d81abc64c7 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1094,7 +1094,7 @@ pref("browser.tabs.groups.enabled", true);
+@@ -1105,7 +1105,7 @@ pref("browser.tabs.groups.enabled", true);
  pref("browser.tabs.groups.hoverPreview.enabled", true);
  pref("browser.tabs.groups.alternateMenu", false);
  
@@ -1761,26 +1761,31 @@ index b83a32f4a4..1eac6a6c70 100644
  pref("browser.tabs.notes.enabled", false);
  
 -- 
-2.54.0
+2.55.0
 
 
-From b01d92c5e7f891563d77692f6669f925c040f974 Mon Sep 17 00:00:00 2001
+From a1c6759c0f3950e212ce2807dfddbc29881f4556 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 9 Mar 2026 16:58:34 +0100
 Subject: [PATCH 09/10] Block and hide AI Controls in Preferences
 
 Please see the previous patches for the reasons.
 ---
- browser/app/profile/firefox.js                     |  2 +-
- .../en-US/browser/preferences/preferences.ftl      |  2 +-
- modules/libpref/init/all.js                        | 14 +++++++-------
- 3 files changed, 9 insertions(+), 9 deletions(-)
+ browser/app/profile/firefox.js                |  4 +-
+ .../ai-website-confirmation.stories.mjs       | 59 +------------------
+ .../ai-website-select.stories.mjs             |  8 +--
+ .../smartwindow-topsites.stories.mjs          | 15 -----
+ .../test_website_confirmation_page.html       | 35 +----------
+ .../browser/test_website_select_page.html     | 23 --------
+ .../en-US/browser/preferences/preferences.ftl |  2 +-
+ modules/libpref/init/all.js                   | 14 ++---
+ 8 files changed, 13 insertions(+), 147 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 1eac6a6c70..8ef7a9b34a 100644
+index d81abc64c7..01dbd07e0c 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1399,7 +1399,7 @@ pref("browser.preferences.experimental.hidden", false);
+@@ -1409,7 +1409,7 @@ pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
  pref("browser.preferences.moreFromMozilla", true);
  // Whether we show the "AI Controls" pane.
@@ -1789,7 +1794,7 @@ index 1eac6a6c70..8ef7a9b34a 100644
  // Whether to show unavailable AI controls regardless of region/locale
  // restrictions. This is intended for localizers to be able to see the strings.
  pref("browser.preferences.aiControls.showUnavailable", false);
-@@ -2214,7 +2214,7 @@ pref("sidebar.updatedBookmarks.enabled", false);
+@@ -2226,7 +2226,7 @@ pref("sidebar.openTabsPanel.enabled", false);
  
  pref("sidebar.notification.badge.aichat", false);
  
@@ -1798,44 +1803,6 @@ index 1eac6a6c70..8ef7a9b34a 100644
  pref("browser.ml.chat.hideLocalhost", true);
  pref("browser.ml.chat.maxLength", 7000);
  pref("browser.ml.chat.menu", true);
-diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 50904cb360..8c25c7bf3f 100644
---- a/browser/locales/en-US/browser/preferences/preferences.ftl
-+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -2554,7 +2554,7 @@ preferences-ai-controls-key-points-control =
- 
- preferences-ai-controls-sidebar-chatbot-group =
-     .label = AI chatbot providers in sidebar
--    .description = Keep a chatbot in view as you browse. Choose from Anthropic Claude, ChatGPT, Copilot, Google Gemini, and Le Chat Mistral.
-+    .description = Keep a chatbot in view as you browse.
- 
- preferences-ai-controls-sidebar-chatbot-control =
-     .label = Chatbot in sidebar
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index a75bb8dc37..c372d42770 100644
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -3633,13 +3633,13 @@ pref("browser.translations.chaos.errors", false);
- pref("browser.translations.chaos.timeoutMS", 0);
- 
- // AI controls
--pref("browser.ai.control.default", "available");
--pref("browser.ai.control.translations", "default");
--pref("browser.ai.control.pdfjsAltText", "default");
--pref("browser.ai.control.smartTabGroups", "default");
--pref("browser.ai.control.linkPreviewKeyPoints", "default");
--pref("browser.ai.control.sidebarChatbot", "default");
--pref("browser.ai.control.smartWindow", "default");
-+pref("browser.ai.control.default", "blocked");
-+pref("browser.ai.control.translations", "blocked");
-+pref("browser.ai.control.pdfjsAltText", "blocked");
-+pref("browser.ai.control.smartTabGroups", "blocked");
-+pref("browser.ai.control.linkPreviewKeyPoints", "blocked");
-+pref("browser.ai.control.sidebarChatbot", "blocked");
-+pref("browser.ai.control.smartWindow", "blocked");
- 
- // Enable the experimental machine learning inference engine.
- pref("browser.ml.enable", false);
 diff --git a/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs b/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs
 index 1559f95d9a..3ceb056a1a 100644
 --- a/browser/components/aiwindow/ui/components/ai-website-confirmation/ai-website-confirmation.stories.mjs
@@ -1920,6 +1887,32 @@ index 721d882cc6..d284256585 100644
 -  checked: false,
 -};
 +Default.args = { };
+diff --git a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
+index c8620d9ef5..9f0416f2e7 100644
+--- a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
++++ b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
+@@ -25,21 +25,6 @@ const sampleSites = [
+     label: "Wikipedia",
+     favicon: "https://www.wikipedia.org/static/favicon/wikipedia.ico",
+   },
+-  {
+-    url: "https://www.youtube.com/",
+-    label: "YouTube",
+-    favicon: "https://www.youtube.com/favicon.ico",
+-  },
+-  {
+-    url: "https://apnews.com/",
+-    label: "AP News",
+-    favicon: "https://apnews.com/favicon.ico",
+-  },
+-  {
+-    url: "https://www.reddit.com/",
+-    label: "Reddit",
+-    favicon: "https://www.reddit.com/favicon.ico",
+-  },
+ ];
+ 
+ const Template = ({ sites }) => html`
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
 index 5c46cb8662..da0cb449c4 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
@@ -1966,32 +1959,6 @@ index 5c46cb8662..da0cb449c4 100644
  
          const allCheckedConfirmation = document.getElementById("test-confirmation-all-checked");
          allCheckedConfirmation.tabs = [
-diff --git a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
-index c8620d9ef5..9f0416f2e7 100644
---- a/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
-+++ b/browser/components/aiwindow/ui/components/smartwindow-topsites/smartwindow-topsites.stories.mjs
-@@ -25,21 +25,6 @@ const sampleSites = [
-     label: "Wikipedia",
-     favicon: "https://www.wikipedia.org/static/favicon/wikipedia.ico",
-   },
--  {
--    url: "https://www.youtube.com/",
--    label: "YouTube",
--    favicon: "https://www.youtube.com/favicon.ico",
--  },
--  {
--    url: "https://apnews.com/",
--    label: "AP News",
--    favicon: "https://apnews.com/favicon.ico",
--  },
--  {
--    url: "https://www.reddit.com/",
--    label: "Reddit",
--    favicon: "https://www.reddit.com/favicon.ico",
--  },
- ];
- 
- const Template = ({ sites }) => html`
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
 index 63416ca020..6825c62fb8 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
@@ -2025,32 +1992,70 @@ index 63416ca020..6825c62fb8 100644
 -    </ai-website-select>
    </body>
  </html>
+diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
+index 390ede774d..86c6c62f34 100644
+--- a/browser/locales/en-US/browser/preferences/preferences.ftl
++++ b/browser/locales/en-US/browser/preferences/preferences.ftl
+@@ -2458,7 +2458,7 @@ preferences-ai-controls-key-points-control =
+ 
+ preferences-ai-controls-sidebar-chatbot-group =
+     .label = AI chatbot providers in sidebar
+-    .description = Keep a chatbot in view as you browse. Choose from Anthropic Claude, ChatGPT, Copilot, Google Gemini, and Le Chat Mistral.
++    .description = Keep a chatbot in view as you browse.
+ 
+ preferences-ai-controls-sidebar-chatbot-control =
+     .label = Chatbot in sidebar
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index c129f942c8..88a0f08fbe 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -3633,13 +3633,13 @@ pref("browser.translations.chaos.errors", false);
+ pref("browser.translations.chaos.timeoutMS", 0);
+ 
+ // AI controls
+-pref("browser.ai.control.default", "available");
+-pref("browser.ai.control.translations", "default");
+-pref("browser.ai.control.pdfjsAltText", "default");
+-pref("browser.ai.control.smartTabGroups", "default");
+-pref("browser.ai.control.linkPreviewKeyPoints", "default");
+-pref("browser.ai.control.sidebarChatbot", "default");
+-pref("browser.ai.control.smartWindow", "default");
++pref("browser.ai.control.default", "blocked");
++pref("browser.ai.control.translations", "blocked");
++pref("browser.ai.control.pdfjsAltText", "blocked");
++pref("browser.ai.control.smartTabGroups", "blocked");
++pref("browser.ai.control.linkPreviewKeyPoints", "blocked");
++pref("browser.ai.control.sidebarChatbot", "blocked");
++pref("browser.ai.control.smartWindow", "blocked");
+ 
+ // Enable the experimental machine learning inference engine.
+ pref("browser.ml.enable", false);
 -- 
-2.54.0
+2.55.0
 
 
-From f1116883ad14c8302e8f90fc39b98133aa0ba536 Mon Sep 17 00:00:00 2001
+From be301d2e340b1ccef828b9b237aea4342328332a Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 16 Sep 2024 01:49:27 +0200
-Subject: [PATCH 10/10] Wipe Merino hostname, disable Weather & Yelp
+Subject: [PATCH 10/10] Wipe Merino hostname. Disable Weather, Yelp, Sports
+ widget
 
 Merino is yet another source of suggestions, which can steer users
 towards installing nonfree software and/or other information for
 practical use. In this case, suggestions can contain links to websites
 of various providers, such as weather, Yelp, etc., which can serve, for
 example, nonfree JavaScript code. So remove Merino hostname and disable
-suggestions for Weather and Yelp since Iceweasel doesn't ship any
-providers for these.
+suggestions for Weather, Yelp, and Sports witget since Iceweasel
+doesn't ship any providers for these.
 ---
  browser/app/profile/firefox.js                | 30 ++++++++---------
  .../aiwindow/models/WCSMerinoClient.sys.mjs   |  2 +-
  .../quicksuggest/MerinoTestUtils.sys.mjs      |  2 +-
  .../CardSections/CardSections.jsx             |  2 +-
- .../newtab/lib/ActivityStream.sys.mjs         |  8 ++---
+ .../newtab/lib/ActivityStream.sys.mjs         | 14 ++++----
  .../CardSections.test.jsx                     |  6 ++--
  .../CardSections.test.jsx                     |  6 ++--
  .../test/unit/lib/DiscoveryStreamFeed.test.js |  2 +-
- .../newtab/test/xpcshell/test_SportsFeed.js   | 20 ++++++------
  .../newtab/test/xpcshell/topstories.json      |  2 +-
  docs/rust-components/topic-guides/merino.md   | 32 +++++++++----------
  .../components/browser/icons/IconRequest.kt   |  2 --
@@ -2071,13 +2076,13 @@ providers for these.
  .../components/viaduct/src/ohttp.rs           |  8 ++---
  .../examples/merino-cli/src/main.rs           |  4 +--
  .../examples/viaduct-cli/src/main.rs          |  2 +-
- 29 files changed, 109 insertions(+), 121 deletions(-)
+ 28 files changed, 102 insertions(+), 114 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 8ef7a9b34a..8434fca4a3 100644
+index 01dbd07e0c..5d232d951b 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -484,7 +484,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
+@@ -487,7 +487,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
  
  // If `browser.urlbar.weather.featureGate` is true, this controls whether
  // weather suggestions are turned on.
@@ -2086,7 +2091,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // If `browser.urlbar.trending.featureGate` is true, this controls whether
  // trending suggestions are turned on.
-@@ -681,13 +681,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
+@@ -684,13 +684,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
  pref("browser.urlbar.groupLabels.enabled", true);
  
  // The Merino endpoint URL, not including parameters.
@@ -2103,7 +2108,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // Timeout for Merino fetches (ms).
  pref("browser.urlbar.merino.timeoutMs", 500);
-@@ -696,8 +696,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
+@@ -699,8 +699,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
  pref("browser.urlbar.merino.providers", "");
  
  // Merino endpoint prefs to be used for weather widgets
@@ -2114,7 +2119,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // Comma-separated list of client variants to send to Merino
  pref("browser.urlbar.merino.clientVariants", "");
-@@ -738,7 +738,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
+@@ -749,7 +749,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
  
  // If `browser.urlbar.mdn.featureGate` is true, this controls whether
  // mdn suggestions are turned on.
@@ -2123,7 +2128,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // Feature gate pref for Yelp suggestions in the urlbar.
  pref("browser.urlbar.yelp.featureGate", false);
-@@ -760,7 +760,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
+@@ -771,7 +771,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
  
  // If `browser.urlbar.yelp.featureGate` is true, this controls whether
  // Yelp suggestions are turned on.
@@ -2132,7 +2137,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // Feature gate pref for Fakespot suggestions in the urlbar.
  // TODO Bug 1982966: Remove this after all experiments and rollouts using it
-@@ -1864,7 +1864,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
+@@ -1879,7 +1879,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
  pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true);
  
  // Weather widget for newtab
@@ -2141,7 +2146,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  pref("browser.newtabpage.activity-stream.weather.query", "");
  pref("browser.newtabpage.activity-stream.weather.display", "detailed");
  
-@@ -1874,10 +1874,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
+@@ -1889,10 +1889,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
  pref("browser.newtabpage.activity-stream.weather.locationSearchEnabled", true);
  
  // List of regions that get weather by default.
@@ -2154,7 +2159,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  
  // Promo card visibility
  pref("browser.newtabpage.activity-stream.discoverystream.promoCard.visible", true);
-@@ -2022,10 +2022,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
+@@ -2037,10 +2037,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
  // List of locales for contextual ads.
  pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.locale-config", "en-US,en-GB,en-CA");
  
@@ -2168,7 +2173,7 @@ index 8ef7a9b34a..8434fca4a3 100644
  pref("browser.newtabpage.activity-stream.discoverystream.imageProxy.enabled", true);
  
  // List of regions that get spocs by default.
-@@ -2274,7 +2274,7 @@ pref("browser.smartwindow.allowTables", true);
+@@ -2281,7 +2281,7 @@ pref("places.semanticHistory.smartwindow.featureGate", false);
  
  // Smart Window: Merino World Cup Soccer tool call (bug 2038266)
  pref("browser.smartwindow.worldcup.enabled", true);
@@ -2204,7 +2209,7 @@ index fc8ca65216..06c3492aac 100644
        score: 0,
        custom_details: {
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-index 5a9a884a6a..0aa155380c 100644
+index 976a12f8e9..3ae55c6095 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 @@ -50,7 +50,7 @@ const PREF_NOVA_ENABLED = "nova.enabled";
@@ -2217,10 +2222,10 @@ index 5a9a884a6a..0aa155380c 100644
  // Divides evenly by 2, 3, and 4 to avoid orphan cards in any column layout.
  const DEFAULT_MAX_TILES = 12;
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index 0d74e98031..e4ab54cbbf 100644
+index 9fbf508dd6..74dd05b190 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -528,7 +528,7 @@ export const PREFS_CONFIG = new Map([
+@@ -535,7 +535,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the weather report",
@@ -2229,7 +2234,7 @@ index 0d74e98031..e4ab54cbbf 100644
      },
    ],
    [
-@@ -537,21 +537,21 @@ export const PREFS_CONFIG = new Map([
+@@ -544,28 +544,28 @@ export const PREFS_CONFIG = new Map([
        title:
          "Temporary measure for trainhopping. This adds the Merino endpoint for the hourly forecasts to display in Weather Forecast widget",
        value:
@@ -2254,6 +2259,32 @@ index 0d74e98031..e4ab54cbbf 100644
      },
    ],
    [
+     "sports.worldCup.liveEndpoint",
+     {
+       title: "The Merino endpoint for fetching live World Cup match data",
+-      value: "https://merino.services.mozilla.com/api/v1/wcs/live",
++      value: "",
+     },
+   ],
+   [
+@@ -573,7 +573,7 @@ export const PREFS_CONFIG = new Map([
+     {
+       title:
+         "The Merino endpoint for fetching World Cup watch-live broadcaster data",
+-      value: "https://merino.services.mozilla.com/api/v1/wcs/watch-links",
++      value: "",
+     },
+   ],
+   [
+@@ -1385,7 +1385,7 @@ export const PREFS_CONFIG = new Map([
+     "widgets.sportsWidget.enabled",
+     {
+       title: "Enables the sports widget",
+-      value: true,
++      value: false,
+     },
+   ],
+   [
 diff --git a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 index 1a9f055057..456e1493e8 100644
 --- a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
@@ -2329,76 +2360,6 @@ index 5c00b10a20..90a7556497 100644
            data: {
              sections: [
                {
-diff --git a/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js b/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
-index 38a79a3b1e..558fc86be2 100644
---- a/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
-+++ b/browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
-@@ -24,7 +24,7 @@ function makeFeed({ enabled = true, systemEnabled = true } = {}) {
-         values: {
-           [PREF_SPORTS_ENABLED]: enabled,
-           [PREF_SYSTEM_SPORTS_ENABLED]: systemEnabled,
--          "discoverystream.endpoints": "https://merino.services.mozilla.com/",
-+          "discoverystream.endpoints": "",
-         },
-       },
-     },
-@@ -311,9 +311,9 @@ add_task(async function test_fetchSportsData_dispatches_teams_and_matches() {
-   sinon.stub(feed.merino, "fetchSportsMatches").resolves(mockMatches);
- 
-   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/teams";
-+    "";
-   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/matches";
-+    "";
- 
-   info(
-     "fetchSportsData should dispatch WIDGETS_SPORTS_WIDGET_SET with teams and matches"
-@@ -341,9 +341,9 @@ add_task(async function test_fetchSportsData_dispatches_teams_and_matches() {
- 
- add_task(async function test_fetchSportsData_reads_endpoint_prefs() {
-   const feed = makeFeed();
--  const teamsEndpoint = "https://merino.services.mozilla.com/api/v1/wcs/teams";
-+  const teamsEndpoint = "";
-   const matchesEndpoint =
--    "https://merino.services.mozilla.com/api/v1/wcs/matches";
-+    "";
- 
-   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
-     teamsEndpoint;
-@@ -375,7 +375,7 @@ add_task(
-     const trainhopMatchesEndpoint = "https://trainhop.example.com/matches";
- 
-     feed.store.state.Prefs.values["discoverystream.endpoints"] =
--      "https://merino.services.mozilla.com/,https://trainhop.example.com/";
-+      "";
-     feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
-       "https://pref.example.com/teams";
-     feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
-@@ -447,9 +447,9 @@ add_task(async function test_fetchSportsData_caches_teams_and_matches() {
-   sinon.stub(feed.merino, "fetchSportsMatches").resolves(mockMatches);
- 
-   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/teams";
-+    "";
-   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/matches";
-+    "";
- 
-   const setStub = sinon.stub(feed.cache, "set").resolves();
- 
-@@ -472,9 +472,9 @@ add_task(async function test_fetchSportsData_blocks_disallowed_endpoints() {
-   feed.store.state.Prefs.values["discoverystream.endpoints"] =
-     "https://allowed.example.com/";
-   feed.store.state.Prefs.values["sports.worldCup.teamsEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/teams";
-+    "";
-   feed.store.state.Prefs.values["sports.worldCup.matchesEndpoint"] =
--    "https://merino.services.mozilla.com/api/v1/wcs/matches";
-+    "";
- 
-   const teamsStub = sinon.stub(feed.merino, "fetchSportsTeams").resolves([]);
-   const matchesStub = sinon
 diff --git a/browser/extensions/newtab/test/xpcshell/topstories.json b/browser/extensions/newtab/test/xpcshell/topstories.json
 index e4e82bcb03..948c6e8d20 100644
 --- a/browser/extensions/newtab/test/xpcshell/topstories.json
@@ -2413,7 +2374,7 @@ index e4e82bcb03..948c6e8d20 100644
        "receivedRank": 0,
        "features": { "t_business": 1.0 }
 diff --git a/docs/rust-components/topic-guides/merino.md b/docs/rust-components/topic-guides/merino.md
-index 5c35861646..633250ee61 100644
+index 3c91b0350f..89f6f75b5a 100644
 --- a/docs/rust-components/topic-guides/merino.md
 +++ b/docs/rust-components/topic-guides/merino.md
 @@ -5,7 +5,7 @@ myst:
@@ -2425,7 +2386,7 @@ index 5c35861646..633250ee61 100644
  
  - **`CuratedRecommendationsClient`** — Fetches personalized content recommendations, powering features like Firefox's New Tab page.
  - **`SuggestClient`** — Fetches search suggestions, powering features like Firefox's address bar.
-@@ -25,8 +25,8 @@ import mozilla.appservices.viaduct.configureOhttpChannel
+@@ -26,8 +26,8 @@ import mozilla.appservices.viaduct.configureOhttpChannel
  configureOhttpChannel(
      channel = "merino",
      config = OhttpConfig(
@@ -2436,7 +2397,7 @@ index 5c35861646..633250ee61 100644
      ),
  )
  ```
-@@ -34,8 +34,8 @@ configureOhttpChannel(
+@@ -35,8 +35,8 @@ configureOhttpChannel(
  ```swift
  // Configure the OHTTP channel before using SuggestClient
  let config = OhttpConfig(
@@ -2447,7 +2408,7 @@ index 5c35861646..633250ee61 100644
  )
  try configureOhttpChannel(channelId: "merino", config: config)
  ```
-@@ -49,7 +49,7 @@ All clients are synchronous — calling them directly will block the current thr
+@@ -51,7 +51,7 @@ All clients are synchronous — calling them directly will block the current thr
  
  ## Curated Recommendations Client
  
@@ -2456,7 +2417,7 @@ index 5c35861646..633250ee61 100644
  
  The API for the `CuratedRecommendationsClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-curated-recommendations-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/CuratedRecommendationsClient.html).
  
-@@ -78,7 +78,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
+@@ -81,7 +81,7 @@ The `CuratedRecommendationsClient` is initialized using a `CuratedRecommendation
  ```kotlin
  
  val config = CuratedRecommendationsConfig(
@@ -2465,7 +2426,7 @@ index 5c35861646..633250ee61 100644
      userAgentHeader = "Mozilla/5.0"
  )
  
-@@ -89,7 +89,7 @@ val client = CuratedRecommendationsClient(config)
+@@ -92,7 +92,7 @@ val client = CuratedRecommendationsClient(config)
  ```swift
  
  let config = CuratedRecommendationsConfig(
@@ -2474,7 +2435,7 @@ index 5c35861646..633250ee61 100644
      userAgentHeader: "Mozilla/5.0"
  )
  
-@@ -238,7 +238,7 @@ func fetchCuratedRecommendations() {
+@@ -243,7 +243,7 @@ func fetchCuratedRecommendations() {
  
  ## Suggest Client
  
@@ -2483,7 +2444,7 @@ index 5c35861646..633250ee61 100644
  
  The API for the `SuggestClient` can be found in the Mozilla Rust components [Kotlin API Reference](https://mozilla.github.io/application-services/kotlin/kotlin-components-docs/mozilla.appservices.merino/-suggest-client/index.html) and [Swift API Reference](https://mozilla.github.io/application-services/swift/Classes/SuggestClient.html).
  
-@@ -266,7 +266,7 @@ The `SuggestClient` is initialized using a `SuggestConfig` object with an option
+@@ -273,7 +273,7 @@ The `SuggestClient` is initialized using a `SuggestConfig` object with an option
  ```kotlin
  
  val config = SuggestConfig(
@@ -2492,7 +2453,7 @@ index 5c35861646..633250ee61 100644
  )
  
  val client = SuggestClient(config)
-@@ -275,7 +275,7 @@ val client = SuggestClient(config)
+@@ -282,7 +282,7 @@ val client = SuggestClient(config)
  
  ```swift
  
@@ -2501,7 +2462,7 @@ index 5c35861646..633250ee61 100644
  
  let client = try SuggestClient(config: config)
  
-@@ -338,7 +338,7 @@ do {
+@@ -348,7 +348,7 @@ do {
  
  | **Field** | **Type** | **Description** |
  |-----------|---------|----------------|
@@ -2510,7 +2471,7 @@ index 5c35861646..633250ee61 100644
  
  ### SuggestOptions
  
-@@ -357,7 +357,7 @@ All fields are optional — omitted fields are not sent to Merino.
+@@ -367,7 +367,7 @@ All fields are optional — omitted fields are not sent to Merino.
  
  ### Response
  
@@ -2519,7 +2480,7 @@ index 5c35861646..633250ee61 100644
  
  ## Error Handling
  
-@@ -447,7 +447,7 @@ The `WorldCupClient` is initialized using a `WorldCupConfig` object with an opti
+@@ -461,7 +461,7 @@ The `WorldCupClient` is initialized using a `WorldCupConfig` object with an opti
  ```kotlin
  
  val config = WorldCupConfig(
@@ -2528,7 +2489,7 @@ index 5c35861646..633250ee61 100644
  )
  
  val client = WorldCupClient(config)
-@@ -456,7 +456,7 @@ val client = WorldCupClient(config)
+@@ -470,7 +470,7 @@ val client = WorldCupClient(config)
  
  ```swift
  
@@ -2537,7 +2498,7 @@ index 5c35861646..633250ee61 100644
  
  let client = try WorldCupClient(config: config)
  
-@@ -515,7 +515,7 @@ do {
+@@ -532,7 +532,7 @@ do {
  
  | **Field** | **Type** | **Description** |
  |-----------|---------|----------------|
@@ -2560,7 +2521,7 @@ index daba47117f..604c19c762 100644
              MERINO_MANIFEST,
  
 diff --git a/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt b/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
-index 5d951c4fae..869b64ee4a 100644
+index 5d951c4fae..add38add25 100644
 --- a/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
 +++ b/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/client/SuggestMerinoClient.kt
 @@ -70,7 +70,7 @@ class SuggestMerinoClient : MerinoClient {
@@ -2633,7 +2594,7 @@ index a177ae9a99..52b4ee18df 100644
   * @property scheduledCorpusItemId The ID of the scheduled corpus item for this recommendation.
   * @property url The url of the recommendation.
 diff --git a/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py b/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
-index 743f2ba9fd..4892d71676 100644
+index 743f2ba9fd..f6ffc3da49 100644
 --- a/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
 +++ b/taskcluster/docker/periodic-updates/scripts/update_mobile_merino_manifest.py
 @@ -17,7 +17,7 @@ import certifi
@@ -2646,7 +2607,7 @@ index 743f2ba9fd..4892d71676 100644
      buildconfig.topsrcdir,
      "mobile/android/android-components/components/service/merino-manifest/src/main/assets/manifest/manifest.json",
 diff --git a/third_party/application-services/components/merino/README.md b/third_party/application-services/components/merino/README.md
-index 63f8fd33bf..77bb4543f9 100644
+index 63f8fd33bf..08b22f5a95 100644
 --- a/third_party/application-services/components/merino/README.md
 +++ b/third_party/application-services/components/merino/README.md
 @@ -1,6 +1,6 @@
@@ -2658,7 +2619,7 @@ index 63f8fd33bf..77bb4543f9 100644
  ## Testing
  
 diff --git a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
-index d1421e2375..59941e4be9 100644
+index d1421e2375..481882362f 100644
 --- a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
 +++ b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
 @@ -25,7 +25,7 @@ use error_support::handle_error;
@@ -2671,7 +2632,7 @@ index d1421e2375..59941e4be9 100644
  /// Client for fetching curated recommendations from the Merino service.
  ///
 diff --git a/third_party/application-services/components/merino/src/curated_recommendations/tests.rs b/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
-index 07c54a10a4..d359d5572d 100644
+index 07c54a10a4..aec0e4433e 100644
 --- a/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
 +++ b/third_party/application-services/components/merino/src/curated_recommendations/tests.rs
 @@ -48,7 +48,7 @@ impl http::HttpClientTrait for FakeHttpClientSuccess {
@@ -2783,7 +2744,7 @@ index 07c54a10a4..d359d5572d 100644
          .unwrap();
  
 diff --git a/third_party/application-services/components/merino/src/suggest/http.rs b/third_party/application-services/components/merino/src/suggest/http.rs
-index e24971485e..9651b46b3e 100644
+index e24971485e..8bbcd088d2 100644
 --- a/third_party/application-services/components/merino/src/suggest/http.rs
 +++ b/third_party/application-services/components/merino/src/suggest/http.rs
 @@ -108,7 +108,7 @@ impl HttpClientTrait for HttpClient {
@@ -2805,7 +2766,7 @@ index e24971485e..9651b46b3e 100644
              &country=US\
              &region=CA\
 diff --git a/third_party/application-services/components/merino/src/suggest/mod.rs b/third_party/application-services/components/merino/src/suggest/mod.rs
-index f06ee0e015..b663d76ea1 100644
+index f06ee0e015..65e55b8dca 100644
 --- a/third_party/application-services/components/merino/src/suggest/mod.rs
 +++ b/third_party/application-services/components/merino/src/suggest/mod.rs
 @@ -14,7 +14,7 @@ use url::Url;
@@ -2818,7 +2779,7 @@ index f06ee0e015..b663d76ea1 100644
  /// A client for the merino suggest endpoint.
  ///
 diff --git a/third_party/application-services/components/merino/src/suggest/tests.rs b/third_party/application-services/components/merino/src/suggest/tests.rs
-index ddc8782b08..7681a0f0ac 100644
+index ddc8782b08..c66d734535 100644
 --- a/third_party/application-services/components/merino/src/suggest/tests.rs
 +++ b/third_party/application-services/components/merino/src/suggest/tests.rs
 @@ -14,7 +14,7 @@ const SAMPLE_RESPONSE: &str = r#"{
@@ -2930,7 +2891,7 @@ index ddc8782b08..7681a0f0ac 100644
  
      let captured = captured_url.lock().unwrap();
 diff --git a/third_party/application-services/components/merino/src/worldcup/http.rs b/third_party/application-services/components/merino/src/worldcup/http.rs
-index b16de88b10..3c5463c0da 100644
+index b16de88b10..76ed3a67c0 100644
 --- a/third_party/application-services/components/merino/src/worldcup/http.rs
 +++ b/third_party/application-services/components/merino/src/worldcup/http.rs
 @@ -80,7 +80,7 @@ fn send_get(url: Url, accept_language: Option<String>) -> Result<Option<Response
@@ -2952,7 +2913,7 @@ index b16de88b10..3c5463c0da 100644
              &teams=FRA"
          );
 diff --git a/third_party/application-services/components/merino/src/worldcup/mod.rs b/third_party/application-services/components/merino/src/worldcup/mod.rs
-index 9c80ff2c11..bde4092b97 100644
+index 9c80ff2c11..2d6574b47a 100644
 --- a/third_party/application-services/components/merino/src/worldcup/mod.rs
 +++ b/third_party/application-services/components/merino/src/worldcup/mod.rs
 @@ -14,7 +14,7 @@ use url::Url;
@@ -2965,7 +2926,7 @@ index 9c80ff2c11..bde4092b97 100644
  /// A client for the merino wcs endpoint.
  ///
 diff --git a/third_party/application-services/components/merino/src/worldcup/tests.rs b/third_party/application-services/components/merino/src/worldcup/tests.rs
-index 616e9a9344..f9455c7676 100644
+index 616e9a9344..4ef8a6c45f 100644
 --- a/third_party/application-services/components/merino/src/worldcup/tests.rs
 +++ b/third_party/application-services/components/merino/src/worldcup/tests.rs
 @@ -70,7 +70,7 @@ fn test_get_teams_success() {
@@ -3081,7 +3042,7 @@ index f6b9dc43b0..e962ddd2a7 100644
      )?;
  
 diff --git a/third_party/application-services/examples/merino-cli/src/main.rs b/third_party/application-services/examples/merino-cli/src/main.rs
-index 1bd22286f7..a765f65e7d 100644
+index 1bd22286f7..3c7ef6825b 100644
 --- a/third_party/application-services/examples/merino-cli/src/main.rs
 +++ b/third_party/application-services/examples/merino-cli/src/main.rs
 @@ -43,11 +43,11 @@ enum Commands {
@@ -3099,7 +3060,7 @@ index 1bd22286f7..a765f65e7d 100644
  
          /// Search query
 diff --git a/third_party/application-services/examples/viaduct-cli/src/main.rs b/third_party/application-services/examples/viaduct-cli/src/main.rs
-index 423cb4f465..98c55fd75c 100644
+index 423cb4f465..7b8dc84c4e 100644
 --- a/third_party/application-services/examples/viaduct-cli/src/main.rs
 +++ b/third_party/application-services/examples/viaduct-cli/src/main.rs
 @@ -171,7 +171,7 @@ fn run_ohttp_example(
@@ -3112,5 +3073,5 @@ index 423cb4f465..98c55fd75c 100644
      let response = client.send_sync(request)?;
  
 -- 
-2.54.0
+2.55.0
 
diff --git a/libre/iceweasel/9003-FSDG-urihandlers.patch b/libre/iceweasel/9003-FSDG-urihandlers.patch
index db4f781..47e092c 100644
--- a/libre/iceweasel/9003-FSDG-urihandlers.patch
+++ b/libre/iceweasel/9003-FSDG-urihandlers.patch
@@ -1,4 +1,4 @@
-From 2173df418d624cdc460d45d909d707f9bb6d041b Mon Sep 17 00:00:00 2001
+From 3f91d7daffacac98f02face1f0748d78142f17f8 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH] Remove URI handlers that serve nonfree software
@@ -216,5 +216,5 @@ index e95d627c07..81f9218da9 100644
          ],
        },
 -- 
-2.54.0
+2.55.0
 
diff --git a/libre/iceweasel/9004-FSDG-misc.patch b/libre/iceweasel/9004-FSDG-misc.patch
index d97c94e..2f669e0 100644
--- a/libre/iceweasel/9004-FSDG-misc.patch
+++ b/libre/iceweasel/9004-FSDG-misc.patch
@@ -1,4 +1,4 @@
-From 5dd4b6062909f405eb943b66588889446e90cb2f Mon Sep 17 00:00:00 2001
+From 44f9b9229e32ac5bc569dce7306cad1f5eba4959 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 12 Mar 2022 17:14:25 +0100
 Subject: [PATCH 1/6] Replace upstream default bookmarks
@@ -78,10 +78,10 @@ index 2f764caf6f..a0f27ae8e7 100644
  </body>
  </html>
 -- 
-2.54.0
+2.55.0
 
 
-From d1e942e1601a6037318dc946655e2a3fe395c7dc Mon Sep 17 00:00:00 2001
+From 40ce02a958db75093cb446248d8eade41a543e4c Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:46:48 +0200
 Subject: [PATCH 2/6] Remove 'More from Mozilla' section in Preferences
@@ -91,22 +91,20 @@ like Firefox Mobile, which is not compatible with the FSDG for the same
 reasons as desktop Firefox.
 ---
  browser/app/profile/firefox.js                |  2 +-
- .../static/browser_all_files_referenced.js    |  9 ------
- browser/components/preferences/jar.mn         |  4 ---
- .../more-from-mozilla-qr-code-simple-cn.svg   |  4 ---
+ .../static/browser_all_files_referenced.js    |  6 -----
+ browser/components/preferences/jar.mn         |  3 ---
  .../more-from-mozilla-qr-code-simple.svg      |  4 ---
- .../components/preferences/moreFromMozilla.js | 30 -------------------
- browser/components/preferences/preferences.js | 17 -----------
- .../components/preferences/preferences.xhtml  |  8 -----
- 8 files changed, 1 insertion(+), 77 deletions(-)
- delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
+ .../components/preferences/moreFromMozilla.js | 26 -------------------
+ browser/components/preferences/preferences.js | 17 ------------
+ .../components/preferences/preferences.xhtml  |  8 ------
+ 7 files changed, 1 insertion(+), 65 deletions(-)
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 8434fca4a3..fbe035cbf4 100644
+index 5d232d951b..1da5a9315a 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1397,7 +1397,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
+@@ -1407,7 +1407,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
  // Whether we had to hide the "Firefox Labs" section because it would be empty.
  pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
@@ -116,10 +114,10 @@ index 8434fca4a3..fbe035cbf4 100644
  pref("browser.preferences.aiControls", false);
  // Whether to show unavailable AI controls regardless of region/locale
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index 371164db26..eb167a5f6c 100644
+index 3212c21da7..1d0c81561c 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
-@@ -189,15 +189,6 @@ var allowlist = [
+@@ -190,12 +190,6 @@ var allowlist = [
    // extensions/pref/autoconfig/src/nsReadConfig.cpp
    { file: "resource://gre/defaults/autoconfig/prefcalls.js" },
  
@@ -128,31 +126,27 @@ index 371164db26..eb167a5f6c 100644
 -  {
 -    file: "chrome://browser/content/preferences/more-from-mozilla-qr-code-simple.svg",
 -  },
--  {
--    file: "chrome://browser/content/preferences/more-from-mozilla-qr-code-simple-cn.svg",
--  },
 -
    { file: "resource://gre/greprefs.js" },
  
    // toolkit/mozapps/extensions/AddonContentPolicy.cpp
 diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
-index aec7888f59..98f881ee1a 100644
+index de83282c2c..a21f23c29a 100644
 --- a/browser/components/preferences/jar.mn
 +++ b/browser/components/preferences/jar.mn
-@@ -14,12 +14,9 @@ browser.jar:
+@@ -13,11 +13,9 @@ browser.jar:
+    content/browser/preferences/search.js
     content/browser/preferences/privacy.js
-    content/browser/preferences/containers.js
     content/browser/preferences/sync.js
 -   content/browser/preferences/moreFromMozilla.js
     content/browser/preferences/fxaPairDevice.xhtml
     content/browser/preferences/fxaPairDevice.js
     content/browser/preferences/findInPage.js
 -   content/browser/preferences/more-from-mozilla-qr-code-simple.svg
--   content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg
     content/browser/preferences/browser-layout-horizontal.svg
     content/browser/preferences/browser-layout-vertical.svg
     content/browser/preferences/web-appearance-dark.svg
-@@ -34,7 +31,6 @@ browser.jar:
+@@ -33,7 +31,6 @@ browser.jar:
     content/browser/preferences/config/appearance.mjs                    (config/appearance.mjs)
     content/browser/preferences/config/aiFeatures.mjs                    (config/aiFeatures.mjs)
     content/browser/preferences/config/firefoxLabs.mjs                   (config/firefoxLabs.mjs)
@@ -160,16 +154,6 @@ index aec7888f59..98f881ee1a 100644
     content/browser/preferences/config/downloads.mjs                     (config/downloads.mjs)
     content/browser/preferences/config/passwords-autofill.mjs            (config/passwords-autofill.mjs)
     content/browser/preferences/config/block-ai-confirmation-dialog.css  (config/block-ai-confirmation-dialog.css)
-diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
-deleted file mode 100644
-index 931d90618c..0000000000
---- a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
-+++ /dev/null
-@@ -1,4 +0,0 @@
--<!-- This Source Code Form is subject to the terms of the Mozilla Public
--   - License, v. 2.0. If a copy of the MPL was not distributed with this
--   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
--<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M4 2h72a2 2 0 0 1 2 2v72a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2ZM0 4a4 4 0 0 1 4-4h72a4 4 0 0 1 4 4v72a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V4Zm7.08 3.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm18.163-2.27h4.541v2.27h2.27v2.27h-2.27v2.27h-2.27v2.271h4.54v-4.54h2.27V9.35h2.271v6.811h-2.27v2.27h2.27v4.541h-2.27v-2.27h-2.27v-2.27h-2.27v2.27h-2.271v-2.27h-2.27V7.08Zm0 13.622v-2.27h-2.27V9.35h-2.27v13.622h2.27v2.27h-9.081v2.271h-2.27v2.27H13.89v-4.54h-2.27v2.27H7.08v2.27h2.27v2.27h2.27v2.271h9.081v2.27h2.271v2.27h-2.27v2.271h-2.27v-2.27h-2.27v-2.27H7.08v2.27h4.54v2.27H9.35v2.27h6.811v-2.27h2.27v4.54h6.811v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-4.54h2.27v-2.271h-4.54v-2.27h2.27v-2.271h2.27v-4.54h2.27v2.27h4.541v2.27h-2.27v2.27h2.27v-2.27h2.27v-4.54h-2.27v-2.271h-2.27v2.27h-2.27v-2.27h-2.27Zm0 0h-2.27v2.27h2.27v-2.27Zm-9.081 11.352v2.27h2.27v2.27h2.27v-4.54h-4.54Zm4.54 9.081h-4.54v2.27h4.54v-2.27Zm-4.54-9.081v-2.27h2.27v-2.271h-4.54v4.54h2.27Zm-9.082 0v-2.27h2.27v2.27h-2.27ZM41.135 9.35V7.08h2.27v2.27h-2.27Zm2.27 20.433h-2.27v-4.54h2.27v2.27h2.27v-2.27h2.271v-4.541h2.27v2.27h2.271v-4.54h2.27V25.242h2.27v2.271h-4.54v-2.27h-2.27v4.54h-6.811Zm9.082 2.27v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v4.541h-2.27v4.541h2.27v4.54h-2.27v4.541h-4.541v2.271h-2.27v-2.27h-2.27v2.27h2.27v2.27h-4.541v-4.54h-6.811v2.27h-2.27v-4.54h-4.541v2.27h-2.27v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54H13.89v2.27h-2.27v-4.541H9.35v2.27H7.08v2.27h4.54v2.271H7.08v2.27h4.54v-2.27h2.27v2.27h2.271v-2.27h2.27v2.27h6.811v6.811h2.271v2.27h2.27v2.271h-4.54v2.27h2.27v2.271h2.27v-4.54h2.27v-2.271h-2.27v-4.54h4.541v2.27h2.27v2.27h-2.27v2.27h2.27v4.541h-2.27v2.27h2.27v-2.27h2.27v2.27h6.811v-2.27h4.541v-4.54h4.541v2.27h-2.27v4.54h2.27v-2.27h2.27v2.27h9.082V66.11h2.27v2.27h4.541v-2.27h-2.27v-6.811h2.27V45.675h-2.27v13.622h-2.27v-2.27h-2.27v-4.541h-6.811v-2.27h-4.541v-6.811h2.27v4.54h4.54v-4.54h-2.27v-2.27h-6.811v-2.271h2.27v-2.27h2.27v2.27h2.271v-4.54h4.54v9.08h2.271v-2.27h2.27v-2.27h-2.27v-6.811h2.27v-2.27h2.271v2.27h2.27v-4.541h-2.27v-2.27H59.299v2.27h-2.271v2.27h-2.27v2.27Zm2.27 0v2.271h-2.27v-2.27h2.27Zm2.271-2.27h2.27v2.27h2.27v-4.54h-4.54v2.27Zm0 0v2.27h-2.27v-2.27h2.27Zm9.082 29.515h-2.27v2.27h-2.271v2.27h4.54v-4.54ZM54.757 66.11h2.27v2.27h2.271v2.271h4.54v-2.27h-2.27v-2.27h-2.27v-2.271h-4.54v2.27Zm-6.81-2.27v2.27h2.27v-2.27h-2.27Zm-2.271 0v-2.27h-6.811v-2.27h2.27v-2.271h2.27v-2.27h9.082v4.54h-4.54v-2.27h-2.271v2.27h2.27v4.54h-2.27Zm0 0h-9.081v2.27h2.27v2.27h2.27v2.271h2.27v-2.27h2.27v-4.541Zm-9.082-6.811v2.27h-2.27v-2.27h2.27Zm0-2.27h2.27v2.27h-2.27v-2.27Zm0 0h-2.27v-2.271h2.27v2.27Zm-6.81 4.54v-6.811h-2.271v6.811h2.27ZM47.945 7.08h4.541v4.54h-2.27V9.35h-2.27V7.08Zm0 2.27v2.27h2.27v2.27h4.541v2.271h-4.54v2.27h-6.811v-2.27h2.27v-2.27h-2.27v-2.27h2.27V9.35h2.27Zm9.082-2.27H72.92v15.892H57.028V7.08Zm4.54 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm49.949 0H68.379v6.811H61.57V11.621Zm-18.163 9.082h2.27v2.27h-2.27v-2.27ZM68.38 34.324h2.27v2.27h-2.27v-2.27Zm2.27 2.27h2.27v4.541h-2.27v-4.54Zm-4.54 11.352h2.27v2.27h-2.27v-2.27Zm-9.082 6.811h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Zm59.03 9.082h2.27v2.27h-2.27v-2.27Z"/></svg>
 diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 deleted file mode 100644
 index f187ff3e4c..0000000000
@@ -181,10 +165,10 @@ index f187ff3e4c..0000000000
 -   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 -<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M76 2H4a2 2 0 0 0-2 2v72a2 2 0 0 0 2 2h72a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM4 0a4 4 0 0 0-4 4v72a4 4 0 0 0 4 4h72a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4Zm3.08 7.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm20.434-2.27h2.27v2.27h2.27V7.08h4.541v2.27h2.27v2.27H36.596v2.27h-4.541v2.271h-2.27v-2.27h-2.271v-2.27h2.27V9.35h2.27V7.08Zm-4.541 4.54h-2.27V9.35h2.27v2.27Zm2.27 11.352v-4.54h2.27v-2.27h4.541V13.89h4.541v2.27h4.54v2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.271v2.271h-2.27Zm-4.54 2.27V18.433h2.27v4.54h2.27v2.27h-4.54Zm0 0v2.271h-9.081v-2.27h9.08Zm11.351-2.27h-2.27v-2.27h2.27v2.27Zm2.27 0h-2.27v4.541h-2.27v-2.27h-2.27v2.27h2.27v2.27h4.54V22.973Zm2.271 0v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v6.811h4.54v-2.27h-2.27v-4.54Zm2.27 0h-2.27v-2.27h2.27v2.27Zm4.542-6.81h-2.27V22.971h-2.271v2.27h2.27v2.271h2.27v2.27h-2.27v2.27h2.27v-2.27h2.271v2.27h2.27v2.271h2.27v-4.54h2.271v2.27h2.27v2.27h-2.27v2.27h-2.27v2.27h-4.541v6.811h2.27v2.271h4.541v4.541h-6.811v-2.27h-2.27v2.27h-2.27v-2.27h-4.541v2.27h-4.541v-2.27h-4.54v2.27h2.27v2.27h2.27v2.27H45.675v4.541h2.271v2.27h-2.27v2.271h-2.27v-4.54h-4.541v-2.27h-2.27v-2.271h-2.27v2.27h2.27v2.27h-2.27v2.27h-2.271v-2.27h-2.27v-2.27h-2.271v-4.54h2.27v2.27h2.27v-2.27h-2.27v-2.271h2.27v-2.27h-4.54v-2.27h2.27v-2.271h-2.27v-4.54h2.27v-2.271h-2.27v-6.811h2.27v-2.27h-2.27v2.27h-4.54v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54h-2.27V36.593H13.89v-4.54h-2.27v-2.27h2.27v-2.271H7.08v6.811h2.27v4.54h4.54v2.271h-2.27v2.27H9.35v-2.27H7.08v2.27h2.27v2.27H7.08v2.271h2.27v-2.27h2.27v2.27h2.27v-4.54h4.541v-2.27h-2.27v-4.541h2.27v2.27h2.27v2.27h2.271v2.27h-2.27v2.27h-2.27v2.271h-2.27v2.27H11.62v2.271H7.08v2.27h4.54v-2.27h4.541v2.27h9.081v9.081h4.541v4.541h-2.27v4.541h4.54v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-2.271h2.27v-2.27h2.27v2.27h2.271v2.27h-2.27v6.811H45.675v-4.54h2.271v4.54h2.27v-4.54h2.271v4.54h6.811v-2.27h2.27v2.27h2.27v-2.27h-2.27v-2.27h-4.54v-2.27h-9.081v-2.271H59.297v2.27h2.27v-2.27h2.27v4.54h4.541v4.541h2.271v-2.27h2.27v-4.54h-2.27v-2.271h2.27v-2.27h-2.27v-2.27h2.27v-4.541h-2.27v-4.541h2.27V27.513h-2.27v-2.27h-2.27v2.27h-6.811v-2.27h-4.541v2.27h-2.27v-2.27h-2.271v-2.27h2.27v-4.541h-4.54v-2.27Zm2.27-6.812h2.27v4.54h-2.27v2.271h-2.27v-4.54h2.27V9.35Zm0 0h-6.811V7.08h6.811v2.27Zm0 13.622v-2.27h-2.27v2.27h2.27Zm9.081 6.811v2.27h2.27v2.271h-2.27v2.27h-2.27v4.541h-4.54v2.27h2.27v2.27h4.54v-2.27h2.27v4.541h-2.27v4.541h2.27v6.811h2.271v2.27h-2.27v2.27h4.54v-4.54h2.271v-4.54h-2.27v-4.541h2.27v-4.541h-2.27v-4.54h2.27v-6.811h-2.27v-2.271h2.27v-2.27h-4.54v2.27h-2.271v-2.27h-2.27Zm6.812 24.974h-2.27v2.27h2.27v-2.27Zm0-4.54h-4.541v-2.27h4.54v2.27Zm-4.541-9.082h2.27v2.27h-2.27v-2.27Zm-2.27 0v-4.54h2.27v4.54h-2.27Zm4.54-4.54v-2.27h-2.27v2.27h2.27Zm0 0h2.27v2.27h-2.27v-2.27Zm-4.54 4.54v2.27h-2.27v-2.27h2.27Zm0-11.352v-2.27h-2.27v2.27h2.27ZM57.028 68.38h-2.27v2.27h2.27v-2.27Zm-24.974 0h-2.27v2.27h2.27v-2.27ZM20.702 47.946v2.27h2.27v2.271h-4.54v-4.54h2.27Zm2.27-2.27v2.27h-2.27v-2.27h2.27Zm2.27 0v2.27h2.271v-2.27h-2.27Zm0 0h-2.27v-2.27h2.27v2.27Zm-2.27-9.082v2.27h-2.27v-2.27h2.27Zm0 0h2.27v-2.27h-2.27v2.27ZM9.35 34.324v-2.27h2.27v2.27H9.35Zm15.893 20.433h2.27v-2.27h-2.27v2.27ZM41.135 66.11v4.541h2.27v-4.54h-2.27Zm6.811-4.54v-2.27h2.27v2.27h-2.27Zm-2.27-6.812h-2.27v-2.27h2.27v2.27Zm0 0v2.27h2.27v-2.27h-2.27Zm4.54-20.433v2.27h2.271v-2.27h-2.27Zm2.271-9.081h-2.27v2.27h2.27v-2.27Zm4.54-18.163H72.92v15.892H57.028V7.08Zm4.541 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm34.056 0h2.27v2.27h-2.27v-2.27Zm15.892 0h6.811v6.811H61.57V11.621Zm-4.54 43.137h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Z"/></svg>
 diff --git a/browser/components/preferences/moreFromMozilla.js b/browser/components/preferences/moreFromMozilla.js
-index 21e2c7dda8..0c3f120176 100644
+index 044157bcb9..53c2add071 100644
 --- a/browser/components/preferences/moreFromMozilla.js
 +++ b/browser/components/preferences/moreFromMozilla.js
-@@ -82,36 +82,6 @@ var gMoreFromMozillaPane = {
+@@ -82,32 +82,6 @@ var gMoreFromMozillaPane = {
    renderProducts() {
      const isRegionUS = Region.home.toLowerCase() === "us";
      let products = [
@@ -197,9 +181,7 @@ index 21e2c7dda8..0c3f120176 100644
 -          id: "fxMobile",
 -          type: "link",
 -          label_string_id: "more-from-moz-learn-more-link",
--          actionURL: BrowserUtils.isChinaRepack()
--            ? "https://www.firefox.com.cn/browsers/mobile/"
--            : "https://www.mozilla.org/firefox/browsers/mobile/",
+-          actionURL: "https://www.mozilla.org/firefox/browsers/mobile/",
 -        },
 -        qrcode: {
 -          title: {
@@ -212,9 +194,7 @@ index 21e2c7dda8..0c3f120176 100644
 -            label: {
 -              string_id: "more-from-moz-qr-code-box-firefox-mobile-button",
 -            },
--            actionURL: BrowserUtils.isChinaRepack()
--              ? "https://www.firefox.com.cn/mobile/get-app/"
--              : "https://www.mozilla.org/firefox/mobile/get-app/?v=mfm",
+-            actionURL: "https://www.mozilla.org/firefox/mobile/get-app/?v=mfm",
 -          },
 -        },
 -      },
@@ -222,11 +202,11 @@ index 21e2c7dda8..0c3f120176 100644
          id: "mozilla-monitor",
          title_string_id: "more-from-moz-mozilla-monitor-title",
 diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
-index 57add34d87..3f09fa6517 100644
+index c76a0647e1..99bdb32d28 100644
 --- a/browser/components/preferences/preferences.js
 +++ b/browser/components/preferences/preferences.js
-@@ -9,7 +9,6 @@
- /* import-globals-from containers.js */
+@@ -8,7 +8,6 @@
+ /* import-globals-from search.js */
  /* import-globals-from privacy.js */
  /* import-globals-from sync.js */
 -/* import-globals-from moreFromMozilla.js */
@@ -248,7 +228,7 @@ index 57add34d87..3f09fa6517 100644
    tabsBrowsing: {
      l10nId: "tabs-browsing-section",
      groupIds: [
-@@ -568,14 +559,6 @@ function init_all() {
+@@ -573,14 +564,6 @@ function init_all() {
        groupIds: ["customHomepage"],
        module: "chrome://browser/content/preferences/config/home-startup.mjs",
      });
@@ -264,10 +244,10 @@ index 57add34d87..3f09fa6517 100644
  
    gSearchResultsPane.init();
 diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
-index 9760a4a35b..1ae6b16072 100644
+index 1b8c381593..0f6c48103e 100644
 --- a/browser/components/preferences/preferences.xhtml
 +++ b/browser/components/preferences/preferences.xhtml
-@@ -46,7 +46,6 @@
+@@ -43,7 +43,6 @@
    <link rel="localization" href="browser/browser.ftl"/>
      <!-- Used by fontbuilder.js -->
    <link rel="localization" href="browser/preferences/fonts.ftl"/>
@@ -275,7 +255,7 @@ index 9760a4a35b..1ae6b16072 100644
    <link rel="localization" href="browser/preferences/preferences.ftl"/>
    <link rel="localization" href="toolkit/branding/brandings.ftl"/>
    <link rel="localization" href="toolkit/firefoxlabs/features.ftl"/>
-@@ -194,12 +193,6 @@
+@@ -191,12 +190,6 @@
          iconsrc="chrome://browser/skin/sidebar/firefox.svg"
          data-l10n-id="pane-about-firefox-title">
        </html:moz-page-nav-button>
@@ -288,19 +268,19 @@ index 9760a4a35b..1ae6b16072 100644
  
        <!-- Hidden sub-page entries (CSS display:none via .hidden-category).
             These keep gotoPref() routing working for sub-pages that are
-@@ -252,7 +245,6 @@
+@@ -247,7 +240,6 @@
+ #include search.inc.xhtml
  #include privacy.inc.xhtml
- #include containers.inc.xhtml
  #include sync.inc.xhtml
 -#include moreFromMozilla.inc.xhtml
          </vbox>
        </vbox>
      </vbox>
 -- 
-2.54.0
+2.55.0
 
 
-From 861dfecd524f70284ad316eab64ad58e9bacfb01 Mon Sep 17 00:00:00 2001
+From 109bf8988a247508d425f040c8828f9e1ae811b6 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:51:06 +0200
 Subject: [PATCH 3/6] Remove promos of Firefox Focus and Klar from Private
@@ -311,19 +291,19 @@ for the same reasons as the original Firefox.
 ---
  browser/app/profile/firefox.js                |   2 +-
  .../static/browser_all_files_referenced.js    |   2 -
- .../modules/OnboardingMessageProvider.sys.mjs | 309 ------------------
+ .../modules/OnboardingMessageProvider.sys.mjs | 291 ------------------
  .../modules/PanelTestProvider.sys.mjs         |  79 -----
  .../content/assets/focus-qr-code.svg          | 114 -------
  .../content/assets/klar-qr-code.svg           | 114 -------
- 6 files changed, 1 insertion(+), 619 deletions(-)
+ 6 files changed, 1 insertion(+), 601 deletions(-)
  delete mode 100644 browser/components/privatebrowsing/content/assets/focus-qr-code.svg
  delete mode 100644 browser/components/privatebrowsing/content/assets/klar-qr-code.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index fbe035cbf4..993c6975be 100644
+index 1da5a9315a..eb92cb9738 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2579,7 +2579,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
+@@ -2581,7 +2581,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
  pref("browser.promo.focus.disallowed_regions", "cn");
  
  // Default to enabling focus promos to be shown where allowed.
@@ -333,10 +313,10 @@ index fbe035cbf4..993c6975be 100644
  // Default to enabling pin promos to be shown where allowed.
  pref("browser.promo.pin.enabled", true);
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index eb167a5f6c..e8aecab453 100644
+index 1d0c81561c..be0279dc94 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
-@@ -40,8 +40,6 @@ var gExceptionPaths = [
+@@ -38,8 +38,6 @@ var gExceptionPaths = [
    "chrome://activity-stream/content/data/content/assets/euo-chatbot.svg",
    "chrome://browser/content/assets/moz-vpn.svg",
    "chrome://browser/content/assets/vpn-logo.svg",
@@ -346,10 +326,10 @@ index eb167a5f6c..e8aecab453 100644
    "chrome://browser/content/asrouter/assets/fox-with-devices.svg",
    "chrome://browser/content/asrouter/assets/fox-with-locked-box.svg",
 diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-index 53cb1c3d13..fffc66161e 100644
+index 36292a5223..e025bc57ed 100644
 --- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-@@ -1551,315 +1551,6 @@ const BASE_MESSAGES = () => [
+@@ -1551,297 +1551,6 @@ const BASE_MESSAGES = () => [
        ],
      },
    },
@@ -359,12 +339,6 @@ index 53cb1c3d13..fffc66161e 100644
 -    template: "pb_newtab",
 -    groups: ["pbNewtab"],
 -    content: {
--      infoBody: "fluent:about-private-browsing-info-description-simplified",
--      infoEnabled: true,
--      infoIcon: "chrome://global/skin/icons/indicator-private-browsing.svg",
--      infoLinkText: "fluent:about-private-browsing-learn-more-link",
--      infoTitle: "",
--      infoTitleEnabled: false,
 -      promoEnabled: true,
 -      promoType: "FOCUS",
 -      promoHeader: "fluent:about-private-browsing-focus-promo-header-c",
@@ -464,12 +438,6 @@ index 53cb1c3d13..fffc66161e 100644
 -    template: "pb_newtab",
 -    groups: ["pbNewtab"],
 -    content: {
--      infoBody: "fluent:about-private-browsing-info-description-simplified",
--      infoEnabled: true,
--      infoIcon: "chrome://global/skin/icons/indicator-private-browsing.svg",
--      infoLinkText: "fluent:about-private-browsing-learn-more-link",
--      infoTitle: "",
--      infoTitleEnabled: false,
 -      promoEnabled: true,
 -      promoType: "FOCUS",
 -      promoHeader: "fluent:about-private-browsing-focus-promo-header-c",
@@ -565,12 +533,6 @@ index 53cb1c3d13..fffc66161e 100644
 -    template: "pb_newtab",
 -    groups: ["pbNewtab"],
 -    content: {
--      infoBody: "fluent:about-private-browsing-info-description-simplified",
--      infoEnabled: true,
--      infoIcon: "chrome://global/skin/icons/indicator-private-browsing.svg",
--      infoLinkText: "fluent:about-private-browsing-learn-more-link",
--      infoTitle: "",
--      infoTitleEnabled: false,
 -      promoEnabled: true,
 -      promoType: "FOCUS",
 -      promoHeader: "fluent:about-private-browsing-focus-promo-header-c",
@@ -666,7 +628,7 @@ index 53cb1c3d13..fffc66161e 100644
      id: "PB_NEWTAB_PIN_PROMO",
      template: "pb_newtab",
 diff --git a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-index 4d92f26473..e297839e57 100644
+index 8037e3b8bd..b04d4f29b7 100644
 --- a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
 @@ -1981,85 +1981,6 @@ const MESSAGES = () => [
@@ -996,10 +958,10 @@ index 2217ca055c..0000000000
 -</defs>
 -</svg>
 -- 
-2.54.0
+2.55.0
 
 
-From 5c74357508c2228744b1f604093637f33c6b7134 Mon Sep 17 00:00:00 2001
+From 3bbe88a74d000149b9d746c247b46e413b127497 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 4/6] Remove 'Extensions for developers' menu item
@@ -1016,7 +978,7 @@ Main menu -> 'More tools' -> 'Extensions for developers' opens
  3 files changed, 4 insertions(+), 3 deletions(-)
 
 diff --git a/browser/components/asrouter/modules/CFRPageActions.sys.mjs b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
-index e492572855..ee96a375ec 100644
+index 9fd3d15f34..911e794657 100644
 --- a/browser/components/asrouter/modules/CFRPageActions.sys.mjs
 +++ b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
 @@ -43,7 +43,7 @@ const SUMO_BASE_URL = Services.urlFormatter.formatURLPref(
@@ -1057,10 +1019,10 @@ index 837e99fbfa..7c68c4f47f 100644
      },
    },
 -- 
-2.54.0
+2.55.0
 
 
-From 038823b4de87e8cbb6d180e6bc4c71e8d4908de6 Mon Sep 17 00:00:00 2001
+From 333fa37f5001de48fb9260f9f6d252cc27b26fa8 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 22:12:44 +0200
 Subject: [PATCH 5/6] Remove references to nonfree Generative AI chats
@@ -1085,10 +1047,10 @@ to false.
  3 files changed, 5 insertions(+), 117 deletions(-)
 
 diff --git a/browser/components/genai/GenAI.sys.mjs b/browser/components/genai/GenAI.sys.mjs
-index 85294ad2cf..6b428a8a63 100644
+index 8d50adbd92..0cb8dce802 100644
 --- a/browser/components/genai/GenAI.sys.mjs
 +++ b/browser/components/genai/GenAI.sys.mjs
-@@ -83,7 +83,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
+@@ -85,7 +85,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
    lazy,
    "chatProviders",
    "browser.ml.chat.providers",
@@ -1097,7 +1059,7 @@ index 85294ad2cf..6b428a8a63 100644
    reorderChatProviders
  );
  XPCOMUtils.defineLazyPreferenceGetter(
-@@ -138,99 +138,10 @@ export const GenAI = {
+@@ -145,99 +145,10 @@ export const GenAI = {
    // will allow for additional UI shown such as populating dropdown with a name,
    // showing links, and other special behaviors needed for individual providers.
    chatProviders: new Map([
@@ -1197,7 +1159,7 @@ index 85294ad2cf..6b428a8a63 100644
          linksId: "genai-settings-chat-localhost-links",
          maxLength: 8192,
          name: "localhost",
-@@ -1131,7 +1042,7 @@ export const GenAI = {
+@@ -1181,7 +1092,7 @@ export const GenAI = {
    },
  
    /**
@@ -1206,7 +1168,7 @@ index 85294ad2cf..6b428a8a63 100644
     *
     * @param {Browser} browser - current browser
     * @param {string} prompt - prompt text
-@@ -1323,7 +1234,7 @@ export const GenAI = {
+@@ -1394,7 +1305,7 @@ export const GenAI = {
      }
      browser.fixupAndLoadURIString(url, options);
  
@@ -1246,7 +1208,7 @@ index 88573c9619..a9f9ad2f16 100644
            if (data.type == lazy.Progress.ProgressType.DOWNLOAD) {
              onDownload?.(
 diff --git a/browser/locales/en-US/browser/genai.ftl b/browser/locales/en-US/browser/genai.ftl
-index f10084073c..b47aa5e5dd 100644
+index d70cbff426..04d1d82cc7 100644
 --- a/browser/locales/en-US/browser/genai.ftl
 +++ b/browser/locales/en-US/browser/genai.ftl
 @@ -4,13 +4,7 @@
@@ -1265,10 +1227,10 @@ index f10084073c..b47aa5e5dd 100644
  ## Chatbot prompts
  ## Prompts are plain language ‘instructions’ sent to a chatbot.
 -- 
-2.54.0
+2.55.0
 
 
-From d6ccd3e2a2ea6108afb5bbf55d51e3496a326fb4 Mon Sep 17 00:00:00 2001
+From ee2e536164b6d00766dd604fce8b196573e21750 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH 6/6] Various patches
@@ -1379,10 +1341,10 @@ index 7b1024de12..adb1316420 100644
      const vpnBanner = this.doc.querySelector(".vpn-banner");
      const exitIcon = vpnBanner.querySelector(".exit-icon");
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 8c25c7bf3f..7baf1c4ad2 100644
+index 86c6c62f34..b5d6bb41af 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -1379,16 +1379,6 @@ sync-signedout-account-short =
+@@ -1291,16 +1291,6 @@ sync-signedout-account-short =
      .label = Sign in
      .accesskey = i
  
@@ -1413,7 +1375,7 @@ index 5a20984cb9..aacf47451a 100644
  
  protections-vpn-banner-header = Protection that extends beyond the browser
 diff --git a/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl b/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
-index e1c9ac6e2b..16a8d4d9f2 100644
+index acd6e92b39..e98174c411 100644
 --- a/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
 +++ b/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
 @@ -5,7 +5,7 @@
@@ -1425,7 +1387,7 @@ index e1c9ac6e2b..16a8d4d9f2 100644
      .searchbuttonlabel = Search
  
  ## Variables
-@@ -364,7 +364,8 @@ install-theme-button = Install Theme
+@@ -368,7 +368,8 @@ install-theme-button = Install Theme
  # The label of the button that appears after installing an add-on. Upon click,
  # the detailed add-on view is opened, from where the add-on can be managed.
  manage-addon-button = Manage
@@ -1435,7 +1397,7 @@ index e1c9ac6e2b..16a8d4d9f2 100644
  find-more-themes = Find more themes
  
  # This is a label for the button to open the "more options" menu, it is only
-@@ -543,12 +544,13 @@ sitepermission-heading = Manage Your Site Permissions
+@@ -551,12 +552,13 @@ sitepermission-heading = Manage Your Site Permissions
  discover-heading = Personalize Your { -brand-short-name }
  shortcuts-heading = Manage Extension Shortcuts
  
@@ -1513,5 +1475,5 @@ index 97f695334a..8581941dfa 100644
 --firefoxlabs-brand-name = Firefox Labs
 +-firefoxlabs-brand-name = Iceweasel Labs
 -- 
-2.54.0
+2.55.0
 
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 3c2973e..fad5a54 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=152.0.6
+pkgver=153.0
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -193,7 +193,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('ea220c4f8d19d4edaa20e6dadfd3c4aeb07dbed017ade2828fd814d660660f0e'
+sha256sums=('bc510f74c8c4c692d31e559aeb5850849d13bc98214ac81e004f66f819a55522'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -205,7 +205,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('d0a55f6f30a78516d244037d593ccb08f6803498b582508af35d5b2811097f00584c5b1760c488ae6e7073837b88087ff94ab36eee9af8d7a110350515fc94eb'
+b2sums=('418cc4576a8a98bb957e93712c146629720d5de960d29196395436f05c2eff95adde1dded34805e3b5e664b4a9486af3fe58acdb945d068bb882321e30a4e1a4'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
@@ -261,17 +261,17 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
             process-json-files.py )
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
-                '517eb3b251695979dffe995702f7668616b316b745ae212f4f2f46d5cbaf0c3e'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                'dcb1a20b8c81fedd24b628f5b8eec3209f1c58223559e8e754e2c5c3f5744f68'   # 9002-FSDG-preference-defaults.patch
-                '2cb40bc6a98a9f88edf1e945b5335136f80768934d71f81f6d184028531873ca'   # 9003-FSDG-urihandlers.patch
-                'f58e934dfc10e7d639caecd27424a6f55f0e9df976859b11b25c294c72298ef5'   # 9004-FSDG-misc.patch
+                'fcb2a62acd28f54acbf719dc28726d1745461c8daf3bf2010b9520d21e5aadad'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+                '64b09b4abfed294a3e1cd4ac50b18ba2fe8172a87f2bcc4f163d32c3969afab3'   # 9002-FSDG-preference-defaults.patch
+                'fef1430f2a4d7cf346a1db589d616cb021f0e9fe73e1eccf08ad1660cf9f6cb5'   # 9003-FSDG-urihandlers.patch
+                '7fa42ce4a1564b96c938c99d23066624bdd022b9ee467242b4c3bcf563f85037'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
-            '1ac13c0d00365f6296fc307f3c9cf6f262d4d2aae3be46d8170a52760a2c15c8315e8276ecd1a9754b8f4854557351a11236f7f82d7425dcfb18a22651537baf'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            '898fd23768d67ff3ebedd37bad510de86912c4f862da56b68ba509c3f3676345533e97eb16b5218d08d599837eaea5eab487cf47e6cfe01228ba200aa680e8d6'   # 9002-FSDG-preference-defaults.patch
-            '90ca48afd995e574978fd22e77c55dd6253d4b3a0cb2ba34a0aebe904aef1eaa0ed3c52fcded5bedfb521f3f547e117c9587c18d61b5c338de41b0cf284f3b8c'   # 9003-FSDG-urihandlers.patch
-            '09aeebadf3eb481b9b19f511de837676b8213a15b930ba6dd3f4653f975ae3936e1fc768c3c079c0137f3a54b1857b3f0331e4fe4596a0929710ec6ebec34261'   # 9004-FSDG-misc.patch
+            '2932e471a09aa9b75df1be22a928e0285527733fa45e8ac28e593d9ee8835e9deab5393562f3f61f921e2b96013e097f8e68fd0c1e74a59c16839488da620d28'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+            'f6f502d24c57572c8e3cd96f6994c3c1c17bd51d73ba34cf0904e6ae2f07d0e1cc65d1db598de3e8710de9304f75d2bf83a54462c33e16e5cc40126dc06b505b'   # 9002-FSDG-preference-defaults.patch
+            '833462de8ea35525ed7eabd2d87504aac1ad853ab892a27772fa5c4a02ba3829f5bfcd970e5527a7b973166494b0e439e6d3e28d25a249005899b984e16d45cf'   # 9003-FSDG-urihandlers.patch
+            '9d075d838197edb43eb0fc2d18df1a784a7ec13b1b52295ff5aa7424816853220ff9cdf5b8e8c3fe6bc744a2f6007d0648365a8d54c8323ba74885fee440f2ed'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
 source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
          ${source[*]:${_N_MKSOURCES}} )
@@ -492,7 +492,7 @@ mksource() {
   # Upstream tarball can contain some ignored cruft,
   # including binaries (for example, python3).
   echo "Removing files specified in .gitignore..."
-  git init -b master && git clean -dfX                                      \
+  git init -b main && git clean -dfX                                      \
     --exclude='!ipc/chromium/src/third_party/libevent/evconfig-private.h'   \
     --exclude='!toolkit/crashreporter/google-breakpad/src/third_party/lss/' \
     --exclude='!third_party/python/**/*.egg-info/'                          \
@@ -512,7 +512,12 @@ mksource() {
   sed -i '/vendor\//d' toolkit/components/ml/jar.mn
   rm -frv toolkit/components/ml/vendor
 
+  # Remove some files with lots of references to Merino endpoints,
+  # as it's too much effort to patch them, and they interfere with
+  # checking of Merino patching done later.
+  truncate -s0 browser/extensions/newtab/test/xpcshell/test_SportsFeed.js
   rm -v mobile/android/android-components/components/service/merino-manifest/src/main/assets/manifest/manifest.json
+  
 
   # Remove test-related networking dumps, because they contain code from
   # some Amazon webpage with no clear licensing, thus nonfree.

From 09e3a344cdb3fbe1e728dacdf9c3bb5f6604af7b Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 15 2026 17:11:01 +0000
Subject: [PATCH 11/12] libre/iceweasel: 153.0.1-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index fad5a54..5e30301 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=153.0
+pkgver=153.0.1
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -193,7 +193,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('bc510f74c8c4c692d31e559aeb5850849d13bc98214ac81e004f66f819a55522'
+sha256sums=('ac586cfe4573cd02a0b96dd496ae28da0157a9fcc6530ede6b1decfd2a3fb512'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -205,7 +205,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('418cc4576a8a98bb957e93712c146629720d5de960d29196395436f05c2eff95adde1dded34805e3b5e664b4a9486af3fe58acdb945d068bb882321e30a4e1a4'
+b2sums=('e7b1749b81c81744d3461c18b48e84a72adbc130a54256321bb2a854f8e96fc315d5dc97ad685610774e27de39145aa6897b9c832a1da9fd9f7ecd89555f678b'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop

From 1a1238e96b0fee615c67afa32374da6d482ae2e3 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Aug 17 2026 15:23:35 +0000
Subject: [PATCH 12/12] libre/iceweasel: 154.0-1, sync with changes from upstreams


---

diff --git a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
index 5d10a55..26cfb9c 100644
--- a/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-sync-remote-settings-with-local-dump.patch
@@ -1,4 +1,4 @@
-From 9ae363df3501ac3046461ae1bace6df7c35f126e Mon Sep 17 00:00:00 2001
+From ac6c3a67e5c74f510ad8cc0aa6c0f9d33e628cf9 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:20:39 +0200
 Subject: [PATCH 01/13] Point to local omni.ja files, not remote server
@@ -36,8 +36,9 @@ If necessary, missing files can be added later.
  netwerk/protocol/http/metrics.yaml            |  4 ++--
  netwerk/protocol/http/nsHttpChannel.cpp       |  8 -------
  .../mozperftest/system/ml_services.py         |  7 +-----
+ .../mozperftest/tests/test_ml_services.py     |  2 +-
  services/settings/Utils.sys.mjs               |  2 +-
- services/settings/docs/index.rst              |  4 ++--
+ services/settings/docs/index.md               |  4 ++--
  .../scripts/periodic_file_updates.sh          |  2 +-
  .../safebrowsing/test_initial_download.py     |  2 +-
  .../components/remote_settings/src/config.rs  | 24 +++++++++----------
@@ -45,18 +46,18 @@ If necessary, missing files can be added later.
  .../antitracking/docs/tracking-lists/index.md |  6 +----
  .../BackgroundTask_message.sys.mjs            |  6 ++---
  toolkit/components/ml/ml.d.ts                 |  4 ++--
- .../search/docs/DefaultSearchEngines.rst      |  2 +-
- .../search/docs/SearchEngineConfiguration.rst |  8 +++----
- .../docs/SearchEngineConfigurationArchive.rst |  2 +-
+ .../search/docs/DefaultSearchEngines.md       |  2 +-
+ .../search/docs/SearchEngineConfiguration.md  |  8 +++----
+ .../docs/SearchEngineConfigurationArchive.md  |  2 +-
  .../searchconfigs/head_searchconfig.js        |  8 +++----
  .../bergamot-translator/upload-bergamot.py    | 12 ++++------
  .../docs/resources/02_contributing.md         | 11 +--------
  .../docs/resources/03_bergamot.md             |  6 ++---
  toolkit/modules/AppConstants.sys.mjs          |  6 +----
- 31 files changed, 74 insertions(+), 108 deletions(-)
+ 32 files changed, 75 insertions(+), 109 deletions(-)
 
 diff --git a/browser/base/content/spotlight.html b/browser/base/content/spotlight.html
-index e6bc327bee..1116e20f89 100644
+index 3697a1dcdd..4ad083a9ca 100644
 --- a/browser/base/content/spotlight.html
 +++ b/browser/base/content/spotlight.html
 @@ -8,7 +8,7 @@
@@ -91,10 +92,10 @@ index 47a26d7213..07dfbd76e8 100644
    console.log(`Fetching records from ${chalk.underline.yellow(RECORDS_URL)}`);
  
 diff --git a/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx b/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
-index 753fbc633f..a0d49902a8 100644
+index 26773eeb03..2c1f5e5e78 100644
 --- a/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
 +++ b/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
-@@ -804,7 +804,7 @@ export class ASRouterAdminInner extends React.PureComponent {
+@@ -805,7 +805,7 @@ export class ASRouterAdminInner extends React.PureComponent {
                    <a
                      className="small-text"
                      target="_blank"
@@ -103,7 +104,7 @@ index 753fbc633f..a0d49902a8 100644
                      rel="noopener noreferrer"
                    >
                      {provider.collection}
-@@ -819,7 +819,7 @@ export class ASRouterAdminInner extends React.PureComponent {
+@@ -820,7 +820,7 @@ export class ASRouterAdminInner extends React.PureComponent {
                    <a
                      className="small-text"
                      target="_blank"
@@ -113,10 +114,10 @@ index 753fbc633f..a0d49902a8 100644
                    >
                      nimbus-desktop-experiments
 diff --git a/browser/components/asrouter/content/asrouter-admin.bundle.js b/browser/components/asrouter/content/asrouter-admin.bundle.js
-index ffb8391d2f..a4f4ba0efe 100644
+index cc715d1d2c..210331d9f0 100644
 --- a/browser/components/asrouter/content/asrouter-admin.bundle.js
 +++ b/browser/components/asrouter/content/asrouter-admin.bundle.js
-@@ -1150,14 +1150,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
+@@ -1151,14 +1151,14 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
          label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", null, "remote settings (", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("a", {
            className: "small-text",
            target: "_blank",
@@ -133,7 +134,7 @@ index ffb8391d2f..a4f4ba0efe 100644
            rel: "noopener noreferrer"
          }, "nimbus-desktop-experiments"), ")");
        }
-@@ -1523,4 +1523,4 @@ function renderASRouterAdmin() {
+@@ -1524,4 +1524,4 @@ function renderASRouterAdmin() {
  
  ASRouterAdminRenderUtils = __webpack_exports__;
  /******/ })()
@@ -273,10 +274,10 @@ index 180ff2a727..e2898f8b98 100644
  The purpose of this Google Summer of Code project, which is called Fretboard, was to develop an A/B testing framework written in Kotlin based on the existing code from Fennec, but making it independent of both the server used and the local storage mechanism, allowing it to be used on other apps, such as Firefox Focus, which started to need to do some A/B tests.
  
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-index 5e4c49f47f..1e6b6b73d3 100644
+index 730300cb21..d0f8dac57b 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
 +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
-@@ -819,8 +819,8 @@ class Core(
+@@ -769,8 +769,8 @@ class Core(
  
          // collection name to fetch from server for SERP telemetry
          const val COLLECTION_NAME = "search-telemetry-v2"
@@ -304,10 +305,10 @@ index 74d5469ece..0b1c598999 100644
          private val isEnabledByDefault: Boolean
              get() = !AppConstants.isKlarBuild
 diff --git a/netwerk/protocol/http/metrics.yaml b/netwerk/protocol/http/metrics.yaml
-index fa05126580..6c412c9ddf 100644
+index 8326ad7457..b3208116ff 100644
 --- a/netwerk/protocol/http/metrics.yaml
 +++ b/netwerk/protocol/http/metrics.yaml
-@@ -1071,7 +1071,7 @@ network:
+@@ -1213,7 +1213,7 @@ network:
    system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -316,7 +317,7 @@ index fa05126580..6c412c9ddf 100644
  
    system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
-@@ -1101,7 +1101,7 @@ network:
+@@ -1243,7 +1243,7 @@ network:
    retried_system_channel_remote_settings_status:
      <<: *system_channel_success_or_failure
      description: >
@@ -326,10 +327,10 @@ index fa05126580..6c412c9ddf 100644
    retried_system_channel_telemetry_status:
      <<: *system_channel_success_or_failure
 diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
-index c6d926448e..19e4dd8cc3 100644
+index 1c20b5a25b..0670985189 100644
 --- a/netwerk/protocol/http/nsHttpChannel.cpp
 +++ b/netwerk/protocol/http/nsHttpChannel.cpp
-@@ -8952,14 +8952,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
+@@ -9078,14 +9078,6 @@ nsHttpChannel::GetEssentialDomainCategory(nsCString& domain) {
    if (domain == "aus5.mozilla.org"_ns) {
      return EssentialDomainCategory::Aus5MozillaOrg;
    }
@@ -345,7 +346,7 @@ index c6d926448e..19e4dd8cc3 100644
  }
  
 diff --git a/python/mozperftest/mozperftest/system/ml_services.py b/python/mozperftest/mozperftest/system/ml_services.py
-index 0ca3527113..9e38b73cd9 100644
+index 698cada5b8..9e38b73cd9 100644
 --- a/python/mozperftest/mozperftest/system/ml_services.py
 +++ b/python/mozperftest/mozperftest/system/ml_services.py
 @@ -6,11 +6,6 @@ import os
@@ -364,16 +365,29 @@ index 0ca3527113..9e38b73cd9 100644
  ]
  
  PREFS = {
--    "services.settings.server": "https://firefox.settings.services.mozilla.com/v1",
+-    "services.settings.server": "https://firefox.settings.services.mozilla.com/v2",
 +    "services.settings.server": "resource://app/defaults/settings/",
      "network.socket.allowed_nonlocal_domains": ",".join(ALLOWED_HOSTS),
  }
  
+diff --git a/python/mozperftest/mozperftest/tests/test_ml_services.py b/python/mozperftest/mozperftest/tests/test_ml_services.py
+index 95ecbaf548..963a43a4e2 100644
+--- a/python/mozperftest/mozperftest/tests/test_ml_services.py
++++ b/python/mozperftest/mozperftest/tests/test_ml_services.py
+@@ -41,7 +41,7 @@ def test_ml_services_sets_browser_prefs():
+         assert "services.settings.server" in browser_prefs
+         assert (
+             browser_prefs["services.settings.server"]
+-            == "https://firefox.settings.services.mozilla.com/v2"
++            == "resource://app/defaults/settings/"
+         )
+ 
+         assert "network.socket.allowed_nonlocal_domains" in browser_prefs
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index 76f69ab74e..658978202a 100644
+index 40e919a997..fd2177f308 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
-@@ -105,7 +105,7 @@ export var Utils = {
+@@ -111,7 +111,7 @@ export var Utils = {
        : AppConstants.REMOTE_SETTINGS_SERVER_URLS[0];
    },
  
@@ -382,46 +396,46 @@ index 76f69ab74e..658978202a 100644
  
    /**
     * Logger instance.
-diff --git a/services/settings/docs/index.rst b/services/settings/docs/index.rst
-index adc5fe0e24..6486306a00 100644
---- a/services/settings/docs/index.rst
-+++ b/services/settings/docs/index.rst
-@@ -188,11 +188,11 @@ It is possible to package a dump of the server records that will be loaded into
+diff --git a/services/settings/docs/index.md b/services/settings/docs/index.md
+index 1b654c2e3c..911a447243 100644
+--- a/services/settings/docs/index.md
++++ b/services/settings/docs/index.md
+@@ -177,11 +177,11 @@ It is possible to package a dump of the server records that will be loaded into
  
- The JSON dump will serve as the default dataset for ``.get()``, instead of doing a round-trip to pull the latest data. It will also reduce the amount of data to be downloaded on the first synchronization.
+ The JSON dump will serve as the default dataset for `.get()`, instead of doing a round-trip to pull the latest data. It will also reduce the amount of data to be downloaded on the first synchronization.
  
--#. Place the JSON dump of the server records in the ``services/settings/dumps/main/`` folder. Using this command:
-+#. Place the JSON dump of the server records in the ``services/settings/dumps/main/`` folder. Using this command (replace 'https://settings.invalid' with your Remote Settings address):
-    ::
+-1. Place the JSON dump of the server records in the `services/settings/dumps/main/` folder. Using this command:
++1. Place the JSON dump of the server records in the `services/settings/dumps/main/` folder. Using this command (replace 'https://settings.invalid' with your Remote Settings address):
  
-       CID="your-collection"
--      curl "https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/${CID}/changeset?_expected=0" | jq '{"data": .changes, "timestamp": .timestamp}' > services/settings/dumps/main/${CID}.json``
-+      curl "https://settings.invalid/v1/buckets/main/collections/${CID}/changeset?_expected=0" | jq '{"data": .changes, "timestamp": .timestamp}' > services/settings/dumps/main/${CID}.json``
- 
- #. Add the filename to the relevant ``FINAL_TARGET_FILES`` list in ``services/settings/dumps/main/moz.build``
+    ```
+    CID="your-collection"
+-   curl "https://firefox.settings.services.mozilla.com/v2/buckets/main/collections/${CID}/changeset?_expected=0" | jq '{"data": .changes, "timestamp": .timestamp}' > services/settings/dumps/main/${CID}.json``
++   curl "https://settings.invalid/v2/buckets/main/collections/${CID}/changeset?_expected=0" | jq '{"data": .changes, "timestamp": .timestamp}' > services/settings/dumps/main/${CID}.json``
+    ```
  
+ 2. Add the filename to the relevant `FINAL_TARGET_FILES` list in `services/settings/dumps/main/moz.build`
 diff --git a/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh b/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
-index 7f17c5a51d..cedb22cbc4 100755
+index eaa31c1f2b..9fc7aa8400 100755
 --- a/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
 +++ b/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh
 @@ -411,7 +411,7 @@ function compare_suffix_lists {
  function compare_remote_settings_files {
    # cd "${TOPSRCDIR}"
  
--  REMOTE_SETTINGS_SERVER="https://firefox.settings.services.mozilla.com/v1"
+-  REMOTE_SETTINGS_SERVER="https://firefox.settings.services.mozilla.com/v2"
 +  REMOTE_SETTINGS_SERVER="resource://app/defaults/settings"
  
    # 1. List remote settings collections from server.
    echo "INFO: fetch remote settings list from server"
 diff --git a/testing/firefox-ui/tests/functional/safebrowsing/test_initial_download.py b/testing/firefox-ui/tests/functional/safebrowsing/test_initial_download.py
-index 2e4cdf7534..71917129ef 100644
+index abf43688b0..71917129ef 100644
 --- a/testing/firefox-ui/tests/functional/safebrowsing/test_initial_download.py
 +++ b/testing/firefox-ui/tests/functional/safebrowsing/test_initial_download.py
 @@ -37,7 +37,7 @@ class TestSafeBrowsingInitialDownload(MarionetteTestCase):
      prefs_provider_google_update_time = {}
  
      prefs_safebrowsing = {
--        "services.settings.server": "https://firefox.settings.services.mozilla.com/v1",
+-        "services.settings.server": "https://firefox.settings.services.mozilla.com/v2",
 +        "services.settings.server": "resource://app/defaults/settings",
          "browser.safebrowsing.debug": True,
          "browser.safebrowsing.update.enabled": True,
@@ -546,43 +560,42 @@ index d543b79c65..d4315dd2c3 100644
     */
    "ml-inference-options": {
      modelId: string; // e.g. "tliumozilla/intent-detection-mobilebert";
-diff --git a/toolkit/components/search/docs/DefaultSearchEngines.rst b/toolkit/components/search/docs/DefaultSearchEngines.rst
-index 46ffc30641..af5b46dfc5 100644
---- a/toolkit/components/search/docs/DefaultSearchEngines.rst
-+++ b/toolkit/components/search/docs/DefaultSearchEngines.rst
-@@ -99,4 +99,4 @@ is updated.
- 
- .. _configuration schema: SearchConfigurationSchema.html
- .. _remote settings: /services/settings/index.html
--.. _search-default-override-allowlist bucket: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-default-override-allowlist/records
-+.. _search-default-override-allowlist bucket: resource://app/defaults/settings/main/search-default-override-allowlist.json
-diff --git a/toolkit/components/search/docs/SearchEngineConfiguration.rst b/toolkit/components/search/docs/SearchEngineConfiguration.rst
-index 30a3ea6533..51513f3490 100644
---- a/toolkit/components/search/docs/SearchEngineConfiguration.rst
-+++ b/toolkit/components/search/docs/SearchEngineConfiguration.rst
-@@ -39,7 +39,7 @@ An outline of the schemas may be found on the `Search Configuration Schema`_ pag
- .. _remote settings: /services/settings/index.html
- .. _JSON schema: https://json-schema.org/
- .. _Search Configuration Schema: SearchConfigurationSchema.html
--.. _viewed live: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-v2/records
--.. _search-config-icons: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-icons/records
--.. _search-config-overrides-v2: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-overrides-v2/records
--.. _search-default-override-allowlist: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-default-override-allowlist/records
-+.. _viewed live: resource://app/defaults/settings/main/search-config-v2.json
-+.. _search-config-icons: resource://app/defaults/settings/main/search-config-icons.json
-+.. _search-config-overrides-v2: resource://app/defaults/settings/main/search-config-overrides-v2.json
-+.. _search-default-override-allowlist: resource://app/defaults/settings/main/search-default-override-allowlist.json
-diff --git a/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst b/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
-index 70475f226e..2dfc33d8cd 100644
---- a/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
-+++ b/toolkit/components/search/docs/SearchEngineConfigurationArchive.rst
-@@ -67,5 +67,5 @@ related. As a result several situations may occur:
- .. _the remote settings: /services/settings/index.html
- .. _JSON schema: https://json-schema.org/
- .. _Search Configuration Schema: SearchConfigurationSchema.html
--.. _viewed live: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config/records
-+.. _viewed live: resource://app/defaults/settings/main/search-config.json
- .. _Normandy: /toolkit/components/normandy/normandy/services.html
+diff --git a/toolkit/components/search/docs/DefaultSearchEngines.md b/toolkit/components/search/docs/DefaultSearchEngines.md
+index d5dbe43812..2a830cda8c 100644
+--- a/toolkit/components/search/docs/DefaultSearchEngines.md
++++ b/toolkit/components/search/docs/DefaultSearchEngines.md
+@@ -92,4 +92,4 @@ For example, a url is updated, but the update is performed before the allow list
+ is updated.
+ 
+ [configuration schema]: SearchConfigurationSchema.md
+-[search-default-override-allowlist bucket]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-default-override-allowlist/records
++[search-default-override-allowlist bucket]: resource://app/defaults/settings/main/search-default-override-allowlist.json
+diff --git a/toolkit/components/search/docs/SearchEngineConfiguration.md b/toolkit/components/search/docs/SearchEngineConfiguration.md
+index 3e5cf87ed0..fb848a9d28 100644
+--- a/toolkit/components/search/docs/SearchEngineConfiguration.md
++++ b/toolkit/components/search/docs/SearchEngineConfiguration.md
+@@ -33,7 +33,7 @@ An outline of the schemas may be found on the [Search Configuration Schema] page
+ 
+ [json schema]: https://json-schema.org/
+ [search configuration schema]: SearchConfigurationSchema.md
+-[search-config-icons]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-icons/records
+-[search-config-overrides-v2]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-overrides-v2/records
+-[search-default-override-allowlist]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-default-override-allowlist/records
+-[viewed live]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config-v2/records
++[search-config-icons]: resource://app/defaults/settings/main/search-config-icons.json
++[search-config-overrides-v2]: resource://app/defaults/settings/main/search-config-overrides-v2.json
++[search-default-override-allowlist]: resource://app/defaults/settings/main/search-default-override-allowlist.json
++[viewed live]: resource://app/defaults/settings/main/search-config-v2.json
+diff --git a/toolkit/components/search/docs/SearchEngineConfigurationArchive.md b/toolkit/components/search/docs/SearchEngineConfigurationArchive.md
+index 4f37adc813..623d17c64f 100644
+--- a/toolkit/components/search/docs/SearchEngineConfigurationArchive.md
++++ b/toolkit/components/search/docs/SearchEngineConfigurationArchive.md
+@@ -60,4 +60,4 @@ related. As a result several situations may occur:
+ 
+ [json schema]: https://json-schema.org/
+ [search configuration schema]: SearchConfigurationSchema.md
+-[viewed live]: https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/search-config/records
++[viewed live]: resource://app/defaults/settings/main/search-config.json
 diff --git a/toolkit/components/search/tests/xpcshell/searchconfigs/head_searchconfig.js b/toolkit/components/search/tests/xpcshell/searchconfigs/head_searchconfig.js
 index d4c6b6a4c1..a071522019 100644
 --- a/toolkit/components/search/tests/xpcshell/searchconfigs/head_searchconfig.js
@@ -695,7 +708,7 @@ index 4758b2f1e4..1e47271814 100644
      - Request review.
      - Repeat Step 5 to verify for Beta and Release.
 diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs
-index a26725ead2..3070e01ace 100644
+index 0e82f50e1b..3070e01ace 100644
 --- a/toolkit/modules/AppConstants.sys.mjs
 +++ b/toolkit/modules/AppConstants.sys.mjs
 @@ -213,11 +213,7 @@ export var AppConstants = Object.freeze({
@@ -705,7 +718,7 @@ index a26725ead2..3070e01ace 100644
 -#ifdef MOZ_THUNDERBIRD
 -    [ "https://thunderbird-settings.thunderbird.net/v1" ],
 -#else
--    [ "https://firefox.settings.services.mozilla.com/v1", "https://firefox.settings.services.mozilla.com/v2" ],
+-    [ "https://firefox.settings.services.mozilla.com/v2" ],
 -#endif
 +    [ "resource://app/defaults/settings" ],
  
@@ -715,7 +728,7 @@ index a26725ead2..3070e01ace 100644
 2.55.0
 
 
-From a52c3013efa5937e3e977388239464edaa89f160 Mon Sep 17 00:00:00 2001
+From 03266cc425b6c8c14490c4a85b3a4f00dfa9aa05 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:34:08 +0200
 Subject: [PATCH 02/13] Remove polling triggered by push broadcasts
@@ -787,7 +800,7 @@ index b180cfc850..a3f4b83190 100644
 2.55.0
 
 
-From eae80cb6b749aff1ba66a26ba473d98ffd3339fb Mon Sep 17 00:00:00 2001
+From 59faf270b4019cb6c1330ea3fc484c998745f510 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:41:54 +0200
 Subject: [PATCH 03/13] Remove timer that triggers polling for changes
@@ -832,7 +845,7 @@ index c9c2370d2c..85c4a5cafe 100644
 2.55.0
 
 
-From 2f31de5dd8d0711d578ad76b68e0043bb4a85d16 Mon Sep 17 00:00:00 2001
+From ad3b2fcd1ace5de119911382de7a7b216d8875fe Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:47:41 +0200
 Subject: [PATCH 04/13] Utils: fetch timestamps of each collection locally
@@ -850,10 +863,10 @@ code that expects them.
  create mode 100644 services/settings/dumps/monitor/moz.build
 
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index 658978202a..58f2c4ead2 100644
+index fd2177f308..cfc47a4ab2 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
-@@ -431,7 +431,7 @@ export var Utils = {
+@@ -489,7 +489,7 @@ export var Utils = {
    async fetchLatestChanges(serverUrl, options = {}) {
      const { expectedTimestamp, lastEtag = "", filters = {} } = options;
  
@@ -862,7 +875,7 @@ index 658978202a..58f2c4ead2 100644
      const params = {
        ...filters,
        _expected: expectedTimestamp ?? 0,
-@@ -446,7 +446,21 @@ export var Utils = {
+@@ -504,7 +504,21 @@ export var Utils = {
            .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
            .join("&");
      }
@@ -885,7 +898,7 @@ index 658978202a..58f2c4ead2 100644
  
      if (response.status >= 500) {
        throw new Error(`Server error ${response.status} ${response.statusText}`);
-@@ -481,7 +495,15 @@ export var Utils = {
+@@ -539,7 +553,15 @@ export var Utils = {
        }
      }
  
@@ -932,7 +945,7 @@ index a3e9e9b3f2..b32a8d8691 100644
 2.55.0
 
 
-From 327640dde9e449ce431e1dacba4219fe11b76871 Mon Sep 17 00:00:00 2001
+From f37651011f5e4ed3d1ebefd56d66e900f6a600cb Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:52:10 +0200
 Subject: [PATCH 05/13] Utils: disable offline checking
@@ -944,10 +957,10 @@ current and any future code that relies on it.
  1 file changed, 10 deletions(-)
 
 diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
-index 58f2c4ead2..2363e15abd 100644
+index cfc47a4ab2..188f9d14c7 100644
 --- a/services/settings/Utils.sys.mjs
 +++ b/services/settings/Utils.sys.mjs
-@@ -211,16 +211,6 @@ export var Utils = {
+@@ -217,16 +217,6 @@ export var Utils = {
     * @return {bool} Whether network is down or not.
     */
    get isOffline() {
@@ -968,7 +981,7 @@ index 58f2c4ead2..2363e15abd 100644
 2.55.0
 
 
-From 1b4e01c392f5a5b6c37787fe0d1a3b8ce24c8f62 Mon Sep 17 00:00:00 2001
+From de8264d065843af10125a913946f9011e2ea7475 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 17:56:02 +0200
 Subject: [PATCH 06/13] Refactor hashing logic to a separate function
@@ -1022,7 +1035,7 @@ index e5b20d9b9d..a1eb1f6437 100644
 2.55.0
 
 
-From f98f83969cd0c0389c6a5862aee07c77671347a0 Mon Sep 17 00:00:00 2001
+From 1a9f88886ae2059dd948aec278a0509c11b032a3 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:05:02 +0200
 Subject: [PATCH 07/13] Client: Fetch and hash records from local dump
@@ -1057,7 +1070,7 @@ the upgrade to local-only setup.
  1 file changed, 33 insertions(+), 63 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 3ee4ae65a4..ddc8bbfd68 100644
+index f4f9b1c0bc..ca78cfde45 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -775,8 +775,9 @@ export class RemoteSettingsClient extends EventEmitter {
@@ -1147,7 +1160,7 @@ index 3ee4ae65a4..ddc8bbfd68 100644
    }
  
    /**
-@@ -1320,24 +1288,26 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1325,24 +1293,26 @@ export class RemoteSettingsClient extends EventEmitter {
     * @param since timestamp of last sync (optional)
     */
    async _fetchChangeset(expectedTimestamp, since) {
@@ -1194,7 +1207,7 @@ index 3ee4ae65a4..ddc8bbfd68 100644
 2.55.0
 
 
-From 78ef2066684fc0ec786b79f9429292b74309a4a9 Mon Sep 17 00:00:00 2001
+From ee3a456cbf09b0bd81c3e7ec56f948d079259c0a Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:42:56 +0200
 Subject: [PATCH 08/13] Client: start deferred sync on get() or on()
@@ -1216,7 +1229,7 @@ occurs during the session.
  1 file changed, 27 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index ddc8bbfd68..41c06c025f 100644
+index ca78cfde45..3bd413ba64 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -1300,7 +1313,7 @@ index ddc8bbfd68..41c06c025f 100644
 2.55.0
 
 
-From fe5e778d4c5f793cce1aa53e386f51eeda42c470 Mon Sep 17 00:00:00 2001
+From 0fa66a280097322e708e2eadde233a45c666d2a5 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 18:53:51 +0200
 Subject: [PATCH 09/13] Client: deep compare records if timestamps match
@@ -1322,7 +1335,7 @@ noticeable performance issues.
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 41c06c025f..2bc791b0c8 100644
+index 3bd413ba64..66a62b16bc 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -10,6 +10,7 @@ import { Downloader } from "resource://services-settings/Attachments.sys.mjs";
@@ -1333,7 +1346,7 @@ index 41c06c025f..2bc791b0c8 100644
    ClientEnvironmentBase:
      "resource://gre/modules/components-utils/ClientEnvironment.sys.mjs",
    Database: "resource://services-settings/Database.sys.mjs",
-@@ -1289,7 +1290,10 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1294,7 +1295,10 @@ export class RemoteSettingsClient extends EventEmitter {
          const old = oldById.get(r.id);
          if (old) {
            oldById.delete(r.id);
@@ -1349,7 +1362,7 @@ index 41c06c025f..2bc791b0c8 100644
 2.55.0
 
 
-From 6bfb7815da677093869b93f0112ffca708e7da18 Mon Sep 17 00:00:00 2001
+From 31798c9193fc56860b3ff91ffd779ffa1b20c484 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:01:39 +0200
 Subject: [PATCH 10/13] Client: delete more data on cleanup
@@ -1367,10 +1380,10 @@ logic gets the data about the attachments from those records.
  1 file changed, 8 insertions(+), 2 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 2bc791b0c8..0070f29b4c 100644
+index 66a62b16bc..d209547217 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
-@@ -1240,7 +1240,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1245,7 +1245,7 @@ export class RemoteSettingsClient extends EventEmitter {
            // Signature failed, clear local DB because it contains
            // bad data (local + remote changes).
            lazy.console.debug(`${this.identifier} clear local data`);
@@ -1379,7 +1392,7 @@ index 2bc791b0c8..0070f29b4c 100644
            // Local data was tampered, throw and it will retry from empty DB.
            lazy.console.error(`${this.identifier} local data was corrupted`);
            throw new CorruptedDataError(this.identifier);
-@@ -1262,7 +1262,7 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1267,7 +1267,7 @@ export class RemoteSettingsClient extends EventEmitter {
              // _importJSONDump() only clears DB if dump is available,
              // therefore do it here!
              if (imported < 0) {
@@ -1388,7 +1401,7 @@ index 2bc791b0c8..0070f29b4c 100644
              }
            }
          }
-@@ -1311,6 +1311,12 @@ export class RemoteSettingsClient extends EventEmitter {
+@@ -1316,6 +1316,12 @@ export class RemoteSettingsClient extends EventEmitter {
      return syncResult;
    }
  
@@ -1405,7 +1418,7 @@ index 2bc791b0c8..0070f29b4c 100644
 2.55.0
 
 
-From b3b8ad4e74ede5b8ee208d638dc58dc2105b9a12 Mon Sep 17 00:00:00 2001
+From 16b9c3146a8c38321c2fdaaa9087ddf269ef04fc Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:07:56 +0200
 Subject: [PATCH 11/13] Client: remove comparison of collection timestamps
@@ -1420,7 +1433,7 @@ necessary cleanup. So remove the checks.
  1 file changed, 19 deletions(-)
 
 diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
-index 0070f29b4c..7953afda0e 100644
+index d209547217..3cd28baf43 100644
 --- a/services/settings/RemoteSettingsClient.sys.mjs
 +++ b/services/settings/RemoteSettingsClient.sys.mjs
 @@ -1183,25 +1183,6 @@ export class RemoteSettingsClient extends EventEmitter {
@@ -1453,20 +1466,20 @@ index 0070f29b4c..7953afda0e 100644
 2.55.0
 
 
-From 44609050aa0018922922e6ce44e523b45294e5c2 Mon Sep 17 00:00:00 2001
+From b22d3879f98d38320679872f38cbd716f554ba9f Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:15:44 +0200
 Subject: [PATCH 12/13] Attachments: load only from dump and drop cached
 
 ---
- services/settings/Attachments.sys.mjs | 42 +++++----------------------
- 1 file changed, 7 insertions(+), 35 deletions(-)
+ services/settings/Attachments.sys.mjs | 45 +++++----------------------
+ 1 file changed, 7 insertions(+), 38 deletions(-)
 
 diff --git a/services/settings/Attachments.sys.mjs b/services/settings/Attachments.sys.mjs
-index e266cb4e0a..e79cc72dda 100644
+index acf1bd219a..d11f68e45d 100644
 --- a/services/settings/Attachments.sys.mjs
 +++ b/services/settings/Attachments.sys.mjs
-@@ -337,11 +337,12 @@ export class Downloader {
+@@ -349,11 +349,12 @@ export class Downloader {
        retries,
        checkHash,
        attachmentId = record?.id,
@@ -1480,7 +1493,7 @@ index e266cb4e0a..e79cc72dda 100644
      if (!attachmentId) {
        // Check for pre-condition. This should not happen, but it is explicitly
        // checked to avoid mixing up attachments, which could be dangerous.
-@@ -401,6 +402,7 @@ export class Downloader {
+@@ -419,6 +420,7 @@ export class Downloader {
          const newBuffer = await this.downloadAsBytes(record, {
            retries,
            checkHash,
@@ -1488,16 +1501,16 @@ index e266cb4e0a..e79cc72dda 100644
          });
          if (cacheResult) {
            const blob = new Blob([newBuffer]);
-@@ -436,7 +438,7 @@ export class Downloader {
-       }
- 
-       try {
+@@ -460,7 +462,7 @@ export class Downloader {
+         lazy.console.debug(
+           `${this.bucketName}/${this.collectionName}: Attachment fallback to cache for record ${cacheRecord.id}`
+         );
 -        return { ...(await cacheInfo.getResult()), _source: "cache_fallback" };
 +        await this.cacheImpl.delete(attachmentId);
        } catch (e) {
          // Failed to read from cache, e.g. IndexedDB unusable.
-         console.error(e);
-@@ -518,40 +520,10 @@ export class Downloader {
+         lazy.console.error(e);
+@@ -546,43 +548,10 @@ export class Downloader {
     */
    async downloadAsBytes(record, options = {}) {
      const {
@@ -1519,6 +1532,9 @@ index e266cb4e0a..e79cc72dda 100644
 -    let retried = 0;
 -    while (true) {
 -      try {
+-        lazy.console.debug(
+-          `${this.bucketName}/${this.collectionName}: Download from ${remoteFileUrl} (attempt ${retried + 1}/${retries})`
+-        );
 -        const buffer = await this._fetchAttachment(remoteFileUrl);
 -        if (!checkHash) {
 -          return buffer;
@@ -1545,7 +1561,7 @@ index e266cb4e0a..e79cc72dda 100644
 2.55.0
 
 
-From da4bc73f0d23274958ad8086f6718a020cca4e14 Mon Sep 17 00:00:00 2001
+From 3ab6da41821489e6dee67048d75bce66185d3d15 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 30 Dec 2020 19:22:20 +0200
 Subject: [PATCH 13/13] Disable CRLite entirely for now
@@ -1570,10 +1586,10 @@ certificate revocations.
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index 3d33f9916a..bc80c7fab4 100644
+index 7b82957f4e..9cb75224bd 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -18565,7 +18565,7 @@
+@@ -18914,7 +18914,7 @@
  #    security.OCSP.enable is 0).
  - name: security.pki.crlite_mode
    type: RelaxedAtomicUint32
@@ -1583,10 +1599,10 @@ index 3d33f9916a..bc80c7fab4 100644
  
  # The CRLite filter channel to which the user is subscribed.
 diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp
-index b160fbbda3..06adf92489 100644
+index 128708e63d..f45af0dfea 100644
 --- a/security/manager/ssl/nsNSSComponent.cpp
 +++ b/security/manager/ssl/nsNSSComponent.cpp
-@@ -1072,6 +1072,7 @@ void nsNSSComponent::setValidationOptions(
+@@ -1086,6 +1086,7 @@ void nsNSSComponent::setValidationOptions(
    CRLiteMode defaultCRLiteMode = CRLiteMode::Enforce;
    CRLiteMode crliteMode =
        static_cast<CRLiteMode>(StaticPrefs::security_pki_crlite_mode());
diff --git a/libre/iceweasel/9002-FSDG-preference-defaults.patch b/libre/iceweasel/9002-FSDG-preference-defaults.patch
index cff6e08..df2f561 100644
--- a/libre/iceweasel/9002-FSDG-preference-defaults.patch
+++ b/libre/iceweasel/9002-FSDG-preference-defaults.patch
@@ -1,4 +1,4 @@
-From 9f62c07e0ae018d34331e27185757225a3b27ec7 Mon Sep 17 00:00:00 2001
+From 781a95c2f35a702d17f3232064c03376d9ac1b29 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:09:05 +0300
 Subject: [PATCH 01/10] geolocation: Disable API and remove Google API URLs
@@ -23,10 +23,10 @@ default for now.
  2 files changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
-index bc80c7fab4..b74ea07e41 100644
+index 9cb75224bd..2fea8b671c 100644
 --- a/modules/libpref/init/StaticPrefList.yaml
 +++ b/modules/libpref/init/StaticPrefList.yaml
-@@ -7057,7 +7057,7 @@
+@@ -7214,7 +7214,7 @@
  # Is support for Navigator.geolocation enabled?
  - name: geo.enabled
    type: bool
@@ -36,10 +36,10 @@ index bc80c7fab4..b74ea07e41 100644
  
  # Time, in milliseconds, to wait for the location provider to spin up.
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 7f57c5510c..f581ef2a8e 100644
+index b3f11dd9c8..64cc994aa1 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3073,7 +3073,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
+@@ -3084,7 +3084,7 @@ pref("network.tcp.keepalive.idle_time", 600); // seconds; 10 mins
  // All the Geolocation preferences are here.
  //
  #if !defined(ANDROID) && !defined(XP_WIN)
@@ -52,7 +52,7 @@ index 7f57c5510c..f581ef2a8e 100644
 2.55.0
 
 
-From a23cc74b405d9731dd7635f2550f1f69e00a71d7 Mon Sep 17 00:00:00 2001
+From fe40696d8dba5a4d6d36d05d3b842ff899b7b04f Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Apr 2021 13:49:05 +0300
 Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
@@ -63,10 +63,10 @@ Subject: [PATCH 02/10] Disable banners and remove URLs for mobile apps on
  1 file changed, 8 insertions(+), 8 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index d7f3045f1f..40a75ae096 100644
+index 31d1dab2cb..50a399e3d9 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2558,7 +2558,7 @@ pref("browser.contentblocking.report.monitor.enabled", false);
+@@ -2633,7 +2633,7 @@ pref("browser.contentblocking.report.monitor.enabled", false);
  #endif
  
  // Disable the mobile promotion by default.
@@ -75,7 +75,7 @@ index d7f3045f1f..40a75ae096 100644
  
  // Locales in which Send to Device emails are supported
  // The most recent list of supported locales can be found at https://github.com/mozilla/bedrock/blob/6a08c876f65924651554decc57b849c00874b4e7/bedrock/settings/base.py#L963
-@@ -2588,7 +2588,7 @@ pref("browser.promo.pin.enabled", true);
+@@ -2663,7 +2663,7 @@ pref("browser.promo.pin.enabled", true);
  // Set to true for Fx113 (see bug 1808611)
  pref("browser.promo.cookiebanners.enabled", false);
  
@@ -84,7 +84,7 @@ index d7f3045f1f..40a75ae096 100644
  pref("browser.contentblocking.report.vpn_sub_id", "sub_HrfCZF7VPHzZkA");
  
  pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections");
-@@ -2598,12 +2598,12 @@ pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.
+@@ -2673,12 +2673,12 @@ pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.
  pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard");
  pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients");
  pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true");
@@ -107,7 +107,7 @@ index d7f3045f1f..40a75ae096 100644
 2.55.0
 
 
-From 30f692a294bc2fb4e8a3ad3dc2dfe1bb011ccbc8 Mon Sep 17 00:00:00 2001
+From 4162f5ddf32f755a215e940ac207a385ce8704df Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 03/10] Remove some references to AMO
@@ -148,7 +148,7 @@ Subject: [PATCH 03/10] Remove some references to AMO
  6 files changed, 31 insertions(+), 46 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 40a75ae096..d5afa0ab0d 100644
+index 50a399e3d9..6797a43d5d 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -23,7 +23,7 @@
@@ -188,7 +188,7 @@ index 40a75ae096..d5afa0ab0d 100644
  
  // At startup, should we check to see if the installation
  // date is older than some threshold
-@@ -2891,12 +2891,13 @@ pref("app.normandy.onsync_skew_sec", 600);
+@@ -2971,12 +2971,13 @@ pref("app.normandy.onsync_skew_sec", 600);
  //      the app and browser.
  #if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION)
    pref("intl.multilingual.enabled", true);
@@ -204,10 +204,10 @@ index 40a75ae096..d5afa0ab0d 100644
    pref("intl.multilingual.liveReload", false);
    pref("intl.multilingual.liveReloadBidirectional", false);
 diff --git a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
-index a5bf9d4c97..d33520c9bf 100644
+index 656760b9bc..c3dfb2bd27 100644
 --- a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
 +++ b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
-@@ -39,7 +39,7 @@ import java.util.concurrent.TimeUnit
+@@ -38,7 +38,7 @@ import java.util.concurrent.TimeUnit
  import kotlin.collections.set
  
  internal const val API_VERSION = "api/v4"
@@ -217,7 +217,7 @@ index a5bf9d4c97..d33520c9bf 100644
  internal const val DEFAULT_COLLECTION_NAME = "7e8d6dc651b54ab385fb8791bf9dac"
  internal const val COLLECTION_FILE_NAME_PREFIX = "mozilla_components_addon_collection"
 diff --git a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
-index a858caa38b..07ea22bfea 100644
+index c2bcd2217f..219ac42640 100644
 --- a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
 +++ b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/amo/AMOAddonsProviderTest.kt
 @@ -82,8 +82,7 @@ class AMOAddonsProviderTest {
@@ -365,10 +365,10 @@ index 2f5b02eed2..0cc5708dcc 100644
  // Don't let XPIProvider install distribution add-ons; we do our own thing on mobile
  pref("extensions.installDistroAddons", false);
 diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle
-index d867c71ba5..81ce21bf27 100644
+index 62514ba0b3..0c4add3533 100644
 --- a/mobile/android/fenix/app/build.gradle
 +++ b/mobile/android/fenix/app/build.gradle
-@@ -75,7 +75,7 @@ android {
+@@ -63,7 +63,7 @@ android {
          buildConfigField "String", "AMO_COLLECTION_NAME", "\"Extensions-for-Android\""
          buildConfigField "String", "AMO_COLLECTION_USER", "\"mozilla\""
          // This should be the base URL used to call the AMO API.
@@ -378,10 +378,10 @@ index d867c71ba5..81ce21bf27 100644
          def deepLinkSchemeValue = "fenix-dev"
          buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\""
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index f581ef2a8e..b11dff1a1b 100644
+index 64cc994aa1..16c287fd45 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -1752,8 +1752,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
+@@ -1765,8 +1765,8 @@ pref("services.common.uptake.sampleRate", 1);   // 1%
  
  pref("extensions.abuseReport.enabled", false);
  // Whether Firefox integrated abuse reporting feature should be opening the new abuse report form hosted on AMO.
@@ -392,7 +392,7 @@ index f581ef2a8e..b11dff1a1b 100644
  
  // Blocklist preferences
  pref("extensions.blocklist.enabled", true);
-@@ -3134,7 +3134,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
+@@ -3145,7 +3145,7 @@ pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
  // Whether to allow the inline options browser in HTML about:addons page.
  pref("extensions.htmlaboutaddons.inline-options.enabled", true);
  // Show recommendations on the extension and theme list views.
@@ -405,7 +405,7 @@ index f581ef2a8e..b11dff1a1b 100644
 2.55.0
 
 
-From 18ff4093317d3528ca4d70eef28570988ab65f35 Mon Sep 17 00:00:00 2001
+From 65e884216ce0e0709fa1f1f7172885efee660b96 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 4 Jun 2023 13:16:40 +0200
 Subject: [PATCH 04/10] Disable Contile and autoupdate of system addons
@@ -425,7 +425,7 @@ only free software, remove them from the source code.
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index d5afa0ab0d..002d7a71ca 100644
+index 6797a43d5d..21a625d9ab 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
 @@ -52,8 +52,8 @@ pref("extensions.recommendations.themeRecommendationUrl", "https://color.firefox
@@ -439,7 +439,7 @@ index d5afa0ab0d..002d7a71ca 100644
  
  // Disable add-ons that are not installed by the user in all scopes by default.
  // See the SCOPE constants in AddonManager.sys.mjs for values to use here.
-@@ -1823,8 +1823,8 @@ pref("browser.topsites.component.enabled", false);
+@@ -1871,8 +1871,8 @@ pref("browser.topsites.component.enabled", false);
  
  pref("browser.topsites.useRemoteSetting", true);
  // Fetch sponsored Top Sites from Mozilla Tiles Service (Contile)
@@ -454,7 +454,7 @@ index d5afa0ab0d..002d7a71ca 100644
 2.55.0
 
 
-From 78518be3c980a4ec64c516acd2a309a32ba7681d Mon Sep 17 00:00:00 2001
+From 42d89a7fe2396549c99ac8e70645a21804250d52 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 26 Sep 2023 21:27:34 +0200
 Subject: [PATCH 05/10] Disable Firefox Translations for now
@@ -504,10 +504,10 @@ probably has the same issues with the toolchain for the models.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 002d7a71ca..c647133d69 100644
+index 21a625d9ab..1c1da7aa37 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2410,7 +2410,7 @@ pref("browser.translation.neverForLanguages", "");
+@@ -2485,7 +2485,7 @@ pref("browser.translation.neverForLanguages", "");
  
  // Enable Firefox translations powered by the Bergamot translations
  // engine https://browser.mt/.
@@ -520,7 +520,7 @@ index 002d7a71ca..c647133d69 100644
 2.55.0
 
 
-From 62b119ec39a9144fcf29c8a01d3fe95e68f7a079 Mon Sep 17 00:00:00 2001
+From e12215efc3e56bb50f14917742347049f9f37b6b Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Wed, 12 Jun 2024 00:17:17 +0200
 Subject: [PATCH 06/10] Remove some references to Pocket and disable
@@ -546,15 +546,14 @@ this nonfunctional by default.
  .../newtab/lib/DiscoveryStreamFeed.sys.mjs          | 13 ++-----------
  .../extensions/newtab/lib/SectionsManager.sys.mjs   |  4 ++--
  browser/extensions/newtab/lib/TopSitesFeed.sys.mjs  |  4 +---
- .../service/pocket/stories/api/PocketEndpointRaw.kt |  3 +--
  .../java/org/mozilla/fenix/settings/SupportUtils.kt | 12 ++++++------
- 13 files changed, 27 insertions(+), 40 deletions(-)
+ 12 files changed, 26 insertions(+), 38 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index c647133d69..26d2404747 100644
+index 1c1da7aa37..58a50176c8 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2082,6 +2082,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
+@@ -2131,6 +2131,8 @@ pref("browser.newtabpage.activity-stream.discoverystream.publisherFavicon.enable
  
  // The pref controls if search hand-off is enabled for Activity Stream.
  pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", true);
@@ -576,7 +575,7 @@ index b6cf5a11b3..4566b2af13 100644
  const DUMMY_CSS_SELECTOR = "DUMMY#CSS.SELECTOR";
  
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSImage/DSImage.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSImage/DSImage.jsx
-index 02eb841077..9e2af9bae3 100644
+index eeae99f3c0..6529103daa 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSImage/DSImage.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/DSImage/DSImage.jsx
 @@ -123,9 +123,7 @@ export class DSImage extends React.PureComponent {
@@ -670,10 +669,10 @@ index 388cf808f4..8313a8ab43 100644
  
  A list of endpoints that are allowed to be used by Discovery Stream for remote content (eg: story metadata) and configuration (eg: remote layout definitions for experimentation).
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index 571bb78def..9fbf508dd6 100644
+index 7dddd37fa5..558cf344b7 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -345,7 +345,7 @@ export const PREFS_CONFIG = new Map([
+@@ -361,7 +361,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsored",
      {
        title: "User pref for sponsored Pocket content",
@@ -682,7 +681,7 @@ index 571bb78def..9fbf508dd6 100644
      },
    ],
    [
-@@ -360,7 +360,7 @@ export const PREFS_CONFIG = new Map([
+@@ -376,7 +376,7 @@ export const PREFS_CONFIG = new Map([
      "showSponsoredTopSites",
      {
        title: "Show sponsored top sites",
@@ -691,7 +690,7 @@ index 571bb78def..9fbf508dd6 100644
      },
    ],
    [
-@@ -1558,7 +1558,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1721,7 +1721,7 @@ export const PREFS_CONFIG = new Map([
        title:
          "Endpoint prefixes (comma-separated) that are allowed to be requested",
        value:
@@ -700,7 +699,7 @@ index 571bb78def..9fbf508dd6 100644
      },
    ],
    [
-@@ -1596,7 +1596,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1759,7 +1759,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "Endpoint for when a user opts-out of sponsored content to delete the user's data from the ad server.",
@@ -709,7 +708,7 @@ index 571bb78def..9fbf508dd6 100644
      },
    ],
    [
-@@ -1791,7 +1791,7 @@ export const PREFS_CONFIG = new Map([
+@@ -1954,7 +1954,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "'Support Firefox' pref on 'about:settings#home' page. Toggles all sponsored results on and off at the same time",
@@ -719,10 +718,10 @@ index 571bb78def..9fbf508dd6 100644
    ],
    [
 diff --git a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
-index 6da2e6e5ee..52385da789 100644
+index 13ad842bcd..72bac8fc9e 100644
 --- a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
 +++ b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs
-@@ -52,7 +52,7 @@ const TOPIC_SELECTION_LAST_DISPLAYED =
+@@ -53,7 +53,7 @@ const TOPIC_SELECTION_LAST_DISPLAYED =
  const TOPIC_SELECTION_DISPLAY_TIMEOUT =
    "discoverystream.topicSelection.onboarding.displayTimeout";
  
@@ -731,7 +730,7 @@ index 6da2e6e5ee..52385da789 100644
  const PREF_CONFIG = "discoverystream.config";
  const PREF_ENDPOINTS = "discoverystream.endpoints";
  const PREF_IMPRESSION_ID = "browser.newtabpage.activity-stream.impressionId";
-@@ -2940,16 +2940,7 @@ getHardcodedLayout = ({
+@@ -2945,16 +2945,7 @@ getHardcodedLayout = ({
            newFooterSection,
            properties: {
              alignment: "left-align",
@@ -747,7 +746,7 @@ index 6da2e6e5ee..52385da789 100644
 -            ],
 +            extraLinks: [],
              privacyNoticeURL: {
-               url: "https://www.mozilla.org/privacy/firefox/#recommend-relevant-content",
+               url: "https://www.mozilla.org/privacy/firefox/#to-serve-relevant-content-and-advertising-on-firefox-new-tab",
                title: {
 diff --git a/browser/extensions/newtab/lib/SectionsManager.sys.mjs b/browser/extensions/newtab/lib/SectionsManager.sys.mjs
 index 36dbeb3d4d..14556f59f6 100644
@@ -772,10 +771,10 @@ index 36dbeb3d4d..14556f59f6 100644
        },
      },
 diff --git a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-index 6b7f30a900..3ba31520cc 100644
+index 874482b75e..cf51b3d208 100644
 --- a/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
 +++ b/browser/extensions/newtab/lib/TopSitesFeed.sys.mjs
-@@ -1480,9 +1480,7 @@ export class TopSitesFeed {
+@@ -1524,9 +1524,7 @@ export class TopSitesFeed {
            // Also: force WebP, quality 75, no upscaling, no EXIF data
            // Uses Thumbor: https://thumbor.readthedocs.io/en/latest/usage.html
            // For now we wrap this in single quotes because this is being used in a url() css rule, and otherwise would cause a parsing error.
@@ -786,20 +785,6 @@ index 6b7f30a900..3ba31520cc 100644
          }
  
          // We need to loop through potential spocs and set their positions.
-diff --git a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/api/PocketEndpointRaw.kt b/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/api/PocketEndpointRaw.kt
-index 3db458069b..45e4ac26b7 100644
---- a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/api/PocketEndpointRaw.kt
-+++ b/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/api/PocketEndpointRaw.kt
-@@ -38,8 +38,7 @@ internal class PocketEndpointRaw internal constructor(
-     }
- 
-     companion object {
--        private const val POCKET_ENDPOINT_URL = "https://firefox-android-home-recommendations.getpocket.com/"
--
-+        private const val POCKET_ENDPOINT_URL = ""
-         /**
-          * Returns a new instance of [PocketEndpointRaw].
-          *
 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
 index d27d1f0063..dfe54e198a 100644
 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
@@ -827,7 +812,7 @@ index d27d1f0063..dfe54e198a 100644
 2.55.0
 
 
-From eaf1b8a7321888a98929aed06f0c54948324fc3b Mon Sep 17 00:00:00 2001
+From 36badec66db79b1cdb71ccf4bbf0e27c2f5de901 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 19:19:31 +0200
 Subject: [PATCH 07/10] Disable experimental Machine Learning support
@@ -855,25 +840,25 @@ localhost and enable the feature if needed.
 ---
  modules/libpref/init/all.js                   |   4 +-
  .../mozperftest/system/ml_services.py         |   8 +-
- .../mozperftest/tests/test_ml_services.py     |  34 +-
+ .../mozperftest/tests/test_ml_services.py     |  32 --
  .../aboutinference/content/aboutInference.js  | 385 +-----------------
  .../ml/content/EngineProcess.sys.mjs          |  12 +-
  .../components/ml/content/ModelHub.sys.mjs    |   8 +-
- toolkit/components/ml/docs/api.rst            |  52 +--
- toolkit/components/ml/docs/architecture.rst   |   4 +-
- toolkit/components/ml/docs/models.rst         |   2 +-
+ toolkit/components/ml/docs/api.md             |  52 +--
+ toolkit/components/ml/docs/architecture.md    |   4 +-
+ toolkit/components/ml/docs/models.md          |   2 +-
  .../ml/tests/browser/browser_ml_cache.js      |   2 +-
  .../browser/browser_ml_static_embeddings.js   |   4 +-
  .../ml/tests/browser/browser_ml_utils.js      |  65 ---
  .../internal/ModelHubProvider.sys.mjs         |   6 +-
  .../test/xpcshell/test_ModelHubProvider.js    |  12 +-
- 14 files changed, 29 insertions(+), 569 deletions(-)
+ 14 files changed, 29 insertions(+), 567 deletions(-)
 
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index b11dff1a1b..c129f942c8 100644
+index 16c287fd45..acdc72b918 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3642,11 +3642,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
+@@ -3653,11 +3653,11 @@ pref("browser.ai.control.sidebarChatbot", "default");
  pref("browser.ai.control.smartWindow", "default");
  
  // Enable the experimental machine learning inference engine.
@@ -907,15 +892,11 @@ index 9e38b73cd9..7a4d20a6cf 100644
  PREFS = {
      "services.settings.server": "resource://app/defaults/settings/",
 diff --git a/python/mozperftest/mozperftest/tests/test_ml_services.py b/python/mozperftest/mozperftest/tests/test_ml_services.py
-index bf6d29b6dc..c8ceb41bd8 100644
+index 963a43a4e2..c8ceb41bd8 100644
 --- a/python/mozperftest/mozperftest/tests/test_ml_services.py
 +++ b/python/mozperftest/mozperftest/tests/test_ml_services.py
-@@ -41,41 +41,9 @@ def test_ml_services_sets_browser_prefs():
-         assert "services.settings.server" in browser_prefs
-         assert (
-             browser_prefs["services.settings.server"]
--            == "https://firefox.settings.services.mozilla.com/v1"
-+            == "resource://app/defaults/settings/"
+@@ -44,38 +44,6 @@ def test_ml_services_sets_browser_prefs():
+             == "resource://app/defaults/settings/"
          )
  
 -        assert "network.socket.allowed_nonlocal_domains" in browser_prefs
@@ -954,7 +935,7 @@ index bf6d29b6dc..c8ceb41bd8 100644
          cleanup_ml_services(mach_cmd)
  
 diff --git a/toolkit/components/aboutinference/content/aboutInference.js b/toolkit/components/aboutinference/content/aboutInference.js
-index b8fae83dd0..483c14e7e8 100644
+index 6672be945f..096f4232a2 100644
 --- a/toolkit/components/aboutinference/content/aboutInference.js
 +++ b/toolkit/components/aboutinference/content/aboutInference.js
 @@ -87,319 +87,7 @@ const TINY_ARTICLE =
@@ -1242,7 +1223,7 @@ index b8fae83dd0..483c14e7e8 100644
 -    runOptions: {
 -      nPredict: 100,
 -    },
--    task: "wllama-text-generation",
+-    task: "llama-text-generation",
 -    modelId:
 -      "HuggingFaceTB/SmolLM2-360M-Instruct-GGUF/smollm2-360m-instruct-q8_0.gguf",
 -    modelRevision: "main",
@@ -1338,13 +1319,13 @@ index b8fae83dd0..483c14e7e8 100644
 -    },
 -    {
 -      name: "link-preview",
--      compatibleBackends: [lazy.BACKENDS.wllama],
+-      compatibleBackends: [lazy.BACKENDS.llamaCpp],
 -      inputArgs: `Summarize this: ${TINY_ARTICLE}`,
 -      runOptions: {
 -        nPredict: 100,
 -      },
 -      pipelineOptions: {
--        taskName: "wllama-text-generation",
+-        taskName: "llama-text-generation",
 -        modelId: "HuggingFaceTB/SmolLM2-360M-Instruct-GGUF",
 -        modelFile: "smollm2-360m-instruct-q8_0.gguf",
 -        modelRevision: "main",
@@ -1364,10 +1345,10 @@ index b8fae83dd0..483c14e7e8 100644
    let results = [];
  
 diff --git a/toolkit/components/ml/content/EngineProcess.sys.mjs b/toolkit/components/ml/content/EngineProcess.sys.mjs
-index 025d5aaacf..1fdebbdbb8 100644
+index 76f587b9c0..f0f5de885d 100644
 --- a/toolkit/components/ml/content/EngineProcess.sys.mjs
 +++ b/toolkit/components/ml/content/EngineProcess.sys.mjs
-@@ -241,18 +241,12 @@ class PipelineOptionsValidationError extends Error {
+@@ -257,18 +257,12 @@ class PipelineOptionsValidationError extends Error {
   * @enum {string}
   */
  export const ModelHub = {
@@ -1390,7 +1371,7 @@ index 025d5aaacf..1fdebbdbb8 100644
          options.modelRevision = "main";
          break;
 diff --git a/toolkit/components/ml/content/ModelHub.sys.mjs b/toolkit/components/ml/content/ModelHub.sys.mjs
-index 7aee254d12..acb04a45ed 100644
+index 15a438ca77..7689c08d8a 100644
 --- a/toolkit/components/ml/content/ModelHub.sys.mjs
 +++ b/toolkit/components/ml/content/ModelHub.sys.mjs
 @@ -45,8 +45,8 @@ const ALLOWED_HEADERS_KEYS = [
@@ -1404,7 +1385,7 @@ index 7aee254d12..acb04a45ed 100644
  const MOCHITESTS_HOSTNAME = "mochitests";
  const DEFAULT_CONTENT_TYPE = "application/octet-stream";
  const DEFAULT_DELETE_TIMEOUT_MS = 5000;
-@@ -87,7 +87,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
+@@ -94,7 +94,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
    lazy,
    "DEFAULT_ROOT_URL",
    "browser.ml.modelHubRootUrl",
@@ -1413,7 +1394,7 @@ index 7aee254d12..acb04a45ed 100644
  );
  
  const ONE_GIB = 1024 * 1024 * 1024;
-@@ -173,7 +173,7 @@ class ModelOwner {
+@@ -180,7 +180,7 @@ class ModelOwner {
  
      // Switch from Mozilla to Hugging Face if needed
      if (this.hostname === MOZILLA_HUB_HOSTNAME) {
@@ -1422,39 +1403,38 @@ index 7aee254d12..acb04a45ed 100644
      }
  
      const hubRootUrl = `https://${this.hostname}/`;
-diff --git a/toolkit/components/ml/docs/api.rst b/toolkit/components/ml/docs/api.rst
-index 4f89dfab05..7a618573d4 100644
---- a/toolkit/components/ml/docs/api.rst
-+++ b/toolkit/components/ml/docs/api.rst
-@@ -56,7 +56,7 @@ To get access to the full toolbox, set the **devtools.debugger.remote-enabled**
+diff --git a/toolkit/components/ml/docs/api.md b/toolkit/components/ml/docs/api.md
+index 9d1f9ec111..ece1df2ae5 100644
+--- a/toolkit/components/ml/docs/api.md
++++ b/toolkit/components/ml/docs/api.md
+@@ -51,7 +51,7 @@ To get access to the full toolbox, set the **devtools.debugger.remote-enabled**
  We recommend using the toolbox to get access to more tools. You will get a security warning
  when starting it, when the toolbox connects to the browser.
  
--When running this code, Firefox will look for models in the Mozilla model hub located at https://model-hub.mozilla.org
-+When running this code, Iceweasel will look for models in the Mozilla model hub located at https://localhost
+-When running this code, Firefox will look for models in the Mozilla model hub located at <https://model-hub.mozilla.org>
++When running this code, Iceweasel will look for models in the Mozilla model hub located at <https://localhost>
  which contains a curated list of models.
  
- Available Options
-@@ -144,13 +144,6 @@ Each record comes with the following fields:
+ ## Available Options
+@@ -136,13 +136,6 @@ Each record comes with the following fields:
  
  When the API is about to fetch a file, its URL is controlled in the allow/deny list.
  
 -Examples of patterns:
 -
--- ALL models ALL VERSIONS from the mozilla organization on hugging face : https://huggingface.co/Mozilla/
--- ALL models ALL VERSIONS from our hub: https://model-hub.mozilla.org/
--- A specific model ALL VERSIONS https://huggingface.co/typeform/distilbert-base-uncased-mnli/
--- A specific model and a specific version https://huggingface.co/Mozilla/distilvit/blob/v0.5.0/
+-- ALL models ALL VERSIONS from the mozilla organization on hugging face : <https://huggingface.co/Mozilla/>
+-- ALL models ALL VERSIONS from our hub: <https://model-hub.mozilla.org/>
+-- A specific model ALL VERSIONS <https://huggingface.co/typeform/distilbert-base-uncased-mnli/>
+-- A specific model and a specific version <https://huggingface.co/Mozilla/distilvit/blob/v0.5.0/>
 -
  Each URL is tested and needs to be included in the allowlist and not in the denylist
  
  To bypass this check and allow Firefox to download any file for runnings models,
-@@ -160,49 +153,6 @@ If you want to add a new hub, organization or a specific model, ask us by
- `opening a ticket <https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Machine%20Learning>`_.
+@@ -151,47 +144,6 @@ you need to use the `MOZ_ALLOW_EXTERNAL_ML_HUB` environment variable.
+ If you want to add a new hub, organization or a specific model, ask us by
+ [opening a ticket](https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Machine%20Learning).
  
- 
--Using the Hugging Face model hub
--::::::::::::::::::::::::::::::::
+-## Using the Hugging Face model hub
 -
 -By default, the engine will use the Mozilla model hub. You will need to pass `huggingface` as `modelHub`.
 -
@@ -1462,73 +1442,81 @@ index 4f89dfab05..7a618573d4 100644
 -not allowed (see previous section) and you still want to experiment with the model,
 -use `MOZ_ALLOW_EXTERNAL_ML_HUB`.
 -
--To run against a Hugging Face model, visit `this page <https://huggingface.co/models?library=transformers.js>`_ and select on
+-To run against a Hugging Face model, visit [this page](https://huggingface.co/models?library=transformers.js) and select on
 -the top left corner `tasks`. You can pick a task and then choose a model.
 -
--For example, models for the `summarization` tasks compatible with our inference engine are listed `here <https://huggingface.co/models?pipeline_tag=summarization&library=transformers.js&sort=trending>`_.
+-For example, models for the `summarization` tasks compatible with our inference engine are listed [here](https://huggingface.co/models?pipeline_tag=summarization&library=transformers.js&sort=trending).
 -
 -Let's say you want to pick the `Xenova/distilbart-cnn-6-6` model. All you have to do is use the id when calling our
 -`createEngine` pipeline:
 -
--.. code-block:: javascript
--
--  const { createEngine } = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");
--
--  const options = {
--    taskName: "summarization",
--    modelId: "Xenova/distilbart-cnn-6-6",
--    modelHub: "huggingface"
--  };
+-```javascript
+-const { createEngine } = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");
 -
--  const engine = await createEngine(options);
+-const options = {
+-  taskName: "summarization",
+-  modelId: "Xenova/distilbart-cnn-6-6",
+-  modelHub: "huggingface"
+-};
 -
--  const text = 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, ' +
--  'and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. ' +
--  'During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest ' +
--  'man-made structure in the world, a title it held for 41 years until the Chrysler Building in New ' +
--  'York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to ' +
--  'the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the ' +
--  'Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second ' +
--  'tallest free-standing structure in France after the Millau Viaduct.';
+-const engine = await createEngine(options);
 -
--  const request = { args:  [text], options: { max_new_tokens: 100 } };
--  const res = await engine.run(request);
--  console.log(res[0]["summary_text"]);
+-const text = 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, ' +
+-'and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. ' +
+-'During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest ' +
+-'man-made structure in the world, a title it held for 41 years until the Chrysler Building in New ' +
+-'York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to ' +
+-'the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the ' +
+-'Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second ' +
+-'tallest free-standing structure in France after the Millau Viaduct.';
 -
+-const request = { args:  [text], options: { max_new_tokens: 100 } };
+-const res = await engine.run(request);
+-console.log(res[0]["summary_text"]);
+-```
 -
- Running the internal APIs
- :::::::::::::::::::::::::
- 
-diff --git a/toolkit/components/ml/docs/architecture.rst b/toolkit/components/ml/docs/architecture.rst
-index 8e19a84d97..300cbf8ed0 100644
---- a/toolkit/components/ml/docs/architecture.rst
-+++ b/toolkit/components/ml/docs/architecture.rst
-@@ -162,9 +162,7 @@ is passed to the backend where it can be streamed into memory.
-       subgraph ModelHub["Model Hub"]
-          direction LR
-          Allowed["Allowed hubs"]
--         Allowed --> MH["model-hub.mozilla.org"]
--         Allowed --> HF1["huggingface.co/Mozilla"]
--         Allowed --> HF2["huggingface.co/Xenova"]
-+         Allowed --> MH["localhost"]
-          Allowed --> ETC["..."]
-       end
- 
-diff --git a/toolkit/components/ml/docs/models.rst b/toolkit/components/ml/docs/models.rst
-index d21112388f..c95e424aa1 100644
---- a/toolkit/components/ml/docs/models.rst
-+++ b/toolkit/components/ml/docs/models.rst
-@@ -113,7 +113,7 @@ By doing this, you will be able to create an engine with this simple call:
+ ## Running the internal APIs
+ 
+ Some inference tasks are doing more complex operations within the engine, such as image processing.
+@@ -209,7 +161,7 @@ const options = {taskName: "moz-image-to-text" };
+ const engine = await createEngine(options);
+ 
+ // Preparing a request
+-const request = {url: "https://huggingface.co/datasets/mishig/sample_images/resolve/main/football-match.jpg"};
++const request = {url: "https://example.invalid/example.jpg"};
+ 
+ // At this point we are ready to do some inference.
+ const res = await engine.run(request);
+diff --git a/toolkit/components/ml/docs/architecture.md b/toolkit/components/ml/docs/architecture.md
+index 7ad06fcfb2..d5a0967273 100644
+--- a/toolkit/components/ml/docs/architecture.md
++++ b/toolkit/components/ml/docs/architecture.md
+@@ -152,9 +152,7 @@ flowchart TD
+    subgraph ModelHub["Model Hub"]
+       direction LR
+       Allowed["Allowed hubs"]
+-      Allowed --> MH["model-hub.mozilla.org"]
+-      Allowed --> HF1["huggingface.co/Mozilla"]
+-      Allowed --> HF2["huggingface.co/Xenova"]
++      Allowed --> MH["localhost"]
+       Allowed --> ETC["..."]
+    end
+ 
+diff --git a/toolkit/components/ml/docs/models.md b/toolkit/components/ml/docs/models.md
+index b1bd35a715..97a1f3817f 100644
+--- a/toolkit/components/ml/docs/models.md
++++ b/toolkit/components/ml/docs/models.md
+@@ -103,7 +103,7 @@ const engine = await createEngine({featureId: "pdfjs-alt-text"});
  Our Model hub follows the same structure than Hugging Face, each file for a model is under
  a unique URL:
  
--  `https://model-hub.mozilla.org/<organization>/<model>/<revision>/<path>`
-+  `https://localhost/<organization>/<model>/<revision>/<path>`
+-`https://model-hub.mozilla.org/<organization>/<model>/<revision>/<path>`
++`https://localhost/<organization>/<model>/<revision>/<path>`
  
  Where:
- - `organization` and `name` are the model id. example " `mozilla/distivit`"
+ \- `organization` and `name` are the model id. example " `mozilla/distivit`"
 diff --git a/toolkit/components/ml/tests/browser/browser_ml_cache.js b/toolkit/components/ml/tests/browser/browser_ml_cache.js
-index c3c8069e76..ca5d7eda14 100644
+index 20c0e07a11..2bf341e8c8 100644
 --- a/toolkit/components/ml/tests/browser/browser_ml_cache.js
 +++ b/toolkit/components/ml/tests/browser/browser_ml_cache.js
 @@ -52,7 +52,7 @@ const FAKE_ONNX_MODEL_ARGS = {
@@ -1733,7 +1721,7 @@ index eb2a2cf35d..e5f120fd0a 100644
 2.55.0
 
 
-From 203bea547e9033d26a8807e4beb6d641c13202e1 Mon Sep 17 00:00:00 2001
+From 43a9947985a1c5363813e92480eca0f2ae8e27bf Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 22 Jul 2025 20:46:59 +0000
 Subject: [PATCH 08/10] Ensure 'Suggest more of my tabs' feature disabled
@@ -1748,10 +1736,10 @@ introducing them to pacman repositories.
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 26d2404747..d81abc64c7 100644
+index 58a50176c8..29259f6421 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1105,7 +1105,7 @@ pref("browser.tabs.groups.enabled", true);
+@@ -1143,7 +1143,7 @@ pref("browser.tabs.groups.enabled", true);
  pref("browser.tabs.groups.hoverPreview.enabled", true);
  pref("browser.tabs.groups.alternateMenu", false);
  
@@ -1764,7 +1752,7 @@ index 26d2404747..d81abc64c7 100644
 2.55.0
 
 
-From a1c6759c0f3950e212ce2807dfddbc29881f4556 Mon Sep 17 00:00:00 2001
+From da47e8762e1b05ff26404e59d7cb624ce4c39b91 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 9 Mar 2026 16:58:34 +0100
 Subject: [PATCH 09/10] Block and hide AI Controls in Preferences
@@ -1782,10 +1770,10 @@ Please see the previous patches for the reasons.
  8 files changed, 13 insertions(+), 147 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index d81abc64c7..01dbd07e0c 100644
+index 29259f6421..75f0ad2f52 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1409,7 +1409,7 @@ pref("browser.preferences.experimental.hidden", false);
+@@ -1452,7 +1452,7 @@ pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
  pref("browser.preferences.moreFromMozilla", true);
  // Whether we show the "AI Controls" pane.
@@ -1794,7 +1782,7 @@ index d81abc64c7..01dbd07e0c 100644
  // Whether to show unavailable AI controls regardless of region/locale
  // restrictions. This is intended for localizers to be able to see the strings.
  pref("browser.preferences.aiControls.showUnavailable", false);
-@@ -2226,7 +2226,7 @@ pref("sidebar.openTabsPanel.enabled", false);
+@@ -2282,7 +2282,7 @@ pref("sidebar.openTabsPanel.collapsedWindows", "{}");
  
  pref("sidebar.notification.badge.aichat", false);
  
@@ -1914,7 +1902,7 @@ index c8620d9ef5..9f0416f2e7 100644
  
  const Template = ({ sites }) => html`
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
-index 5c46cb8662..da0cb449c4 100644
+index 8b72d0e86b..92769a6cee 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
 +++ b/browser/components/aiwindow/ui/test/browser/test_website_confirmation_page.html
 @@ -21,40 +21,7 @@
@@ -1960,11 +1948,11 @@ index 5c46cb8662..da0cb449c4 100644
          const allCheckedConfirmation = document.getElementById("test-confirmation-all-checked");
          allCheckedConfirmation.tabs = [
 diff --git a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
-index 63416ca020..6825c62fb8 100644
+index 733de59ca4..97cca75b14 100644
 --- a/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
 +++ b/browser/components/aiwindow/ui/test/browser/test_website_select_page.html
 @@ -8,28 +8,5 @@
-     <link rel="localization" href="preview/aiWindow.ftl">
+     <link rel="localization" href="browser/aiWindow.ftl">
    </head>
    <body>
 -    <ai-website-select
@@ -1993,10 +1981,10 @@ index 63416ca020..6825c62fb8 100644
    </body>
  </html>
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 390ede774d..86c6c62f34 100644
+index 13e00e7bb6..ab9104ecc3 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -2458,7 +2458,7 @@ preferences-ai-controls-key-points-control =
+@@ -2496,7 +2496,7 @@ preferences-ai-controls-key-points-control =
  
  preferences-ai-controls-sidebar-chatbot-group =
      .label = AI chatbot providers in sidebar
@@ -2006,10 +1994,10 @@ index 390ede774d..86c6c62f34 100644
  preferences-ai-controls-sidebar-chatbot-control =
      .label = Chatbot in sidebar
 diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index c129f942c8..88a0f08fbe 100644
+index acdc72b918..055d79c7c4 100644
 --- a/modules/libpref/init/all.js
 +++ b/modules/libpref/init/all.js
-@@ -3633,13 +3633,13 @@ pref("browser.translations.chaos.errors", false);
+@@ -3644,13 +3644,13 @@ pref("browser.translations.chaos.errors", false);
  pref("browser.translations.chaos.timeoutMS", 0);
  
  // AI controls
@@ -2034,7 +2022,7 @@ index c129f942c8..88a0f08fbe 100644
 2.55.0
 
 
-From be301d2e340b1ccef828b9b237aea4342328332a Mon Sep 17 00:00:00 2001
+From 1e341ac9f9e59e6061b0bcdb0a4561083be506bf Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Mon, 16 Sep 2024 01:49:27 +0200
 Subject: [PATCH 10/10] Wipe Merino hostname. Disable Weather, Yelp, Sports
@@ -2051,11 +2039,18 @@ doesn't ship any providers for these.
  browser/app/profile/firefox.js                | 30 ++++++++---------
  .../aiwindow/models/WCSMerinoClient.sys.mjs   |  2 +-
  .../quicksuggest/MerinoTestUtils.sys.mjs      |  2 +-
+ .../newtab/bin/render-activity-stream-html.js |  2 +-
  .../CardSections/CardSections.jsx             |  2 +-
+ .../content/abouthomecache/page.html.template |  2 +-
  .../newtab/lib/ActivityStream.sys.mjs         | 14 ++++----
+ .../prerendered/activity-stream-debug.html    |  2 +-
+ .../activity-stream-noscripts.html            |  2 +-
+ .../newtab/prerendered/activity-stream.html   |  2 +-
  .../CardSections.test.jsx                     |  6 ++--
+ .../components/Widgets/Crossword.test.jsx     |  6 ++--
  .../CardSections.test.jsx                     |  6 ++--
  .../test/unit/lib/DiscoveryStreamFeed.test.js |  2 +-
+ .../test/xpcshell/test_PictureOfTheDayFeed.js |  4 +--
  .../newtab/test/xpcshell/topstories.json      |  2 +-
  docs/rust-components/topic-guides/merino.md   | 32 +++++++++----------
  .../components/browser/icons/IconRequest.kt   |  2 --
@@ -2076,13 +2071,13 @@ doesn't ship any providers for these.
  .../components/viaduct/src/ohttp.rs           |  8 ++---
  .../examples/merino-cli/src/main.rs           |  4 +--
  .../examples/viaduct-cli/src/main.rs          |  2 +-
- 28 files changed, 102 insertions(+), 114 deletions(-)
+ 35 files changed, 112 insertions(+), 124 deletions(-)
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 01dbd07e0c..5d232d951b 100644
+index 75f0ad2f52..552c8313dd 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -487,7 +487,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
+@@ -518,7 +518,7 @@ pref("browser.urlbar.weather.uiTreatment", 0);
  
  // If `browser.urlbar.weather.featureGate` is true, this controls whether
  // weather suggestions are turned on.
@@ -2091,7 +2086,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // If `browser.urlbar.trending.featureGate` is true, this controls whether
  // trending suggestions are turned on.
-@@ -684,13 +684,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
+@@ -722,13 +722,13 @@ pref("browser.urlbar.keepPanelOpenDuringImeComposition", false);
  pref("browser.urlbar.groupLabels.enabled", true);
  
  // The Merino endpoint URL, not including parameters.
@@ -2108,7 +2103,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // Timeout for Merino fetches (ms).
  pref("browser.urlbar.merino.timeoutMs", 500);
-@@ -699,8 +699,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
+@@ -737,8 +737,8 @@ pref("browser.urlbar.merino.timeoutMs", 500);
  pref("browser.urlbar.merino.providers", "");
  
  // Merino endpoint prefs to be used for weather widgets
@@ -2119,7 +2114,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // Comma-separated list of client variants to send to Merino
  pref("browser.urlbar.merino.clientVariants", "");
-@@ -749,7 +749,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
+@@ -787,7 +787,7 @@ pref("browser.urlbar.mdn.minKeywordLength", 0);
  
  // If `browser.urlbar.mdn.featureGate` is true, this controls whether
  // mdn suggestions are turned on.
@@ -2128,7 +2123,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // Feature gate pref for Yelp suggestions in the urlbar.
  pref("browser.urlbar.yelp.featureGate", false);
-@@ -771,7 +771,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
+@@ -809,7 +809,7 @@ pref("browser.urlbar.yelp.serviceResultDistinction", false);
  
  // If `browser.urlbar.yelp.featureGate` is true, this controls whether
  // Yelp suggestions are turned on.
@@ -2137,7 +2132,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // Feature gate pref for Fakespot suggestions in the urlbar.
  // TODO Bug 1982966: Remove this after all experiments and rollouts using it
-@@ -1879,7 +1879,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
+@@ -1928,7 +1928,7 @@ pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
  pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true);
  
  // Weather widget for newtab
@@ -2146,7 +2141,7 @@ index 01dbd07e0c..5d232d951b 100644
  pref("browser.newtabpage.activity-stream.weather.query", "");
  pref("browser.newtabpage.activity-stream.weather.display", "detailed");
  
-@@ -1889,10 +1889,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
+@@ -1938,10 +1938,10 @@ pref("browser.newtabpage.activity-stream.images.smart", true);
  pref("browser.newtabpage.activity-stream.weather.locationSearchEnabled", true);
  
  // List of regions that get weather by default.
@@ -2159,7 +2154,7 @@ index 01dbd07e0c..5d232d951b 100644
  
  // Promo card visibility
  pref("browser.newtabpage.activity-stream.discoverystream.promoCard.visible", true);
-@@ -2037,10 +2037,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
+@@ -2086,10 +2086,10 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.
  // List of locales for contextual ads.
  pref("browser.newtabpage.activity-stream.discoverystream.sections.contextualAds.locale-config", "en-US,en-GB,en-CA");
  
@@ -2173,7 +2168,7 @@ index 01dbd07e0c..5d232d951b 100644
  pref("browser.newtabpage.activity-stream.discoverystream.imageProxy.enabled", true);
  
  // List of regions that get spocs by default.
-@@ -2281,7 +2281,7 @@ pref("places.semanticHistory.smartwindow.featureGate", false);
+@@ -2351,7 +2351,7 @@ pref("browser.smartwindow.autoTabGrouping.loglevel", "Warn");
  
  // Smart Window: Merino World Cup Soccer tool call (bug 2038266)
  pref("browser.smartwindow.worldcup.enabled", true);
@@ -2181,7 +2176,7 @@ index 01dbd07e0c..5d232d951b 100644
 +pref("browser.smartwindow.worldcup.endpointURL", "");
  pref("browser.smartwindow.worldcup.timeoutMs", 2000);
  
- // Smart Window Logging
+ // Smart Window: Exa search endpoint, used by the search_the_web agentic flow (bug 2037948)
 diff --git a/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs b/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs
 index a82d93dbd3..6f2353d383 100644
 --- a/browser/components/aiwindow/models/WCSMerinoClient.sys.mjs
@@ -2208,8 +2203,21 @@ index fc8ca65216..06c3492aac 100644
        is_sponsored: false,
        score: 0,
        custom_details: {
+diff --git a/browser/extensions/newtab/bin/render-activity-stream-html.js b/browser/extensions/newtab/bin/render-activity-stream-html.js
+index 0f856f61e8..d17b0ee2ca 100644
+--- a/browser/extensions/newtab/bin/render-activity-stream-html.js
++++ b/browser/extensions/newtab/bin/render-activity-stream-html.js
+@@ -60,7 +60,7 @@ function templateHTML(options) {
+     <meta charset="utf-8" />
+     <meta
+       http-equiv="Content-Security-Policy"
+-      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src https://stage-games-particle.merino.nonprod.webservices.mozgcp.net https://prod-games-particle.merino.prod.webservices.mozgcp.net;"
++      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src 'none';"
+     />
+     <meta name="color-scheme" content="light dark" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
 diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
-index 976a12f8e9..3ae55c6095 100644
+index d6022b4e85..36254fbb6f 100644
 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamComponents/CardSections/CardSections.jsx
 @@ -50,7 +50,7 @@ const PREF_NOVA_ENABLED = "nova.enabled";
@@ -2221,28 +2229,24 @@ index 976a12f8e9..3ae55c6095 100644
  
  // Divides evenly by 2, 3, and 4 to avoid orphan cards in any column layout.
  const DEFAULT_MAX_TILES = 12;
+diff --git a/browser/extensions/newtab/data/content/abouthomecache/page.html.template b/browser/extensions/newtab/data/content/abouthomecache/page.html.template
+index 1276833e59..39ab885df9 100644
+--- a/browser/extensions/newtab/data/content/abouthomecache/page.html.template
++++ b/browser/extensions/newtab/data/content/abouthomecache/page.html.template
+@@ -22,7 +22,7 @@
+ <html>
+   <head>
+     <meta charset="utf-8">
+-    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src https://stage-games-particle.merino.nonprod.webservices.mozgcp.net https://prod-games-particle.merino.prod.webservices.mozgcp.net;">
++    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src 'none';">
+     <meta name="color-scheme" content="light dark">
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
+     <title data-l10n-id="newtab-page-title"></title>
 diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-index 9fbf508dd6..74dd05b190 100644
+index 558cf344b7..294e3d980c 100644
 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
 +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
-@@ -535,7 +535,7 @@ export const PREFS_CONFIG = new Map([
-     {
-       title:
-         "Temporary measure for trainhopping. This adds the Merino endpoint for the weather report",
--      value: "https://merino.services.mozilla.com/api/v1/suggest",
-+      value: "",
-     },
-   ],
-   [
-@@ -544,28 +544,28 @@ export const PREFS_CONFIG = new Map([
-       title:
-         "Temporary measure for trainhopping. This adds the Merino endpoint for the hourly forecasts to display in Weather Forecast widget",
-       value:
--        "https://merino.services.mozilla.com/api/v1/weather/hourly-forecasts",
-+        "",
-     },
-   ],
-   [
+@@ -557,21 +557,21 @@ export const PREFS_CONFIG = new Map([
      "sports.worldCup.teamsEndpoint",
      {
        title: "The Merino endpoint for fetching available World Cup teams data",
@@ -2267,7 +2271,7 @@ index 9fbf508dd6..74dd05b190 100644
      },
    ],
    [
-@@ -573,7 +573,7 @@ export const PREFS_CONFIG = new Map([
+@@ -579,7 +579,7 @@ export const PREFS_CONFIG = new Map([
      {
        title:
          "The Merino endpoint for fetching World Cup watch-live broadcaster data",
@@ -2276,7 +2280,16 @@ index 9fbf508dd6..74dd05b190 100644
      },
    ],
    [
-@@ -1385,7 +1385,7 @@ export const PREFS_CONFIG = new Map([
+@@ -587,7 +587,7 @@ export const PREFS_CONFIG = new Map([
+     {
+       title: "The Merino endpoint for fetching the daily Picture of the day",
+       value:
+-        "https://merino.services.mozilla.com/api/v1/rss/picture-of-the-day",
++        "",
+     },
+   ],
+   [
+@@ -1433,7 +1433,7 @@ export const PREFS_CONFIG = new Map([
      "widgets.sportsWidget.enabled",
      {
        title: "Enables the sports widget",
@@ -2285,11 +2298,59 @@ index 9fbf508dd6..74dd05b190 100644
      },
    ],
    [
+@@ -1623,7 +1623,7 @@ export const PREFS_CONFIG = new Map([
+       title:
+         "The Merino endpoint that serves the crossword bundle rendered in the widget iframe",
+       value:
+-        "https://prod-games-particle.merino.prod.webservices.mozgcp.net/index.html",
++        "",
+     },
+   ],
+   [
+diff --git a/browser/extensions/newtab/prerendered/activity-stream-debug.html b/browser/extensions/newtab/prerendered/activity-stream-debug.html
+index c912e4a60d..e77d529f3f 100644
+--- a/browser/extensions/newtab/prerendered/activity-stream-debug.html
++++ b/browser/extensions/newtab/prerendered/activity-stream-debug.html
+@@ -10,7 +10,7 @@
+     <meta charset="utf-8" />
+     <meta
+       http-equiv="Content-Security-Policy"
+-      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src https://stage-games-particle.merino.nonprod.webservices.mozgcp.net https://prod-games-particle.merino.prod.webservices.mozgcp.net;"
++      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src 'none';"
+     />
+     <meta name="color-scheme" content="light dark" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
+diff --git a/browser/extensions/newtab/prerendered/activity-stream-noscripts.html b/browser/extensions/newtab/prerendered/activity-stream-noscripts.html
+index 75e313c6cb..1546b31bea 100644
+--- a/browser/extensions/newtab/prerendered/activity-stream-noscripts.html
++++ b/browser/extensions/newtab/prerendered/activity-stream-noscripts.html
+@@ -10,7 +10,7 @@
+     <meta charset="utf-8" />
+     <meta
+       http-equiv="Content-Security-Policy"
+-      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src https://stage-games-particle.merino.nonprod.webservices.mozgcp.net https://prod-games-particle.merino.prod.webservices.mozgcp.net;"
++      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src 'none';"
+     />
+     <meta name="color-scheme" content="light dark" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
+diff --git a/browser/extensions/newtab/prerendered/activity-stream.html b/browser/extensions/newtab/prerendered/activity-stream.html
+index c912e4a60d..e77d529f3f 100644
+--- a/browser/extensions/newtab/prerendered/activity-stream.html
++++ b/browser/extensions/newtab/prerendered/activity-stream.html
+@@ -10,7 +10,7 @@
+     <meta charset="utf-8" />
+     <meta
+       http-equiv="Content-Security-Policy"
+-      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src https://stage-games-particle.merino.nonprod.webservices.mozgcp.net https://prod-games-particle.merino.prod.webservices.mozgcp.net;"
++      content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; media-src chrome:; style-src 'unsafe-inline'; frame-src 'none';"
+     />
+     <meta name="color-scheme" content="light dark" />
+     <meta name="viewport" content="width=device-width, initial-scale=1" />
 diff --git a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
-index 1a9f055057..456e1493e8 100644
+index 62d2cfb12c..f6b90e2e12 100644
 --- a/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 +++ b/browser/extensions/newtab/test/jest/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
-@@ -56,7 +56,7 @@ const DEFAULT_PROPS = {
+@@ -59,7 +59,7 @@ const DEFAULT_PROPS = {
    },
    feed: {
      embed_reference: null,
@@ -2298,7 +2359,7 @@ index 1a9f055057..456e1493e8 100644
    },
  };
  
-@@ -643,7 +643,7 @@ describe("<CardSections />", () => {
+@@ -646,7 +646,7 @@ describe("<CardSections />", () => {
            ...INITIAL_STATE.DiscoveryStream,
            feeds: {
              data: {
@@ -2307,7 +2368,7 @@ index 1a9f055057..456e1493e8 100644
                  {
                    data: {
                      recommendations: [
-@@ -681,7 +681,7 @@ describe("<CardSections />", () => {
+@@ -684,7 +684,7 @@ describe("<CardSections />", () => {
  
      it("should not render BriefingCard when fewer than 3 headlines available", () => {
        state.DiscoveryStream.feeds.data[
@@ -2316,6 +2377,37 @@ index 1a9f055057..456e1493e8 100644
        ].data.recommendations = MOCK_HEADLINES.slice(0, 2);
  
        const { container } = render(
+diff --git a/browser/extensions/newtab/test/jest/content-src/components/Widgets/Crossword.test.jsx b/browser/extensions/newtab/test/jest/content-src/components/Widgets/Crossword.test.jsx
+index 2eb2c19c9d..03b4ddf45c 100644
+--- a/browser/extensions/newtab/test/jest/content-src/components/Widgets/Crossword.test.jsx
++++ b/browser/extensions/newtab/test/jest/content-src/components/Widgets/Crossword.test.jsx
+@@ -12,7 +12,7 @@ import { Crossword } from "content-src/components/Widgets/Crossword/Crossword";
+ // Origin of the endpoint in baseState; the component only accepts inbound
+ // messages from, and targets outbound commands at, this exact origin.
+ const MERINO_ORIGIN =
+-  "https://prod-games-particle.merino.prod.webservices.mozgcp.net";
++  "";
+ 
+ const baseState = {
+   ...INITIAL_STATE,
+@@ -26,7 +26,7 @@ const baseState = {
+       "widgets.crossword.enabled": true,
+       "widgets.crossword.size": "",
+       "widgets.crossword.endpoint":
+-        "https://prod-games-particle.merino.prod.webservices.mozgcp.net/index.html",
++        "",
+     },
+   },
+ };
+@@ -243,7 +243,7 @@ describe("<Crossword>", () => {
+       );
+       expect(frame).toHaveAttribute(
+         "src",
+-        "https://prod-games-particle.merino.prod.webservices.mozgcp.net/index.html"
++        ""
+       );
+     });
+ 
 diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
 index 13ac94e24e..320b8d261f 100644
 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CardSections.test.jsx
@@ -2348,10 +2440,10 @@ index 13ac94e24e..320b8d261f 100644
  
        const props = createBriefingSectionProps();
 diff --git a/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js b/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
-index 5c00b10a20..90a7556497 100644
+index 514b59a4ae..f7fcf6d9a8 100644
 --- a/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
 +++ b/browser/extensions/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
-@@ -3367,7 +3367,7 @@ describe("DiscoveryStreamFeed", () => {
+@@ -3371,7 +3371,7 @@ describe("DiscoveryStreamFeed", () => {
        };
  
        feedsData = {
@@ -2360,6 +2452,27 @@ index 5c00b10a20..90a7556497 100644
            data: {
              sections: [
                {
+diff --git a/browser/extensions/newtab/test/xpcshell/test_PictureOfTheDayFeed.js b/browser/extensions/newtab/test/xpcshell/test_PictureOfTheDayFeed.js
+index bf8163d04d..3483a104d6 100644
+--- a/browser/extensions/newtab/test/xpcshell/test_PictureOfTheDayFeed.js
++++ b/browser/extensions/newtab/test/xpcshell/test_PictureOfTheDayFeed.js
+@@ -11,14 +11,14 @@ ChromeUtils.defineESModuleGetters(this, {
+ });
+ 
+ const ENDPOINT =
+-  "https://merino.services.mozilla.com/api/v1/rss/picture-of-the-day";
++  "";
+ 
+ const ENABLED_PREFS = {
+   "widgets.enabled": true,
+   "widgets.pictureOfTheDay.enabled": true,
+   "widgets.system.pictureOfTheDay.enabled": true,
+   "widgets.pictureOfTheDay.endpoint": ENDPOINT,
+-  "discoverystream.endpoints": "https://merino.services.mozilla.com/",
++  "discoverystream.endpoints": "",
+   "newtabWallpapers.enabled": true,
+   "newtabWallpapers.customWallpaper.enabled": true,
+ };
 diff --git a/browser/extensions/newtab/test/xpcshell/topstories.json b/browser/extensions/newtab/test/xpcshell/topstories.json
 index e4e82bcb03..948c6e8d20 100644
 --- a/browser/extensions/newtab/test/xpcshell/topstories.json
@@ -2508,10 +2621,10 @@ index 3c91b0350f..89f6f75b5a 100644
  ### WorldCupOptions
  
 diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
-index daba47117f..604c19c762 100644
+index f70027c40c..ba262298c6 100644
 --- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
 +++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/IconRequest.kt
-@@ -133,8 +133,6 @@ data class IconRequest(
+@@ -128,8 +128,6 @@ data class IconRequest(
  
              /**
               * An icon found in Mozilla's Merino Manifest list.
@@ -2619,7 +2732,7 @@ index 63f8fd33bf..08b22f5a95 100644
  ## Testing
  
 diff --git a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
-index d1421e2375..481882362f 100644
+index afde339957..f8e49e5f85 100644
 --- a/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
 +++ b/third_party/application-services/components/merino/src/curated_recommendations/mod.rs
 @@ -25,7 +25,7 @@ use error_support::handle_error;
@@ -3016,10 +3129,10 @@ index 616e9a9344..4ef8a6c45f 100644
      );
  }
 diff --git a/third_party/application-services/components/viaduct/src/ohttp.rs b/third_party/application-services/components/viaduct/src/ohttp.rs
-index f6b9dc43b0..e962ddd2a7 100644
+index 41f088410c..48ae7fc2bb 100644
 --- a/third_party/application-services/components/viaduct/src/ohttp.rs
 +++ b/third_party/application-services/components/viaduct/src/ohttp.rs
-@@ -101,8 +101,8 @@ pub fn configure_default_ohttp_channels() -> Result<()> {
+@@ -86,8 +86,8 @@ pub fn configure_default_ohttp_channels() -> Result<()> {
      configure_ohttp_channel(
          "relay1".to_string(),
          OhttpConfig {
@@ -3030,7 +3143,7 @@ index f6b9dc43b0..e962ddd2a7 100644
          },
      )?;
  
-@@ -110,8 +110,8 @@ pub fn configure_default_ohttp_channels() -> Result<()> {
+@@ -95,8 +95,8 @@ pub fn configure_default_ohttp_channels() -> Result<()> {
      configure_ohttp_channel(
          "merino".to_string(),
          OhttpConfig {
@@ -3042,7 +3155,7 @@ index f6b9dc43b0..e962ddd2a7 100644
      )?;
  
 diff --git a/third_party/application-services/examples/merino-cli/src/main.rs b/third_party/application-services/examples/merino-cli/src/main.rs
-index 1bd22286f7..3c7ef6825b 100644
+index 316ed83b95..0e68cb4f9d 100644
 --- a/third_party/application-services/examples/merino-cli/src/main.rs
 +++ b/third_party/application-services/examples/merino-cli/src/main.rs
 @@ -43,11 +43,11 @@ enum Commands {
@@ -3060,10 +3173,10 @@ index 1bd22286f7..3c7ef6825b 100644
  
          /// Search query
 diff --git a/third_party/application-services/examples/viaduct-cli/src/main.rs b/third_party/application-services/examples/viaduct-cli/src/main.rs
-index 423cb4f465..7b8dc84c4e 100644
+index e3b2976267..c0bc2ba805 100644
 --- a/third_party/application-services/examples/viaduct-cli/src/main.rs
 +++ b/third_party/application-services/examples/viaduct-cli/src/main.rs
-@@ -171,7 +171,7 @@ fn run_ohttp_example(
+@@ -120,7 +120,7 @@ fn run_ohttp_example(relay_url: String, gateway_host: String, channel: String) -
  
      // Step 4: Make request
      println!("Creating request...");
diff --git a/libre/iceweasel/9003-FSDG-urihandlers.patch b/libre/iceweasel/9003-FSDG-urihandlers.patch
index 47e092c..295e9f0 100644
--- a/libre/iceweasel/9003-FSDG-urihandlers.patch
+++ b/libre/iceweasel/9003-FSDG-urihandlers.patch
@@ -1,4 +1,4 @@
-From 3f91d7daffacac98f02face1f0748d78142f17f8 Mon Sep 17 00:00:00 2001
+From d3acc6e94f9c3ae33633139e343bc20a60008060 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH] Remove URI handlers that serve nonfree software
diff --git a/libre/iceweasel/9004-FSDG-misc.patch b/libre/iceweasel/9004-FSDG-misc.patch
index 2f669e0..6f4b768 100644
--- a/libre/iceweasel/9004-FSDG-misc.patch
+++ b/libre/iceweasel/9004-FSDG-misc.patch
@@ -1,4 +1,4 @@
-From 44f9b9229e32ac5bc569dce7306cad1f5eba4959 Mon Sep 17 00:00:00 2001
+From 8abc6d16fb746c0f012b453aa00b1d2f704069c2 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 12 Mar 2022 17:14:25 +0100
 Subject: [PATCH 1/6] Replace upstream default bookmarks
@@ -81,7 +81,7 @@ index 2f764caf6f..a0f27ae8e7 100644
 2.55.0
 
 
-From 40ce02a958db75093cb446248d8eade41a543e4c Mon Sep 17 00:00:00 2001
+From a8d384095510fe62db6414f47c6dddbb42d08548 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:46:48 +0200
 Subject: [PATCH 2/6] Remove 'More from Mozilla' section in Preferences
@@ -101,10 +101,10 @@ reasons as desktop Firefox.
  delete mode 100644 browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 5d232d951b..1da5a9315a 100644
+index 552c8313dd..e10932b13d 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -1407,7 +1407,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
+@@ -1450,7 +1450,7 @@ pref("accessibility.typeaheadfind.flashBar", 1);
  // Whether we had to hide the "Firefox Labs" section because it would be empty.
  pref("browser.preferences.experimental.hidden", false);
  // Whether we show the "More from Mozilla" section.
@@ -114,10 +114,10 @@ index 5d232d951b..1da5a9315a 100644
  pref("browser.preferences.aiControls", false);
  // Whether to show unavailable AI controls regardless of region/locale
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index 3212c21da7..1d0c81561c 100644
+index 1acb4cbc2b..642ab6d550 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
-@@ -190,12 +190,6 @@ var allowlist = [
+@@ -199,12 +199,6 @@ var allowlist = [
    // extensions/pref/autoconfig/src/nsReadConfig.cpp
    { file: "resource://gre/defaults/autoconfig/prefcalls.js" },
  
@@ -131,7 +131,7 @@ index 3212c21da7..1d0c81561c 100644
  
    // toolkit/mozapps/extensions/AddonContentPolicy.cpp
 diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
-index de83282c2c..a21f23c29a 100644
+index a84468121d..c3309d80fa 100644
 --- a/browser/components/preferences/jar.mn
 +++ b/browser/components/preferences/jar.mn
 @@ -13,11 +13,9 @@ browser.jar:
@@ -146,8 +146,8 @@ index de83282c2c..a21f23c29a 100644
     content/browser/preferences/browser-layout-horizontal.svg
     content/browser/preferences/browser-layout-vertical.svg
     content/browser/preferences/web-appearance-dark.svg
-@@ -33,7 +31,6 @@ browser.jar:
-    content/browser/preferences/config/appearance.mjs                    (config/appearance.mjs)
+@@ -36,7 +34,6 @@ browser.jar:
+    content/browser/preferences/config/browser-icon.mjs                  (config/browser-icon.mjs)
     content/browser/preferences/config/aiFeatures.mjs                    (config/aiFeatures.mjs)
     content/browser/preferences/config/firefoxLabs.mjs                   (config/firefoxLabs.mjs)
 -   content/browser/preferences/config/moreFromMozilla.mjs               (config/moreFromMozilla.mjs)
@@ -156,16 +156,16 @@ index de83282c2c..a21f23c29a 100644
     content/browser/preferences/config/block-ai-confirmation-dialog.css  (config/block-ai-confirmation-dialog.css)
 diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 deleted file mode 100644
-index f187ff3e4c..0000000000
+index 947060c968..0000000000
 --- a/browser/components/preferences/more-from-mozilla-qr-code-simple.svg
 +++ /dev/null
 @@ -1,4 +0,0 @@
 -<!-- This Source Code Form is subject to the terms of the Mozilla Public
 -   - License, v. 2.0. If a copy of the MPL was not distributed with this
 -   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
--<svg width="80" height="80" fill="context-fill" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill-rule="evenodd" clip-rule="evenodd" d="M76 2H4a2 2 0 0 0-2 2v72a2 2 0 0 0 2 2h72a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM4 0a4 4 0 0 0-4 4v72a4 4 0 0 0 4 4h72a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4Zm3.08 7.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm20.434-2.27h2.27v2.27h2.27V7.08h4.541v2.27h2.27v2.27H36.596v2.27h-4.541v2.271h-2.27v-2.27h-2.271v-2.27h2.27V9.35h2.27V7.08Zm-4.541 4.54h-2.27V9.35h2.27v2.27Zm2.27 11.352v-4.54h2.27v-2.27h4.541V13.89h4.541v2.27h4.54v2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.271v2.271h-2.27Zm-4.54 2.27V18.433h2.27v4.54h2.27v2.27h-4.54Zm0 0v2.271h-9.081v-2.27h9.08Zm11.351-2.27h-2.27v-2.27h2.27v2.27Zm2.27 0h-2.27v4.541h-2.27v-2.27h-2.27v2.27h2.27v2.27h4.54V22.973Zm2.271 0v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v6.811h4.54v-2.27h-2.27v-4.54Zm2.27 0h-2.27v-2.27h2.27v2.27Zm4.542-6.81h-2.27V22.971h-2.271v2.27h2.27v2.271h2.27v2.27h-2.27v2.27h2.27v-2.27h2.271v2.27h2.27v2.271h2.27v-4.54h2.271v2.27h2.27v2.27h-2.27v2.27h-2.27v2.27h-4.541v6.811h2.27v2.271h4.541v4.541h-6.811v-2.27h-2.27v2.27h-2.27v-2.27h-4.541v2.27h-4.541v-2.27h-4.54v2.27h2.27v2.27h2.27v2.27H45.675v4.541h2.271v2.27h-2.27v2.271h-2.27v-4.54h-4.541v-2.27h-2.27v-2.271h-2.27v2.27h2.27v2.27h-2.27v2.27h-2.271v-2.27h-2.27v-2.27h-2.271v-4.54h2.27v2.27h2.27v-2.27h-2.27v-2.271h2.27v-2.27h-4.54v-2.27h2.27v-2.271h-2.27v-4.54h2.27v-2.271h-2.27v-6.811h2.27v-2.27h-2.27v2.27h-4.54v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54h-2.27V36.593H13.89v-4.54h-2.27v-2.27h2.27v-2.271H7.08v6.811h2.27v4.54h4.54v2.271h-2.27v2.27H9.35v-2.27H7.08v2.27h2.27v2.27H7.08v2.271h2.27v-2.27h2.27v2.27h2.27v-4.54h4.541v-2.27h-2.27v-4.541h2.27v2.27h2.27v2.27h2.271v2.27h-2.27v2.27h-2.27v2.271h-2.27v2.27H11.62v2.271H7.08v2.27h4.54v-2.27h4.541v2.27h9.081v9.081h4.541v4.541h-2.27v4.541h4.54v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-2.271h2.27v-2.27h2.27v2.27h2.271v2.27h-2.27v6.811H45.675v-4.54h2.271v4.54h2.27v-4.54h2.271v4.54h6.811v-2.27h2.27v2.27h2.27v-2.27h-2.27v-2.27h-4.54v-2.27h-9.081v-2.271H59.297v2.27h2.27v-2.27h2.27v4.54h4.541v4.541h2.271v-2.27h2.27v-4.54h-2.27v-2.271h2.27v-2.27h-2.27v-2.27h2.27v-4.541h-2.27v-4.541h2.27V27.513h-2.27v-2.27h-2.27v2.27h-6.811v-2.27h-4.541v2.27h-2.27v-2.27h-2.271v-2.27h2.27v-4.541h-4.54v-2.27Zm2.27-6.812h2.27v4.54h-2.27v2.271h-2.27v-4.54h2.27V9.35Zm0 0h-6.811V7.08h6.811v2.27Zm0 13.622v-2.27h-2.27v2.27h2.27Zm9.081 6.811v2.27h2.27v2.271h-2.27v2.27h-2.27v4.541h-4.54v2.27h2.27v2.27h4.54v-2.27h2.27v4.541h-2.27v4.541h2.27v6.811h2.271v2.27h-2.27v2.27h4.54v-4.54h2.271v-4.54h-2.27v-4.541h2.27v-4.541h-2.27v-4.54h2.27v-6.811h-2.27v-2.271h2.27v-2.27h-4.54v2.27h-2.271v-2.27h-2.27Zm6.812 24.974h-2.27v2.27h2.27v-2.27Zm0-4.54h-4.541v-2.27h4.54v2.27Zm-4.541-9.082h2.27v2.27h-2.27v-2.27Zm-2.27 0v-4.54h2.27v4.54h-2.27Zm4.54-4.54v-2.27h-2.27v2.27h2.27Zm0 0h2.27v2.27h-2.27v-2.27Zm-4.54 4.54v2.27h-2.27v-2.27h2.27Zm0-11.352v-2.27h-2.27v2.27h2.27ZM57.028 68.38h-2.27v2.27h2.27v-2.27Zm-24.974 0h-2.27v2.27h2.27v-2.27ZM20.702 47.946v2.27h2.27v2.271h-4.54v-4.54h2.27Zm2.27-2.27v2.27h-2.27v-2.27h2.27Zm2.27 0v2.27h2.271v-2.27h-2.27Zm0 0h-2.27v-2.27h2.27v2.27Zm-2.27-9.082v2.27h-2.27v-2.27h2.27Zm0 0h2.27v-2.27h-2.27v2.27ZM9.35 34.324v-2.27h2.27v2.27H9.35Zm15.893 20.433h2.27v-2.27h-2.27v2.27ZM41.135 66.11v4.541h2.27v-4.54h-2.27Zm6.811-4.54v-2.27h2.27v2.27h-2.27Zm-2.27-6.812h-2.27v-2.27h2.27v2.27Zm0 0v2.27h2.27v-2.27h-2.27Zm4.54-20.433v2.27h2.271v-2.27h-2.27Zm2.271-9.081h-2.27v2.27h2.27v-2.27Zm4.54-18.163H72.92v15.892H57.028V7.08Zm4.541 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm34.056 0h2.27v2.27h-2.27v-2.27Zm15.892 0h6.811v6.811H61.57V11.621Zm-4.54 43.137h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Z"/></svg>
+-<svg width="80" height="80" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="76" height="76" rx="2" ry="2" fill="white"/><path fill="#15141a" fill-rule="evenodd" clip-rule="evenodd" d="M76 2H4a2 2 0 0 0-2 2v72a2 2 0 0 0 2 2h72a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM4 0a4 4 0 0 0-4 4v72a4 4 0 0 0 4 4h72a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4Zm3.08 7.08h15.892v15.892H7.08V7.08Zm4.54 2.27H9.35V20.701H20.701V9.35h-9.08Zm20.434-2.27h2.27v2.27h2.27V7.08h4.541v2.27h2.27v2.27H36.596v2.27h-4.541v2.271h-2.27v-2.27h-2.271v-2.27h2.27V9.35h2.27V7.08Zm-4.541 4.54h-2.27V9.35h2.27v2.27Zm2.27 11.352v-4.54h2.27v-2.27h4.541V13.89h4.541v2.27h4.54v2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.27v-2.27h-2.27v2.27h-2.271v2.271h-2.27Zm-4.54 2.27V18.433h2.27v4.54h2.27v2.27h-4.54Zm0 0v2.271h-9.081v-2.27h9.08Zm11.351-2.27h-2.27v-2.27h2.27v2.27Zm2.27 0h-2.27v4.541h-2.27v-2.27h-2.27v2.27h2.27v2.27h4.54V22.973Zm2.271 0v-2.27h-2.27v2.27h2.27Zm2.27 0h-2.27v6.811h4.54v-2.27h-2.27v-4.54Zm2.27 0h-2.27v-2.27h2.27v2.27Zm4.542-6.81h-2.27V22.971h-2.271v2.27h2.27v2.271h2.27v2.27h-2.27v2.27h2.27v-2.27h2.271v2.27h2.27v2.271h2.27v-4.54h2.271v2.27h2.27v2.27h-2.27v2.27h-2.27v2.27h-4.541v6.811h2.27v2.271h4.541v4.541h-6.811v-2.27h-2.27v2.27h-2.27v-2.27h-4.541v2.27h-4.541v-2.27h-4.54v2.27h2.27v2.27h2.27v2.27H45.675v4.541h2.271v2.27h-2.27v2.271h-2.27v-4.54h-4.541v-2.27h-2.27v-2.271h-2.27v2.27h2.27v2.27h-2.27v2.27h-2.271v-2.27h-2.27v-2.27h-2.271v-4.54h2.27v2.27h2.27v-2.27h-2.27v-2.271h2.27v-2.27h-4.54v-2.27h2.27v-2.271h-2.27v-4.54h2.27v-2.271h-2.27v-6.811h2.27v-2.27h-2.27v2.27h-4.54v-2.27h-2.271v2.27h2.27v2.27h-4.54v-4.54h-2.27V36.593H13.89v-4.54h-2.27v-2.27h2.27v-2.271H7.08v6.811h2.27v4.54h4.54v2.271h-2.27v2.27H9.35v-2.27H7.08v2.27h2.27v2.27H7.08v2.271h2.27v-2.27h2.27v2.27h2.27v-4.54h4.541v-2.27h-2.27v-4.541h2.27v2.27h2.27v2.27h2.271v2.27h-2.27v2.27h-2.27v2.271h-2.27v2.27H11.62v2.271H7.08v2.27h4.54v-2.27h4.541v2.27h9.081v9.081h4.541v4.541h-2.27v4.541h4.54v-2.27h2.271v2.27h2.27v-4.54h-4.54v-2.27h2.27v-2.271h2.27v-2.27h2.27v2.27h2.271v2.27h-2.27v6.811H45.675v-4.54h2.271v4.54h2.27v-4.54h2.271v4.54h6.811v-2.27h2.27v2.27h2.27v-2.27h-2.27v-2.27h-4.54v-2.27h-9.081v-2.271H59.297v2.27h2.27v-2.27h2.27v4.54h4.541v4.541h2.271v-2.27h2.27v-4.54h-2.27v-2.271h2.27v-2.27h-2.27v-2.27h2.27v-4.541h-2.27v-4.541h2.27V27.513h-2.27v-2.27h-2.27v2.27h-6.811v-2.27h-4.541v2.27h-2.27v-2.27h-2.271v-2.27h2.27v-4.541h-4.54v-2.27Zm2.27-6.812h2.27v4.54h-2.27v2.271h-2.27v-4.54h2.27V9.35Zm0 0h-6.811V7.08h6.811v2.27Zm0 13.622v-2.27h-2.27v2.27h2.27Zm9.081 6.811v2.27h2.27v2.271h-2.27v2.27h-2.27v4.541h-4.54v2.27h2.27v2.27h4.54v-2.27h2.27v4.541h-2.27v4.541h2.27v6.811h2.271v2.27h-2.27v2.27h4.54v-4.54h2.271v-4.54h-2.27v-4.541h2.27v-4.541h-2.27v-4.54h2.27v-6.811h-2.27v-2.271h2.27v-2.27h-4.54v2.27h-2.271v-2.27h-2.27Zm6.812 24.974h-2.27v2.27h2.27v-2.27Zm0-4.54h-4.541v-2.27h4.54v2.27Zm-4.541-9.082h2.27v2.27h-2.27v-2.27Zm-2.27 0v-4.54h2.27v4.54h-2.27Zm4.54-4.54v-2.27h-2.27v2.27h2.27Zm0 0h2.27v2.27h-2.27v-2.27Zm-4.54 4.54v2.27h-2.27v-2.27h2.27Zm0-11.352v-2.27h-2.27v2.27h2.27ZM57.028 68.38h-2.27v2.27h2.27v-2.27Zm-24.974 0h-2.27v2.27h2.27v-2.27ZM20.702 47.946v2.27h2.27v2.271h-4.54v-4.54h2.27Zm2.27-2.27v2.27h-2.27v-2.27h2.27Zm2.27 0v2.27h2.271v-2.27h-2.27Zm0 0h-2.27v-2.27h2.27v2.27Zm-2.27-9.082v2.27h-2.27v-2.27h2.27Zm0 0h2.27v-2.27h-2.27v2.27ZM9.35 34.324v-2.27h2.27v2.27H9.35Zm15.893 20.433h2.27v-2.27h-2.27v2.27ZM41.135 66.11v4.541h2.27v-4.54h-2.27Zm6.811-4.54v-2.27h2.27v2.27h-2.27Zm-2.27-6.812h-2.27v-2.27h2.27v2.27Zm0 0v2.27h2.27v-2.27h-2.27Zm4.54-20.433v2.27h2.271v-2.27h-2.27Zm2.271-9.081h-2.27v2.27h2.27v-2.27Zm4.54-18.163H72.92v15.892H57.028V7.08Zm4.541 2.27h-2.27V20.701H70.65V9.35h-9.081ZM11.62 11.62h6.811v6.811H11.621V11.621Zm34.056 0h2.27v2.27h-2.27v-2.27Zm15.892 0h6.811v6.811H61.57V11.621Zm-4.54 43.137h-2.27v6.811H61.567V54.758h-4.54ZM7.08 57.027h15.892V72.92H7.08V57.028Zm4.54 2.271H9.35V70.65H20.701V59.299h-9.08Zm45.408-2.27h2.27v2.27h-2.27v-2.27Zm-45.408 4.54h6.811v6.811H11.621V61.57Z"/></svg>
 diff --git a/browser/components/preferences/moreFromMozilla.js b/browser/components/preferences/moreFromMozilla.js
-index 044157bcb9..53c2add071 100644
+index c9db86e415..db2a138a86 100644
 --- a/browser/components/preferences/moreFromMozilla.js
 +++ b/browser/components/preferences/moreFromMozilla.js
 @@ -82,32 +82,6 @@ var gMoreFromMozillaPane = {
@@ -202,7 +202,7 @@ index 044157bcb9..53c2add071 100644
          id: "mozilla-monitor",
          title_string_id: "more-from-moz-mozilla-monitor-title",
 diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
-index c76a0647e1..99bdb32d28 100644
+index a76699af75..73273de07a 100644
 --- a/browser/components/preferences/preferences.js
 +++ b/browser/components/preferences/preferences.js
 @@ -8,7 +8,6 @@
@@ -213,7 +213,7 @@ index c76a0647e1..99bdb32d28 100644
  /* import-globals-from findInPage.js */
  /* import-globals-from /browser/base/content/utilityOverlay.js */
  /* import-globals-from /toolkit/content/preferencesBindings.js */
-@@ -426,14 +425,6 @@ const CONFIG_PANES = Object.freeze({
+@@ -451,14 +450,6 @@ const CONFIG_PANES = Object.freeze({
      module: "chrome://browser/content/preferences/config/account-sync.mjs",
      replaces: "sync",
    },
@@ -228,10 +228,10 @@ index c76a0647e1..99bdb32d28 100644
    tabsBrowsing: {
      l10nId: "tabs-browsing-section",
      groupIds: [
-@@ -573,14 +564,6 @@ function init_all() {
-       groupIds: ["customHomepage"],
-       module: "chrome://browser/content/preferences/config/home-startup.mjs",
-     });
+@@ -613,14 +604,6 @@ function init_all() {
+         module: "chrome://browser/content/preferences/config/browser-icon.mjs",
+       });
+     }
 -  } else {
 -    NimbusFeatures.moreFromMozilla.recordExposureEvent({ once: true });
 -    if (NimbusFeatures.moreFromMozilla.getVariable("enabled")) {
@@ -244,7 +244,7 @@ index c76a0647e1..99bdb32d28 100644
  
    gSearchResultsPane.init();
 diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
-index 1b8c381593..0f6c48103e 100644
+index 61660d27e8..7f829421ca 100644
 --- a/browser/components/preferences/preferences.xhtml
 +++ b/browser/components/preferences/preferences.xhtml
 @@ -43,7 +43,6 @@
@@ -255,7 +255,7 @@ index 1b8c381593..0f6c48103e 100644
    <link rel="localization" href="browser/preferences/preferences.ftl"/>
    <link rel="localization" href="toolkit/branding/brandings.ftl"/>
    <link rel="localization" href="toolkit/firefoxlabs/features.ftl"/>
-@@ -191,12 +190,6 @@
+@@ -193,12 +192,6 @@
          iconsrc="chrome://browser/skin/sidebar/firefox.svg"
          data-l10n-id="pane-about-firefox-title">
        </html:moz-page-nav-button>
@@ -268,7 +268,7 @@ index 1b8c381593..0f6c48103e 100644
  
        <!-- Hidden sub-page entries (CSS display:none via .hidden-category).
             These keep gotoPref() routing working for sub-pages that are
-@@ -247,7 +240,6 @@
+@@ -249,7 +242,6 @@
  #include search.inc.xhtml
  #include privacy.inc.xhtml
  #include sync.inc.xhtml
@@ -280,7 +280,7 @@ index 1b8c381593..0f6c48103e 100644
 2.55.0
 
 
-From 109bf8988a247508d425f040c8828f9e1ae811b6 Mon Sep 17 00:00:00 2001
+From 479067e042267dec006971af90e9f2571f40c9fe Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sat, 7 May 2022 21:51:06 +0200
 Subject: [PATCH 3/6] Remove promos of Firefox Focus and Klar from Private
@@ -300,10 +300,10 @@ for the same reasons as the original Firefox.
  delete mode 100644 browser/components/privatebrowsing/content/assets/klar-qr-code.svg
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 1da5a9315a..eb92cb9738 100644
+index e10932b13d..e25e9f17da 100644
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -2581,7 +2581,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
+@@ -2656,7 +2656,7 @@ pref("browser.contentblocking.report.vpn_regions", "as,at,au,bd,be,bg,br,ca,ch,c
  pref("browser.promo.focus.disallowed_regions", "cn");
  
  // Default to enabling focus promos to be shown where allowed.
@@ -313,7 +313,7 @@ index 1da5a9315a..eb92cb9738 100644
  // Default to enabling pin promos to be shown where allowed.
  pref("browser.promo.pin.enabled", true);
 diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js
-index 1d0c81561c..be0279dc94 100644
+index 642ab6d550..6b1d56a24d 100644
 --- a/browser/base/content/test/static/browser_all_files_referenced.js
 +++ b/browser/base/content/test/static/browser_all_files_referenced.js
 @@ -38,8 +38,6 @@ var gExceptionPaths = [
@@ -326,10 +326,10 @@ index 1d0c81561c..be0279dc94 100644
    "chrome://browser/content/asrouter/assets/fox-with-devices.svg",
    "chrome://browser/content/asrouter/assets/fox-with-locked-box.svg",
 diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-index 36292a5223..e025bc57ed 100644
+index 75ede0129e..016ee8b0bd 100644
 --- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
-@@ -1551,297 +1551,6 @@ const BASE_MESSAGES = () => [
+@@ -1733,297 +1733,6 @@ const BASE_MESSAGES = () => [
        ],
      },
    },
@@ -628,10 +628,10 @@ index 36292a5223..e025bc57ed 100644
      id: "PB_NEWTAB_PIN_PROMO",
      template: "pb_newtab",
 diff --git a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-index 8037e3b8bd..b04d4f29b7 100644
+index c62139cc1c..576009efe9 100644
 --- a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
 +++ b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs
-@@ -1981,85 +1981,6 @@ const MESSAGES = () => [
+@@ -1996,85 +1996,6 @@ const MESSAGES = () => [
      frequency: { lifetime: 3 },
      trigger: { id: "defaultBrowserCheck" },
    },
@@ -961,7 +961,7 @@ index 2217ca055c..0000000000
 2.55.0
 
 
-From 3bbe88a74d000149b9d746c247b46e413b127497 Mon Sep 17 00:00:00 2001
+From 421ff78cc4a5c137071f1998ebf5fa698b16b529 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Tue, 17 Jan 2023 21:59:51 +0100
 Subject: [PATCH 4/6] Remove 'Extensions for developers' menu item
@@ -1022,7 +1022,7 @@ index 837e99fbfa..7c68c4f47f 100644
 2.55.0
 
 
-From 333fa37f5001de48fb9260f9f6d252cc27b26fa8 Mon Sep 17 00:00:00 2001
+From 55f77f3e80b962c8b86051226305dfa7a4f8e231 Mon Sep 17 00:00:00 2001
 From: grizzlyuser <grizzlyuser@protonmail.com>
 Date: Sun, 15 Sep 2024 22:12:44 +0200
 Subject: [PATCH 5/6] Remove references to nonfree Generative AI chats
@@ -1047,7 +1047,7 @@ to false.
  3 files changed, 5 insertions(+), 117 deletions(-)
 
 diff --git a/browser/components/genai/GenAI.sys.mjs b/browser/components/genai/GenAI.sys.mjs
-index 8d50adbd92..0cb8dce802 100644
+index 50edcd557c..fd4ff8e33f 100644
 --- a/browser/components/genai/GenAI.sys.mjs
 +++ b/browser/components/genai/GenAI.sys.mjs
 @@ -85,7 +85,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -1159,7 +1159,7 @@ index 8d50adbd92..0cb8dce802 100644
          linksId: "genai-settings-chat-localhost-links",
          maxLength: 8192,
          name: "localhost",
-@@ -1181,7 +1092,7 @@ export const GenAI = {
+@@ -1281,7 +1192,7 @@ export const GenAI = {
    },
  
    /**
@@ -1168,7 +1168,7 @@ index 8d50adbd92..0cb8dce802 100644
     *
     * @param {Browser} browser - current browser
     * @param {string} prompt - prompt text
-@@ -1394,7 +1305,7 @@ export const GenAI = {
+@@ -1499,7 +1410,7 @@ export const GenAI = {
      }
      browser.fixupAndLoadURIString(url, options);
  
@@ -1178,7 +1178,7 @@ index 8d50adbd92..0cb8dce802 100644
        supportAutoSubmit ||
        lazy.chatProvider?.includes("file_chat-autosubmit.html")
 diff --git a/browser/components/genai/LinkPreviewModel.sys.mjs b/browser/components/genai/LinkPreviewModel.sys.mjs
-index 88573c9619..a9f9ad2f16 100644
+index eed9ec77f8..a9f9ad2f16 100644
 --- a/browser/components/genai/LinkPreviewModel.sys.mjs
 +++ b/browser/components/genai/LinkPreviewModel.sys.mjs
 @@ -415,24 +415,7 @@ export const LinkPreviewModel = {
@@ -1186,7 +1186,7 @@ index 88573c9619..a9f9ad2f16 100644
      try {
        engine = await this.createEngine(
 -        {
--          backend: "best-llama",
+-          backend: "llama.cpp",
 -          engineId: this.engineId,
 -          featureId: this.id,
 -          kvCacheDtype: "q8_0",
@@ -1197,10 +1197,10 @@ index 88573c9619..a9f9ad2f16 100644
 -          numBatch: numContext,
 -          numContext,
 -          numUbatch: numContext,
--          taskName: "wllama-text-generation",
+-          taskName: "llama-text-generation",
 -          timeoutMS: -1,
 -          useMlock: false,
--          useMmap: true,
+-          useMmap: false,
 -          ...JSON.parse(lazy.config),
 -        },
 +        { },
@@ -1230,7 +1230,7 @@ index d70cbff426..04d1d82cc7 100644
 2.55.0
 
 
-From ee2e536164b6d00766dd604fce8b196573e21750 Mon Sep 17 00:00:00 2001
+From 2bf1811edbadadf53d62e4fdd44624d8635b53e6 Mon Sep 17 00:00:00 2001
 From: various_authors <various_authors@parabola.nu>
 Date: Mon, 17 Sep 2001 00:00:00 +0100
 Subject: [PATCH 6/6] Various patches
@@ -1341,10 +1341,10 @@ index 7b1024de12..adb1316420 100644
      const vpnBanner = this.doc.querySelector(".vpn-banner");
      const exitIcon = vpnBanner.querySelector(".exit-icon");
 diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
-index 86c6c62f34..b5d6bb41af 100644
+index ab9104ecc3..fe653afd23 100644
 --- a/browser/locales/en-US/browser/preferences/preferences.ftl
 +++ b/browser/locales/en-US/browser/preferences/preferences.ftl
-@@ -1291,16 +1291,6 @@ sync-signedout-account-short =
+@@ -1296,16 +1296,6 @@ sync-signedout-account-short =
      .label = Sign in
      .accesskey = i
  
@@ -1416,7 +1416,7 @@ index acd6e92b39..e98174c411 100644
  addon-page-options-button =
      .title = Tools for all add-ons
 diff --git a/toolkit/locales/en-US/toolkit/branding/brandings.ftl b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
-index 97f695334a..8581941dfa 100644
+index 4562485f07..4b55c8936e 100644
 --- a/toolkit/locales/en-US/toolkit/branding/brandings.ftl
 +++ b/toolkit/locales/en-US/toolkit/branding/brandings.ftl
 @@ -15,17 +15,17 @@
@@ -1444,7 +1444,7 @@ index 97f695334a..8581941dfa 100644
  -relay-brand-short-name = Relay
  -fakespot-brand-name = Fakespot
  -solo-ai-brand-name = Solo
-@@ -40,20 +40,20 @@
+@@ -42,23 +42,23 @@
  # The particle "by" can be localized, "Fakespot" and "Mozilla" should not be localized or transliterated.
  -fakespot-brand-full-name = Fakespot by Mozilla
  
@@ -1474,6 +1474,9 @@ index 97f695334a..8581941dfa 100644
  # and kept in English.
 --firefoxlabs-brand-name = Firefox Labs
 +-firefoxlabs-brand-name = Iceweasel Labs
+ 
+ -smart-window-brand-name =
+     { $plural-form ->
 -- 
 2.55.0
 
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 5e30301..ef5bb49 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -72,7 +72,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=153.0.1
+pkgver=154.0
 pkgrel=1
 _brandingver=149.0
 _brandingrel=1
@@ -87,7 +87,7 @@ depends=(
   bash
   cairo
   dbus
-  ffmpeg4.4
+  ffmpeg
   fontconfig
   freetype2
   gdk-pixbuf2
@@ -118,7 +118,6 @@ makedepends=(
   clang
   diffutils
   imake
-  inetutils
   jack
   lld
   llvm
@@ -148,7 +147,7 @@ makedepends+=(
   quilt                    # apply branding patches
 )
 optdepends=(
-  'hunspell-en_US: Spell checking, American English'
+  'hunspell-dictionary: Spell checking'
   'libnotify: Notification integration'
   'networkmanager: Location detection via available WiFi networks'
   'speech-dispatcher: Text-to-Speech'
@@ -167,6 +166,8 @@ source=(
   $pkgname-symbolic.svg
   $pkgname.desktop
   org.mozilla.$pkgname.metainfo.xml
+
+  # Make different channels installable in parallel
   0001-Install-under-remoting-name.patch
 )
 source=( ${source[*]/${pkgname}-symbolic.svg/} )  # branding over-ride
@@ -183,9 +184,7 @@ source_i686=(
 )
 validpgpkeys=(
   # Mozilla Software Releases <release@mozilla.com>
-  # watch https://blog.mozilla.org/security/
-  # key is available to `gpg` only via keys.openpgp.org keyserver,
-  # or manually from mozilla nightly source code or the security blog
+  # https://blog.mozilla.org/security/2026/08/10/updated-gpg-key-for-signing-firefox-and-thunderbird-releases/
   14F26682D0916CDD81E37B6D61B7B526D98F0353
 )
 validpgpkeys+=(
@@ -193,7 +192,7 @@ validpgpkeys+=(
   BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
   3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger        (libre source-ball)
 )
-sha256sums=('ac586cfe4573cd02a0b96dd496ae28da0157a9fcc6530ede6b1decfd2a3fb512'
+sha256sums=('36cec5b3688a60f78a6d20dcaee15b598f84e03c66f6587056aead6cb498b99a'
             'SKIP'
                                                                                 # $pkgname-symbolic.svg
             '73c06fe38a7663d7dc395e3d037b4375ff102917509ad6290a00d40bbac99f62'  # $pkgname.desktop
@@ -205,7 +204,7 @@ sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c18
                  'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1'  # firefox-111.0.1-fdlibm.patch
                  '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06'  # fix-i686-build-moz-1792159.patch
                  'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
-b2sums=('e7b1749b81c81744d3461c18b48e84a72adbc130a54256321bb2a854f8e96fc315d5dc97ad685610774e27de39145aa6897b9c832a1da9fd9f7ecd89555f678b'
+b2sums=('7806cb56f721bd8fb0bcb1782765631f772b58600ea0f7389d7389d8635a3616d71162b090cb9d8cc8822b118b50b5b0f6d83c0831c34054b513da6193bcad38'
         'SKIP'
                                                                                                                                              # $pkgname-symbolic.svg (deleted)
         '79fd40b2e19a6f4f5fef4b12d19d12b15122feb3f813cc6ca892ba0d39167fb1efc6ce2da5c87b8ffbcc6dcc27488f5262fd21a308d48c0bfee189add3917029'   # $pkgname.desktop
@@ -261,17 +260,17 @@ mksource+=( https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-
             process-json-files.py )
 mksha256sums+=( 'a73e8dd2c8278a8022567193fa56a1935d3cdf15981bac9a7ca22563cb292d4f'   # *.branding.tar.xz
                 'SKIP'
-                'fcb2a62acd28f54acbf719dc28726d1745461c8daf3bf2010b9520d21e5aadad'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-                '64b09b4abfed294a3e1cd4ac50b18ba2fe8172a87f2bcc4f163d32c3969afab3'   # 9002-FSDG-preference-defaults.patch
-                'fef1430f2a4d7cf346a1db589d616cb021f0e9fe73e1eccf08ad1660cf9f6cb5'   # 9003-FSDG-urihandlers.patch
-                '7fa42ce4a1564b96c938c99d23066624bdd022b9ee467242b4c3bcf563f85037'   # 9004-FSDG-misc.patch
+                '8ead5d199abe74711abddd8b42e2b4f512665906d0d946cdc9e624ff9d444e61'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+                '3279cc17b490a64c407bb729846a491fc9ddd9b95ac11a890a21f7b6d2e374f2'   # 9002-FSDG-preference-defaults.patch
+                '854d41fe7e6996debc8da215d39f3cef2c56a033968364b949dd79bca0e31d92'   # 9003-FSDG-urihandlers.patch
+                'dd0cb985b8df045e96359172f850b15a9d88422189eb71fe007b91bea52b24a4'   # 9004-FSDG-misc.patch
                 '8ec0bc73034e38295494856bb1ae8ab7e225b2450189a5a01172b8a12b3c2516' ) # process-json-files.py
 mkb2sums+=( '26b63e9d4f0bc072c96bdae094bf399804b9b2472593ed15bead45d1c319823ad371b46c9e078c5fb0c546f898bf73cc2f45f8c92bc43c6d15047055ab026ca3'   # *.branding.tar.xz
             'SKIP'
-            '2932e471a09aa9b75df1be22a928e0285527733fa45e8ac28e593d9ee8835e9deab5393562f3f61f921e2b96013e097f8e68fd0c1e74a59c16839488da620d28'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
-            'f6f502d24c57572c8e3cd96f6994c3c1c17bd51d73ba34cf0904e6ae2f07d0e1cc65d1db598de3e8710de9304f75d2bf83a54462c33e16e5cc40126dc06b505b'   # 9002-FSDG-preference-defaults.patch
-            '833462de8ea35525ed7eabd2d87504aac1ad853ab892a27772fa5c4a02ba3829f5bfcd970e5527a7b973166494b0e439e6d3e28d25a249005899b984e16d45cf'   # 9003-FSDG-urihandlers.patch
-            '9d075d838197edb43eb0fc2d18df1a784a7ec13b1b52295ff5aa7424816853220ff9cdf5b8e8c3fe6bc744a2f6007d0648365a8d54c8323ba74885fee440f2ed'   # 9004-FSDG-misc.patch
+            '507bfb04872fce503eba26e8bf730823d80993fac8a0c3c72bd6eff5af53f5d6e1d52ad80afe2197246c1599fc02f1d316bbfa5c99889325da120c0abd7e60f8'   # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+            '79788dd09cb3365d7d2dc12ef3f7cdf4a883b5bf518a9612a426bff9f4861d2c2b7fdcc272d9aa894c3e17347bb459c344cae89f82d0546246e2d101de2f4fb5'   # 9002-FSDG-preference-defaults.patch
+            '711fbe8290d6a1316541543c900b474a6d604e6b99f994851ba00ac8ae30044bf934bb84d66868a6f7bc4f7c7c95ebc8c7e8b0c89e8476332b6bdac5c1dfd056'   # 9003-FSDG-urihandlers.patch
+            '1a2efcda610c36c3436636f857a0f8c26658b0af9d5f30857336476b5b8676d36956922fdb88c9fec2089f1bb12e8282868a1250c9c3442c4158e20b16c52bfb'   # 9004-FSDG-misc.patch
             '950d13abed98ccb939479859e249dd8a641537ee056f8e2dff1c3e4f608f1c6af450d666f2e3910f4f7daae43b2838e065591accb6a8a7b86da770dcb1f3999b' ) # process-json-files.py
 source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
          ${source[*]:${_N_MKSOURCES}} )
@@ -566,8 +565,15 @@ prepare() {
 
   ## general technical patching ##
 
-  # Make different channels installable in parallel
-  patch -Np1 -i ../0001-Install-under-remoting-name.patch
+  local src
+  for src in "${source[@]}"; do
+    src="${src%%::*}"
+    src="${src##*/}"
+    src="${src%.zst}"
+    [[ $src = *.patch ]] || continue
+    echo "Applying patch $src..."
+    patch -Np1 < "../$src"
+  done
 
   # Use system python-typing-extensions instead of the old vendored one to avoid
   # unresolvable dependency versions. They are probably downloaded when network
diff --git a/libre/iceweasel/keys/pgp/14F26682D0916CDD81E37B6D61B7B526D98F0353.asc b/libre/iceweasel/keys/pgp/14F26682D0916CDD81E37B6D61B7B526D98F0353.asc
index 2bb73ef..b85b04f 100644
--- a/libre/iceweasel/keys/pgp/14F26682D0916CDD81E37B6D61B7B526D98F0353.asc
+++ b/libre/iceweasel/keys/pgp/14F26682D0916CDD81E37B6D61B7B526D98F0353.asc
@@ -12,53 +12,100 @@ blnJ6INpvYgsEZjV6CFG1EiDJDPu2Zxap8ep0iRMbBBZnpfZTn7SKAcurDJptxin
 CRclTcdOdi1iSZ35LZW0R2FKNnGL33u1IhxU9HRLw3XuljXCOZ84RLn6M+PBc1eZ
 suv1TA+Mn111yD3uDv/u/edZ/xeJccF6bYcMvUgRRZh0sgZ0ZT4b0Q6YcQARAQAB
 tC9Nb3ppbGxhIFNvZnR3YXJlIFJlbGVhc2VzIDxyZWxlYXNlQG1vemlsbGEuY29t
-PokCTwQTAQIAIgUCValABAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AAIQkQ
-Ybe1JtmPA1MWIQQU8maC0JFs3YHje21ht7Um2Y8DU1CqD/9Gvr9Xu4uqsjDHRQWS
-fI0lqxElmFSRjF0awsPXzM7Q1rxV7dCxik4LeiOmpoVTOmqboo2/x5d938q7uPdY
-av2Q+RuNk2CG/LpXku9rgmTE7oszEqQliqKoXajUZ91rw19wrTwYXLgLQvzM3CUA
-O+Z0yjjfza2Yc0ZtNN+3sF5VpGsT3Fb14aYZDaNg6yPFvkyxp0B1lS4rwgL3lkeV
-QNHeAf0qqF9tBankGj3bgqK/5/YlTM2usb3x46bVBvwX2t4/NnYM5hEnI57inwam
-X6SiMJc2e2QmBzAnVrXJETrDL1HOl4GUJ6hC4tL3Yw2d7515BlSyRNkWhhdRp1/q
-9t1+ovSe48Ip2X2WF5/VA3ATfQhHKa3p+EkIV98VCMZ14x9KIIeBwjyJyFBuvOEE
-IYZHdsAdqf1zYRtD6m6obcBrRiNfoNsYmNY4joDrVupI96ksIxVpepXaZkQhplZ1
-mQ4eOdGtToIl1cb/4PibVgFnBgzrR4mQ27h4wzAwWdGweJZ/tuGoqm3C6TwfIgan
-ajiPyKqsVFUkRsr9y12EDcfUCUq6D182t/AJ+qE0JIGO73tXTdTbqPTgkyf2etnZ
-QQZum3L7w41NvfxZfn+gLrUGDBXwqLjovDJvt8iZTPPyMTzemOHuzf40Iq+9sf5V
-9PXZ/5X9+ymE3cTAbAk9MLd9fbkCDQRn0pB9ARAA5UjKHSxk88UtbGgVPRaE/MfD
-wGGCcIE11kCH35IzQCmrZVxApKMGMqK16s5O1zoRWHQraKRsYodDVK/A12xgvTVx
-KQlIk5GKD/UO7V6H7aeWjye63vFP/9X7YVDJYUIsN5C8uUCzdAcysxjFNzA2TeqL
-/PVnlDh7pF7ZopFTTQu1KiYPoIpbL2cBqpNE3PN2d0nAjILKyFfhttTMDMTtZuCH
-8TT8WAEbDzstghOrJTpRLiW+hRcH7z1fHAzE70jvgvXXyBcTLJvP4k3T/DzuFcAq
-doqNqxK+hsoTiZq7xJeqY47rozGIxoXheyavegjCjyr1bl36ED63bbmKmratlkSu
-Y8vjh14wJ4qZ6mMtNr0KjFfahWkNYY5gVHIlGQsPLIfg7eAKj/mq/is5Mmo8V8o+
-2uNYUkoZ/g/hQPQZIFfZD6Y5/ZcdawwkTi3xPuPFAJIBBQzC3ozXyHVq4ipx+S42
-90mFyXYa8nIIwhuQDcCiK4ppI+ChUKYl1tzoCj3J2YxQHlDWtikw0oIyy5U/05xf
-wWgcRUxc6+vR/pZ+P6IfK187ZVOqvD9yqgLK4+hKuDGOzX9xFLPmD19nTOs61DI0
-HnIndg9Mbe9rX9ct+WuM9xPhlSR6P2eQWkI1Z0RlVYP/Pe9cEZJXXU30J3LrRBsP
-jJm8ONXYZD53AAXWjUEAEQEAAYkEcgQYAQoAJhYhBBTyZoLQkWzdgeN7bWG3tSbZ
-jwNTBQJn0pB9AhsCBQkDwmcAAkAJEGG3tSbZjwNTwXQgBBkBCgAdFiEECb7tY/NG
-Ki3/qzuHXstkl8GiAlYFAmfSkH0ACgkQXstkl8GiAlb0jhAAlu/hGFvjHomXvnHY
-t+njr97d9lUOHNR0uMrwD9pxEXslEG4lUlFqKMnm2eB2SeaWZvN+qXLOwxZRyIDB
-UlG+KM0UN6Jx63nMmkFGxcRQC6DeJUIPUqVW8vOMKL0Rv2zrEJCNInwNkTTbSzjX
-B2q1vWfOIMBICSD5gfYPOlMRplU0zf240MptoktgiMoD0xXVgcCupSV0Wyih8F7j
-MhlEXK8wPsaavtebQhZgut+ad6ebUklgiS8ZR5Wg/x0SicBWEtXC/DC5+htXSp20
-x+FmyAXB/VdIcj0y0PjIBW0GoFOR8V5EucGMkr/LBjEaptp23VvnsjjLBNDXqhc2
-uVMXVK7QjyL9+jSL/2iE2Xeik3cttoRuFPfszjGnLgyAvYW2F11zaBa8X/xMVFpf
-DstotJHsfA75jQKk61X8K3hHMoS6VjkOlX1vUlAmGktyMzP6kEMAzcom6JXoFx+j
-Pk9mjAXLvhSYTTZXOT+jK4j+jgoyKHLRTNZBWQ5lNO7h442S2AaJk6dEV2IspWB4
-sQNdMt2Fu7AZLb7BfcjuUs/0BakrwCFzzV5TBTozB1t/B8nUQu0ppr8mYyNpaSvl
-oaunzx3x49H2NgDjtnarR6wHrulElV7QxxUmW70ZAarTlLuVkqzqaL10dPN4fC5r
-/8hccwrSzdaExTu8bAncTb6lOy1/wBAAtLCR7MPdByE9X7kIBRhjsKYxcHrPMhTX
-zAJLrVjxB0O+qa1Yd0xVOnjFPXh9Lpy8Hi4XNpwZAnsJUhZ5mDAQXNmJ6/d0qmdQ
-4aDRZBLCZBADQkKDr+pLQB5Q8g2OFa01xHu+gKoBh5FyOjjtQlyUP8oo1MKfbtu0
-dFoSalN1O0LqzGJUSUU5tvdr20derAtanyAn41n7qaWu+8faGbUIDJBMNFgLuc3r
-1AmsodHwcDcB5Hl+KBAcvC+Z9CVXZ6tkTXsZP4vm3QfFf8cpkKKb3U8Cmpr7uJjR
-4o8AbmJpwAGsGL3POH97HSi++7GwEMpQUJK7sciK+cBWt1L+Rs7WonkjcwEynR2V
-Do9Lot5khGHG2zRo89l52xfK2gvuQUshJ8nnkC6EmmyTP7nm6+ImGn8ffM0Fi1D5
-2YWanhFGT82+7TO/o4a1pnLozlfbg9vNv84CkEwvzhwSZveJmJ70nZlhbrz8P3qw
-/T3HoYi0ImUIh1BmRFzCaRDCC2r2wkPD3b+9IZ5h1Gf6gIDEnXh45sKxXBx8kBEu
-3jlu0SfH7NEIAcAdAelXqpMZPqeqDnte4z2I013JMYpFT4iSWBv0tHFUBB9ufm5d
-hvmPajHmmPG1tdN/0tujtGTKBxZIpk9aZiAawpLqOZeQNr9PI6U/GRtqSek9tgwH
-O1FPgm7RVTg=
-=SScT
+PokCTgQTAQoAOAIbAwIeAQIXgBYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJpobDu
+BQsJCAcCBhUKCQgLAgQWAgMBAAoJEGG3tSbZjwNTpYQQAK+60Ky1K+VzJMVvjTed
+chr/ACHsjRXDHfJHWp2hDBDgGLjr0Muwo3XIaNyWhW1fwmxvyMULFVmWGb7qGTeI
+82O8yhY3bLMN6iA+XZwf1PsCZYHTls2KTYRUHYixobOA+9L0mWqWriNHeoBXe3c+
+SZ2jNYe/o4IR1X/zeVVpVkUqpzKcKmhpDOfgWKZBxrBRFUm0wJnFrL+AcjVpeQi8
+CreR1AXzyRWT3pIGfpYilfTNSZNy7e3oruplcu0Jk3aDdtTsJP95aej7nyI1eBdA
+k2hoMe4o2jCweaef5LO0y8u6G6Kie9/LUAqQZVQuU7Zce0m0l9MNPujYv1pUy5Rk
+MxtRyrUOJQLP60a1f1WZgU2YOm9OgS6gO+NoZ7fr4/5wj3C8Y7Hyzn7I1KXkvj+v
+6CF6u45xDPdfC5qj9p5HAE81bPmUpXFkeeIwn8La3NJoVjiagl7OxuoFi27F4oKS
+GxnArPtIoiQYuIVsZ2pPvkhPLt2lLXbi5vGHfPKhK/kg/mvkUshiCK+jTpYZ078e
+g+meCFXOoRNH6Qkd7Q1MgrKzOGAkuRVNWtnx1Ata8lxEqYuhaUlqW7okd1fNSdug
+htvZH5TgDUjlzkAS1eLsFIRCqZIVBRUXgQvU02zt2OPdBuNgiXqRbZcSmsyKs1X2
+2RG5i9WmTtP6Rv+ZL61pGsVAuQINBGfSkH0BEADlSModLGTzxS1saBU9FoT8x8PA
+YYJwgTXWQIffkjNAKatlXECkowYyorXqzk7XOhFYdCtopGxih0NUr8DXbGC9NXEp
+CUiTkYoP9Q7tXoftp5aPJ7re8U//1fthUMlhQiw3kLy5QLN0BzKzGMU3MDZN6ov8
+9WeUOHukXtmikVNNC7UqJg+gilsvZwGqk0Tc83Z3ScCMgsrIV+G21MwMxO1m4Ifx
+NPxYARsPOy2CE6slOlEuJb6FFwfvPV8cDMTvSO+C9dfIFxMsm8/iTdP8PO4VwCp2
+io2rEr6GyhOJmrvEl6pjjuujMYjGheF7Jq96CMKPKvVuXfoQPrdtuYqatq2WRK5j
+y+OHXjAnipnqYy02vQqMV9qFaQ1hjmBUciUZCw8sh+Dt4AqP+ar+KzkyajxXyj7a
+41hSShn+D+FA9BkgV9kPpjn9lx1rDCROLfE+48UAkgEFDMLejNfIdWriKnH5Ljb3
+SYXJdhrycgjCG5ANwKIrimkj4KFQpiXW3OgKPcnZjFAeUNa2KTDSgjLLlT/TnF/B
+aBxFTFzr69H+ln4/oh8rXztlU6q8P3KqAsrj6Eq4MY7Nf3EUs+YPX2dM6zrUMjQe
+cid2D0xt72tf1y35a4z3E+GVJHo/Z5BaQjVnRGVVg/8971wRklddTfQncutEGw+M
+mbw41dhkPncABdaNQQARAQABiQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmP
+A1MFAmfSkH0CGwIFCQPCZwACQAkQYbe1JtmPA1PBdCAEGQEKAB0WIQQJvu1j80Yq
+Lf+rO4dey2SXwaICVgUCZ9KQfQAKCRBey2SXwaICVvSOEACW7+EYW+MeiZe+cdi3
+6eOv3t32VQ4c1HS4yvAP2nEReyUQbiVSUWooyebZ4HZJ5pZm836pcs7DFlHIgMFS
+Ub4ozRQ3onHrecyaQUbFxFALoN4lQg9SpVby84wovRG/bOsQkI0ifA2RNNtLONcH
+arW9Z84gwEgJIPmB9g86UxGmVTTN/bjQym2iS2CIygPTFdWBwK6lJXRbKKHwXuMy
+GURcrzA+xpq+15tCFmC635p3p5tSSWCJLxlHlaD/HRKJwFYS1cL8MLn6G1dKnbTH
+4WbIBcH9V0hyPTLQ+MgFbQagU5HxXkS5wYySv8sGMRqm2nbdW+eyOMsE0NeqFza5
+UxdUrtCPIv36NIv/aITZd6KTdy22hG4U9+zOMacuDIC9hbYXXXNoFrxf/ExUWl8O
+y2i0kex8DvmNAqTrVfwreEcyhLpWOQ6VfW9SUCYaS3IzM/qQQwDNyibolegXH6M+
+T2aMBcu+FJhNNlc5P6MriP6OCjIoctFM1kFZDmU07uHjjZLYBomTp0RXYiylYHix
+A10y3YW7sBktvsF9yO5Sz/QFqSvAIXPNXlMFOjMHW38HydRC7SmmvyZjI2lpK+Wh
+q6fPHfHj0fY2AOO2dqtHrAeu6USVXtDHFSZbvRkBqtOUu5WSrOpovXR083h8Lmv/
+yFxzCtLN1oTFO7xsCdxNvqU7LX/AEAC0sJHsw90HIT1fuQgFGGOwpjFwes8yFNfM
+AkutWPEHQ76prVh3TFU6eMU9eH0unLweLhc2nBkCewlSFnmYMBBc2Ynr93SqZ1Dh
+oNFkEsJkEANCQoOv6ktAHlDyDY4VrTXEe76AqgGHkXI6OO1CXJQ/yijUwp9u27R0
+WhJqU3U7QurMYlRJRTm292vbR16sC1qfICfjWfuppa77x9oZtQgMkEw0WAu5zevU
+Cayh0fBwNwHkeX4oEBy8L5n0JVdnq2RNexk/i+bdB8V/xymQopvdTwKamvu4mNHi
+jwBuYmnAAawYvc84f3sdKL77sbAQylBQkruxyIr5wFa3Uv5GztaieSNzATKdHZUO
+j0ui3mSEYcbbNGjz2XnbF8raC+5BSyEnyeeQLoSabJM/uebr4iYafx98zQWLUPnZ
+hZqeEUZPzb7tM7+jhrWmcujOV9uD282/zgKQTC/OHBJm94mYnvSdmWFuvPw/erD9
+PcehiLQiZQiHUGZEXMJpEMILavbCQ8Pdv70hnmHUZ/qAgMSdeHjmwrFcHHyQES7e
+OW7RJ8fs0QgBwB0B6Veqkxk+p6oOe17jPYjTXckxikVPiJJYG/S0cVQEH25+bl2G
++Y9qMeaY8bW103/S26O0ZMoHFkimT1pmIBrCkuo5l5A2v08jpT8ZG2pJ6T22DAc7
+UU+CbtFVOIkCUgQoAQoAPBYhBBTyZoLQkWzdgeN7bWG3tSbZjwNTBQJqdGyCHh0C
+V2Ugbm8gbG9uZ2VyIHRydXN0IHRoaXMga2V5LgAKCRBht7Um2Y8DU11HEACFwqH7
+UhVmLoPhZrX5EJvCRUQOzb3CvRXFi6ZJ6J204+VxYXY+VxAHWmAj4Yre/IeYjFtZ
+xBLfTQI7lAspqiGHox4B9RuUwMvm6pnHkMLliY8tSSeFff1GPikVu27TswECDRX1
+xWCVP/Z8gn/E6Eraa2vwt0mC/9dWobC/vm5hsdmlxf5dwgcLkIoZKOgJoPlWygo0
+9HXczXGOh2g1rv4GVm38shlpTbf05ve6JEvySaF7F+653c6KkQT7/q6SU91uux34
+JT2MvtaVDHxvK77fTZAX+QOaJyLO9I+wNDbUsIF73h9qQQsZqHBk4UGKoe+S5Kkl
+gkhnZeUwSG4gSOEkj29hOU+emwSiSLX1PQoeuqo5P+G/f7YktuSSzv8rHVHRdMTO
+hL1Y3rgisuD6HmKqWt09mKTsjGIx6PToccPSJKHu8ehlQxDGwSon2cXOSSsJoKQr
+T4U9cvYy2ueCjserD594YJi/A5Dj6aMyF5TuYlFd3jLFxCZWpgUCX6OfMkRHMofu
+5sewjNj/TvElUhPdL7LMNbP9L7/aYMywdH5A1PEvVJJuI3ymfR44aRnE2aEsgvj+
+PznDO8KCH9XfbQdFFfIdejS6IIJ8hdapupqT5pfIj3bZY9/NCLTKmUCIra07WosI
+fzYa2n/IzVDURGLp1qxfGzeBhPPtGqbZIteaKbkCDQRqdGqkARAAxeUfl3aelP0r
+qK5gRa/GklAInaeX/ZABDDRbQFrQ2nEaf7lgClNaXAtm0zrjFw3SjqvthxvZigBg
+UT+2SRARqxRzI/GwCvUWCeD3ZpE28ELeha1bNRtni+D4yDOmOA0AC/J0IbhcqeI0
+M12GEaoItmtMvyTIjkMhiocAo0cAJSawVKZcopjyeF35rRik4/9q3BkKuJiHQ7wr
+OvmDMmUcvK/EvMGRfsrC6bBG6kD8IMxtrsmxfADL+I3AU/nO1m/VoELJ6wJUI7Ea
+EYHEvLMMCM5vmV1DAcIL+c0czuRtmAqbs7r8f9P1NMdXyZdX6W1tO/OXPgfoCGTF
+pmN4HcZdCaaiKSqR4+Rl10gVe9h5rDgVM7ovLtFMdipRZTL0S/CF+VT6D8DlM0Gs
+yTNeQfuYk6BdyZmJSEaHe9wUB6049DZMExTvWo0WQrXqBzmDmGP6N5SRjRcEiJKh
+92eMGuj9mNsaaHox9MbBNuWdjRKdh9eP5MmnCQRdB6tk4fwaLuzLUa93s+N87e4d
+L+Rii9ySwFn8+ZIrf1MdfIeCJqs7JfyknpQyTOHlFBoqTu3RX6juTFP47qjbfEY7
+3CAzvAp7ezPo+d2wDbETyWONvBYg956nPtlkkhG5kWlqvEszc+csDXniUy2nN1L8
+VJVJrJDdvlCDPEBEh86b+XZ+Lu8dtOcAEQEAAYkEcgQYAQoAJhYhBBTyZoLQkWzd
+geN7bWG3tSbZjwNTBQJqdGqkAhsCBQkDwmcAAkAJEGG3tSbZjwNTwXQgBBkBCgAd
+FiEEgn5lhghnlhjNNJ+TZ45FXXZ2eqMFAmp0aqQACgkQZ45FXXZ2eqPDbw/+Lb5n
+g/VGisSSokJsy9cjwR09OTN+KSN7NrfU9LkiX4Y8/AxMw67oroU6cMHk8+IjlPTQ
+aAUhs5sWH6xROOCF74DSjFCraB1gBV7ft0hDD3mDslxQYVgQVUOhTvuSmvHByn02
+4VPU4i0Icgh8LpVjGaiyB4BiGl91rgxEMSDW6Vl0yG5Mi5pdxZR+wXkQsyQRmZtU
+3paLGErt8Ucm73ma+JIYUhja70bkSh2AU99KpvVTZHx3sb84PlmPa4n+dYkwj5wZ
+O13T7JR0nuBNv7rmWnzgiB87F5at09Pw6s3L8O3pWhlkYhvrcaOG4ZxJzC+h+Ole
+7O4Km/rHUlFVYph7qu1hVp6I3MPSHIOsltsf8heg7wlxhYVGz9RhYIMCzCINIG0l
+fcMkGvOPftO0faCF1I65ZYgdzdAPMuRdPAwig+hXz42982arsma+n9+0ckqDF4LD
+OnOK5Sj20eg5LOQo4OnRy35gqyzl9/GwyScYWMrNTV0UpR99fMnJtMHYqLtjvcFf
+LF013Ejiv3XNDPoPkHAP9tz859+ZToiJVBxzV5Q9vAj4W48Yx6HlCXlfqeprsfeB
+WU6WhUo9Q4LTLT+4UKMYUemnRfp0SvK80s8gMU6s0kGKTaxOaCb39EJMR0nFUd7j
+36PFYvVCGFUEYaGlLCBPI5akyt3u1y34ie79YxocHA/+NM8kkJpUBn8Ug8ewAUe+
+6kE2P8Y811ChqZemHnC1GFdhQqTWELlxh00XCYx6XsyRZKc72aqYuu2WVw1+F8+c
+QV2CNFAgJZ59TKzIfOycoKOc4HMUuwbmQPGHA+qm7ZDbb7j6urzrJ8n+3BWuiG3G
+VU33gTfOHoctKMuplm5WLdJxrWV3N/iaDX3gqhkWeYh2aqKX+8S9HEvtNfrjW4pH
+zMJ5ddIVYz985fUyPg/B5tKbJCfJ2aqGQa7qc7OxUePjUx/eic0MWRcle7/i2sjs
+3/jNBT637KWZB/d98QAYif/fAQQiXIgAdSgwEElH5fpZuWRMzol4DHjlbcoUlI1v
+U4H/ahELYLNfk3EPi861nCgrwD11xHcTb1gre2tHNTHQK3wQoykKu/+ubIm03ROp
+6kfsGg5WdeDdyGwEn/drCK3T/0uCri/Ue4AhhX9t8TbyAAPQ0ZooIRU9YsplvmmJ
+9FpNlBUpUorMtU1E1eaenwiCdoqEEwPdudrMgKRKd9Bco9owuRKeD70zg9XJjeud
+w2C11cLCjMqA3L1oEOwxSRsYaZEijqDFYmmY0KRQfcxJ9Vt/PfzolxiHIflbTPY4
+Sb6RHrnOF2mmd+BA9kSLTtkLhJEU6VtmD8XoDH1I1TUP+ObieKnBQg9/7LQVQfWd
+bK+W3WvvXQQLUU9k4IsERbA=
+=/Lt1
 -----END PGP PUBLIC KEY BLOCK-----

