Merge mozilla-central to mozilla-inbound. CLOSED TREE
authorDorel Luca <dluca@mozilla.com>
Thu, 14 Mar 2019 18:33:49 +0200
changeset 524966 56553ce763245cc4d1d1077b653fc556e891e6b8
parent 524965 0cc6396199a8508d711e080bee5cd16029748f29 (current diff)
parent 524902 858a58a6aa93e044e04de5ccdad4aae4b9840657 (diff)
child 524967 25f9343a6480f39a240f1862b588db7dba99efde
push id2032
push userffxbld-merge
push dateMon, 13 May 2019 09:36:57 +0000
treeherdermozilla-release@455c1065dcbe [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone67.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound. CLOSED TREE
devtools/server/tests/unit/test_eval-01.js
devtools/server/tests/unit/test_eval-02.js
devtools/server/tests/unit/test_eval-03.js
devtools/server/tests/unit/test_eval-04.js
devtools/server/tests/unit/test_eval-05.js
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1551794995188" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1552492951595" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1211" id="flvto@hotger.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
@@ -2551,16 +2551,24 @@
     <emItem blockID="7718be46-8e84-4bc7-a5a9-4c5de18378ee" id="/^((\{5084f455-bc8f-483c-b145-91245bcbfd64\})|(\{bd69d5d0-4b2f-48cb-bab5-dcf1e0f9c63b\}))$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="aca80fb4-760e-4cd4-9fec-649fb38b2947" id="/^((\{ee2d725e-9726-43ac-8040-60ce9ff2831b\})|(\{55417a80-e6f7-4d77-8d73-f59045e5e890\}))$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="2c739daa-ffee-48d9-a825-e53c8fd2bb3c" id="{c04d9d7d-1c8c-4eab-a51a-828c47e1b8b7}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="b57d9505-21bf-4a24-accb-05ceac50dadc" id="/^((\{86c18738-11ed-4c16-af92-786aa036c83c\})|(\{d0fee16a-f4eb-4dc1-9961-82b913e5943d\})|(\{1c4937a1-c678-4607-8665-a16384ee302e\})|(\{22caeb02-38a3-415d-b168-64fadccbb4a4\})|(\{1c9372e7-5f0e-4541-99cf-dfbf2ab00b01\})|(\{9fe66994-8ed1-4317-a20a-1d0544ca062f\})|(\{6df222d8-97c7-42bf-9683-1cf8119c1e9e\})|(\{4c2dda03-bad0-4160-a8a1-6d089200420e\})|(\{7aae7d4f-55b9-42eb-b683-932591265e17\})|(\{e6f8ab99-3c96-410c-95d1-267ad48ed3e2\})|(\{6d8c5068-d0cb-47a5-af5e-3f23064f4608\})|(\{90481f38-d06a-465e-a54c-206bbb1ee9ae\})|(\{4b75aeb8-f14a-4ef3-b1ad-09733b40dac3\})|(\{3a8ca495-f5ab-4320-b070-4f44266fe3d1\})|(\{84f8914f-0dec-48ed-a0fd-4a7712c06793\})|(\{aa613fce-603c-41df-bf49-9b09614cebe6\})|(\{30314350-199a-4951-9c05-c3537a946492\})|(\{a2edce1d-10ab-483d-8c01-5e5fe0c82902\})|(\{ec91a3d4-8311-4700-aa15-b3941f21a052\})|(\{e9049687-164a-4cf3-be1f-1291cfb0f44a\})|(\{2be73925-ebaf-43ca-8b26-bd820887f591\})|(\{840eadea-1c68-411f-b4e9-08d9f236385d\})|(\{0a89d040-5fb1-46d7-bf81-43b55e83695d\})|(\{6a1e76ed-4ac2-4a0c-8beb-43ae63558b36\})|(\{1b90c930-e7d7-486a-9085-8b57129489c7\})|(\{eab649ca-af76-4de9-95b0-8036e35a66cc\})|(\{0628e652-98f4-4e58-9ecb-ad996b061aef\})|(elfr@geckoaddon\.org)|(else@geckoaddon\.org)|(fr_b@iext\.pro)|(it_b@iext\.pro)|(sv_b@iext\.pro)|(no_b1@iext\.pro)|(fi_b@iext\.pro)|(au_b@iext\.pro)|(elfr12@geckoaddon\.org)|(test@informations\.to)|(se_pop@informations\.to)|(it@spongebog\.funny-ok\.com)|(it@tsunami\.funny-ok\.com)|(fi@spongebog\.funny-ok\.com)|(fi@tsunami\.funny-ok\.com)|(no@spongebog\.funny-ok\.com)|(no@tsunami\.funny-ok\.com)|(fr@tsunami\.funny-ok\.com)|(fr@spongebog\.funny-ok\.com)|(se@tsunami\.funny-ok\.com)|(se@spongebog\.funny-ok\.com)|(au@spongebog\.funny-ok\.com)|(au@tsunami\.funny-ok\.com)|(nz@spongebog\.funny-ok\.com)|(nz@tsunami\.funny-ok\.com)|(gr@spongebog\.funny-ok\.com)|(gr@tsunami\.funny-ok\.com)|(nz_fnew@tsunami\.funny-ok\.com))$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
   </emItems>
   <pluginItems>
     <pluginItem blockID="p332">
       <match exp="libflashplayer\.so" name="filename"/>
       <match exp="^Shockwave Flash 11.(0|1) r[0-9]{1,3}$" name="description"/>
       <infoURL>https://get.adobe.com/flashplayer/</infoURL>
       <versionRange severity="0" vulnerabilitystatus="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
--- a/browser/base/content/test/webrtc/browser.ini
+++ b/browser/base/content/test/webrtc/browser.ini
@@ -19,9 +19,8 @@ skip-if = (os == 'linux') # Bug 1503991
 [browser_devices_get_user_media_tear_off_tab.js]
 [browser_devices_get_user_media_unprompted_access.js]
 [browser_devices_get_user_media_unprompted_access_in_frame.js]
 [browser_devices_get_user_media_unprompted_access_tear_off_tab.js]
 skip-if = (os == "win" && bits == 64) # win8: bug 1334752
 [browser_devices_get_user_media_unprompted_access_queue_request.js]
 [browser_webrtc_hooks.js]
 [browser_devices_get_user_media_queue_request.js]
-skip-if = (os == 'mac') || (os =='linux') # Bug 1518946
--- a/browser/components/about/AboutPrivateBrowsingHandler.jsm
+++ b/browser/components/about/AboutPrivateBrowsingHandler.jsm
@@ -5,30 +5,35 @@
 "use strict";
 
 var EXPORTED_SYMBOLS = ["AboutPrivateBrowsingHandler"];
 
 const {RemotePages} = ChromeUtils.import("resource://gre/modules/remotepagemanager/RemotePageManagerParent.jsm");
 const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 var AboutPrivateBrowsingHandler = {
+  _inited: false,
   _topics: [
     "DontShowIntroPanelAgain",
     "OpenPrivateWindow",
     "SearchHandoff",
   ],
 
   init() {
     this.pageListener = new RemotePages("about:privatebrowsing");
     for (let topic of this._topics) {
       this.pageListener.addMessageListener(topic, this.receiveMessage.bind(this));
     }
+    this._inited = true;
   },
 
   uninit() {
+    if (!this._inited) {
+      return;
+    }
     for (let topic of this._topics) {
       this.pageListener.removeMessageListener(topic);
     }
     this.pageListener.destroy();
   },
 
   receiveMessage(aMessage) {
     switch (aMessage.name) {
--- a/caps/nsScriptSecurityManager.cpp
+++ b/caps/nsScriptSecurityManager.cpp
@@ -284,22 +284,79 @@ static void InheritAndSetCSPOnPrincipalI
 
   // if the principalToInherit had a CSP, add it to the before
   // created NullPrincipal (unless it already has one)
   MOZ_ASSERT(aPrincipal->GetIsNullPrincipal(),
              "inheriting the CSP only valid for NullPrincipal");
   nsCOMPtr<nsIContentSecurityPolicy> nullPrincipalCSP;
   aPrincipal->GetCsp(getter_AddRefs(nullPrincipalCSP));
   if (nullPrincipalCSP) {
-    MOZ_ASSERT(nullPrincipalCSP == originalCSP,
-               "There should be no other CSP here.");
+#ifdef DEBUG
+    {
+      uint32_t nullPrincipalCSPCount = 0;
+      nullPrincipalCSP->GetPolicyCount(&nullPrincipalCSPCount);
+
+      uint32_t originalCSPCount = 0;
+      originalCSP->GetPolicyCount(&originalCSPCount);
+
+      MOZ_ASSERT(nullPrincipalCSPCount == originalCSPCount,
+                 "There should be no other CSP here.");
+
+      nsAutoString nullPrincipalCSPStr, originalCSPStr;
+      for (uint32_t i = 0; i < originalCSPCount; ++i) {
+        originalCSP->GetPolicyString(i, originalCSPStr);
+        nullPrincipalCSP->GetPolicyString(i, nullPrincipalCSPStr);
+        MOZ_ASSERT(originalCSPStr.Equals(nullPrincipalCSPStr),
+                   "There should be no other CSP string here.");
+      }
+    }
+#endif
     // CSPs are equal, no need to set it again.
     return;
   }
-  aPrincipal->SetCsp(originalCSP);
+
+  // After 965637 all that magical CSP inheritance goes away. For now,
+  // we have to create a clone of the current CSP and have to manually
+  // set it on the Principal.
+  uint32_t count = 0;
+  rv = originalCSP->GetPolicyCount(&count);
+  if (NS_WARN_IF(NS_FAILED(rv))) {
+    return;
+  }
+
+  if (count == 0) {
+    // fast path: if there is nothing to inherit, we can return here.
+    return;
+  }
+
+  RefPtr<nsCSPContext> newCSP = new nsCSPContext();
+  nsWeakPtr loadingContext =
+      static_cast<nsCSPContext*>(originalCSP.get())->GetLoadingContext();
+  nsCOMPtr<Document> doc = do_QueryReferent(loadingContext);
+
+  rv = doc ? newCSP->SetRequestContext(doc, nullptr)
+           : newCSP->SetRequestContext(nullptr, aPrincipal);
+  if (NS_WARN_IF(NS_FAILED(rv))) {
+    return;
+  }
+
+  for (uint32_t i = 0; i < count; ++i) {
+    const nsCSPPolicy* policy = originalCSP->GetPolicy(i);
+    MOZ_ASSERT(policy);
+
+    nsAutoString policyString;
+    policy->toString(policyString);
+
+    rv = newCSP->AppendPolicy(policyString, policy->getReportOnlyFlag(),
+                              policy->getDeliveredViaMetaTagFlag());
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return;
+    }
+  }
+  aPrincipal->SetCsp(newCSP);
 }
 
 nsresult nsScriptSecurityManager::GetChannelResultPrincipal(
     nsIChannel* aChannel, nsIPrincipal** aPrincipal, bool aIgnoreSandboxing) {
   MOZ_ASSERT(aChannel, "Must have channel!");
 
   // Check whether we have an nsILoadInfo that says what we should do.
   nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
--- a/devtools/client/debugger/new/test/mochitest/browser_dbg-scroll-run-to-completion.js
+++ b/devtools/client/debugger/new/test/mochitest/browser_dbg-scroll-run-to-completion.js
@@ -3,17 +3,17 @@
  * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
 
 add_task(async function() {
   const dbg = await initDebugger("doc-scroll-run-to-completion.html");
   invokeInTab("pauseOnce", "doc-scroll-run-to-completion.html");
   await waitForPaused(dbg);
   assertPausedLocation(dbg);
 
-  const threadClient = dbg.toolbox.threadClient;
-  await checkEvaluateInTopFrame(threadClient, 'window.scrollBy(0, 10);', undefined);
+  const target = dbg.toolbox.target;
+  await checkEvaluateInTopFrame(target, 'window.scrollBy(0, 10);', undefined);
 
   // checkEvaluateInTopFrame does an implicit resume for some reason.
   await waitForPaused(dbg);
 
   resume(dbg);
   await once(Services.ppmm, "test passed");
 });
--- a/devtools/client/debugger/new/test/mochitest/helpers.js
+++ b/devtools/client/debugger/new/test/mochitest/helpers.js
@@ -1593,32 +1593,24 @@ function hideConsoleContextMenu(hud) {
 
   const onPopupHidden = once(popup, "popuphidden");
   popup.hidePopup();
   return onPopupHidden;
 }
 
 // Return a promise that resolves with the result of a thread evaluating a
 // string in the topmost frame.
-async function evaluateInTopFrame(threadClient, text) {
+async function evaluateInTopFrame(target, text) {
+  const threadClient = target.threadClient;
+  const consoleFront = await target.getFront("console");
   const { frames } = await threadClient.getFrames(0, 1);
   ok(frames.length == 1, "Got one frame");
-  const response = await threadClient.eval(frames[0].actor, text);
-  ok(response.type == "resumed", "Got resume response from eval");
-  let rval;
-  await threadClient.addOneTimeListener("paused", function(event, packet) {
-    ok(
-      packet.type == "paused" &&
-        packet.why.type == "clientEvaluated" &&
-        "return" in packet.why.frameFinished,
-      "Eval returned a value"
-    );
-    rval = packet.why.frameFinished.return;
-  });
-  return rval.type == "undefined" ? undefined : rval;
+  const options = { thread: threadClient.actor, frameActor: frames[0].actor };
+  const response = await consoleFront.evaluateJS(text, options);
+  return response.result.type == "undefined" ? undefined : response.result;
 }
 
 // Return a promise that resolves when a thread evaluates a string in the
 // topmost frame, ensuring the result matches the expected value.
-async function checkEvaluateInTopFrame(threadClient, text, expected) {
-  const rval = await evaluateInTopFrame(threadClient, text);
+async function checkEvaluateInTopFrame(target, text, expected) {
+  const rval = await evaluateInTopFrame(target, text);
   ok(rval == expected, `Eval returned ${expected}`);
 }
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-01.js
@@ -7,37 +7,37 @@
 "use strict";
 
 // Test basic breakpoint functionality in web replay.
 add_task(async function() {
   const dbg = await attachRecordingDebugger(
     "doc_rr_basic.html",
     { waitForRecording: true }
   );
-  const {threadClient, tab, toolbox} = dbg;
+  const {threadClient, tab, toolbox, target} = dbg;
 
   const bp = await setBreakpoint(threadClient, "doc_rr_basic.html", 21);
 
   // Visit a lot of breakpoints so that we are sure we have crossed major
   // checkpoint boundaries.
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 9);
+  await checkEvaluateInTopFrame(target, "number", 9);
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 8);
+  await checkEvaluateInTopFrame(target, "number", 8);
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 7);
+  await checkEvaluateInTopFrame(target, "number", 7);
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 6);
+  await checkEvaluateInTopFrame(target, "number", 6);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 7);
+  await checkEvaluateInTopFrame(target, "number", 7);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 8);
+  await checkEvaluateInTopFrame(target, "number", 8);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 9);
+  await checkEvaluateInTopFrame(target, "number", 9);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
 
   await threadClient.removeBreakpoint(bp);
   await toolbox.closeToolbox();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-02.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-02.js
@@ -5,23 +5,23 @@
 /* eslint-disable no-undef */
 
 "use strict";
 
 // Test unhandled divergence while evaluating at a breakpoint with Web Replay.
 add_task(async function() {
   const dbg = await attachRecordingDebugger("doc_rr_basic.html",
                                             { waitForRecording: true });
-  const {threadClient, tab, toolbox} = dbg;
+  const {threadClient, tab, toolbox, target} = dbg;
 
   const bp = await setBreakpoint(threadClient, "doc_rr_basic.html", 21);
   await rewindToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 10);
-  await checkEvaluateInTopFrameThrows(threadClient, "window.alert(3)");
-  await checkEvaluateInTopFrame(threadClient, "number", 10);
-  await checkEvaluateInTopFrameThrows(threadClient, "window.alert(3)");
-  await checkEvaluateInTopFrame(threadClient, "number", 10);
-  await checkEvaluateInTopFrame(threadClient, "testStepping2()", undefined);
+  await checkEvaluateInTopFrame(target, "number", 10);
+  await checkEvaluateInTopFrameThrows(target, "window.alert(3)");
+  await checkEvaluateInTopFrame(target, "number", 10);
+  await checkEvaluateInTopFrameThrows(target, "window.alert(3)");
+  await checkEvaluateInTopFrame(target, "number", 10);
+  await checkEvaluateInTopFrame(target, "testStepping2()", undefined);
 
   await threadClient.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-03.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-03.js
@@ -4,23 +4,23 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 /* eslint-disable no-undef */
 
 "use strict";
 
 // Test some issues when stepping around after hitting a breakpoint while recording.
 add_task(async function() {
   const dbg = await attachRecordingDebugger("doc_rr_continuous.html");
-  const {threadClient, tab, toolbox} = dbg;
+  const {threadClient, tab, toolbox, target} = dbg;
 
   await threadClient.interrupt();
   const bp1 = await setBreakpoint(threadClient, "doc_rr_continuous.html", 19);
   await resumeToLine(threadClient, 19);
   await reverseStepOverToLine(threadClient, 18);
-  await checkEvaluateInTopFrame(threadClient,
+  await checkEvaluateInTopFrame(target,
     "SpecialPowers.Cu.recordReplayDirective(/* AlwaysTakeTemporarySnapshots */ 3)",
     undefined);
   await stepInToLine(threadClient, 22);
   const bp2 = await setBreakpoint(threadClient, "doc_rr_continuous.html", 24);
   await resumeToLine(threadClient, 24);
   const bp3 = await setBreakpoint(threadClient, "doc_rr_continuous.html", 22);
   await rewindToLine(threadClient, 22);
 
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-04.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-04.js
@@ -5,30 +5,30 @@
 /* eslint-disable no-undef */
 
 "use strict";
 
 // Test navigating back to earlier breakpoints while recording, then resuming
 // recording.
 add_task(async function() {
   const dbg = await attachRecordingDebugger("doc_rr_continuous.html");
-  const {threadClient, tab, toolbox} = dbg;
+  const {threadClient, tab, toolbox, target} = dbg;
 
   const bp = await setBreakpoint(threadClient, "doc_rr_continuous.html", 14);
   await resumeToLine(threadClient, 14);
-  const value = await evaluateInTopFrame(threadClient, "number");
+  const value = await evaluateInTopFrame(target, "number");
   await resumeToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value + 1);
+  await checkEvaluateInTopFrame(target, "number", value + 1);
   await rewindToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value);
+  await checkEvaluateInTopFrame(target, "number", value);
   await resumeToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value + 1);
+  await checkEvaluateInTopFrame(target, "number", value + 1);
   await resumeToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value + 2);
+  await checkEvaluateInTopFrame(target, "number", value + 2);
   await resumeToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value + 3);
+  await checkEvaluateInTopFrame(target, "number", value + 3);
   await rewindToLine(threadClient, 14);
-  await checkEvaluateInTopFrame(threadClient, "number", value + 2);
+  await checkEvaluateInTopFrame(target, "number", value + 2);
 
   await threadClient.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-05.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_breakpoints-05.js
@@ -9,23 +9,23 @@
 // Test hitting breakpoints when rewinding past the point where the breakpoint
 // script was created.
 add_task(async function() {
   const dbg = await attachRecordingDebugger(
     "doc_rr_basic.html",
     { waitForRecording: true }
   );
 
-  const {threadClient, tab, toolbox} = dbg;
+  const {threadClient, tab, toolbox, target} = dbg;
 
   // Rewind to the beginning of the recording.
   await rewindToLine(threadClient, undefined);
 
   const bp = await setBreakpoint(threadClient, "doc_rr_basic.html", 21);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 1);
+  await checkEvaluateInTopFrame(target, "number", 1);
   await resumeToLine(threadClient, 21);
-  await checkEvaluateInTopFrame(threadClient, "number", 2);
+  await checkEvaluateInTopFrame(target, "number", 2);
 
   await threadClient.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_console_warp-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_console_warp-01.js
@@ -8,31 +8,31 @@
 
 // Test basic console time warping functionality in web replay.
 add_task(async function() {
   const dbg = await attachRecordingDebugger(
     "doc_rr_error.html",
     { waitForRecording: true }
   );
 
-  const {tab, toolbox, threadClient} = dbg;
+  const {tab, toolbox, threadClient, target} = dbg;
   const console = await getDebuggerSplitConsole(dbg);
   const hud = console.hud;
 
   await warpToMessage(hud, dbg, "Number 5");
   await threadClient.interrupt();
 
-  await checkEvaluateInTopFrame(threadClient, "number", 5);
+  await checkEvaluateInTopFrame(target, "number", 5);
 
   // Initially we are paused inside the 'new Error()' call on line 19. The
   // first reverse step takes us to the start of that line.
   await reverseStepOverToLine(threadClient, 19);
   await reverseStepOverToLine(threadClient, 18);
   const bp = await setBreakpoint(threadClient, "doc_rr_error.html", 12);
   await rewindToLine(threadClient, 12);
-  await checkEvaluateInTopFrame(threadClient, "number", 4);
+  await checkEvaluateInTopFrame(target, "number", 4);
   await resumeToLine(threadClient, 12);
-  await checkEvaluateInTopFrame(threadClient, "number", 5);
+  await checkEvaluateInTopFrame(target, "number", 5);
 
   await threadClient.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_logpoint-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_logpoint-01.js
@@ -9,17 +9,17 @@
 // Test basic logpoint functionality in web replay. When logpoints are added,
 // new messages should appear in the correct order and allow time warping.
 add_task(async function() {
   const dbg = await attachRecordingDebugger(
     "doc_rr_basic.html",
     { waitForRecording: true }
   );
 
-  const {tab, toolbox, threadClient} = dbg;
+  const {tab, toolbox, threadClient, target} = dbg;
   const console = await getDebuggerSplitConsole(dbg);
   const hud = console.hud;
 
   const bp1 = await setBreakpoint(threadClient, "doc_rr_basic.html", 21,
                                   { logValue: `"Logpoint Number " + number` });
   const bp2 = await setBreakpoint(threadClient, "doc_rr_basic.html", 6,
                                   { logValue: `"Logpoint Beginning"` });
   const bp3 = await setBreakpoint(threadClient, "doc_rr_basic.html", 8,
@@ -30,17 +30,17 @@ add_task(async function() {
   for (let i = 1; i <= 10; i++) {
     ok(messages[i].textContent.includes("Number " + i));
   }
   ok(messages[11].textContent.includes("Ending"));
 
   await warpToMessage(hud, dbg, "Number 5");
   await threadClient.interrupt();
 
-  await checkEvaluateInTopFrame(threadClient, "number", 5);
+  await checkEvaluateInTopFrame(target, "number", 5);
   await reverseStepOverToLine(threadClient, 20);
 
   await threadClient.removeBreakpoint(bp1);
   await threadClient.removeBreakpoint(bp2);
   await threadClient.removeBreakpoint(bp3);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_recovery-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_recovery-01.js
@@ -8,24 +8,24 @@
 
 // Test basic recovery of crashed child processes in web replay.
 add_task(async function() {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_recovery.html", "current");
   await once(Services.ppmm, "RecordingFinished");
 
-  const toolbox = await attachDebugger(tab), client = toolbox.threadClient;
+  const { target, toolbox } = await attachDebugger(tab), client = toolbox.threadClient;
   await client.interrupt();
   await setBreakpoint(client, "doc_rr_recovery.html", 21);
   await rewindToLine(client, 21);
   await checkEvaluateInTopFrame(client,
     "SpecialPowers.Cu.recordReplayDirective(/* CrashSoon */ 1)",
     undefined);
   await stepOverToLine(client, 22);
   await stepOverToLine(client, 23);
-  await checkEvaluateInTopFrame(client,
+  await checkEvaluateInTopFrame(target,
     "SpecialPowers.Cu.recordReplayDirective(/* CrashSoon */ 1); " +
     "SpecialPowers.Cu.recordReplayDirective(/* MaybeCrash */ 2)",
     undefined);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_replay-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_replay-01.js
@@ -20,23 +20,24 @@ add_task(async function() {
   ok(tabParent.saveRecording(recordingFile), "Saved recording");
   await once(Services.ppmm, "SaveRecordingFinished");
 
   const replayingTab = BrowserTestUtils.addTab(gBrowser, null,
                                                { replayExecution: recordingFile });
   gBrowser.selectedTab = replayingTab;
   await once(Services.ppmm, "HitRecordingEndpoint");
 
-  const toolbox = await attachDebugger(replayingTab), client = toolbox.threadClient;
+  const { target, toolbox } = await attachDebugger(replayingTab);
+  const client = toolbox.threadClient;
   await client.interrupt();
   const bp = await setBreakpoint(client, "doc_rr_basic.html", 21);
   await rewindToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
   await rewindToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 9);
+  await checkEvaluateInTopFrame(target, "number", 9);
   await resumeToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(recordingTab);
   await gBrowser.removeTab(replayingTab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_replay-02.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_replay-02.js
@@ -10,45 +10,50 @@
 add_task(async function() {
   waitForExplicitFinish();
 
   const recordingFile = newRecordingFile();
   const recordingTab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = recordingTab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_continuous.html", "current");
 
-  let toolbox = await attachDebugger(recordingTab), client = toolbox.threadClient;
+  const firstTab = await attachDebugger(recordingTab);
+  let toolbox = firstTab.toolbox;
+  let target = firstTab.target;
+  let client = toolbox.threadClient;
   await client.interrupt();
   let bp = await setBreakpoint(client, "doc_rr_continuous.html", 14);
   await resumeToLine(client, 14);
   await resumeToLine(client, 14);
   await reverseStepOverToLine(client, 13);
-  const lastNumberValue = await evaluateInTopFrame(client, "number");
+  const lastNumberValue = await evaluateInTopFrame(target, "number");
 
   const tabParent = recordingTab.linkedBrowser.frameLoader.tabParent;
   ok(tabParent, "Found recording tab parent");
   ok(tabParent.saveRecording(recordingFile), "Saved recording");
   await once(Services.ppmm, "SaveRecordingFinished");
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(recordingTab);
 
   const replayingTab = BrowserTestUtils.addTab(gBrowser, null,
                                                { replayExecution: recordingFile });
   gBrowser.selectedTab = replayingTab;
   await once(Services.ppmm, "HitRecordingEndpoint");
 
-  toolbox = await attachDebugger(replayingTab);
+  const rplyTab = await attachDebugger(replayingTab);
+  toolbox = rplyTab.toolbox;
+  target = rplyTab.target;
   client = toolbox.threadClient;
   await client.interrupt();
-  await checkEvaluateInTopFrame(client, "number", lastNumberValue);
+  await checkEvaluateInTopFrame(target, "number", lastNumberValue);
   await reverseStepOverToLine(client, 13);
   bp = await setBreakpoint(client, "doc_rr_continuous.html", 14);
   await rewindToLine(client, 14);
-  await checkEvaluateInTopFrame(client, "number", lastNumberValue - 1);
+  await checkEvaluateInTopFrame(target, "number", lastNumberValue - 1);
   await resumeToLine(client, 14);
-  await checkEvaluateInTopFrame(client, "number", lastNumberValue);
+  await checkEvaluateInTopFrame(target, "number", lastNumberValue);
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(replayingTab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-01.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-01.js
@@ -8,23 +8,23 @@
 
 // Test basic step-over/back functionality in web replay.
 add_task(async function() {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_basic.html", "current");
   await once(Services.ppmm, "RecordingFinished");
 
-  const toolbox = await attachDebugger(tab), client = toolbox.threadClient;
+  const { target, toolbox } = await attachDebugger(tab), client = toolbox.threadClient;
   await client.interrupt();
   const bp = await setBreakpoint(client, "doc_rr_basic.html", 21);
   await rewindToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
   await reverseStepOverToLine(client, 20);
-  await checkEvaluateInTopFrame(client, "number", 9);
-  await checkEvaluateInTopFrameThrows(client, "window.alert(3)");
+  await checkEvaluateInTopFrame(target, "number", 9);
+  await checkEvaluateInTopFrameThrows(target, "window.alert(3)");
   await stepOverToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-02.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-02.js
@@ -8,17 +8,17 @@
 
 // Test fixes for some simple stepping bugs.
 add_task(async function() {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_basic.html", "current");
   await once(Services.ppmm, "RecordingFinished");
 
-  const toolbox = await attachDebugger(tab), client = toolbox.threadClient;
+  const { toolbox } = await attachDebugger(tab), client = toolbox.threadClient;
   await client.interrupt();
   const bp = await setBreakpoint(client, "doc_rr_basic.html", 22);
   await rewindToLine(client, 22);
   await stepInToLine(client, 25);
   await stepOverToLine(client, 26);
   await stepOverToLine(client, 27);
   await reverseStepInToLine(client, 33);
   await reverseStepOverToLine(client, 32);
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-03.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-03.js
@@ -7,23 +7,24 @@
 "use strict";
 
 // Test stepping back while recording, then resuming recording.
 add_task(async function() {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_continuous.html", "current");
 
-  const toolbox = await attachDebugger(tab), client = toolbox.threadClient;
+  const { toolbox, target } = await attachDebugger(tab);
+  const client = toolbox.threadClient;
   await client.interrupt();
   const bp = await setBreakpoint(client, "doc_rr_continuous.html", 13);
   await resumeToLine(client, 13);
-  const value = await evaluateInTopFrame(client, "number");
+  const value = await evaluateInTopFrame(target, "number");
   await reverseStepOverToLine(client, 12);
-  await checkEvaluateInTopFrame(client, "number", value - 1);
+  await checkEvaluateInTopFrame(target, "number", value - 1);
   await resumeToLine(client, 13);
   await resumeToLine(client, 13);
-  await checkEvaluateInTopFrame(client, "number", value + 1);
+  await checkEvaluateInTopFrame(target, "number", value + 1);
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-04.js
+++ b/devtools/client/webreplay/mochitest/browser_dbg_rr_stepping-04.js
@@ -8,36 +8,36 @@
 
 // Stepping past the beginning or end of a frame should act like a step-out.
 add_task(async function() {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + "doc_rr_basic.html", "current");
   await once(Services.ppmm, "RecordingFinished");
 
-  const toolbox = await attachDebugger(tab), client = toolbox.threadClient;
+  const { target, toolbox } = await attachDebugger(tab), client = toolbox.threadClient;
   await client.interrupt();
   const bp = await setBreakpoint(client, "doc_rr_basic.html", 21);
   await rewindToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
   await reverseStepOverToLine(client, 20);
   await reverseStepOverToLine(client, 12);
 
   // After reverse-stepping out of the topmost frame we should rewind to the
   // last breakpoint hit.
   await reverseStepOverToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 9);
+  await checkEvaluateInTopFrame(target, "number", 9);
 
   await stepOverToLine(client, 22);
   await stepOverToLine(client, 23);
   await stepOverToLine(client, 13);
   await stepOverToLine(client, 17);
   await stepOverToLine(client, 18);
 
   // After forward-stepping out of the topmost frame we should run forward to
   // the next breakpoint hit.
   await stepOverToLine(client, 21);
-  await checkEvaluateInTopFrame(client, "number", 10);
+  await checkEvaluateInTopFrame(target, "number", 10);
 
   await client.removeBreakpoint(bp);
   await toolbox.destroy();
   await gBrowser.removeTab(tab);
 });
--- a/devtools/client/webreplay/mochitest/head.js
+++ b/devtools/client/webreplay/mochitest/head.js
@@ -19,34 +19,34 @@ Services.scriptloader.loadSubScript(
 const EXAMPLE_URL =
   "http://example.com/browser/devtools/client/webreplay/mochitest/examples/";
 
 // Attach a debugger to a tab, returning a promise that resolves with the
 // debugger's toolbox.
 async function attachDebugger(tab) {
   const target = await TargetFactory.forTab(tab);
   const toolbox = await gDevTools.showToolbox(target, "jsdebugger");
-  return toolbox;
+  return { toolbox, target };
 }
 
 async function attachRecordingDebugger(url,
     { waitForRecording } = { waitForRecording: false }) {
   const tab = BrowserTestUtils.addTab(gBrowser, null, { recordExecution: "*" });
   gBrowser.selectedTab = tab;
   openTrustedLinkIn(EXAMPLE_URL + url, "current");
 
   if (waitForRecording) {
     await once(Services.ppmm, "RecordingFinished");
   }
-  const toolbox = await attachDebugger(tab);
+  const { target, toolbox } = await attachDebugger(tab);
   const dbg = createDebuggerContext(toolbox);
   const threadClient = dbg.toolbox.threadClient;
 
   await threadClient.interrupt();
-  return {...dbg, tab, threadClient};
+  return {...dbg, tab, threadClient, target};
 }
 
 // Return a promise that resolves when a breakpoint has been set.
 async function setBreakpoint(threadClient, expectedFile, lineno, options = {}) {
   const {sources} = await threadClient.getSources();
   ok(sources.length == 1, "Got one source");
   ok(RegExp(expectedFile).test(sources[0].url), "Source is " + expectedFile);
   const location = { sourceUrl: sources[0].url, line: lineno };
@@ -73,26 +73,24 @@ var reverseStepOverToLine = resumeThenPa
 var stepOverToLine = resumeThenPauseAtLineFunctionFactory("stepOver");
 var reverseStepInToLine = resumeThenPauseAtLineFunctionFactory("reverseStepIn");
 var stepInToLine = resumeThenPauseAtLineFunctionFactory("stepIn");
 var reverseStepOutToLine = resumeThenPauseAtLineFunctionFactory("reverseStepOut");
 var stepOutToLine = resumeThenPauseAtLineFunctionFactory("stepOut");
 
 // Return a promise that resolves when a thread evaluates a string in the
 // topmost frame, with the result throwing an exception.
-async function checkEvaluateInTopFrameThrows(threadClient, text) {
-  const {frames} = await threadClient.getFrames(0, 1);
+async function checkEvaluateInTopFrameThrows(target, text) {
+  const threadClient = target.threadClient;
+  const consoleFront = await target.getFront("console");
+  const { frames } = await threadClient.getFrames(0, 1);
   ok(frames.length == 1, "Got one frame");
-  const response = await threadClient.eval(frames[0].actor, text);
-  ok(response.type == "resumed", "Got resume response from eval");
-  await threadClient.addOneTimeListener("paused", function(event, packet) {
-    ok(packet.type == "paused" &&
-       packet.why.type == "clientEvaluated" &&
-       "throw" in packet.why.frameFinished, "Eval threw an exception");
-  });
+  const options = { thread: threadClient.actor, frameActor: frames[0].actor };
+  const response = await consoleFront.evaluateJS(text, options);
+  ok(response.exception, "Eval threw an exception");
 }
 
 // Return a pathname that can be used for a new recording file.
 function newRecordingFile() {
   ChromeUtils.import("resource://gre/modules/osfile.jsm", this);
   return OS.Path.join(OS.Constants.Path.tmpDir,
                       "MochitestRecording" + Math.round(Math.random() * 1000000000));
 }
--- a/devtools/server/actors/thread.js
+++ b/devtools/server/actors/thread.js
@@ -1025,52 +1025,16 @@ const ThreadActor = ActorClassWithSpec(t
       rewinding ? (frame.offset == frame.script.mainOffset) : frame.reportedPop;
     const stepFrame = endOfFrame ? frame.older : frame;
     if (!stepFrame || !stepFrame.script) {
       return null;
     }
     return stepFrame;
   },
 
-  onClientEvaluate: function(request) {
-    if (this.state !== "paused") {
-      return { error: "wrongState",
-               message: "Debuggee must be paused to evaluate code." };
-    }
-
-    const frame = this._requestFrame(request.frame);
-    if (!frame) {
-      return { error: "unknownFrame",
-               message: "Evaluation frame not found" };
-    }
-
-    if (!frame.environment) {
-      return { error: "notDebuggee",
-               message: "cannot access the environment of this frame." };
-    }
-
-    const youngest = this.youngestFrame;
-
-    // Put ourselves back in the running state and inform the client.
-    const resumedPacket = this._resumed();
-    this.conn.send(resumedPacket);
-
-    // Run the expression.
-    // XXX: test syntax errors
-    const completion = frame.eval(request.expression);
-
-    // Put ourselves back in the pause state.
-    const packet = this._paused(youngest);
-    packet.why = { type: "clientEvaluated",
-                   frameFinished: this.createProtocolCompletionValue(completion) };
-
-    // Return back to our previous pause's event loop.
-    return packet;
-  },
-
   onFrames: function(request) {
     if (this.state !== "paused") {
       return { error: "wrongState",
                message: "Stack frames are only available while the debuggee is paused."};
     }
 
     const start = request.start ? request.start : 0;
     const count = request.count;
@@ -1738,17 +1702,16 @@ const ThreadActor = ActorClassWithSpec(t
   },
 });
 
 Object.assign(ThreadActor.prototype.requestTypes, {
   "attach": ThreadActor.prototype.onAttach,
   "detach": ThreadActor.prototype.onDetach,
   "reconfigure": ThreadActor.prototype.onReconfigure,
   "resume": ThreadActor.prototype.onResume,
-  "clientEvaluate": ThreadActor.prototype.onClientEvaluate,
   "frames": ThreadActor.prototype.onFrames,
   "interrupt": ThreadActor.prototype.onInterrupt,
   "sources": ThreadActor.prototype.onSources,
   "threadGrips": ThreadActor.prototype.onThreadGrips,
   "skipBreakpoints": ThreadActor.prototype.onSkipBreakpoints,
   "pauseOnExceptions": ThreadActor.prototype.onPauseOnExceptions,
   "dumpThread": ThreadActor.prototype.onDump,
 });
--- a/devtools/server/tests/unit/test_blackboxing-02.js
+++ b/devtools/server/tests/unit/test_blackboxing-02.js
@@ -28,29 +28,19 @@ function run_test() {
   });
   do_test_pending();
 }
 
 const BLACK_BOXED_URL = "http://example.com/blackboxme.js";
 const SOURCE_URL = "http://example.com/source.js";
 
 function test_black_box() {
-  gClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.eval(packet.frame.actor, "doStuff", function(response) {
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        const obj = gThreadClient.pauseGrip(packet.why.frameFinished.return);
-        obj.getDefinitionSite(runWithSource);
-      });
-    });
-
-    function runWithSource(packet) {
-      const source = gThreadClient.source(packet.source);
-      gThreadClient.setBreakpoint({ sourceUrl: source.url, line: 2 }, {});
-      gThreadClient.resume(test_black_box_breakpoint);
-    }
+  gClient.addOneTimeListener("paused", async function(event, packet) {
+    gThreadClient.setBreakpoint({ sourceUrl: BLACK_BOXED_URL, line: 2 }, {});
+    gThreadClient.resume(test_black_box_breakpoint);
   });
 
   /* eslint-disable no-multi-spaces, no-undef */
   Cu.evalInSandbox(
     "" + function doStuff(k) { // line 1
       const arg = 15;            // line 2 - Break here
       k(arg);                  // line 3
     },                         // line 4
--- a/devtools/server/tests/unit/test_blackboxing-04.js
+++ b/devtools/server/tests/unit/test_blackboxing-04.js
@@ -26,28 +26,18 @@ function run_test() {
   do_test_pending();
 }
 
 const BLACK_BOXED_URL = "http://example.com/blackboxme.js";
 const SOURCE_URL = "http://example.com/source.js";
 
 function test_black_box() {
   gClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.eval(packet.frame.actor, "doStuff", function(response) {
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        const obj = gThreadClient.pauseGrip(packet.why.frameFinished.return);
-        obj.getDefinitionSite(runWithSource);
-      });
-    });
-
-    function runWithSource(packet) {
-      const source = gThreadClient.source(packet.source);
-      gThreadClient.setBreakpoint({ sourceUrl: source.url, line: 2 }, {});
-      test_black_box_paused();
-    }
+    gThreadClient.setBreakpoint({ sourceUrl: BLACK_BOXED_URL, line: 2 }, {});
+    test_black_box_paused();
   });
 
   /* eslint-disable no-multi-spaces, no-undef */
   Cu.evalInSandbox(
     "" + function doStuff(k) { // line 1
       debugger;                // line 2
       k(100);                  // line 3
     },                         // line 4
--- a/devtools/server/tests/unit/test_breakpoint-08.js
+++ b/devtools/server/tests/unit/test_breakpoint-08.js
@@ -6,55 +6,49 @@
 
 /**
  * Check that setting a breakpoint in a line without code in a child script
  * will skip forward, in a file with two scripts.
  */
 
 add_task(threadClientTest(({ threadClient, debuggee }) => {
   return new Promise(resolve => {
-    threadClient.addOneTimeListener("paused", function(event, packet) {
-      threadClient.eval(packet.frame.actor, "foo", function(response) {
-        threadClient.addOneTimeListener("paused", async function(event, packet) {
-          const obj = threadClient.pauseGrip(packet.why.frameFinished.return);
-          const site = await obj.getDefinitionSite();
+    threadClient.addOneTimeListener("paused", async function(event, packet) {
+      const line = debuggee.line0 + 3;
+      const source = await getSourceById(
+        threadClient,
+        packet.frame.where.actor
+      );
 
-          const location = { line: debuggee.line0 + 3 };
-          const source = await getSourceById(
-            threadClient,
-            site.source.actor
-          );
-
-          source.setBreakpoint(location).then(function([response, bpClient]) {
-            // Check that the breakpoint has properly skipped forward one line.
-            Assert.equal(response.actualLocation.source.actor, source.actor);
-            Assert.equal(response.actualLocation.line, location.line + 1);
+      // this test has been disabled for a long time so the functionality doesn't work
+      const response = await threadClient
+        .setBreakpoint({ sourceUrl: source.url, line: line }, {});
+      // check that the breakpoint has properly skipped forward one line.
+      assert.equal(response.actuallocation.source.actor, source.actor);
+      Assert.equal(response.actualLocation.line, location.line + 1);
 
-            threadClient.addOneTimeListener("paused", function(event, packet) {
-              // Check the return value.
-              Assert.equal(packet.type, "paused");
-              Assert.equal(packet.frame.where.actor, source.actor);
-              Assert.equal(packet.frame.where.line, location.line + 1);
-              Assert.equal(packet.why.type, "breakpoint");
-              Assert.equal(packet.why.actors[0], bpClient.actor);
-              // Check that the breakpoint worked.
-              Assert.equal(debuggee.a, 1);
-              Assert.equal(debuggee.b, undefined);
+      threadClient.addOneTimeListener("paused", function(event, packet) {
+        // Check the return value.
+        Assert.equal(packet.type, "paused");
+        Assert.equal(packet.frame.where.actor, source.actor);
+        Assert.equal(packet.frame.where.line, location.line + 1);
+        Assert.equal(packet.why.type, "breakpoint");
+        Assert.equal(packet.why.actors[0], response.bpClient.actor);
+        // Check that the breakpoint worked.
+        Assert.equal(debuggee.a, 1);
+        Assert.equal(debuggee.b, undefined);
 
-              // Remove the breakpoint.
-              bpClient.remove(function(response) {
-                threadClient.resume(resolve);
-              });
-            });
-
-            // Continue until the breakpoint is hit.
-            threadClient.resume();
-          });
+        // Remove the breakpoint.
+        response.bpClient.remove(function(response) {
+          threadClient.resume(resolve);
         });
       });
+
+      // Continue until the breakpoint is hit.
+      threadClient.resume();
     });
 
     /* eslint-disable */
     Cu.evalInSandbox("var line0 = Error().lineNumber;\n" +
                      "function foo() {\n" + // line0 + 1
                      "  this.a = 1;\n" +    // line0 + 2
                      "  // A comment.\n" +  // line0 + 3
                      "  this.b = 2;\n" +    // line0 + 4
deleted file mode 100644
--- a/devtools/server/tests/unit/test_eval-01.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow, max-nested-callbacks */
-
-"use strict";
-
-/**
- * Check basic eval resume/re-pause
- */
-
-var gDebuggee;
-var gClient;
-var gThreadClient;
-
-function run_test() {
-  Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
-  });
-  initTestDebuggerServer();
-  gDebuggee = addTestGlobal("test-stack");
-  gClient = new DebuggerClient(DebuggerServer.connectPipe());
-  gClient.connect().then(function() {
-    attachTestTabAndResume(gClient, "test-stack",
-                           function(response, targetFront, threadClient) {
-                             gThreadClient = threadClient;
-                             test_simple_eval();
-                           });
-  });
-  do_test_pending();
-}
-
-function test_simple_eval() {
-  gThreadClient.addOneTimeListener("paused", function(event, packet) {
-    const arg1Actor = packet.frame.arguments[0].actor;
-    gThreadClient.eval(null, "({ obj: true })", function(response) {
-      Assert.equal(response.type, "resumed");
-      // Expect a pause notification immediately.
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        // Check the return value...
-        Assert.equal(packet.type, "paused");
-        Assert.equal(packet.why.type, "clientEvaluated");
-        Assert.equal(packet.why.frameFinished.return.type, "object");
-        Assert.equal(packet.why.frameFinished.return.class, "Object");
-
-        // Make sure the previous pause lifetime was correctly dropped.
-        gClient.request({ to: arg1Actor, type: "bogusRequest" }, function(response) {
-          Assert.equal(response.error, "noSuchActor");
-          gThreadClient.resume(function() {
-            finishClient(gClient);
-          });
-        });
-      });
-    });
-  });
-
-  /* eslint-disable */
-  gDebuggee.eval("(" + function () {
-    function stopMe(arg1) { debugger; }
-    stopMe({obj: true});
-  } + ")()");
-  /* eslint-enable */
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_eval-02.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow, max-nested-callbacks */
-
-"use strict";
-
-/**
- * Check eval resume/re-pause with a throw.
- */
-
-var gDebuggee;
-var gClient;
-var gThreadClient;
-
-function run_test() {
-  Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
-  });
-  initTestDebuggerServer();
-  gDebuggee = addTestGlobal("test-stack");
-  gClient = new DebuggerClient(DebuggerServer.connectPipe());
-  gClient.connect().then(function() {
-    attachTestTabAndResume(gClient, "test-stack",
-                           function(response, targetFront, threadClient) {
-                             gThreadClient = threadClient;
-                             test_throw_eval();
-                           });
-  });
-  do_test_pending();
-}
-
-function test_throw_eval() {
-  gThreadClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.eval(null, "throw 'failure'", function(response) {
-      Assert.equal(response.type, "resumed");
-      // Expect a pause notification immediately.
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        // Check the return value...
-        Assert.equal(packet.type, "paused");
-        Assert.equal(packet.why.type, "clientEvaluated");
-        Assert.equal(packet.why.frameFinished.throw, "failure");
-        gThreadClient.resume(function() {
-          finishClient(gClient);
-        });
-      });
-    });
-  });
-
-  /* eslint-disable */
-  gDebuggee.eval("(" + function () {
-    function stopMe(arg1) { debugger; }
-    stopMe({obj: true});
-  } + ")()");
-  /* eslint-enable */
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_eval-03.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow, max-nested-callbacks */
-
-"use strict";
-
-/**
- * Check syntax errors in an eval.
- */
-
-var gDebuggee;
-var gClient;
-var gThreadClient;
-
-function run_test() {
-  Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
-  });
-  initTestDebuggerServer();
-  gDebuggee = addTestGlobal("test-stack");
-  gClient = new DebuggerClient(DebuggerServer.connectPipe());
-  gClient.connect().then().then(function() {
-    attachTestTabAndResume(gClient, "test-stack",
-                           function(response, targetFront, threadClient) {
-                             gThreadClient = threadClient;
-                             test_syntax_error_eval();
-                           });
-  });
-  do_test_pending();
-}
-
-function test_syntax_error_eval() {
-  gThreadClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.eval(null, "%$@!@#", function(response) {
-      Assert.equal(response.type, "resumed");
-      // Expect a pause notification immediately.
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        // Check the return value...
-        Assert.equal(packet.type, "paused");
-        Assert.equal(packet.why.type, "clientEvaluated");
-        Assert.equal(packet.why.frameFinished.throw.type, "object");
-        Assert.equal(packet.why.frameFinished.throw.class, "Error");
-
-        gThreadClient.resume(function() {
-          finishClient(gClient);
-        });
-      });
-    });
-  });
-
-  /* eslint-disable */
-  gDebuggee.eval("(" + function () {
-    function stopMe(arg1) { debugger; }
-    stopMe({obj: true});
-  } + ")()");
-  /* eslint-enable */
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_eval-04.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow, max-nested-callbacks */
-
-"use strict";
-
-/**
- * Check evals against different frames.
- */
-
-var gDebuggee;
-var gClient;
-var gThreadClient;
-
-function run_test() {
-  Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
-  });
-  initTestDebuggerServer();
-  gDebuggee = addTestGlobal("test-stack");
-  gClient = new DebuggerClient(DebuggerServer.connectPipe());
-  gClient.connect().then(function() {
-    attachTestTabAndResume(gClient, "test-stack",
-                           function(response, targetFront, threadClient) {
-                             gThreadClient = threadClient;
-                             test_different_frames_eval();
-                           });
-  });
-  do_test_pending();
-}
-
-function test_different_frames_eval() {
-  gThreadClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.getFrames(0, 2, function(response) {
-      const frame0 = response.frames[0];
-      const frame1 = response.frames[1];
-
-      // Eval against the top frame...
-      gThreadClient.eval(frame0.actor, "arg", function(response) {
-        Assert.equal(response.type, "resumed");
-        gThreadClient.addOneTimeListener("paused", function(event, packet) {
-          // 'arg' should have been evaluated in frame0
-          Assert.equal(packet.type, "paused");
-          Assert.equal(packet.why.type, "clientEvaluated");
-          Assert.equal(packet.why.frameFinished.return, "arg0");
-
-          // Now eval against the second frame.
-          gThreadClient.eval(frame1.actor, "arg", function(response) {
-            gThreadClient.addOneTimeListener("paused", function(event, packet) {
-              // 'arg' should have been evaluated in frame1
-              Assert.equal(packet.type, "paused");
-              Assert.equal(packet.why.frameFinished.return, "arg1");
-
-              gThreadClient.resume(function() {
-                finishClient(gClient);
-              });
-            });
-          });
-        });
-      });
-    });
-  });
-
-  gDebuggee.eval("(" + function() {
-    function frame0(arg) {
-      debugger;
-    }
-    function frame1(arg) {
-      frame0("arg0");
-    }
-    frame1("arg1");
-  } + ")()");
-}
deleted file mode 100644
--- a/devtools/server/tests/unit/test_eval-05.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-/* eslint-disable no-shadow, max-nested-callbacks */
-
-"use strict";
-
-/**
- * Check pauses within evals.
- */
-
-var gDebuggee;
-var gClient;
-var gThreadClient;
-
-function run_test() {
-  Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
-  });
-  initTestDebuggerServer();
-  gDebuggee = addTestGlobal("test-stack");
-  gClient = new DebuggerClient(DebuggerServer.connectPipe());
-  gClient.connect().then(function() {
-    attachTestTabAndResume(gClient, "test-stack",
-                           function(response, targetFront, threadClient) {
-                             gThreadClient = threadClient;
-                             test_pauses_eval();
-                           });
-  });
-  do_test_pending();
-}
-
-function test_pauses_eval() {
-  gThreadClient.addOneTimeListener("paused", function(event, packet) {
-    gThreadClient.eval(null, "debugger", function(response) {
-      // Expect a resume then a debuggerStatement pause.
-      Assert.equal(response.type, "resumed");
-      gThreadClient.addOneTimeListener("paused", function(event, packet) {
-        Assert.equal(packet.why.type, "debuggerStatement");
-        // Resume from the debugger statement should immediately re-pause
-        // with a clientEvaluated reason.
-        gThreadClient.resume(function(packet) {
-          Assert.equal(packet.type, "resumed");
-          gThreadClient.addOneTimeListener("paused", function(event, packet) {
-            Assert.equal(packet.why.type, "clientEvaluated");
-            gThreadClient.resume(function() {
-              finishClient(gClient);
-            });
-          });
-        });
-      });
-    });
-  });
-  gDebuggee.eval("(" + function() {
-    function stopMe(arg) {
-      debugger;
-    }
-    stopMe();
-  } + ")()");
-}
--- a/devtools/server/tests/unit/test_new_source-02.js
+++ b/devtools/server/tests/unit/test_new_source-02.js
@@ -4,55 +4,59 @@
 "use strict";
 
 /**
  * Check that sourceURL has the correct effect when using gThreadClient.eval.
  */
 
 var gDebuggee;
 var gClient;
+var gTargetFront;
 var gThreadClient;
 
 function run_test() {
   Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
   registerCleanupFunction(() => {
     Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
   });
   initTestDebuggerServer();
   gDebuggee = addTestGlobal("test-stack");
   gClient = new DebuggerClient(DebuggerServer.connectPipe());
   gClient.connect().then(function() {
     attachTestTabAndResume(gClient, "test-stack",
                            function(response, targetFront, threadClient) {
                              gThreadClient = threadClient;
+                             gTargetFront = targetFront;
                              test_simple_new_source();
                            });
   });
   do_test_pending();
 }
 
 function test_simple_new_source() {
   gThreadClient.addOneTimeListener("paused", function() {
-    gThreadClient.addOneTimeListener("newSource", function(event2, packet2) {
+    gThreadClient.addOneTimeListener("newSource", async function(event2, packet2) {
       // The "stopMe" eval source is emitted first.
       Assert.equal(event2, "newSource");
       Assert.equal(packet2.type, "newSource");
       Assert.ok(!!packet2.source);
       Assert.ok(packet2.source.introductionType, "eval");
 
       gThreadClient.addOneTimeListener("newSource", function(event, packet) {
         Assert.equal(event, "newSource");
         Assert.equal(packet.type, "newSource");
         dump(JSON.stringify(packet, null, 2));
         Assert.ok(!!packet.source);
         Assert.ok(!!packet.source.url.match(/example\.com/));
 
         finishClient(gClient);
       });
-      gThreadClient.eval(null, "function f() { }\n//# sourceURL=http://example.com/code.js");
+
+      const consoleFront = await gTargetFront.getFront("console");
+      consoleFront.evaluateJSAsync("function f() { }\n//# sourceURL=http://example.com/code.js");
     });
   });
 
   /* eslint-disable */
   gDebuggee.eval("(" + function () {
     function stopMe(arg1) { debugger; }
     stopMe({obj: true});
   } + ")()");
--- a/devtools/server/tests/unit/testactors.js
+++ b/devtools/server/tests/unit/testactors.js
@@ -68,16 +68,21 @@ function TestTabList(connection) {
 TestTabList.prototype = {
   constructor: TestTabList,
   getList: function() {
     return Promise.resolve([...this._targetActors]);
   },
 };
 
 exports.createRootActor = function createRootActor(connection) {
+  ActorRegistry.registerModule("devtools/server/actors/webconsole", {
+    prefix: "console",
+    constructor: "WebConsoleActor",
+    type: { target: true },
+  });
   const root = new RootActor(connection, {
     tabList: new TestTabList(connection),
     globalActorFactories: ActorRegistry.globalActorFactories,
   });
 
   root.applicationType = "xpcshell-tests";
   return root;
 };
--- a/devtools/server/tests/unit/xpcshell.ini
+++ b/devtools/server/tests/unit/xpcshell.ini
@@ -74,21 +74,16 @@ support-files =
 [test_pauselifetime-04.js]
 [test_threadlifetime-01.js]
 [test_threadlifetime-02.js]
 [test_threadlifetime-04.js]
 [test_functiongrips-01.js]
 [test_front_destroy.js]
 [test_nativewrappers.js]
 [test_nodelistactor.js]
-[test_eval-01.js]
-[test_eval-02.js]
-[test_eval-03.js]
-[test_eval-04.js]
-[test_eval-05.js]
 [test_format_command.js]
 [test_promises_actor_attach.js]
 [test_promises_actor_list_promises.js]
 skip-if = coverage # bug 1336670
 [test_promises_actor_onnewpromise.js]
 [test_promises_actor_onpromisesettled.js]
 [test_promises_client_getdependentpromises.js]
 [test_promises_object_creationtimestamp.js]
--- a/devtools/shared/client/thread-client.js
+++ b/devtools/shared/client/thread-client.js
@@ -264,49 +264,16 @@ ThreadClient.prototype = {
    */
   pauseOnExceptions: DebuggerClient.requester({
     type: "pauseOnExceptions",
     pauseOnExceptions: arg(0),
     ignoreCaughtExceptions: arg(1),
   }),
 
   /**
-   * Send a clientEvaluate packet to the debuggee. Response
-   * will be a resume packet.
-   *
-   * @param string frame
-   *        The actor ID of the frame where the evaluation should take place.
-   * @param string expression
-   *        The expression that will be evaluated in the scope of the frame
-   *        above.
-   * @param function onResponse
-   *        Called with the response packet.
-   */
-  eval: DebuggerClient.requester({
-    type: "clientEvaluate",
-    frame: arg(0),
-    expression: arg(1),
-  }, {
-    before: function(packet) {
-      this._assertPaused("eval");
-      // Put the client in a tentative "resuming" state so we can prevent
-      // further requests that should only be sent in the paused state.
-      this._state = "resuming";
-      return packet;
-    },
-    after: function(response) {
-      if (response.error) {
-        // There was an error resuming, back to paused state.
-        this._state = "paused";
-      }
-      return response;
-    },
-  }),
-
-  /**
    * Detach from the thread actor.
    *
    * @param function onResponse
    *        Called with the response packet.
    */
   detach: DebuggerClient.requester({
     type: "detach",
   }, {
--- a/dom/animation/EffectCompositor.cpp
+++ b/dom/animation/EffectCompositor.cpp
@@ -291,26 +291,26 @@ void EffectCompositor::PostRestyleForAni
     return;
   }
 
   dom::Element* element = GetElementToRestyle(aElement, aPseudoType);
   if (!element) {
     return;
   }
 
-  nsRestyleHint hint = aCascadeLevel == CascadeLevel::Transitions
-                           ? eRestyle_CSSTransitions
-                           : eRestyle_CSSAnimations;
+  RestyleHint hint = aCascadeLevel == CascadeLevel::Transitions
+                         ? StyleRestyleHint_RESTYLE_CSS_TRANSITIONS
+                         : StyleRestyleHint_RESTYLE_CSS_ANIMATIONS;
 
   MOZ_ASSERT(NS_IsMainThread(),
              "Restyle request during restyling should be requested only on "
              "the main-thread. e.g. after the parallel traversal");
   if (ServoStyleSet::IsInServoTraversal() || mIsInPreTraverse) {
-    MOZ_ASSERT(hint == eRestyle_CSSAnimations ||
-               hint == eRestyle_CSSTransitions);
+    MOZ_ASSERT(hint == StyleRestyleHint_RESTYLE_CSS_ANIMATIONS ||
+               hint == StyleRestyleHint_RESTYLE_CSS_TRANSITIONS);
 
     // We can't call Servo_NoteExplicitHints here since AtomicRefCell does not
     // allow us mutate ElementData of the |aElement| in SequentialTask.
     // Instead we call Servo_NoteExplicitHints for the element in PreTraverse()
     // which will be called right before the second traversal that we do for
     // updating CSS animations.
     // In that case PreTraverse() will return true so that we know to do the
     // second traversal so we don't need to post any restyle requests to the
@@ -825,18 +825,19 @@ bool EffectCompositor::PreTraverseInSubt
       }
 
       // We need to post restyle hints even if the target is not in EffectSet to
       // ensure the final restyling for removed animations.
       // We can't call PostRestyleEvent directly here since we are still in the
       // middle of the servo traversal.
       mPresContext->RestyleManager()->PostRestyleEventForAnimations(
           target.mElement, target.mPseudoType,
-          cascadeLevel == CascadeLevel::Transitions ? eRestyle_CSSTransitions
-                                                    : eRestyle_CSSAnimations);
+          cascadeLevel == CascadeLevel::Transitions
+              ? StyleRestyleHint_RESTYLE_CSS_TRANSITIONS
+              : StyleRestyleHint_RESTYLE_CSS_ANIMATIONS);
 
       foundElementsNeedingRestyle = true;
 
       EffectSet* effects =
           EffectSet::GetEffectSet(target.mElement, target.mPseudoType);
       if (!effects) {
         // Drop EffectSets that have been destroyed.
         iter.Remove();
@@ -903,21 +904,21 @@ bool EffectCompositor::PreTraverse(dom::
     bool hasUnthrottledRestyle = false;
     if (!elementSet.Get(key, &hasUnthrottledRestyle) ||
         (!flushThrottledRestyles && !hasUnthrottledRestyle)) {
       continue;
     }
 
     mPresContext->RestyleManager()->PostRestyleEventForAnimations(
         aElement, aPseudoType,
-        cascadeLevel == CascadeLevel::Transitions ? eRestyle_CSSTransitions
-                                                  : eRestyle_CSSAnimations);
+        cascadeLevel == CascadeLevel::Transitions
+            ? StyleRestyleHint_RESTYLE_CSS_TRANSITIONS
+            : StyleRestyleHint_RESTYLE_CSS_ANIMATIONS);
 
-    EffectSet* effects = EffectSet::GetEffectSet(aElement, aPseudoType);
-    if (effects) {
+    if (EffectSet* effects = EffectSet::GetEffectSet(aElement, aPseudoType)) {
       MaybeUpdateCascadeResults(aElement, aPseudoType);
 
       for (KeyframeEffect* effect : *effects) {
         effect->GetAnimation()->WillComposeStyle();
       }
     }
 
     elementSet.Remove(key);
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -2539,24 +2539,21 @@ nsresult Document::StartDocumentLoad(con
       mUpgradeInsecureRequests = doc->GetUpgradeInsecureRequests(false);
       // if the parent document makes use of upgrade-insecure-requests
       // then subdocument preloads should always be upgraded.
       mUpgradeInsecurePreloads =
           mUpgradeInsecureRequests || doc->GetUpgradeInsecureRequests(true);
     }
   }
 
-  // If this is not a data document, set CSP.
-  if (!mLoadedAsData) {
-    nsresult rv = InitCSP(aChannel);
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
+  nsresult rv = InitCSP(aChannel);
+  NS_ENSURE_SUCCESS(rv, rv);
 
   // Initialize FeaturePolicy
-  nsresult rv = InitFeaturePolicy(aChannel);
+  rv = InitFeaturePolicy(aChannel);
   NS_ENSURE_SUCCESS(rv, rv);
 
   // XFO needs to be checked after CSP because it is ignored if
   // the CSP defines frame-ancestors.
   if (!FramingChecker::CheckFrameOptions(aChannel, docShell, NodePrincipal())) {
     MOZ_LOG(gCspPRLog, LogLevel::Debug,
             ("XFO doesn't like frame's ancestry, not loading."));
     // stop!  ERROR page!
@@ -2644,16 +2641,21 @@ nsresult Document::InitCSP(nsIChannel* a
   MOZ_ASSERT(!mScriptGlobalObject,
              "CSP must be initialized before mScriptGlobalObject is set!");
   if (!StaticPrefs::security_csp_enable()) {
     MOZ_LOG(gCspPRLog, LogLevel::Debug,
             ("CSP is disabled, skipping CSP init for document %p", this));
     return NS_OK;
   }
 
+  // If this is a data document - no need to set CSP.
+  if (mLoadedAsData) {
+    return NS_OK;
+  }
+
   nsAutoCString tCspHeaderValue, tCspROHeaderValue;
 
   nsCOMPtr<nsIHttpChannel> httpChannel;
   nsresult rv = GetHttpChannelHelper(aChannel, getter_AddRefs(httpChannel));
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
@@ -2667,16 +2669,30 @@ nsresult Document::InitCSP(nsIChannel* a
   }
   NS_ConvertASCIItoUTF16 cspHeaderValue(tCspHeaderValue);
   NS_ConvertASCIItoUTF16 cspROHeaderValue(tCspROHeaderValue);
 
   // Check if this is a document from a WebExtension.
   nsCOMPtr<nsIPrincipal> principal = NodePrincipal();
   auto addonPolicy = BasePrincipal::Cast(principal)->AddonPolicy();
 
+  // Unless the NodePrincipal is a SystemPrincipal, which currently can not
+  // hold a CSP, we always call EnsureCSP() on the Principal. We do this
+  // so that a Meta CSP does not have to create a new CSP object. This is
+  // important because history entries hold a reference to the CSP object,
+  // which then gets dynamically updated in case a meta CSP is present.
+  // Note that after Bug 965637 we can remove that carve out, because the
+  // CSP will hang off the Client/Document and not the Principal anymore.
+  if (principal->IsSystemPrincipal()) {
+    return NS_OK;
+  }
+  nsCOMPtr<nsIContentSecurityPolicy> csp;
+  rv = principal->EnsureCSP(this, getter_AddRefs(csp));
+  NS_ENSURE_SUCCESS(rv, rv);
+
   // Check if this is a signed content to apply default CSP.
   bool applySignedContentCSP = false;
   nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
   if (loadInfo->GetVerifySignedContent()) {
     applySignedContentCSP = true;
   }
 
   // If there's no CSP to apply, go ahead and return early
@@ -2692,20 +2708,16 @@ nsresult Document::InitCSP(nsIChannel* a
     }
 
     return NS_OK;
   }
 
   MOZ_LOG(gCspPRLog, LogLevel::Debug,
           ("Document is an add-on or CSP header specified %p", this));
 
-  nsCOMPtr<nsIContentSecurityPolicy> csp;
-  rv = principal->EnsureCSP(this, getter_AddRefs(csp));
-  NS_ENSURE_SUCCESS(rv, rv);
-
   // ----- if the doc is an addon, apply its CSP.
   if (addonPolicy) {
     nsCOMPtr<nsIAddonPolicyService> aps =
         do_GetService("@mozilla.org/addons/policy-service;1");
 
     nsAutoString addonCSP;
     Unused << ExtensionPolicyService::GetSingleton().GetBaseCSP(addonCSP);
     csp->AppendPolicy(addonCSP, false, false);
--- a/dom/base/Element.cpp
+++ b/dom/base/Element.cpp
@@ -2028,24 +2028,22 @@ DeclarationBlock* Element::GetSMILOverri
 }
 
 nsresult Element::SetSMILOverrideStyleDeclaration(
     DeclarationBlock* aDeclaration) {
   Element::nsExtendedDOMSlots* slots = ExtendedDOMSlots();
 
   slots->mSMILOverrideStyleDeclaration = aDeclaration;
 
-  Document* doc = GetComposedDoc();
   // Only need to request a restyle if we're in a document.  (We might not
   // be in a document, if we're clearing animation effects on a target node
   // that's been detached since the previous animation sample.)
-  if (doc) {
-    nsCOMPtr<nsIPresShell> shell = doc->GetShell();
-    if (shell) {
-      shell->RestyleForAnimation(this, eRestyle_StyleAttribute_Animations);
+  if (Document* doc = GetComposedDoc()) {
+    if (nsIPresShell* shell = doc->GetShell()) {
+      shell->RestyleForAnimation(this, StyleRestyleHint_RESTYLE_SMIL);
     }
   }
 
   return NS_OK;
 }
 
 bool Element::IsLabelable() const { return false; }
 
--- a/dom/base/Location.cpp
+++ b/dom/base/Location.cpp
@@ -767,17 +767,18 @@ nsresult Location::Reload(bool aForceget
     // of reloading the page, just clear style data and reflow the
     // page since some sites may use this trick to work around gecko
     // reflow bugs, and this should have the same effect.
 
     nsCOMPtr<Document> doc = window->GetExtantDoc();
 
     nsPresContext* pcx;
     if (doc && (pcx = doc->GetPresContext())) {
-      pcx->RebuildAllStyleData(NS_STYLE_HINT_REFLOW, eRestyle_Subtree);
+      pcx->RebuildAllStyleData(NS_STYLE_HINT_REFLOW,
+                               RestyleHint::RestyleSubtree());
     }
 
     return NS_OK;
   }
 
   if (!webNav) {
     return NS_ERROR_FAILURE;
   }
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -1985,20 +1985,27 @@ nsIPrincipal* nsContentUtils::GetAttrTri
 
   // If the subject principal is the same as the content principal, or no
   // explicit subject principal was provided, we don't need to do any further
   // checks. Just return the content principal.
   if (contentPrin == aSubjectPrincipal || !aSubjectPrincipal) {
     return contentPrin;
   }
 
-  // If the attribute value is empty, it's not an absolute URL, so don't bother
-  // with more expensive checks.
-  if (!aAttrValue.IsEmpty() &&
-      IsAbsoluteURL(NS_ConvertUTF16toUTF8(aAttrValue))) {
+  // Only use the subject principal if the URL string we are going to end up
+  // fetching is under the control of that principal, which is never the case
+  // for relative URLs.
+  if (aAttrValue.IsEmpty() ||
+      !IsAbsoluteURL(NS_ConvertUTF16toUTF8(aAttrValue))) {
+    return contentPrin;
+  }
+
+  // Only use the subject principal as the attr triggering principal if it
+  // should override the CSP of the node's principal.
+  if (BasePrincipal::Cast(aSubjectPrincipal)->OverridesCSP(contentPrin)) {
     return aSubjectPrincipal;
   }
 
   return contentPrin;
 }
 
 // static
 bool nsContentUtils::IsAbsoluteURL(const nsACString& aURL) {
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -3627,17 +3627,18 @@ nsDOMWindowUtils::GetCompositorAPZTestDa
 }
 
 NS_IMETHODIMP
 nsDOMWindowUtils::PostRestyleSelfEvent(Element* aElement) {
   if (!aElement) {
     return NS_ERROR_INVALID_ARG;
   }
 
-  nsLayoutUtils::PostRestyleEvent(aElement, eRestyle_Self, nsChangeHint(0));
+  nsLayoutUtils::PostRestyleEvent(aElement, StyleRestyleHint_RESTYLE_SELF,
+                                  nsChangeHint(0));
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDOMWindowUtils::GetMediaSuspend(uint32_t* aSuspend) {
   nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryReferent(mWindow);
   NS_ENSURE_STATE(window);
 
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -274,38 +274,47 @@ nsFrameLoader* nsFrameLoader::Create(
 
 void nsFrameLoader::LoadFrame(bool aOriginalSrc) {
   if (NS_WARN_IF(!mOwnerContent)) {
     return;
   }
 
   nsAutoString src;
   nsCOMPtr<nsIPrincipal> principal;
+  nsCOMPtr<nsIContentSecurityPolicy> csp;
 
   bool isSrcdoc = mOwnerContent->IsHTMLElement(nsGkAtoms::iframe) &&
                   mOwnerContent->HasAttr(kNameSpaceID_None, nsGkAtoms::srcdoc);
   if (isSrcdoc) {
     src.AssignLiteral("about:srcdoc");
     principal = mOwnerContent->NodePrincipal();
+    // Currently the NodePrincipal holds the CSP for a document. After
+    // Bug 965637 we can query the CSP from mOwnerContent->OwnerDoc()
+    // instead of mOwnerContent->NodePrincipal().
+    mOwnerContent->NodePrincipal()->GetCsp(getter_AddRefs(csp));
   } else {
-    GetURL(src, getter_AddRefs(principal));
+    GetURL(src, getter_AddRefs(principal), getter_AddRefs(csp));
 
     src.Trim(" \t\n\r");
 
     if (src.IsEmpty()) {
       // If the frame is a XUL element and has the attribute 'nodefaultsrc=true'
       // then we will not use 'about:blank' as fallback but return early without
       // starting a load if no 'src' attribute is given (or it's empty).
       if (mOwnerContent->IsXULElement() &&
           mOwnerContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::nodefaultsrc,
                                      nsGkAtoms::_true, eCaseMatters)) {
         return;
       }
       src.AssignLiteral("about:blank");
       principal = mOwnerContent->NodePrincipal();
+      // Currently the NodePrincipal holds the CSP for a document. After
+      // Bug 965637 we can query the CSP from mOwnerContent->OwnerDoc()
+      // instead of mOwnerContent->NodePrincipal().
+      mOwnerContent->NodePrincipal()->GetCsp(getter_AddRefs(csp));
     }
   }
 
   Document* doc = mOwnerContent->OwnerDoc();
   if (doc->IsStaticDocument()) {
     return;
   }
 
@@ -322,17 +331,17 @@ void nsFrameLoader::LoadFrame(bool aOrig
 
   // If the URI was malformed, try to recover by loading about:blank.
   if (rv == NS_ERROR_MALFORMED_URI) {
     rv = NS_NewURI(getter_AddRefs(uri), NS_LITERAL_STRING("about:blank"),
                    encoding, base_uri);
   }
 
   if (NS_SUCCEEDED(rv)) {
-    rv = LoadURI(uri, principal, aOriginalSrc);
+    rv = LoadURI(uri, principal, csp, aOriginalSrc);
   }
 
   if (NS_FAILED(rv)) {
     FireErrorEvent();
   }
 }
 
 void nsFrameLoader::FireErrorEvent() {
@@ -343,16 +352,17 @@ void nsFrameLoader::FireErrorEvent() {
       new LoadBlockingAsyncEventDispatcher(
           mOwnerContent, NS_LITERAL_STRING("error"), CanBubble::eNo,
           ChromeOnlyDispatch::eNo);
   loadBlockingAsyncDispatcher->PostDOMEvent();
 }
 
 nsresult nsFrameLoader::LoadURI(nsIURI* aURI,
                                 nsIPrincipal* aTriggeringPrincipal,
+                                nsIContentSecurityPolicy* aCsp,
                                 bool aOriginalSrc) {
   if (!aURI) return NS_ERROR_INVALID_POINTER;
   NS_ENSURE_STATE(!mDestroyCalled && mOwnerContent);
   MOZ_ASSERT(
       aTriggeringPrincipal,
       "Must have an explicit triggeringPrincipal to nsFrameLoader::LoadURI.");
 
   mLoadingOriginalSrc = aOriginalSrc;
@@ -360,20 +370,22 @@ nsresult nsFrameLoader::LoadURI(nsIURI* 
   nsCOMPtr<Document> doc = mOwnerContent->OwnerDoc();
 
   nsresult rv;
   rv = CheckURILoad(aURI, aTriggeringPrincipal);
   NS_ENSURE_SUCCESS(rv, rv);
 
   mURIToLoad = aURI;
   mTriggeringPrincipal = aTriggeringPrincipal;
+  mCsp = aCsp;
   rv = doc->InitializeFrameLoader(this);
   if (NS_FAILED(rv)) {
     mURIToLoad = nullptr;
     mTriggeringPrincipal = nullptr;
+    mCsp = nullptr;
   }
   return rv;
 }
 
 nsresult nsFrameLoader::ReallyStartLoading() {
   nsresult rv = ReallyStartLoadingInternal();
   if (NS_FAILED(rv)) {
     FireErrorEvent();
@@ -435,32 +447,31 @@ nsresult nsFrameLoader::ReallyStartLoadi
   // is very important; needed to prevent XSS attacks on documents loaded in
   // subframes!
   if (mTriggeringPrincipal) {
     loadState->SetTriggeringPrincipal(mTriggeringPrincipal);
   } else {
     loadState->SetTriggeringPrincipal(mOwnerContent->NodePrincipal());
   }
 
-  // Expanded Principals override the CSP of the document, hence we first check
-  // if the triggeringPrincipal overrides the document's principal. If so, let's
-  // query the CSP from that Principal, otherwise we use the document's CSP.
-  // Note that even after Bug 965637, Expanded Principals will hold their own
-  // CSP.
-  nsCOMPtr<nsIContentSecurityPolicy> csp;
-  if (BasePrincipal::Cast(loadState->TriggeringPrincipal())
-          ->OverridesCSP(mOwnerContent->NodePrincipal())) {
-    loadState->TriggeringPrincipal()->GetCsp(getter_AddRefs(csp));
-  } else {
+  // If we have an explicit CSP, we set it. If not, we only query it from
+  // the NodePrincipal in case there was no explicit triggeringPrincipal.
+  // Otherwise it's possible that the original triggeringPrincipal did not
+  // have a CSP which causes the CSP on the Principal and explicit CSP
+  // to be out of sync.
+  if (mCsp) {
+    loadState->SetCsp(mCsp);
+  } else if (!mTriggeringPrincipal) {
     // Currently the NodePrincipal holds the CSP for a document. After
     // Bug 965637 we can query the CSP from mOwnerContent->OwnerDoc()
     // instead of mOwnerContent->NodePrincipal().
+    nsCOMPtr<nsIContentSecurityPolicy> csp;
     mOwnerContent->NodePrincipal()->GetCsp(getter_AddRefs(csp));
+    loadState->SetCsp(csp);
   }
-  loadState->SetCsp(csp);
 
   nsCOMPtr<nsIURI> referrer;
 
   nsAutoString srcdoc;
   bool isSrcdoc =
       mOwnerContent->IsHTMLElement(nsGkAtoms::iframe) &&
       mOwnerContent->GetAttr(kNameSpaceID_None, nsGkAtoms::srcdoc, srcdoc);
 
@@ -833,21 +844,22 @@ void nsFrameLoader::MarginsChanged(uint3
       if (cur->IsHTMLElement(nsGkAtoms::body)) {
         static_cast<HTMLBodyElement*>(cur)->ClearMappedServoStyle();
       }
     }
   }
 
   // Trigger a restyle if there's a prescontext
   // FIXME: This could do something much less expensive.
-  RefPtr<nsPresContext> presContext = mDocShell->GetPresContext();
-  if (presContext)
+  if (nsPresContext* presContext = mDocShell->GetPresContext()) {
     // rebuild, because now the same nsMappedAttributes* will produce
     // a different style
-    presContext->RebuildAllStyleData(nsChangeHint(0), eRestyle_Subtree);
+    presContext->RebuildAllStyleData(nsChangeHint(0),
+                                     RestyleHint::RestyleSubtree());
+  }
 }
 
 bool nsFrameLoader::ShowRemoteFrame(const ScreenIntSize& size,
                                     nsSubDocumentFrame* aFrame) {
   AUTO_PROFILER_LABEL("nsFrameLoader::ShowRemoteFrame", OTHER);
   NS_ASSERTION(IsRemoteFrame(),
                "ShowRemote only makes sense on remote frames.");
 
@@ -2187,35 +2199,46 @@ nsresult nsFrameLoader::MaybeCreateDocSh
   nsCOMPtr<nsIObserverService> os = services::GetObserverService();
   if (os) {
     os->NotifyObservers(ToSupports(this), "inprocess-browser-shown", nullptr);
   }
 
   return NS_OK;
 }
 
-void nsFrameLoader::GetURL(nsString& aURI,
-                           nsIPrincipal** aTriggeringPrincipal) {
+void nsFrameLoader::GetURL(nsString& aURI, nsIPrincipal** aTriggeringPrincipal,
+                           nsIContentSecurityPolicy** aCsp) {
   aURI.Truncate();
+  // Within this function we default to using the NodePrincipal as the
+  // triggeringPrincipal and the CSP of the document, currently stored
+  // on the NodePrincipal. After Bug 965637 we can query the CSP from
+  // mOwnerContent->OwnerDoc() instead of mOwnerContent->NodePrincipal().
+  // Expanded Principals however override the CSP of the document, hence
+  // if frame->GetSrcTriggeringPrincipal() returns a valid principal, we
+  // have to query the CSP from that Principal. Note that even after
+  // Bug 965637, Expanded Principals will hold their own CSP.
+  nsCOMPtr<nsIPrincipal> triggeringPrincipal = mOwnerContent->NodePrincipal();
+  nsCOMPtr<nsIContentSecurityPolicy> csp;
+  mOwnerContent->NodePrincipal()->GetCsp(getter_AddRefs(csp));
 
   if (mOwnerContent->IsHTMLElement(nsGkAtoms::object)) {
     mOwnerContent->GetAttr(kNameSpaceID_None, nsGkAtoms::data, aURI);
-    nsCOMPtr<nsIPrincipal> prin = mOwnerContent->NodePrincipal();
-    prin.forget(aTriggeringPrincipal);
   } else {
     mOwnerContent->GetAttr(kNameSpaceID_None, nsGkAtoms::src, aURI);
     if (RefPtr<nsGenericHTMLFrameElement> frame =
             do_QueryObject(mOwnerContent)) {
-      nsCOMPtr<nsIPrincipal> prin = frame->GetSrcTriggeringPrincipal();
-      prin.forget(aTriggeringPrincipal);
-    } else {
-      nsCOMPtr<nsIPrincipal> prin = mOwnerContent->NodePrincipal();
-      prin.forget(aTriggeringPrincipal);
+      nsCOMPtr<nsIPrincipal> srcPrincipal = frame->GetSrcTriggeringPrincipal();
+      if (srcPrincipal) {
+        triggeringPrincipal = srcPrincipal;
+        triggeringPrincipal->GetCsp(getter_AddRefs(csp));
+      }
     }
   }
+  triggeringPrincipal.forget(aTriggeringPrincipal);
+  csp.forget(aCsp);
 }
 
 nsresult nsFrameLoader::CheckForRecursiveLoad(nsIURI* aURI) {
   nsresult rv;
 
   MOZ_ASSERT(!IsRemoteFrame(),
              "Shouldn't call CheckForRecursiveLoad on remote frames.");
 
--- a/dom/base/nsFrameLoader.h
+++ b/dom/base/nsFrameLoader.h
@@ -145,19 +145,23 @@ class nsFrameLoader final : public nsStu
   /**
    * Loads the specified URI in this frame. Behaves identically to loadFrame,
    * except that this method allows specifying the URI to load.
    *
    * @param aURI The URI to load.
    * @param aTriggeringPrincipal The triggering principal for the load. May be
    *        null, in which case the node principal of the owner content will be
    *        used.
+   * @param aCsp The CSP to be used for the load. That is not the CSP to be
+   *        applied to subresources within the frame, but to the iframe load
+   *        itself. E.g. if the CSP holds upgrade-insecure-requests the the
+   *        frame load is upgraded from http to https.
    */
   nsresult LoadURI(nsIURI* aURI, nsIPrincipal* aTriggeringPrincipal,
-                   bool aOriginalSrc);
+                   nsIContentSecurityPolicy* aCsp, bool aOriginalSrc);
 
   /**
    * Destroy the frame loader and everything inside it. This will
    * clear the weak owner content reference.
    */
   void Destroy();
 
   void ActivateRemoteFrame(mozilla::ErrorResult& aRv);
@@ -342,17 +346,18 @@ class nsFrameLoader final : public nsStu
 
   /**
    * Applies a new set of sandbox flags. These are merged with the sandbox
    * flags from our owning content's owning document with a logical OR, this
    * ensures that we can only add restrictions and never remove them.
    */
   void ApplySandboxFlags(uint32_t sandboxFlags);
 
-  void GetURL(nsString& aURL, nsIPrincipal** aTriggeringPrincipal);
+  void GetURL(nsString& aURL, nsIPrincipal** aTriggeringPrincipal,
+              nsIContentSecurityPolicy** aCsp);
 
   // Properly retrieves documentSize of any subdocument type.
   nsresult GetWindowDimensions(nsIntRect& aRect);
 
   virtual mozilla::dom::ProcessMessageManager* GetProcessMessageManager()
       const override;
 
   // public because a callback needs these.
@@ -436,16 +441,17 @@ class nsFrameLoader final : public nsStu
   enum TabParentChange { eTabParentRemoved, eTabParentChanged };
   void MaybeUpdatePrimaryTabParent(TabParentChange aChange);
 
   nsresult PopulateUserContextIdFromAttribute(mozilla::OriginAttributes& aAttr);
 
   RefPtr<nsDocShell> mDocShell;
   nsCOMPtr<nsIURI> mURIToLoad;
   nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
+  nsCOMPtr<nsIContentSecurityPolicy> mCsp;
   mozilla::dom::Element* mOwnerContent;  // WEAK
 
   // After the frameloader has been removed from the DOM but before all of the
   // messages from the frame have been received, we keep a strong reference to
   // our <browser> element.
   RefPtr<mozilla::dom::Element> mOwnerContentStrong;
 
   // Stores the root frame of the subdocument while the subdocument is being
--- a/dom/base/nsHistory.cpp
+++ b/dom/base/nsHistory.cpp
@@ -161,17 +161,18 @@ void nsHistory::Go(int32_t aDelta, Error
       // style data and reflow the page since some sites may use this
       // trick to work around gecko reflow bugs, and this should have
       // the same effect.
 
       nsCOMPtr<Document> doc = window->GetExtantDoc();
 
       nsPresContext* pcx;
       if (doc && (pcx = doc->GetPresContext())) {
-        pcx->RebuildAllStyleData(NS_STYLE_HINT_REFLOW, eRestyle_Subtree);
+        pcx->RebuildAllStyleData(NS_STYLE_HINT_REFLOW,
+                                 RestyleHint::RestyleSubtree());
       }
 
       return;
     }
 
     // https://html.spec.whatwg.org/multipage/history.html#the-history-interface
     // "When the go(delta) method is invoked, if delta is zero, the user agent
     // must act as if the location.reload() method was called instead."
--- a/dom/html/HTMLInputElement.cpp
+++ b/dom/html/HTMLInputElement.cpp
@@ -2300,17 +2300,17 @@ HTMLInputElement::GetPreviewValue(nsAStr
 NS_IMETHODIMP_(void)
 HTMLInputElement::EnablePreview() {
   if (mIsPreviewEnabled) {
     return;
   }
 
   mIsPreviewEnabled = true;
   // Reconstruct the frame to append an anonymous preview node
-  nsLayoutUtils::PostRestyleEvent(this, nsRestyleHint(0),
+  nsLayoutUtils::PostRestyleEvent(this, RestyleHint{0},
                                   nsChangeHint_ReconstructFrame);
 }
 
 NS_IMETHODIMP_(bool)
 HTMLInputElement::IsPreviewEnabled() { return mIsPreviewEnabled; }
 
 NS_IMETHODIMP_(bool)
 HTMLInputElement::GetPreviewVisibility() {
--- a/dom/html/HTMLTextAreaElement.cpp
+++ b/dom/html/HTMLTextAreaElement.cpp
@@ -253,17 +253,17 @@ HTMLTextAreaElement::GetPreviewValue(nsA
 NS_IMETHODIMP_(void)
 HTMLTextAreaElement::EnablePreview() {
   if (mIsPreviewEnabled) {
     return;
   }
 
   mIsPreviewEnabled = true;
   // Reconstruct the frame to append an anonymous preview node
-  nsLayoutUtils::PostRestyleEvent(this, nsRestyleHint(0),
+  nsLayoutUtils::PostRestyleEvent(this, RestyleHint{0},
                                   nsChangeHint_ReconstructFrame);
 }
 
 NS_IMETHODIMP_(bool)
 HTMLTextAreaElement::IsPreviewEnabled() { return mIsPreviewEnabled; }
 
 NS_IMETHODIMP_(bool)
 HTMLTextAreaElement::GetPreviewVisibility() {
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -1730,17 +1730,17 @@ interface nsIDOMWindowUtils : nsISupport
   /**
    * Get the content- and compositor-side APZ test data instances.
    * The return values are of type APZTestData (see APZTestData.webidl).
    */
   [implicit_jscontext] jsval getContentAPZTestData();
   [implicit_jscontext] jsval getCompositorAPZTestData();
 
   /**
-   * Posts an eRestyle_Self restyle event for the given element.
+   * Posts an RestyleHint::RESTYLE_SELF restyle event for the given element.
    */
   void postRestyleSelfEvent(in Element aElement);
 
   /**
    * Used to pause or resume all media in this window. Use-cases are audio
    * competing, remote media control and to prevent auto-playing media.
    */
   attribute uint32_t mediaSuspend;
--- a/dom/jsurl/nsJSProtocolHandler.cpp
+++ b/dom/jsurl/nsJSProtocolHandler.cpp
@@ -854,16 +854,17 @@ nsJSChannel::SetOwner(nsISupports* aOwne
 
 NS_IMETHODIMP
 nsJSChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
   return mStreamChannel->GetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsJSChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   return mStreamChannel->SetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsJSChannel::GetNotificationCallbacks(nsIInterfaceRequestor** aCallbacks) {
   return mStreamChannel->GetNotificationCallbacks(aCallbacks);
 }
 
--- a/dom/media/mediasink/AudioSink.h
+++ b/dom/media/mediasink/AudioSink.h
@@ -127,17 +127,17 @@ class AudioSink : private AudioStream::D
   already_AddRefed<AudioData> CreateAudioFromBuffer(
       AlignedAudioBuffer&& aBuffer, AudioData* aReference);
   // Add data to the processsed queue, update mProcessedQueueLength and
   // return the number of frames added.
   uint32_t PushProcessedAudio(AudioData* aData);
   UniquePtr<AudioConverter> mConverter;
   MediaQueue<AudioData> mProcessedQueue;
   // Length in microseconds of the ProcessedQueue
-  Atomic<int32_t> mProcessedQueueLength;
+  Atomic<uint64_t> mProcessedQueueLength;
   MediaEventListener mAudioQueueListener;
   MediaEventListener mAudioQueueFinishListener;
   MediaEventListener mProcessedQueueListener;
   // Number of frames processed from mAudioQueue. Used to determine gaps in
   // the input stream. It indicates the time in frames since playback started
   // at the current input framerate.
   int64_t mFramesParsed;
   Maybe<RefPtr<AudioData>> mLastProcessedPacket;
--- a/dom/security/nsCSPContext.cpp
+++ b/dom/security/nsCSPContext.cpp
@@ -377,17 +377,24 @@ nsCSPContext::AppendPolicy(const nsAStri
       referrer = NS_ConvertUTF16toUTF8(mReferrer);
       CSPCONTEXTLOG(
           ("nsCSPContext::AppendPolicy added UPGRADE_IF_INSECURE_DIRECTIVE "
            "self-uri=%s referrer=%s",
            selfURIspec.get(), referrer.get()));
     }
 
     mPolicies.AppendElement(policy);
+
+    // set the flag on the document for CSP telemetry
+    nsCOMPtr<Document> doc = do_QueryReferent(mLoadingContext);
+    if (doc) {
+      doc->SetHasCSP(true);
+    }
   }
+
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsCSPContext::GetAllowsEval(bool* outShouldReportViolation,
                             bool* outAllowsEval) {
   EnsureIPCPoliciesRead();
   *outShouldReportViolation = false;
@@ -667,19 +674,16 @@ nsCSPContext::SetRequestContext(Document
     mLoadingPrincipal = aDocument->NodePrincipal();
     aDocument->GetReferrer(mReferrer);
     mInnerWindowID = aDocument->InnerWindowID();
     // the innerWindowID is not available for CSPs delivered through the
     // header at the time setReqeustContext is called - let's queue up
     // console messages until it becomes available, see flushConsoleMessages
     mQueueUpMessages = !mInnerWindowID;
     mCallingChannelLoadGroup = aDocument->GetDocumentLoadGroup();
-
-    // set the flag on the document for CSP telemetry
-    aDocument->SetHasCSP(true);
     mEventTarget = aDocument->EventTargetFor(TaskCategory::Other);
   } else {
     CSPCONTEXTLOG(
         ("No Document in SetRequestContext; can not query loadgroup; sending "
          "reports may fail."));
     mLoadingPrincipal = aPrincipal;
     mLoadingPrincipal->GetURI(getter_AddRefs(mSelfURI));
     // if no document is available, then it also does not make sense to queue
--- a/dom/security/test/csp/test_data_doc_ignore_meta_csp.html
+++ b/dom/security/test/csp/test_data_doc_ignore_meta_csp.html
@@ -21,17 +21,17 @@ SimpleTest.waitForExplicitFinish();
 window.addEventListener("message", receiveMessage);
 function receiveMessage(event) {
   window.removeEventListener("message", receiveMessage);
   is(event.data.result, "dataDocCreated", "sanity: received msg from loaded frame");
 
   var frame = document.getElementById("testframe");
   var principal = SpecialPowers.wrap(frame.contentDocument).nodePrincipal;
   var cspJSON = principal.cspJSON;
-  is(cspJSON, "{}", "there should be no CSP attached to the iframe");
+  is(cspJSON, "{\"csp-policies\":[]}", "there should be no CSP attached to the iframe");
   SimpleTest.finish();
 }
 
 document.getElementById("testframe").src = "file_data_doc_ignore_meta_csp.html";
 
 </script>
 </body>
 </html>
--- a/dom/serviceworkers/ServiceWorkerRegistrationProxy.cpp
+++ b/dom/serviceworkers/ServiceWorkerRegistrationProxy.cpp
@@ -11,16 +11,34 @@
 #include "ServiceWorkerRegistrationParent.h"
 #include "ServiceWorkerUnregisterCallback.h"
 
 namespace mozilla {
 namespace dom {
 
 using mozilla::ipc::AssertIsOnBackgroundThread;
 
+class ServiceWorkerRegistrationProxy::DelayedUpdate final
+    : public nsITimerCallback {
+    RefPtr<ServiceWorkerRegistrationProxy> mProxy;
+    RefPtr<ServiceWorkerRegistrationPromise::Private> mPromise;
+    nsCOMPtr<nsITimer> mTimer;
+
+    ~DelayedUpdate() = default;
+  public:
+    NS_DECL_THREADSAFE_ISUPPORTS
+    NS_DECL_NSITIMERCALLBACK
+
+    DelayedUpdate(RefPtr<ServiceWorkerRegistrationProxy>&& aProxy,
+        RefPtr<ServiceWorkerRegistrationPromise::Private>&& aPromise,
+        uint32_t delay);
+    void Reject();
+};
+
+
 ServiceWorkerRegistrationProxy::~ServiceWorkerRegistrationProxy() {
   // Any thread
   MOZ_DIAGNOSTIC_ASSERT(!mActor);
   MOZ_DIAGNOSTIC_ASSERT(!mReg);
 }
 
 void ServiceWorkerRegistrationProxy::MaybeShutdownOnBGThread() {
   AssertIsOnBackgroundThread();
@@ -65,16 +83,20 @@ void ServiceWorkerRegistrationProxy::Ini
       "ServiceWorkerRegistrationProxy::mInfo", reg);
 
   mReg->AddInstance(this, mDescriptor);
 }
 
 void ServiceWorkerRegistrationProxy::MaybeShutdownOnMainThread() {
   AssertIsOnMainThread();
 
+  if (mDelayedUpdate) {
+    mDelayedUpdate->Reject();
+    mDelayedUpdate = nullptr;
+  }
   nsCOMPtr<nsIRunnable> r = NewRunnableMethod(
       __func__, this, &ServiceWorkerRegistrationProxy::MaybeShutdownOnBGThread);
 
   MOZ_ALWAYS_SUCCEEDS(mEventTarget->Dispatch(r.forget(), NS_DISPATCH_NORMAL));
 }
 
 void ServiceWorkerRegistrationProxy::StopListeningOnMainThread() {
   AssertIsOnMainThread();
@@ -219,37 +241,99 @@ class UpdateCallback final : public Serv
 
   void UpdateFailed(ErrorResult& aResult) override {
     mPromise->Reject(CopyableErrorResult(aResult), __func__);
   }
 };
 
 }  // anonymous namespace
 
+NS_IMPL_ISUPPORTS(ServiceWorkerRegistrationProxy::DelayedUpdate,
+                  nsITimerCallback)
+
+ServiceWorkerRegistrationProxy::DelayedUpdate::DelayedUpdate(
+    RefPtr<ServiceWorkerRegistrationProxy >&& aProxy,
+    RefPtr<ServiceWorkerRegistrationPromise::Private >&& aPromise,
+    uint32_t delay)
+  : mProxy(std::move(aProxy))
+  , mPromise(std::move(aPromise))
+{
+  MOZ_DIAGNOSTIC_ASSERT(mProxy);
+  MOZ_DIAGNOSTIC_ASSERT(mPromise);
+  mProxy->mDelayedUpdate = this;
+  Result<nsCOMPtr<nsITimer>, nsresult> result = NS_NewTimerWithCallback(
+      this, delay, nsITimer::TYPE_ONE_SHOT,
+      SystemGroup::EventTargetFor(TaskCategory::Other));
+  mTimer = result.unwrapOr(nullptr);
+  MOZ_DIAGNOSTIC_ASSERT(mTimer);
+}
+
+void
+ServiceWorkerRegistrationProxy::DelayedUpdate::Reject()
+{
+  MOZ_DIAGNOSTIC_ASSERT(mPromise);
+  if (mTimer) {
+    mTimer->Cancel();
+    mTimer = nullptr;
+  }
+  mPromise->Reject(NS_ERROR_DOM_INVALID_STATE_ERR, __func__);
+}
+
+NS_IMETHODIMP
+ServiceWorkerRegistrationProxy::DelayedUpdate::Notify(nsITimer* aTimer)
+{
+  auto scopeExit = MakeScopeExit(
+      [&] { mPromise->Reject(NS_ERROR_DOM_INVALID_STATE_ERR, __func__); });
+  MOZ_DIAGNOSTIC_ASSERT((mProxy->mDelayedUpdate == this));
+
+  NS_ENSURE_TRUE(mProxy->mReg, NS_ERROR_FAILURE);
+
+  RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
+  NS_ENSURE_TRUE(swm, NS_ERROR_FAILURE);
+
+  RefPtr<UpdateCallback> cb = new UpdateCallback(std::move(mPromise));
+  swm->Update(mProxy->mReg->Principal(), mProxy->mReg->Scope(), cb);
+
+  mTimer = nullptr;
+  mProxy->mDelayedUpdate = nullptr;
+
+  scopeExit.release();
+  return NS_OK;
+}
+
 RefPtr<ServiceWorkerRegistrationPromise>
 ServiceWorkerRegistrationProxy::Update() {
   AssertIsOnBackgroundThread();
 
   RefPtr<ServiceWorkerRegistrationProxy> self = this;
   RefPtr<ServiceWorkerRegistrationPromise::Private> promise =
       new ServiceWorkerRegistrationPromise::Private(__func__);
 
   nsCOMPtr<nsIRunnable> r =
       NS_NewRunnableFunction(__func__, [self, promise]() mutable {
         auto scopeExit = MakeScopeExit(
             [&] { promise->Reject(NS_ERROR_DOM_INVALID_STATE_ERR, __func__); });
 
+        // Get the delay value for the update
         NS_ENSURE_TRUE_VOID(self->mReg);
+        uint32_t delay = self->mReg->GetUpdateDelay();
 
-        RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
-        NS_ENSURE_TRUE_VOID(swm);
+        // If the delay value does not equal to 0, create a timer and a timer
+        // callback to perform the delayed update. Otherwise, update directly.
+        if (delay) {
+          RefPtr<ServiceWorkerRegistrationProxy::DelayedUpdate> du =
+              new ServiceWorkerRegistrationProxy::DelayedUpdate(
+                  std::move(self), std::move(promise), delay);
+        } else {
+          RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
+          NS_ENSURE_TRUE_VOID(swm);
 
-        RefPtr<UpdateCallback> cb = new UpdateCallback(std::move(promise));
-        swm->Update(self->mReg->Principal(), self->mReg->Scope(), cb);
-
+          RefPtr<UpdateCallback> cb = new UpdateCallback(std::move(promise));
+          swm->Update(self->mReg->Principal(), self->mReg->Scope(), cb);
+        }
         scopeExit.release();
       });
 
   MOZ_ALWAYS_SUCCEEDS(SystemGroup::Dispatch(TaskCategory::Other, r.forget()));
 
   return promise;
 }
 
--- a/dom/serviceworkers/ServiceWorkerRegistrationProxy.h
+++ b/dom/serviceworkers/ServiceWorkerRegistrationProxy.h
@@ -43,16 +43,20 @@ class ServiceWorkerRegistrationProxy fin
 
   // Main thread methods
   void InitOnMainThread();
 
   void MaybeShutdownOnMainThread();
 
   void StopListeningOnMainThread();
 
+  // The timer callback to perform the delayed update
+  class DelayedUpdate;
+  RefPtr<DelayedUpdate> mDelayedUpdate;
+
   // ServiceWorkerRegistrationListener interface
   void UpdateState(
       const ServiceWorkerRegistrationDescriptor& aDescriptor) override;
 
   void FireUpdateFound() override;
 
   void RegistrationRemoved() override;
 
--- a/dom/serviceworkers/test/test_self_update_worker.html
+++ b/dom/serviceworkers/test/test_self_update_worker.html
@@ -84,11 +84,54 @@ add_task(async function test_update() {
     await activateDummyWorker();
   }
 
 
   await registration.unregister();
   await SpecialPowers.popPrefEnv();
   await SpecialPowers.popPrefEnv();
 });
+
+// Test variant to ensure that we properly keep the timer alive by having a
+// non-zero but small timer duration. In this case, the delay is simply our
+// exponential growth rate of 30, so if we end up getting to version 4, that's
+// okay and the test may need to be updated.
+add_task(async function test_delay_update() {
+  let version;
+  navigator.serviceWorker.onmessage = function(event) {
+    ok (event.data.version <= 3, "Service worker updated too many times." + event.data.version);
+    version = event.data.version;
+  }
+
+  await SpecialPowers.pushPrefEnv({"set": [
+    ["dom.serviceWorkers.update_delay", 1],
+    ["dom.serviceWorkers.idle_extended_timeout", 299999]]});
+
+  // clear version counter
+  await fetch("self_update_worker.sjs?clearcounter");
+
+  var worker;
+  let registration = await navigator.serviceWorker.register(
+    "self_update_worker.sjs",
+    { scope: "./test_self_update_worker.html?random=" + Date.now()})
+    .then(function(registration) {
+      worker = registration.installing;
+      // We can't wait for 'activated' here, since it's possible for
+      // the update process to kill the worker before it activates.
+      // See: https://github.com/w3c/ServiceWorker/issues/1285
+      return waitForState(worker, 'activating', registration);
+    });
+
+  // We need to wait a reasonable time to give the self updating worker a chance
+  // to change to a newer version. Register and activate an empty worker 5 times.
+  for (i = 0; i < 5; i++) {
+    await activateDummyWorker();
+  }
+
+  is(version, 3, "Service worker version should be 3.");
+
+  await registration.unregister();
+  await SpecialPowers.popPrefEnv();
+  await SpecialPowers.popPrefEnv();
+});
 </script>
 </body>
 </html>
--- a/dom/smil/SMILAnimationController.cpp
+++ b/dom/smil/SMILAnimationController.cpp
@@ -674,17 +674,17 @@ bool SMILAnimationController::PreTravers
     // aRoot.
     if (aRoot && !nsContentUtils::ContentIsFlattenedTreeDescendantOf(
                      key.mElement, aRoot)) {
       continue;
     }
 
     context->RestyleManager()->PostRestyleEventForAnimations(
         key.mElement, PseudoStyleType::NotPseudo,
-        eRestyle_StyleAttribute_Animations);
+        StyleRestyleHint_RESTYLE_SMIL);
 
     foundElementsNeedingRestyle = true;
   }
 
   // Only clear the mMightHavePendingStyleUpdates flag if we definitely posted
   // all restyles.
   if (!aRoot) {
     mMightHavePendingStyleUpdates = false;
--- a/dom/svg/SVGElement.cpp
+++ b/dom/svg/SVGElement.cpp
@@ -102,31 +102,32 @@ JSObject* SVGElement::WrapNode(JSContext
 
 //----------------------------------------------------------------------
 // SVGElement methods
 
 void SVGElement::DidAnimateClass() {
   // For Servo, snapshot the element before we change it.
   nsIPresShell* shell = OwnerDoc()->GetShell();
   if (shell) {
-    nsPresContext* presContext = shell->GetPresContext();
-    if (presContext) {
+    if (nsPresContext* presContext = shell->GetPresContext()) {
       presContext->RestyleManager()->ClassAttributeWillBeChangedBySMIL(this);
     }
   }
 
   nsAutoString src;
   mClassAttribute.GetAnimValue(src, this);
   if (!mClassAnimAttr) {
     mClassAnimAttr = new nsAttrValue();
   }
   mClassAnimAttr->ParseAtomArray(src);
 
+  // FIXME(emilio): This re-selector-matches, but we do the snapshot stuff right
+  // above... Is this needed anymore?
   if (shell) {
-    shell->RestyleForAnimation(this, eRestyle_Self);
+    shell->RestyleForAnimation(this, StyleRestyleHint_RESTYLE_SELF);
   }
 }
 
 nsresult SVGElement::Init() {
   // Set up length attributes - can't do this in the constructor
   // because we can't do a virtual call at that point
 
   LengthAttributesInfo lengthInfo = GetLengthInfo();
@@ -1999,17 +2000,17 @@ void SVGElement::DidAnimateTransformList
     // SVGTransformableElement::GetAttributeChangeHint will be called and an
     // appropriate change event posted to update our frame's overflow rects.
     // The SetAttrAndNotify doesn't happen for transform changes caused by
     // 'animateTransform' though (and sending out the mutation events that
     // nsNodeUtils::AttributeChanged dispatches would be inappropriate
     // anyway), so we need to post the change event ourself.
     nsChangeHint changeHint = GetAttributeChangeHint(transformAttr, aModType);
     if (changeHint) {
-      nsLayoutUtils::PostRestyleEvent(this, nsRestyleHint(0), changeHint);
+      nsLayoutUtils::PostRestyleEvent(this, RestyleHint{0}, changeHint);
     }
   }
 }
 
 SVGElement::StringAttributesInfo SVGElement::GetStringInfo() {
   return StringAttributesInfo(nullptr, nullptr, 0);
 }
 
--- a/dom/svg/SVGSwitchElement.cpp
+++ b/dom/svg/SVGSwitchElement.cpp
@@ -52,17 +52,17 @@ void SVGSwitchElement::MaybeInvalidate()
   nsIContent* newActiveChild = FindActiveChild();
 
   if (newActiveChild == mActiveChild) {
     return;
   }
 
   nsIFrame* frame = GetPrimaryFrame();
   if (frame) {
-    nsLayoutUtils::PostRestyleEvent(this, nsRestyleHint(0),
+    nsLayoutUtils::PostRestyleEvent(this, RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     nsSVGUtils::ScheduleReflowSVG(frame);
   }
 
   mActiveChild = newActiveChild;
 }
 
 //----------------------------------------------------------------------
--- a/dom/svg/SVGViewportElement.cpp
+++ b/dom/svg/SVGViewportElement.cpp
@@ -162,17 +162,17 @@ void SVGViewportElement::ChildrenOnlyTra
 
   // If we're not reconstructing the frame tree, then we only call
   // PostRestyleEvent if we're not being called under reflow to avoid recursing
   // to death. See bug 767056 comments 10 and 12. Since our nsSVGOuterSVGFrame
   // is being reflowed we're going to invalidate and repaint its entire area
   // anyway (which will include our children).
   if ((changeHint & nsChangeHint_ReconstructFrame) ||
       !(aFlags & eDuringReflow)) {
-    nsLayoutUtils::PostRestyleEvent(this, nsRestyleHint(0), changeHint);
+    nsLayoutUtils::PostRestyleEvent(this, RestyleHint{0}, changeHint);
   }
 }
 
 gfx::Matrix SVGViewportElement::GetViewBoxTransform() const {
   float viewportWidth, viewportHeight;
   if (IsInner()) {
     SVGViewportElement* ctx = GetCtx();
     viewportWidth = mLengthAttributes[ATTR_WIDTH].GetAnimValue(ctx);
--- a/image/decoders/icon/mac/nsIconChannelCocoa.mm
+++ b/image/decoders/icon/mac/nsIconChannelCocoa.mm
@@ -462,16 +462,17 @@ nsIconChannel::SetOwner(nsISupports* aOw
 NS_IMETHODIMP
 nsIconChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsIconChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsIconChannel::GetNotificationCallbacks(nsIInterfaceRequestor** aNotificationCallbacks) {
   *aNotificationCallbacks = mCallbacks.get();
   NS_IF_ADDREF(*aNotificationCallbacks);
--- a/image/decoders/icon/win/nsIconChannel.cpp
+++ b/image/decoders/icon/win/nsIconChannel.cpp
@@ -675,16 +675,17 @@ nsIconChannel::SetOwner(nsISupports* aOw
 NS_IMETHODIMP
 nsIconChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsIconChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsIconChannel::GetNotificationCallbacks(
     nsIInterfaceRequestor** aNotificationCallbacks) {
   *aNotificationCallbacks = mCallbacks.get();
--- a/ipc/glue/BackgroundUtils.cpp
+++ b/ipc/glue/BackgroundUtils.cpp
@@ -728,19 +728,20 @@ void LoadInfoToParentLoadInfoForwarder(
 
   nsILoadInfo::CrossOriginOpenerPolicy openerPolicy =
       aLoadInfo->GetOpenerPolicy();
 
   Maybe<CookieSettingsArgs> cookieSettingsArgs;
 
   nsCOMPtr<nsICookieSettings> cookieSettings;
   nsresult rv = aLoadInfo->GetCookieSettings(getter_AddRefs(cookieSettings));
-  if (NS_SUCCEEDED(rv) && cookieSettings) {
+  CookieSettings* cs = static_cast<CookieSettings*>(cookieSettings.get());
+  if (NS_SUCCEEDED(rv) && cookieSettings && cs->HasBeenChanged()) {
     CookieSettingsArgs args;
-    static_cast<CookieSettings*>(cookieSettings.get())->Serialize(args);
+    cs->Serialize(args);
     cookieSettingsArgs = Some(args);
   }
 
   *aForwarderArgsOut = ParentLoadInfoForwarderArgs(
       aLoadInfo->GetAllowInsecureRedirectToDataURI(), ipcController, tainting,
       aLoadInfo->GetServiceWorkerTaintingSynthesized(),
       aLoadInfo->GetDocumentHasUserInteracted(),
       aLoadInfo->GetDocumentHasLoaded(), openerPolicy, cookieSettingsArgs);
--- a/js/src/frontend/BinAST.yaml
+++ b/js/src/frontend/BinAST.yaml
@@ -327,22 +327,22 @@ hpp:
       /**
        * Return a string describing a `BinASTKind`.
        */
       const char* describeBinASTKind(const BinASTKind& kind);
 
       /**
        * Return a string describing a `BinASTField`.
        */
-      const char* describeBinASTField(const BinASTField& kind);
+      const char* describeBinASTField(const BinASTField& field);
 
       /**
        * Return a string describing a `BinASTVariant`.
        */
-      const char* describeBinASTVariant(const BinASTVariant& kind);
+      const char* describeBinASTVariant(const BinASTVariant& variant);
 
       } // namespace frontend
       } // namespace js
 
       #endif // frontend_BinASTToken_h
 
 Arguments:
   init: |
--- a/js/src/frontend/BinASTTokenReaderMultipart.cpp
+++ b/js/src/frontend/BinASTTokenReaderMultipart.cpp
@@ -288,27 +288,23 @@ JS::Result<JSAtom*> BinASTTokenReaderMul
     if (!IsIdentifier(result)) {
       return raiseError("Invalid identifier");
     }
   }
   return result;
 }
 
 JS::Result<JSAtom*> BinASTTokenReaderMultipart::readIdentifierName() {
-  BINJS_MOZ_TRY_DECL(result, readMaybeAtom());
+  BINJS_MOZ_TRY_DECL(result, readAtom());
   if (!IsIdentifier(result)) {
     return raiseError("Invalid identifier");
   }
   return result;
 }
 
-JS::Result<JSAtom*> BinASTTokenReaderMultipart::readMaybePropertyKey() {
-  return readMaybeAtom();
-}
-
 JS::Result<JSAtom*> BinASTTokenReaderMultipart::readPropertyKey() {
   return readAtom();
 }
 
 JS::Result<Ok> BinASTTokenReaderMultipart::readChars(Chars& out) {
   updateLatestKnownGood();
   BINJS_MOZ_TRY_DECL(index, readInternalUint32());
 
--- a/js/src/frontend/BinASTTokenReaderMultipart.h
+++ b/js/src/frontend/BinASTTokenReaderMultipart.h
@@ -102,17 +102,16 @@ class MOZ_STACK_CLASS BinASTTokenReaderM
    * Read a single IdentifierName value.
    */
   MOZ_MUST_USE JS::Result<JSAtom*> readMaybeIdentifierName();
   MOZ_MUST_USE JS::Result<JSAtom*> readIdentifierName();
 
   /**
    * Read a single PropertyKey value.
    */
-  MOZ_MUST_USE JS::Result<JSAtom*> readMaybePropertyKey();
   MOZ_MUST_USE JS::Result<JSAtom*> readPropertyKey();
 
   /**
    * Read a single `string | null` value.
    *
    * MAY check if that string is not valid UTF-8.
    */
   MOZ_MUST_USE JS::Result<Ok> readChars(Chars&);
--- a/js/src/frontend/binast/src/main.rs
+++ b/js/src/frontend/binast/src/main.rs
@@ -1623,29 +1623,17 @@ impl CPPExporter {
 {{
     return raiseError(\"FIXME: Not implemented yet in this preview release ({kind})\");
 }}
 
 ",
                                 first_line = first_line,
                                 kind = parser.name.to_str()));
                         } else {
-                            buffer.push_str(&format!("{first_line}
-{{
-    BINJS_MOZ_TRY_DECL(result, tokenizer_->readMaybePropertyKey());
-
-{build}
-
-    return result;
-}}
-
-",
-                                first_line = first_line,
-                                build = build_result,
-                            ));
+                            panic!("PropertyKey shouldn't be optional");
                         }
                     }
                     _else => unimplemented!("{:?}", _else)
                 }
             }
             NamedType::StringEnum(_) => {
                 unimplemented!()
             }
@@ -1783,18 +1771,17 @@ impl CPPExporter {
                     (Some(format!("RootedAtom {var_name}(cx_);", var_name = var_name)),
                         Some(format!("MOZ_TRY_VAR({var_name}, tokenizer_->readMaybeAtom());", var_name = var_name)))
                 }
                 Some(IsNullable { is_nullable: true, content: Primitive::IdentifierName }) => {
                     (Some(format!("RootedAtom {var_name}(cx_);", var_name = var_name)),
                         Some(format!("MOZ_TRY_VAR({var_name}, tokenizer_->readMaybeIdentifierName());", var_name = var_name)))
                 }
                 Some(IsNullable { is_nullable: true, content: Primitive::PropertyKey }) => {
-                    (Some(format!("RootedAtom {var_name}(cx_);", var_name = var_name)),
-                        Some(format!("MOZ_TRY_VAR({var_name}, tokenizer_->readMaybePropertyKey());", var_name = var_name)))
+                    panic!("PropertyKey shouldn't be optional");
                 }
                 _else => {
                     let typename = TypeName::type_(field.type_());
                     let name = self.syntax.get_node_name(typename.to_str())
                         .expect("NodeName for the field type should exist.");
                     let field_extra_args = rules_for_this_field.extra_args;
 
                     let (decl_var, call_kind) = if needs_block {
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ebcaf42d7933b03db18cf58aa296b31ea08b248d
GIT binary patch
literal 210
zc$`I!PYZ%T5XF~8Lc)&`(lMf2mkdOV^swtqI&3=1fd3dLs4rh_cG!2D_kPTK=QO`)
zStcsVvPj*qhJle^$9J%g<{5~g))nEzNjKh2r>k*-txd2UdW*)-iNIdtaByZ}s0B`!
zR}BJ%j?!!xe$4KQ3}m|e(F0-Sh~QsW>O!S?qTM22dLL01Dvq5Ou7#CcNl*A<(dP68
DcJxS-
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/binast/invalid/identifier-null.dir
@@ -0,0 +1,1 @@
+// |jit-test| error: Empty string
\ No newline at end of file
--- a/js/src/jsapi-tests/binast/invalid/lib/filter_utils.py
+++ b/js/src/jsapi-tests/binast/invalid/lib/filter_utils.py
@@ -301,29 +301,40 @@ class wrap:
         if type_ != 'identifier name':
             raise Exception('expected a identifier name, got {}'.format(type_))
         return self
 
     def set_identifier_name(self, value):
         """
         Set identifier name value
 
-        :param value (int)
+        :param value (str)
                the value to set
         :return (wrap)
                 self
         :raises Exception
                 If value is not correct type
         """
         self.assert_identifier_name()
         if type(value) is not str and type(value) is not unicode:
             raise Exception('passed value is not string: {}'.format(value))
         self.obj['@VALUE'] = value
         return self
 
+    def set_null_identifier_name(self):
+        """
+        Set identifier name value to null
+
+        :return (wrap)
+                self
+        """
+        self.assert_identifier_name()
+        self.obj['@VALUE'] = None
+        return self
+
     # ==== unsigned long ====
 
     def assert_unsigned_long(self):
         """
         Assert that this object is a unsigned long
 
         :return (wrap)
                 self
new file mode 100644
--- /dev/null
+++ b/js/src/jsapi-tests/binast/invalid/tests/identifier-null.js
@@ -0,0 +1,1 @@
+a = 10;
new file mode 100644
--- /dev/null
+++ b/js/src/jsapi-tests/binast/invalid/tests/identifier-null.py
@@ -0,0 +1,17 @@
+def filter_ast(ast):
+    # AssignmentTargetIdentifier with null string.
+    import filter_utils as utils
+
+    utils.wrap(ast) \
+        .assert_interface('Script') \
+        .field('statements') \
+        .elem(0) \
+        .assert_interface('ExpressionStatement') \
+        .field('expression') \
+        .assert_interface('AssignmentExpression') \
+        .field('binding') \
+        .assert_interface('AssignmentTargetIdentifier') \
+        .field('name') \
+        .set_null_identifier_name()
+
+    return ast
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
@@ -2917,37 +2917,34 @@ void nsIPresShell::DestroyFramesForAndRe
   // Clear the style data from all the flattened tree descendants, but _not_
   // from us, since otherwise we wouldn't see the reframe.
   RestyleManager::ClearServoDataFromSubtree(aElement,
                                             RestyleManager::IncludeRoot::No);
 
   auto changeHint =
       didReconstruct ? nsChangeHint(0) : nsChangeHint_ReconstructFrame;
 
-  // NOTE(emilio): eRestyle_Subtree is needed to force also a full subtree
-  // restyle for the content (in Stylo, where the existence of frames != the
-  // existence of styles).
-  mPresContext->RestyleManager()->PostRestyleEvent(aElement, eRestyle_Subtree,
-                                                   changeHint);
+  mPresContext->RestyleManager()->PostRestyleEvent(
+      aElement, RestyleHint::RestyleSubtree(), changeHint);
 
   --mChangeNestCount;
 }
 
 void nsIPresShell::PostRecreateFramesFor(Element* aElement) {
   if (MOZ_UNLIKELY(!mDidInitialize)) {
     // Nothing to do here. In fact, if we proceed and aElement is the root, we
     // will crash.
     return;
   }
 
   mPresContext->RestyleManager()->PostRestyleEvent(
-      aElement, nsRestyleHint(0), nsChangeHint_ReconstructFrame);
-}
-
-void nsIPresShell::RestyleForAnimation(Element* aElement, nsRestyleHint aHint) {
+      aElement, RestyleHint{0}, nsChangeHint_ReconstructFrame);
+}
+
+void nsIPresShell::RestyleForAnimation(Element* aElement, RestyleHint aHint) {
   // Now that we no longer have separate non-animation and animation
   // restyles, this method having a distinct identity is less important,
   // but it still seems useful to offer as a "more public" API and as a
   // chokepoint for these restyles to go through.
   mPresContext->RestyleManager()->PostRestyleEvent(aElement, aHint,
                                                    nsChangeHint(0));
 }
 
@@ -6523,17 +6520,18 @@ nsresult PresShell::EventHandler::Handle
 
   // Activation events need to be dispatched even if no frame was found, since
   // we don't want the focus to be out of sync.
   if (!aFrameForPresShell) {
     if (!NS_EVENT_NEEDS_FRAME(aGUIEvent)) {
       mPresShell->mCurrentEventFrame = nullptr;
       // XXX Shouldn't we create AutoCurrentEventInfoSetter instance for this
       //     call even if we set the target to nullptr.
-      return HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true, nullptr);
+      return HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true,
+                                             nullptr);
     }
 
     if (aGUIEvent->HasKeyEventMessage()) {
       // Keypress events in new blank tabs should not be completely thrown away.
       // Retarget them -- the parent chrome shell might make use of them.
       return RetargetEventToParent(aGUIEvent, aEventStatus);
     }
 
@@ -7447,17 +7445,18 @@ nsresult PresShell::EventHandler::Handle
   // with parent PresShell.
   mPresShell->mCurrentEventContent = eventTargetElement;
   if (!mPresShell->GetCurrentEventContent() ||
       !mPresShell->GetCurrentEventFrame() ||
       InZombieDocument(mPresShell->mCurrentEventContent)) {
     return RetargetEventToParent(aGUIEvent, aEventStatus);
   }
 
-  nsresult rv = HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true, nullptr);
+  nsresult rv =
+      HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true, nullptr);
 
 #ifdef DEBUG
   mPresShell->ShowEventTargetDebug();
 #endif
 
   return rv;
 }
 
@@ -7551,17 +7550,18 @@ nsresult PresShell::EventHandler::Handle
   MOZ_ASSERT(!aGUIEvent->IsTargetedAtFocusedContent());
   MOZ_ASSERT(aEventStatus);
 
   AutoCurrentEventInfoSetter eventInfoSetter(*this, aFrameForPresShell,
                                              nullptr);
 
   nsresult rv = NS_OK;
   if (mPresShell->GetCurrentEventFrame()) {
-    rv = HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true, nullptr);
+    rv =
+        HandleEventWithCurrentEventInfo(aGUIEvent, aEventStatus, true, nullptr);
   }
 
 #ifdef DEBUG
   mPresShell->ShowEventTargetDebug();
 #endif
 
   return rv;
 }
@@ -9402,17 +9402,17 @@ static bool ReResolveMenusAndTrees(nsIFr
   nsMenuFrame* menu = do_QueryFrame(aFrame);
   if (menu) menu->CloseMenu(true);
   return true;
 }
 
 static bool ReframeImageBoxes(nsIFrame* aFrame) {
   if (aFrame->IsImageBoxFrame()) {
     aFrame->PresContext()->RestyleManager()->PostRestyleEvent(
-        aFrame->GetContent()->AsElement(), nsRestyleHint(0),
+        aFrame->GetContent()->AsElement(), RestyleHint{0},
         nsChangeHint_ReconstructFrame);
     return false;  // don't walk descendants
   }
   return true;  // walk descendants
 }
 
 static void WalkFramesThroughPlaceholders(nsPresContext* aPresContext,
                                           nsIFrame* aFrame,
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -113,101 +113,96 @@ void RestyleManager::ContentAppended(nsI
     }
     if (wasEmpty) {
       RestyleForEmptyChange(container);
       return;
     }
   }
 
   if (selectorFlags & NODE_HAS_SLOW_SELECTOR) {
-    PostRestyleEvent(container, eRestyle_Subtree, nsChangeHint(0));
+    PostRestyleEvent(container, RestyleHint::RestyleSubtree(), nsChangeHint(0));
     // Restyling the container is the most we can do here, so we're done.
     return;
   }
 
   if (selectorFlags & NODE_HAS_EDGE_CHILD_SELECTOR) {
     // restyle the last element child before this node
     for (nsIContent* cur = aFirstNewContent->GetPreviousSibling(); cur;
          cur = cur->GetPreviousSibling()) {
       if (cur->IsElement()) {
-        PostRestyleEvent(cur->AsElement(), eRestyle_Subtree, nsChangeHint(0));
+        PostRestyleEvent(cur->AsElement(), RestyleHint::RestyleSubtree(),
+                         nsChangeHint(0));
         break;
       }
     }
   }
 }
 
+static void RestyleSiblingsStartingWith(RestyleManager& aRM,
+                                        nsIContent* aStartingSibling) {
+  for (nsIContent* sibling = aStartingSibling; sibling;
+       sibling = sibling->GetNextSibling()) {
+    if (auto* element = Element::FromNode(sibling)) {
+      aRM.PostRestyleEvent(element, RestyleHint::RestyleSubtree(),
+                           nsChangeHint(0));
+    }
+  }
+}
+
 void RestyleManager::RestyleForEmptyChange(Element* aContainer) {
+  PostRestyleEvent(aContainer, RestyleHint::RestyleSubtree(), nsChangeHint(0));
+
   // In some cases (:empty + E, :empty ~ E), a change in the content of
   // an element requires restyling its parent's siblings.
-  nsRestyleHint hint = eRestyle_Subtree;
   nsIContent* grandparent = aContainer->GetParent();
-  if (grandparent &&
-      (grandparent->GetFlags() & NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS)) {
-    hint = nsRestyleHint(hint | eRestyle_LaterSiblings);
+  if (!grandparent ||
+      !(grandparent->GetFlags() & NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS)) {
+    return;
   }
-  PostRestyleEvent(aContainer, hint, nsChangeHint(0));
+  RestyleSiblingsStartingWith(*this, aContainer->GetNextSibling());
 }
 
 void RestyleManager::MaybeRestyleForEdgeChildChange(Element* aContainer,
                                                     nsIContent* aChangedChild) {
   MOZ_ASSERT(aContainer->GetFlags() & NODE_HAS_EDGE_CHILD_SELECTOR);
   MOZ_ASSERT(aChangedChild->GetParent() == aContainer);
   // restyle the previously-first element child if it is after this node
   bool passedChild = false;
   for (nsIContent* content = aContainer->GetFirstChild(); content;
        content = content->GetNextSibling()) {
     if (content == aChangedChild) {
       passedChild = true;
       continue;
     }
     if (content->IsElement()) {
       if (passedChild) {
-        PostRestyleEvent(content->AsElement(), eRestyle_Subtree,
+        PostRestyleEvent(content->AsElement(), RestyleHint::RestyleSubtree(),
                          nsChangeHint(0));
       }
       break;
     }
   }
   // restyle the previously-last element child if it is before this node
   passedChild = false;
   for (nsIContent* content = aContainer->GetLastChild(); content;
        content = content->GetPreviousSibling()) {
     if (content == aChangedChild) {
       passedChild = true;
       continue;
     }
     if (content->IsElement()) {
       if (passedChild) {
-        PostRestyleEvent(content->AsElement(), eRestyle_Subtree,
+        PostRestyleEvent(content->AsElement(), RestyleHint::RestyleSubtree(),
                          nsChangeHint(0));
       }
       break;
     }
   }
 }
 
-// Needed since we can't use PostRestyleEvent on non-elements (with
-// eRestyle_LaterSiblings or nsRestyleHint(eRestyle_Subtree |
-// eRestyle_LaterSiblings) as appropriate).
-static void RestyleSiblingsStartingWith(
-    RestyleManager* aRestyleManager,
-    nsIContent* aStartingSibling /* may be null */) {
-  for (nsIContent* sibling = aStartingSibling; sibling;
-       sibling = sibling->GetNextSibling()) {
-    if (sibling->IsElement()) {
-      aRestyleManager->PostRestyleEvent(
-          sibling->AsElement(),
-          nsRestyleHint(eRestyle_Subtree | eRestyle_LaterSiblings),
-          nsChangeHint(0));
-      break;
-    }
-  }
-}
-
 template <typename CharT>
 bool WhitespaceOnly(const CharT* aBuffer, size_t aUpTo) {
   for (auto index : IntegerRange(aUpTo)) {
     if (!dom::IsSpaceCharacter(aBuffer[index])) {
       return false;
     }
   }
   return true;
@@ -349,24 +344,24 @@ void RestyleManager::RestyleForInsertOrC
       // unnecessarily. Also can restyle unnecessarily if aChild is not
       // significant anyway, though that's more unlikely.
       RestyleForEmptyChange(container);
       return;
     }
   }
 
   if (selectorFlags & NODE_HAS_SLOW_SELECTOR) {
-    PostRestyleEvent(container, eRestyle_Subtree, nsChangeHint(0));
+    PostRestyleEvent(container, RestyleHint::RestyleSubtree(), nsChangeHint(0));
     // Restyling the container is the most we can do here, so we're done.
     return;
   }
 
   if (selectorFlags & NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS) {
     // Restyle all later siblings.
-    RestyleSiblingsStartingWith(this, aChild->GetNextSibling());
+    RestyleSiblingsStartingWith(*this, aChild->GetNextSibling());
   }
 
   if (selectorFlags & NODE_HAS_EDGE_CHILD_SELECTOR) {
     MaybeRestyleForEdgeChildChange(container, aChild);
   }
 }
 
 void RestyleManager::ContentRemoved(nsIContent* aOldChild,
@@ -411,50 +406,50 @@ void RestyleManager::ContentRemoved(nsIC
     }
     if (isEmpty) {
       RestyleForEmptyChange(container);
       return;
     }
   }
 
   if (selectorFlags & NODE_HAS_SLOW_SELECTOR) {
-    PostRestyleEvent(container, eRestyle_Subtree, nsChangeHint(0));
+    PostRestyleEvent(container, RestyleHint::RestyleSubtree(), nsChangeHint(0));
     // Restyling the container is the most we can do here, so we're done.
     return;
   }
 
   if (selectorFlags & NODE_HAS_SLOW_SELECTOR_LATER_SIBLINGS) {
     // Restyle all later siblings.
-    RestyleSiblingsStartingWith(this, aFollowingSibling);
+    RestyleSiblingsStartingWith(*this, aFollowingSibling);
   }
 
   if (selectorFlags & NODE_HAS_EDGE_CHILD_SELECTOR) {
     // restyle the now-first element child if it was after aOldChild
     bool reachedFollowingSibling = false;
     for (nsIContent* content = container->GetFirstChild(); content;
          content = content->GetNextSibling()) {
       if (content == aFollowingSibling) {
         reachedFollowingSibling = true;
         // do NOT continue here; we might want to restyle this node
       }
       if (content->IsElement()) {
         if (reachedFollowingSibling) {
-          PostRestyleEvent(content->AsElement(), eRestyle_Subtree,
+          PostRestyleEvent(content->AsElement(), RestyleHint::RestyleSubtree(),
                            nsChangeHint(0));
         }
         break;
       }
     }
     // restyle the now-last element child if it was before aOldChild
     reachedFollowingSibling = (aFollowingSibling == nullptr);
     for (nsIContent* content = container->GetLastChild(); content;
          content = content->GetPreviousSibling()) {
       if (content->IsElement()) {
         if (reachedFollowingSibling) {
-          PostRestyleEvent(content->AsElement(), eRestyle_Subtree,
+          PostRestyleEvent(content->AsElement(), RestyleHint::RestyleSubtree(),
                            nsChangeHint(0));
         }
         break;
       }
       if (content == aFollowingSibling) {
         reachedFollowingSibling = true;
       }
     }
@@ -506,49 +501,16 @@ static nsChangeHint ChangeForContentStat
     // visited or not isn't really something we can worry about here.
     // FIXME: We could probably do this a bit better.
     changeHint |= nsChangeHint_RepaintFrame;
   }
 
   return changeHint;
 }
 
-/* static */
-nsCString RestyleManager::RestyleHintToString(nsRestyleHint aHint) {
-  nsCString result;
-  bool any = false;
-  const char* names[] = {"Self",           "SomeDescendants",
-                         "Subtree",        "LaterSiblings",
-                         "CSSTransitions", "CSSAnimations",
-                         "StyleAttribute", "StyleAttribute_Animations",
-                         "Force",          "ForceDescendants"};
-  uint32_t hint = aHint & ((1 << ArrayLength(names)) - 1);
-  uint32_t rest = aHint & ~((1 << ArrayLength(names)) - 1);
-  for (uint32_t i = 0; i < ArrayLength(names); i++) {
-    if (hint & (1 << i)) {
-      if (any) {
-        result.AppendLiteral(" | ");
-      }
-      result.AppendPrintf("eRestyle_%s", names[i]);
-      any = true;
-    }
-  }
-  if (rest) {
-    if (any) {
-      result.AppendLiteral(" | ");
-    }
-    result.AppendPrintf("0x%0x", rest);
-  } else {
-    if (!any) {
-      result.AppendLiteral("0");
-    }
-  }
-  return result;
-}
-
 #ifdef DEBUG
 /* static */
 nsCString RestyleManager::ChangeHintToString(nsChangeHint aHint) {
   nsCString result;
   bool any = false;
   const char* names[] = {"RepaintFrame",
                          "NeedReflow",
                          "ClearAncestorIntrinsics",
@@ -2288,95 +2250,85 @@ nsIFrame* ServoRestyleState::TableAwareP
     // Must be a caption.  In that case we want the table here.
     MOZ_ASSERT(aChild->StyleDisplay()->mDisplay == StyleDisplay::TableCaption);
     parent = parent->PrincipalChildList().FirstChild();
   }
   return parent;
 }
 
 void RestyleManager::PostRestyleEvent(Element* aElement,
-                                      nsRestyleHint aRestyleHint,
+                                      RestyleHint aRestyleHint,
                                       nsChangeHint aMinChangeHint) {
   MOZ_ASSERT(!(aMinChangeHint & nsChangeHint_NeutralChange),
              "Didn't expect explicit change hints to be neutral!");
   if (MOZ_UNLIKELY(IsDisconnected()) ||
       MOZ_UNLIKELY(PresContext()->PresShell()->IsDestroying())) {
     return;
   }
 
   // We allow posting restyles from within change hint handling, but not from
   // within the restyle algorithm itself.
   MOZ_ASSERT(!ServoStyleSet::IsInServoTraversal());
 
-  if (aRestyleHint == 0 && !aMinChangeHint) {
+  if (!aRestyleHint && !aMinChangeHint) {
+    // FIXME(emilio): we should assert against this instead.
     return;  // Nothing to do.
   }
 
   // Assuming the restyle hints will invalidate cached style for
   // getComputedStyle, since we don't know if any of the restyling that we do
   // would affect undisplayed elements.
   if (aRestyleHint) {
+    if (!(aRestyleHint & RestyleHint::ForAnimations())) {
+      mHaveNonAnimationRestyles = true;
+    }
+
     IncrementUndisplayedRestyleGeneration();
   }
 
   // Processing change hints sometimes causes new change hints to be generated,
   // and very occasionally, additional restyle hints. We collect the change
   // hints manually to avoid re-traversing the DOM to find them.
   if (mReentrantChanges && !aRestyleHint) {
     mReentrantChanges->AppendElement(ReentrantChange{aElement, aMinChangeHint});
     return;
   }
 
-  if (aRestyleHint & ~eRestyle_AllHintsWithAnimations) {
-    mHaveNonAnimationRestyles = true;
-  }
-
-  if (aRestyleHint & eRestyle_LaterSiblings) {
-    aRestyleHint &= ~eRestyle_LaterSiblings;
-
-    nsRestyleHint siblingHint = eRestyle_Subtree;
-    Element* current = aElement->GetNextElementSibling();
-    while (current) {
-      Servo_NoteExplicitHints(current, siblingHint, nsChangeHint(0));
-      current = current->GetNextElementSibling();
-    }
-  }
-
   if (aRestyleHint || aMinChangeHint) {
     Servo_NoteExplicitHints(aElement, aRestyleHint, aMinChangeHint);
   }
 }
 
 void RestyleManager::PostRestyleEventForAnimations(Element* aElement,
                                                    PseudoStyleType aPseudoType,
-                                                   nsRestyleHint aRestyleHint) {
+                                                   RestyleHint aRestyleHint) {
   Element* elementToRestyle =
       EffectCompositor::GetElementToRestyle(aElement, aPseudoType);
 
   if (!elementToRestyle) {
     // FIXME: Bug 1371107: When reframing happens,
     // EffectCompositor::mElementsToRestyle still has unbound old pseudo
     // element. We should drop it.
     return;
   }
 
   AutoRestyleTimelineMarker marker(mPresContext->GetDocShell(),
                                    true /* animation-only */);
   Servo_NoteExplicitHints(elementToRestyle, aRestyleHint, nsChangeHint(0));
 }
 
 void RestyleManager::RebuildAllStyleData(nsChangeHint aExtraHint,
-                                         nsRestyleHint aRestyleHint) {
+                                         RestyleHint aRestyleHint) {
   // NOTE(emilio): GeckoRestlyeManager does a sync style flush, which seems not
   // to be needed in my testing.
   PostRebuildAllStyleDataEvent(aExtraHint, aRestyleHint);
 }
 
 void RestyleManager::PostRebuildAllStyleDataEvent(nsChangeHint aExtraHint,
-                                                  nsRestyleHint aRestyleHint) {
+                                                  RestyleHint aRestyleHint) {
   // NOTE(emilio): The semantics of these methods are quite funny, in the sense
   // that we're not supposed to need to rebuild the actual stylist data.
   //
   // That's handled as part of the MediumFeaturesChanged stuff, if needed.
   StyleSet()->ClearCachedStyleData();
 
   DocumentStyleRootIterator iter(mPresContext->Document());
   while (Element* root = iter.GetNextStyleRoot()) {
@@ -3228,17 +3180,17 @@ void RestyleManager::ContentStateChanged
       !Gecko_VisitedStylesEnabled(element.OwnerDoc())) {
     aChangedBits &= ~kVisitedAndUnvisited;
     if (aChangedBits.IsEmpty()) {
       return;
     }
   }
 
   if (auto changeHint = ChangeForContentStateChange(element, aChangedBits)) {
-    Servo_NoteExplicitHints(&element, nsRestyleHint(0), changeHint);
+    Servo_NoteExplicitHints(&element, RestyleHint{0}, changeHint);
   }
 
   // Don't bother taking a snapshot if no rules depend on these state bits.
   //
   // We always take a snapshot for the LTR/RTL event states, since Servo doesn't
   // track those bits in the same way, and we know that :dir() rules are always
   // present in UA style sheets.
   if (!aChangedBits.HasAtLeastOneOfStates(DIRECTION_STATES) &&
@@ -3371,26 +3323,27 @@ static inline bool AttributeChangeRequir
 }
 
 void RestyleManager::AttributeChanged(Element* aElement, int32_t aNameSpaceID,
                                       nsAtom* aAttribute, int32_t aModType,
                                       const nsAttrValue* aOldValue) {
   MOZ_ASSERT(!mInStyleRefresh);
 
   auto changeHint = nsChangeHint(0);
-  auto restyleHint = nsRestyleHint(0);
+  auto restyleHint = RestyleHint{0};
 
   changeHint |= aElement->GetAttributeChangeHint(aAttribute, aModType);
 
   if (aAttribute == nsGkAtoms::style) {
-    restyleHint |= eRestyle_StyleAttribute;
+    restyleHint |= StyleRestyleHint_RESTYLE_STYLE_ATTRIBUTE;
   } else if (AttributeChangeRequiresSubtreeRestyle(*aElement, aAttribute)) {
-    restyleHint |= eRestyle_Subtree;
+    restyleHint |= RestyleHint::RestyleSubtree();
   } else if (aElement->IsAttributeMapped(aAttribute)) {
-    restyleHint |= eRestyle_Self;
+    // FIXME(emilio): Does this really need to re-selector-match?
+    restyleHint |= StyleRestyleHint_RESTYLE_SELF;
   }
 
   if (nsIFrame* primaryFrame = aElement->GetPrimaryFrame()) {
     // See if we have appearance information for a theme.
     const nsStyleDisplay* disp = primaryFrame->StyleDisplay();
     if (disp->HasAppearance()) {
       nsITheme* theme = PresContext()->GetTheme();
       if (theme && theme->ThemeSupportsWidget(PresContext(), primaryFrame,
--- a/layout/base/RestyleManager.h
+++ b/layout/base/RestyleManager.h
@@ -200,18 +200,16 @@ class RestyleManager {
   void Disconnect() { mPresContext = nullptr; }
 
   ~RestyleManager() {
     MOZ_ASSERT(!mAnimationsWithDestroyedFrame,
                "leaving dangling pointers from AnimationsWithDestroyedFrame");
     MOZ_ASSERT(!mReentrantChanges);
   }
 
-  static nsCString RestyleHintToString(nsRestyleHint aHint);
-
 #ifdef DEBUG
   static nsCString ChangeHintToString(nsChangeHint aHint);
 
   /**
    * DEBUG ONLY method to verify integrity of style tree versus frame tree
    */
   void DebugVerifyStyleTree(nsIFrame* aFrame);
 #endif
@@ -310,36 +308,35 @@ class RestyleManager {
   // Restyling for a ContentInserted (notification after insertion) or
   // for some CharacterDataChanged.
   void RestyleForInsertOrChange(nsIContent* aChild);
 
   // Restyle for a CharacterDataChanged notification. In practice this can only
   // affect :empty / :-moz-only-whitespace / :-moz-first-node / :-moz-last-node.
   void CharacterDataChanged(nsIContent*, const CharacterDataChangeInfo&);
 
-  void PostRestyleEvent(dom::Element*, nsRestyleHint,
+  void PostRestyleEvent(dom::Element*, RestyleHint,
                         nsChangeHint aMinChangeHint);
 
   /**
    * Posts restyle hints for animations.
    * This is only called for the second traversal for CSS animations during
    * updating CSS animations in a SequentialTask.
    * This function does neither register a refresh observer nor flag that a
    * style flush is needed since this function is supposed to be called during
    * restyling process and this restyle event will be processed in the second
    * traversal of the same restyling process.
    */
   void PostRestyleEventForAnimations(dom::Element*, PseudoStyleType,
-                                     nsRestyleHint);
+                                     RestyleHint);
 
   void NextRestyleIsForCSSRuleChanges() { mRestyleForCSSRuleChanges = true; }
 
-  void RebuildAllStyleData(nsChangeHint aExtraHint, nsRestyleHint aRestyleHint);
-  void PostRebuildAllStyleDataEvent(nsChangeHint aExtraHint,
-                                    nsRestyleHint aRestyleHint);
+  void RebuildAllStyleData(nsChangeHint aExtraHint, RestyleHint);
+  void PostRebuildAllStyleDataEvent(nsChangeHint aExtraHint, RestyleHint);
 
   void ProcessPendingRestyles();
   void ProcessAllPendingAttributeAndStateInvalidations();
 
   void ContentStateChanged(nsIContent* aContent, EventStates aStateMask);
   void AttributeWillChange(Element* aElement, int32_t aNameSpaceID,
                            nsAtom* aAttribute, int32_t aModType);
   void ClassAttributeWillBeChangedBySMIL(dom::Element* aElement);
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -7759,17 +7759,17 @@ bool nsCSSFrameConstructor::EnsureFrameF
   // pages that repeatedly query metrics for collapsed-whitespace text nodes
   // don't trigger pathological behavior.
   mAlwaysCreateFramesForIgnorableWhitespace = true;
   Element* root = mDocument->GetRootElement();
   if (!root) {
     return false;
   }
 
-  RestyleManager()->PostRestyleEvent(root, nsRestyleHint(0),
+  RestyleManager()->PostRestyleEvent(root, RestyleHint{0},
                                      nsChangeHint_ReconstructFrame);
   return true;
 }
 
 void nsCSSFrameConstructor::CharacterDataChanged(
     nsIContent* aContent, const CharacterDataChangeInfo& aInfo) {
   AUTO_PROFILER_LABEL("nsCSSFrameConstructor::CharacterDataChanged",
                       LAYOUT_FrameConstruction);
@@ -8677,18 +8677,17 @@ void nsCSSFrameConstructor::RecreateFram
     if (aInsertionKind == InsertionKind::Async && aContent->IsElement()) {
       // FIXME(emilio, bug 1397239): There's nothing removing the frame state
       // for elements that go away before we come back to the frame
       // constructor.
       //
       // Also, it'd be nice to just use the `ContentRangeInserted` path for
       // both elements and non-elements, but we need to make lazy frame
       // construction to apply to all elements first.
-      RestyleManager()->PostRestyleEvent(aContent->AsElement(),
-                                         nsRestyleHint(0),
+      RestyleManager()->PostRestyleEvent(aContent->AsElement(), RestyleHint{0},
                                          nsChangeHint_ReconstructFrame);
     } else {
       // Now, recreate the frames associated with this content object. If
       // ContentRemoved triggered reconstruction, then we don't need to do this
       // because the frames will already have been built.
       ContentRangeInserted(aContent, aContent->GetNextSibling(),
                            mTempFrameTreeState, aInsertionKind);
     }
--- a/layout/base/nsChangeHint.h
+++ b/layout/base/nsChangeHint.h
@@ -7,16 +7,17 @@
 /* constants for what needs to be recomputed in response to style changes */
 
 #ifndef nsChangeHint_h___
 #define nsChangeHint_h___
 
 #include "mozilla/Types.h"
 #include "nsDebug.h"
 #include "nsTArray.h"
+#include "mozilla/ServoStyleConsts.h"
 
 // Defines for various style related constants
 
 enum nsChangeHint : uint32_t {
   nsChangeHint_Empty = 0,
 
   // change was visual only (e.g., COLOR=)
   // Invalidates all descendant frames (including following
@@ -513,132 +514,30 @@ inline nsChangeHint NS_RemoveSubsumedHin
     MOZ_ASSERT(result & nsChangeHint_ClearAncestorIntrinsics);
     result |=  // nsChangeHint_ClearAncestorIntrinsics |
         nsChangeHint_NeedDirtyReflow;
   }
 
   return result;
 }
 
-/**
- * |nsRestyleHint| is a bitfield for the result of
- * |HasStateDependentStyle| and |HasAttributeDependentStyle|.  When no
- * restyling is necessary, use |nsRestyleHint(0)|.
- *
- * Without eRestyle_Force or eRestyle_ForceDescendants, the restyling process
- * can stop processing at a frame when it detects no style changes and it is
- * known that the styles of the subtree beneath it will not change, leaving
- * the old ComputedStyle on the frame.  eRestyle_Force can be used to skip this
- * optimization on a frame, and to force its new ComputedStyle to be used.
- *
- * Similarly, eRestyle_ForceDescendants will cause the frame and all of its
- * descendants to be traversed and for the new ComputedStyles that are created
- * to be set on the frames.
- *
- * NOTE: When adding new restyle hints, please also add them to
- * RestyleManager::RestyleHintToString.
- */
-enum nsRestyleHint : uint32_t {
-  // Rerun selector matching on the element.  If a new ComputedStyle
-  // results, update the ComputedStyles of descendants.  (Irrelevant if
-  // eRestyle_Subtree is also set, since that implies a superset of the
-  // work.)
-  eRestyle_Self = 1 << 0,
-
-  // Rerun selector matching on descendants of the element that match
-  // a given selector.
-  eRestyle_SomeDescendants = 1 << 1,
-
-  // Rerun selector matching on the element and all of its descendants.
-  // (Implies eRestyle_ForceDescendants, which ensures that we continue
-  // the restyling process for all descendants, but doesn't cause
-  // selector matching.)
-  eRestyle_Subtree = 1 << 2,
-
-  // Rerun selector matching on all later siblings of the element and
-  // all of their descendants.
-  eRestyle_LaterSiblings = 1 << 3,
-
-  // Replace the style data coming from CSS transitions without updating
-  // any other style data.  If a new ComputedStyle results, update style
-  // contexts on the descendants.  (Irrelevant if eRestyle_Self or
-  // eRestyle_Subtree is also set, since those imply a superset of the
-  // work.)
-  eRestyle_CSSTransitions = 1 << 4,
+namespace mozilla {
 
-  // Replace the style data coming from CSS animations without updating
-  // any other style data.  If a new ComputedStyle results, update style
-  // contexts on the descendants.  (Irrelevant if eRestyle_Self or
-  // eRestyle_Subtree is also set, since those imply a superset of the
-  // work.)
-  eRestyle_CSSAnimations = 1 << 5,
-
-  // Replace the style data coming from inline style without updating
-  // any other style data.  If a new ComputedStyle results, update style
-  // contexts on the descendants.  (Irrelevant if eRestyle_Self or
-  // eRestyle_Subtree is also set, since those imply a superset of the
-  // work.)  Supported only for element ComputedStyles and not for
-  // pseudo-elements or anonymous boxes, on which it converts to
-  // eRestyle_Self.
-  // If the change is for the advance of a declarative animation, use
-  // the value below instead.
-  eRestyle_StyleAttribute = 1 << 6,
-
-  // Same as eRestyle_StyleAttribute, but for when the change results
-  // from the advance of a declarative animation.
-  eRestyle_StyleAttribute_Animations = 1 << 7,
+using RestyleHint = StyleRestyleHint;
 
-  // Continue the restyling process to the current frame's children even
-  // if this frame's restyling resulted in no style changes.
-  eRestyle_Force = 1 << 8,
-
-  // Continue the restyling process to all of the current frame's
-  // descendants, even if any frame's restyling resulted in no style
-  // changes.  (Implies eRestyle_Force.)  Note that this is weaker than
-  // eRestyle_Subtree, which makes us rerun selector matching on all
-  // descendants rather than just continuing the restyling process.
-  eRestyle_ForceDescendants = 1 << 9,
-
-  // Useful unions:
-  eRestyle_AllHintsWithAnimations = eRestyle_CSSTransitions |
-                                    eRestyle_CSSAnimations |
-                                    eRestyle_StyleAttribute_Animations,
-};
-
-// The functions below need an integral type to cast to to avoid
-// infinite recursion.
-typedef decltype(nsRestyleHint(0) + nsRestyleHint(0)) nsRestyleHint_size_t;
-
-inline constexpr nsRestyleHint operator|(nsRestyleHint aLeft,
-                                         nsRestyleHint aRight) {
-  return nsRestyleHint(nsRestyleHint_size_t(aLeft) |
-                       nsRestyleHint_size_t(aRight));
+inline RestyleHint RestyleHint::RestyleSubtree() {
+  return StyleRestyleHint_RESTYLE_SELF | StyleRestyleHint_RESTYLE_DESCENDANTS;
 }
 
-inline constexpr nsRestyleHint operator&(nsRestyleHint aLeft,
-                                         nsRestyleHint aRight) {
-  return nsRestyleHint(nsRestyleHint_size_t(aLeft) &
-                       nsRestyleHint_size_t(aRight));
-}
-
-inline nsRestyleHint& operator|=(nsRestyleHint& aLeft, nsRestyleHint aRight) {
-  return aLeft = aLeft | aRight;
-}
-
-inline nsRestyleHint& operator&=(nsRestyleHint& aLeft, nsRestyleHint aRight) {
-  return aLeft = aLeft & aRight;
+inline RestyleHint RestyleHint::RecascadeSubtree() {
+  return StyleRestyleHint_RECASCADE_SELF |
+         StyleRestyleHint_RECASCADE_DESCENDANTS;
 }
 
-inline constexpr nsRestyleHint operator~(nsRestyleHint aArg) {
-  return nsRestyleHint(~nsRestyleHint_size_t(aArg));
+inline RestyleHint RestyleHint::ForAnimations() {
+  return StyleRestyleHint_RESTYLE_CSS_TRANSITIONS |
+         StyleRestyleHint_RESTYLE_CSS_ANIMATIONS |
+         StyleRestyleHint_RESTYLE_SMIL;
 }
 
-inline constexpr nsRestyleHint operator^(nsRestyleHint aLeft,
-                                         nsRestyleHint aRight) {
-  return nsRestyleHint(nsRestyleHint_size_t(aLeft) ^
-                       nsRestyleHint_size_t(aRight));
-}
-
-inline nsRestyleHint operator^=(nsRestyleHint& aLeft, nsRestyleHint aRight) {
-  return aLeft = aLeft ^ aRight;
-}
+}  // namespace mozilla
 
 #endif /* nsChangeHint_h___ */
--- a/layout/base/nsILayoutDebugger.h
+++ b/layout/base/nsILayoutDebugger.h
@@ -6,18 +6,16 @@
 
 /* XPCOM interface for layout-debug extension to reach layout internals */
 
 #ifndef nsILayoutDebugger_h___
 #define nsILayoutDebugger_h___
 
 #include "nsISupports.h"
 
-#ifdef DEBUG
-
 // 1295f7c0-96b3-41fc-93ed-c95dfb712ce7
 #  define NS_ILAYOUT_DEBUGGER_IID                      \
     {                                                  \
       0x1295f7c0, 0x96b3, 0x41fc, {                    \
         0x93, 0xed, 0xc9, 0x5d, 0xfb, 0x71, 0x2c, 0xe7 \
       }                                                \
     }
 
@@ -34,13 +32,13 @@ class nsILayoutDebugger : public nsISupp
 
   NS_IMETHOD SetShowEventTargetFrameBorder(bool aEnable) = 0;
 
   NS_IMETHOD GetShowEventTargetFrameBorder(bool* aResult) = 0;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsILayoutDebugger, NS_ILAYOUT_DEBUGGER_IID)
 
+#ifdef DEBUG
 nsresult NS_NewLayoutDebugger(nsILayoutDebugger** aResult);
-
 #endif /* DEBUG */
 
 #endif /* nsILayoutDebugger_h___ */
--- a/layout/base/nsIPresShell.h
+++ b/layout/base/nsIPresShell.h
@@ -526,19 +526,18 @@ class nsIPresShell : public nsStubDocume
    *
    * Only called when the slot attribute of the element changes, the rest of
    * the changes should be handled in ShadowRoot.
    */
   void SlotAssignmentWillChange(mozilla::dom::Element& aElement,
                                 mozilla::dom::HTMLSlotElement* aOldSlot,
                                 mozilla::dom::HTMLSlotElement* aNewSlot);
 
-  void PostRecreateFramesFor(mozilla::dom::Element* aElement);
-  void RestyleForAnimation(mozilla::dom::Element* aElement,
-                           nsRestyleHint aHint);
+  void PostRecreateFramesFor(mozilla::dom::Element*);
+  void RestyleForAnimation(mozilla::dom::Element*, mozilla::RestyleHint);
 
   // ShadowRoot has APIs that can change styles. This notifies the shell that
   // stlyes applicable in the shadow tree have potentially changed.
   void RecordShadowStyleChange(mozilla::dom::ShadowRoot& aShadowRoot);
 
   /**
    * Determine if it is safe to flush all pending notifications.
    */
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -7929,22 +7929,20 @@ void nsLayoutUtils::DeregisterImageReque
         *aRequestRegistered = false;
       }
     }
   }
 }
 
 /* static */
 void nsLayoutUtils::PostRestyleEvent(Element* aElement,
-                                     nsRestyleHint aRestyleHint,
+                                     RestyleHint aRestyleHint,
                                      nsChangeHint aMinChangeHint) {
-  Document* doc = aElement->GetComposedDoc();
-  if (doc) {
-    RefPtr<nsPresContext> presContext = doc->GetPresContext();
-    if (presContext) {
+  if (Document* doc = aElement->GetComposedDoc()) {
+    if (nsPresContext* presContext = doc->GetPresContext()) {
       presContext->RestyleManager()->PostRestyleEvent(aElement, aRestyleHint,
                                                       aMinChangeHint);
     }
   }
 }
 
 nsSetAttrRunnable::nsSetAttrRunnable(Element* aElement, nsAtom* aAttrName,
                                      const nsAString& aValue)
--- a/layout/base/nsLayoutUtils.h
+++ b/layout/base/nsLayoutUtils.h
@@ -2560,18 +2560,17 @@ class nsLayoutUtils {
                                      imgIRequest* aRequest,
                                      bool* aRequestRegistered);
 
   /**
    * Shim to nsCSSFrameConstructor::PostRestyleEvent. Exists so that we
    * can avoid including nsCSSFrameConstructor.h and all its dependencies
    * in content files.
    */
-  static void PostRestyleEvent(mozilla::dom::Element* aElement,
-                               nsRestyleHint aRestyleHint,
+  static void PostRestyleEvent(mozilla::dom::Element*, mozilla::RestyleHint,
                                nsChangeHint aMinChangeHint);
 
   /**
    * Updates a pair of x and y distances if a given point is closer to a given
    * rectangle than the original distance values.  If aPoint is closer to
    * aRect than aClosestXDistance and aClosestYDistance indicate, then those
    * two variables are updated with the distance between aPoint and aRect,
    * and true is returned.  If aPoint is not closer, then aClosestXDistance
--- a/layout/base/nsPresContext.cpp
+++ b/layout/base/nsPresContext.cpp
@@ -409,17 +409,18 @@ void nsPresContext::InvalidatePaintedLay
 
 void nsPresContext::AppUnitsPerDevPixelChanged() {
   InvalidatePaintedLayers();
 
   if (mDeviceContext) {
     mDeviceContext->FlushFontCache();
   }
 
-  MediaFeatureValuesChanged({eRestyle_ForceDescendants, NS_STYLE_HINT_REFLOW,
+  MediaFeatureValuesChanged({RestyleHint::RecascadeSubtree(),
+                             NS_STYLE_HINT_REFLOW,
                              MediaFeatureChangeReason::ResolutionChange});
 
   mCurAppUnitsPerDevPixel = mDeviceContext->AppUnitsPerDevPixel();
 }
 
 void nsPresContext::PreferenceChanged(const char* aPrefName) {
   nsDependentCString prefName(aPrefName);
   if (prefName.EqualsLiteral("layout.css.dpi") ||
@@ -538,17 +539,17 @@ void nsPresContext::UpdateAfterPreferenc
   nsChangeHint hint = nsChangeHint(0);
 
   if (mPrefChangePendingNeedsReflow) {
     hint |= NS_STYLE_HINT_REFLOW;
   }
 
   // Preferences require rerunning selector matching because we rebuild
   // the pref style sheet for some preference changes.
-  RebuildAllStyleData(hint, eRestyle_Subtree);
+  RebuildAllStyleData(hint, RestyleHint::RestyleSubtree());
 }
 
 nsresult nsPresContext::Init(nsDeviceContext* aDeviceContext) {
   NS_ASSERTION(!mInitialized, "attempt to reinit pres context");
   NS_ENSURE_ARG(aDeviceContext);
 
   mDeviceContext = aDeviceContext;
 
@@ -724,17 +725,17 @@ void nsPresContext::DoChangeCharSet(NotN
   UpdateCharSet(aCharSet);
   mDeviceContext->FlushFontCache();
 
   // If a document contains one or more <script> elements, frame construction
   // might happen earlier than the UpdateCharSet(), so we need to restyle
   // descendants to make their style data up-to-date.
   //
   // FIXME(emilio): Revisit whether this is true after bug 1438911.
-  RebuildAllStyleData(NS_STYLE_HINT_REFLOW, eRestyle_ForceDescendants);
+  RebuildAllStyleData(NS_STYLE_HINT_REFLOW, RestyleHint::RecascadeSubtree());
 }
 
 void nsPresContext::UpdateCharSet(NotNull<const Encoding*> aCharSet) {
   switch (GET_BIDI_OPTION_TEXTTYPE(GetBidi())) {
     case IBMBIDI_TEXTTYPE_LOGICAL:
       SetVisualMode(false);
       break;
 
@@ -941,17 +942,18 @@ void nsPresContext::UpdateEffectiveTextZ
   } else if (newZoom > maxZoom) {
     newZoom = maxZoom;
   }
 
   mEffectiveTextZoom = newZoom;
 
   // Media queries could have changed, since we changed the meaning
   // of 'em' units in them.
-  MediaFeatureValuesChanged({eRestyle_ForceDescendants, NS_STYLE_HINT_REFLOW,
+  MediaFeatureValuesChanged({RestyleHint::RecascadeSubtree(),
+                             NS_STYLE_HINT_REFLOW,
                              MediaFeatureChangeReason::ZoomChange});
 }
 
 float nsPresContext::GetDeviceFullZoom() {
   return mDeviceContext->GetFullZoom();
 }
 
 void nsPresContext::SetFullZoom(float aZoom) {
@@ -1336,32 +1338,32 @@ void nsPresContext::SysColorChangedInter
   PreferenceSheet::Refresh();
 
   // Reset default background and foreground colors for the document since
   // they may be using system colors
   GetDocumentColorPreferences();
 
   // The system color values are computed to colors in the style data,
   // so normal style data comparison is sufficient here.
-  RebuildAllStyleData(nsChangeHint(0), nsRestyleHint(0));
+  RebuildAllStyleData(nsChangeHint(0), RestyleHint{0});
 }
 
 void nsPresContext::RefreshSystemMetrics() {
   // This will force the system metrics to be generated the next time they're
   // used.
   nsMediaFeatures::FreeSystemMetrics();
 
   // Changes to system metrics can change media queries on them.
   //
   // Changes in theme can change system colors (whose changes are
   // properly reflected in computed style data), system fonts (whose
   // changes are not), and -moz-appearance (whose changes likewise are
   // not), so we need to recascade for the first, and reflow for the rest.
   MediaFeatureValuesChangedAllDocuments({
-      eRestyle_ForceDescendants,
+      RestyleHint::RecascadeSubtree(),
       NS_STYLE_HINT_REFLOW,
       MediaFeatureChangeReason::SystemMetricsChange,
   });
 }
 
 void nsPresContext::UIResolutionChanged() {
   if (!mPendingUIResolutionChanged) {
     nsCOMPtr<nsIRunnable> ev =
@@ -1447,21 +1449,22 @@ void nsPresContext::StopEmulatingMedium(
   nsAtom* previousMedium = Medium();
   mIsEmulatingMedia = false;
   if (Medium() != previousMedium) {
     MediaFeatureValuesChanged({MediaFeatureChangeReason::MediumChange});
   }
 }
 
 void nsPresContext::ContentLanguageChanged() {
-  PostRebuildAllStyleDataEvent(nsChangeHint(0), eRestyle_ForceDescendants);
+  PostRebuildAllStyleDataEvent(nsChangeHint(0),
+                               RestyleHint::RecascadeSubtree());
 }
 
 void nsPresContext::RebuildAllStyleData(nsChangeHint aExtraHint,
-                                        nsRestyleHint aRestyleHint) {
+                                        RestyleHint aRestyleHint) {
   if (!mShell) {
     // We must have been torn down. Nothing to do here.
     return;
   }
 
   // FIXME(emilio): Why is it safe to reset mUsesRootEMUnits / mUsesEXChUnits
   // here if there's no restyle hint? That looks pretty bogus.
   mUsesRootEMUnits = false;
@@ -1476,17 +1479,17 @@ void nsPresContext::RebuildAllStyleData(
   mDocument->MarkUserFontSetDirty();
   MarkCounterStylesDirty();
   MarkFontFeatureValuesDirty();
 
   RestyleManager()->RebuildAllStyleData(aExtraHint, aRestyleHint);
 }
 
 void nsPresContext::PostRebuildAllStyleDataEvent(nsChangeHint aExtraHint,
-                                                 nsRestyleHint aRestyleHint) {
+                                                 RestyleHint aRestyleHint) {
   if (!mShell) {
     // We must have been torn down. Nothing to do here.
     return;
   }
   RestyleManager()->PostRebuildAllStyleDataEvent(aExtraHint, aRestyleHint);
 }
 
 static bool MediaFeatureValuesChangedAllDocumentsCallback(Document* aDocument,
@@ -1653,26 +1656,27 @@ void nsPresContext::UserFontSetUpdated(g
 
   // Note: this method is called without a font when rules in the userfont set
   // are updated, which may occur during reflow as a result of the lazy
   // initialization of the userfont set. It would be better to avoid a full
   // restyle but until this method is only called outside of reflow, schedule a
   // full restyle in these cases.
   if (!aUpdatedFont) {
     PostRebuildAllStyleDataEvent(NS_STYLE_HINT_REFLOW,
-                                 eRestyle_ForceDescendants);
+                                 RestyleHint::RecascadeSubtree());
     return;
   }
 
   // Special case - if either the 'ex' or 'ch' units are used, these
   // depend upon font metrics. Updating this information requires
   // rebuilding the rule tree from the top, avoiding the reuse of cached
   // data even when no style rules have changed.
   if (UsesExChUnits()) {
-    PostRebuildAllStyleDataEvent(nsChangeHint(0), eRestyle_ForceDescendants);
+    PostRebuildAllStyleDataEvent(nsChangeHint(0),
+                                 RestyleHint::RecascadeSubtree());
   }
 
   // Iterate over the frame tree looking for frames associated with the
   // downloadable font family in question. If a frame's nsStyleFont has
   // the name, check the font group associated with the metrics to see if
   // it contains that specific font (i.e. the one chosen within the family
   // given the weight, width, and slant from the nsStyleFont). If it does,
   // mark that frame dirty and skip inspecting its descendants.
@@ -1709,17 +1713,17 @@ void nsPresContext::FlushCounterStyles()
     // Still in its initial state, no need to clean.
     return;
   }
 
   if (mCounterStylesDirty) {
     bool changed = mCounterStyleManager->NotifyRuleChanged();
     if (changed) {
       PresShell()->NotifyCounterStylesAreDirty();
-      PostRebuildAllStyleDataEvent(NS_STYLE_HINT_REFLOW, nsRestyleHint(0));
+      PostRebuildAllStyleDataEvent(NS_STYLE_HINT_REFLOW, RestyleHint{0});
       RefreshDriver()->AddPostRefreshObserver(
           new CounterStyleCleaner(RefreshDriver(), mCounterStyleManager));
     }
     mCounterStylesDirty = false;
   }
 }
 
 void nsPresContext::MarkCounterStylesDirty() {
@@ -1738,17 +1742,17 @@ void nsPresContext::NotifyMissingFonts()
 }
 
 void nsPresContext::EnsureSafeToHandOutCSSRules() {
   if (!mShell->StyleSet()->EnsureUniqueInnerOnCSSSheets()) {
     // Nothing to do.
     return;
   }
 
-  RebuildAllStyleData(nsChangeHint(0), eRestyle_Subtree);
+  RebuildAllStyleData(nsChangeHint(0), RestyleHint::RestyleSubtree());
 }
 
 void nsPresContext::FireDOMPaintEvent(
     nsTArray<nsRect>* aList, TransactionId aTransactionId,
     mozilla::TimeStamp aTimeStamp /* = mozilla::TimeStamp() */) {
   nsPIDOMWindowInner* ourWindow = mDocument->GetInnerWindow();
   if (!ourWindow) return;
 
--- a/layout/base/nsPresContext.h
+++ b/layout/base/nsPresContext.h
@@ -253,45 +253,28 @@ class nsPresContext : public nsISupports
 
   /**
    * Rebuilds all style data by throwing out the old rule tree and
    * building a new one, and additionally applying aExtraHint (which
    * must not contain nsChangeHint_ReconstructFrame) to the root frame.
    * For aRestyleHint, see RestyleManager::RebuildAllStyleData.
    * Also rebuild the user font set and counter style manager.
    */
-  void RebuildAllStyleData(nsChangeHint aExtraHint, nsRestyleHint aRestyleHint);
+  void RebuildAllStyleData(nsChangeHint aExtraHint, mozilla::RestyleHint);
   /**
    * Just like RebuildAllStyleData, except (1) asynchronous and (2) it
    * doesn't rebuild the user font set.
    */
   void PostRebuildAllStyleDataEvent(nsChangeHint aExtraHint,
-                                    nsRestyleHint aRestyleHint);
+                                    mozilla::RestyleHint);
 
   void ContentLanguageChanged();
 
   /**
-   * Handle changes in the values of media features (used in media
-   * queries).
-   *
-   * There are three sensible values to use for aRestyleHint:
-   *  * nsRestyleHint(0) to rebuild style data, with rerunning of
-   *    selector matching, only if media features have changed
-   *  * eRestyle_ForceDescendants to force rebuilding of style data (but
-   *    still only rerun selector matching if media query results have
-   *    changed).  (RebuildAllStyleData always adds
-   *    eRestyle_ForceDescendants internally, so here we're only using
-   *    it to distinguish from nsRestyleHint(0) whether we need to call
-   *    RebuildAllStyleData at all.)
-   *  * eRestyle_Subtree to force rebuilding of style data with
-   *    rerunning of selector matching
-   *
-   * For aChangeHint, see RestyleManager::RebuildAllStyleData.  (Passing
-   * a nonzero aChangeHint forces rebuilding style data even if
-   * nsRestyleHint(0) is passed.)
+   * Handle changes in the values of media features (used in media queries).
    */
   void MediaFeatureValuesChanged(const mozilla::MediaFeatureChange& aChange) {
     if (mShell) {
       mShell->EnsureStyleFlush();
     }
 
     if (!mPendingMediaFeatureValuesChange) {
       mPendingMediaFeatureValuesChange.emplace(aChange);
--- a/layout/mathml/nsMathMLmtableFrame.cpp
+++ b/layout/mathml/nsMathMLmtableFrame.cpp
@@ -895,17 +895,18 @@ void nsMathMLmtableFrame::SetInitialChil
 
 void nsMathMLmtableFrame::RestyleTable() {
   // re-sync MathML specific style data that may have changed
   MapAllAttributesIntoCSS(this);
 
   // Explicitly request a re-resolve and reflow in our subtree to pick up any
   // changes
   PresContext()->RestyleManager()->PostRestyleEvent(
-      mContent->AsElement(), eRestyle_Subtree, nsChangeHint_AllReflowHints);
+      mContent->AsElement(), RestyleHint::RestyleSubtree(),
+      nsChangeHint_AllReflowHints);
 }
 
 nscoord nsMathMLmtableFrame::GetColSpacing(int32_t aColIndex) {
   if (mUseCSSSpacing) {
     return nsTableFrame::GetColSpacing(aColIndex);
   }
   if (!mColSpacing.Length()) {
     NS_ERROR("mColSpacing should not be empty");
--- a/layout/style/MediaFeatureChange.h
+++ b/layout/style/MediaFeatureChange.h
@@ -39,24 +39,24 @@ enum class MediaFeatureChangeReason {
   // display-mode changed on the document, thus the display-mode media queries
   // may have changed.
   DisplayModeChange = 1 << 7,
 };
 
 MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(MediaFeatureChangeReason)
 
 struct MediaFeatureChange {
-  nsRestyleHint mRestyleHint;
+  RestyleHint mRestyleHint;
   nsChangeHint mChangeHint;
   MediaFeatureChangeReason mReason;
 
   MOZ_IMPLICIT MediaFeatureChange(MediaFeatureChangeReason aReason)
-      : MediaFeatureChange(nsRestyleHint(0), nsChangeHint(0), aReason) {}
+      : MediaFeatureChange(RestyleHint{0}, nsChangeHint(0), aReason) {}
 
-  MediaFeatureChange(nsRestyleHint aRestyleHint, nsChangeHint aChangeHint,
+  MediaFeatureChange(RestyleHint aRestyleHint, nsChangeHint aChangeHint,
                      MediaFeatureChangeReason aReason)
       : mRestyleHint(aRestyleHint),
         mChangeHint(aChangeHint),
         mReason(aReason) {}
 
   inline MediaFeatureChange& operator|=(const MediaFeatureChange& aOther) {
     mRestyleHint |= aOther.mRestyleHint;
     mChangeHint |= aOther.mChangeHint;
--- a/layout/style/ServoBindings.h
+++ b/layout/style/ServoBindings.h
@@ -805,19 +805,18 @@ void Servo_Initialize(RawGeckoURLExtraDa
 
 // Initialize Servo on a cooperative Quantum DOM thread.
 void Servo_InitializeCooperativeThread();
 
 // Shut down Servo components. Should be called exactly once at shutdown.
 void Servo_Shutdown();
 
 // Restyle and change hints.
-void Servo_NoteExplicitHints(RawGeckoElementBorrowed element,
-                             nsRestyleHint restyle_hint,
-                             nsChangeHint change_hint);
+void Servo_NoteExplicitHints(RawGeckoElementBorrowed, mozilla::RestyleHint,
+                             nsChangeHint);
 
 // We'd like to return `nsChangeHint` here, but bindgen bitfield enums don't
 // work as return values with the Linux 32-bit ABI at the moment because
 // they wrap the value in a struct.
 uint32_t Servo_TakeChangeHint(RawGeckoElementBorrowed element,
                               bool* was_restyled);
 
 ComputedStyleStrong Servo_ResolveStyle(RawGeckoElementBorrowed element,
--- a/layout/style/ServoBindings.toml
+++ b/layout/style/ServoBindings.toml
@@ -56,17 +56,16 @@ hide-types = [
     "nsINode_ErrorResult",
     "nsDOMAttributeMap_ErrorResult",
     # End of JS::Value related types
     # https://github.com/rust-lang/rust-bindgen/issues/1503
     "mozilla::StyleTimingFunction.*",
 ]
 bitfield-enums = [
     "nsChangeHint",
-    "nsRestyleHint",
     "mozilla::OriginFlags",
 ]
 rusty-enums = [
     "nsCompatibility",
     "mozilla::EffectCompositor_CascadeLevel",
     "mozilla::SheetType",
     "mozilla::dom::CallerType",
     "mozilla::dom::IterationCompositeOperation",
@@ -255,17 +254,16 @@ whitelist-types = [
     "nsCursorImage",
     "nsFont",
     "nsAtom",
     "nsDynamicAtom",
     "nsMargin",
     "nsMediaFeature",
     "nsMediaFeatures",
     "nsRect",
-    "nsRestyleHint",
     "nsresult",
     "nsSimpleContentList",
     "nsSize",
     "nsStyleBackground",
     "nsStyleBorder",
     "nsStyleColor",
     "nsStyleColumn",
     "nsStyleContent",
@@ -445,16 +443,17 @@ cbindgen-types = [
     { gecko = "StyleGenericPerspective", servo = "values::generics::box_::Perspective" },
     { gecko = "StyleZIndex", servo = "values::computed::ZIndex" },
     { gecko = "StyleGenericZIndex", servo = "values::generics::position::ZIndex" },
     { gecko = "StyleTransformOrigin", servo = "values::computed::TransformOrigin" },
     { gecko = "StyleGenericBorderRadius", servo = "values::generics::border::BorderRadius" },
     { gecko = "StyleLetterSpacing", servo = "values::computed::text::LetterSpacing" },
     { gecko = "StyleGenericLineHeight", servo = "values::generics::text::LineHeight" },
     { gecko = "StyleContain", servo = "values::computed::Contain" },
+    { gecko = "StyleRestyleHint", servo = "invalidation::element::restyle_hints::RestyleHint" },
 ]
 
 mapped-generic-types = [
     { generic = true, gecko = "mozilla::RustCell", servo = "::std::cell::Cell" },
     { generic = false, gecko = "ServoNodeData", servo = "AtomicRefCell<ElementData>" },
     { generic = false, gecko = "mozilla::ServoWritingMode", servo = "::logical_geometry::WritingMode" },
     { generic = false, gecko = "mozilla::ServoCustomPropertiesMap", servo = "Option<::servo_arc::Arc<::custom_properties::CustomPropertiesMap>>" },
     { generic = false, gecko = "mozilla::ServoRuleNode", servo = "Option<::rule_tree::StrongRuleNode>" },
@@ -514,16 +513,17 @@ structs-types = [
     "mozilla::StyleIntersectionObserverRootMargin",
     "mozilla::StyleComputedFontStretchRange",
     "mozilla::StyleComputedFontStyleDescriptor",
     "mozilla::StyleComputedFontWeightRange",
     "mozilla::StyleFontDisplay",
     "mozilla::StyleUnicodeRange",
     "mozilla::StyleFontLanguageOverride",
     "mozilla::StyleFontFaceSourceListComponent",
+    "mozilla::RestyleHint",
     "gfxFontFeature",
     "mozilla::gfx::FontVariation",
     "mozilla::DeclarationBlockMutationClosure",
     "nsAttrValue",
     "nsIContent",
     "nsINode",
     "Document",
     "Document_DocumentTheme",
@@ -587,17 +587,16 @@ structs-types = [
     "nsCSSValue",
     "nsCSSValueSharedList",
     "nsChangeHint",
     "nsCursorImage",
     "nsFont",
     "nsAtom",
     "nsIURI",
     "nsCompatibility",
-    "nsRestyleHint",
     "nsStyleBackground",
     "nsStyleBorder",
     "nsStyleColor",
     "nsStyleColumn",
     "nsStyleContent",
     "nsStyleContentData",
     "nsStyleContentData_CounterFunction",
     "mozilla::StyleContentType",
--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -174,18 +174,18 @@ void ServoStyleSet::Shutdown() {
 
 void ServoStyleSet::RecordShadowStyleChange(ShadowRoot& aShadowRoot) {
   // TODO(emilio): We could keep track of the actual shadow roots that need
   // their styles recomputed.
   SetStylistXBLStyleSheetsDirty();
 
   // FIXME(emilio): This should be done using stylesheet invalidation instead.
   if (nsPresContext* pc = GetPresContext()) {
-    pc->RestyleManager()->PostRestyleEvent(aShadowRoot.Host(), eRestyle_Subtree,
-                                           nsChangeHint(0));
+    pc->RestyleManager()->PostRestyleEvent(
+        aShadowRoot.Host(), RestyleHint::RestyleSubtree(), nsChangeHint(0));
   }
 }
 
 void ServoStyleSet::InvalidateStyleForDocumentStateChanges(
     EventStates aStatesChanged) {
   MOZ_ASSERT(mDocument);
   MOZ_ASSERT(!aStatesChanged.IsEmpty());
 
@@ -227,17 +227,17 @@ static const MediaFeatureChangeReason kM
     // Zoom changes change the meaning of em units.
     MediaFeatureChangeReason::ZoomChange |
     // A resolution change changes the app-units-per-dev-pixels ratio, which
     // some structs (Border, Outline, Column) store for clamping. We should
     // arguably not do that, maybe doing it on layout directly, to try to avoid
     // relying on the pres context (bug 1418159).
     MediaFeatureChangeReason::ResolutionChange;
 
-nsRestyleHint ServoStyleSet::MediumFeaturesChanged(
+RestyleHint ServoStyleSet::MediumFeaturesChanged(
     MediaFeatureChangeReason aReason) {
   AutoTArray<RawServoAuthorStylesBorrowedMut, 20> nonDocumentStyles;
 
   EnumerateShadowRoots(*mDocument, [&](ShadowRoot& aShadowRoot) {
     if (auto* authorStyles = aShadowRoot.GetServoStyles()) {
       nonDocumentStyles.AppendElement(authorStyles);
     }
   });
@@ -265,26 +265,26 @@ nsRestyleHint ServoStyleSet::MediumFeatu
     SetStylistStyleSheetsDirty();
   }
 
   if (result.mAffectsNonDocumentRules) {
     SetStylistXBLStyleSheetsDirty();
   }
 
   if (rulesChanged) {
-    return eRestyle_Subtree;
+    return RestyleHint::RestyleSubtree();
   }
 
   const bool viewportChanged =
       bool(aReason & MediaFeatureChangeReason::ViewportChange);
   if (result.mUsesViewportUnits && viewportChanged) {
-    return eRestyle_ForceDescendants;
+    return RestyleHint::RecascadeSubtree();
   }
 
-  return nsRestyleHint(0);
+  return RestyleHint{0};
 }
 
 MOZ_DEFINE_MALLOC_SIZE_OF(ServoStyleSetMallocSizeOf)
 MOZ_DEFINE_MALLOC_ENCLOSING_SIZE_OF(ServoStyleSetMallocEnclosingSizeOf)
 
 void ServoStyleSet::AddSizeOfIncludingThis(nsWindowSizes& aSizes) const {
   MallocSizeOf mallocSizeOf = aSizes.mState.mMallocSizeOf;
 
@@ -330,18 +330,18 @@ void ServoStyleSet::AddSizeOfIncludingTh
 void ServoStyleSet::SetAuthorStyleDisabled(bool aStyleDisabled) {
   if (mAuthorStyleDisabled == aStyleDisabled) {
     return;
   }
 
   mAuthorStyleDisabled = aStyleDisabled;
   if (Element* root = mDocument->GetRootElement()) {
     if (nsPresContext* pc = GetPresContext()) {
-      pc->RestyleManager()->PostRestyleEvent(root, eRestyle_Subtree,
-                                             nsChangeHint(0));
+      pc->RestyleManager()->PostRestyleEvent(
+          root, RestyleHint::RestyleSubtree(), nsChangeHint(0));
     }
   }
   Servo_StyleSet_SetAuthorStyleDisabled(mRawSet.get(), mAuthorStyleDisabled);
   // XXX Workaround for the assertion in InvalidateStyleForDocumentStateChanges
   // which is called by nsIPresShell::SetAuthorStyleDisabled via nsIPresShell::
   // RestyleForCSSRuleChanges. It is not really necessary because we don't need
   // to rebuild stylist for this change. But we have bug around this, and we
   // may want to rethink how things should work. See bug 1437785.
--- a/layout/style/ServoStyleSet.h
+++ b/layout/style/ServoStyleSet.h
@@ -111,17 +111,17 @@ class ServoStyleSet {
 
   // Runs style invalidation due to document state changes.
   void InvalidateStyleForDocumentStateChanges(EventStates aStatesChanged);
 
   void RecordShadowStyleChange(dom::ShadowRoot&);
 
   bool StyleSheetsHaveChanged() const { return StylistNeedsUpdate(); }
 
-  nsRestyleHint MediumFeaturesChanged(MediaFeatureChangeReason);
+  RestyleHint MediumFeaturesChanged(MediaFeatureChangeReason);
 
   // Evaluates a given SourceSizeList, returning the optimal viewport width in
   // app units.
   //
   // The SourceSizeList parameter can be null, in which case it will return
   // 100vw.
   inline nscoord EvaluateSourceSizeList(
       const RawServoSourceSizeList* aSourceSizeList) const;
--- a/layout/style/nsHTMLStyleSheet.cpp
+++ b/layout/style/nsHTMLStyleSheet.cpp
@@ -89,27 +89,25 @@ void nsHTMLStyleSheet::Reset() {
 }
 
 nsresult nsHTMLStyleSheet::ImplLinkColorSetter(
     RefPtr<RawServoDeclarationBlock> &aDecl, nscolor aColor) {
   if (!mDocument || !mDocument->GetShell()) {
     return NS_OK;
   }
 
-  RestyleManager *restyle = mDocument->GetPresContext()->RestyleManager();
-
   MOZ_ASSERT(!ServoStyleSet::IsInServoTraversal());
   aDecl = Servo_DeclarationBlock_CreateEmpty().Consume();
   Servo_DeclarationBlock_SetColorValue(aDecl.get(), eCSSProperty_color, aColor);
 
   // Now make sure we restyle any links that might need it.  This
   // shouldn't happen often, so just rebuilding everything is ok.
-  Element *root = mDocument->GetRootElement();
-  if (root) {
-    restyle->PostRestyleEvent(root, eRestyle_Subtree, nsChangeHint(0));
+  if (Element *root = mDocument->GetRootElement()) {
+    RestyleManager *rm = mDocument->GetPresContext()->RestyleManager();
+    rm->PostRestyleEvent(root, RestyleHint::RestyleSubtree(), nsChangeHint(0));
   }
   return NS_OK;
 }
 
 nsresult nsHTMLStyleSheet::SetLinkColor(nscolor aColor) {
   return ImplLinkColorSetter(mServoUnvisitedLinkDecl, aColor);
 }
 
--- a/layout/svg/SVGGeometryFrame.cpp
+++ b/layout/svg/SVGGeometryFrame.cpp
@@ -154,17 +154,17 @@ nsresult SVGGeometryFrame::AttributeChan
   // We don't invalidate for transform changes (the layers code does that).
   // Also note that SVGTransformableElement::GetAttributeChangeHint will
   // return nsChangeHint_UpdateOverflow for "transform" attribute changes
   // and cause DoApplyRenderingChangeToTree to make the SchedulePaint call.
 
   if (aNameSpaceID == kNameSpaceID_None &&
       (static_cast<SVGGeometryElement*>(GetContent())
            ->AttributeDefinesGeometry(aAttribute))) {
-    nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), nsRestyleHint(0),
+    nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     nsSVGUtils::ScheduleReflowSVG(this);
   }
   return NS_OK;
 }
 
 /* virtual */
 void SVGGeometryFrame::DidSetComputedStyle(ComputedStyle* aOldComputedStyle) {
--- a/layout/svg/SVGObserverUtils.cpp
+++ b/layout/svg/SVGObserverUtils.cpp
@@ -317,17 +317,17 @@ void nsSVGRenderingObserverProperty::OnR
 
   if (frame && frame->HasAllStateBits(NS_FRAME_SVG_LAYOUT)) {
     // We need to notify anything that is observing the referencing frame or
     // any of its ancestors that the referencing frame has been invalidated.
     // Since walking the parent chain checking for observers is expensive we
     // do that using a change hint (multiple change hints of the same type are
     // coalesced).
     nsLayoutUtils::PostRestyleEvent(frame->GetContent()->AsElement(),
-                                    nsRestyleHint(0),
+                                    RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
   }
 }
 
 class SVGTextPathObserver final : public nsSVGRenderingObserverProperty {
  public:
   SVGTextPathObserver(URLAndReferrerInfo* aURI, nsIFrame* aFrame,
                       bool aReferenceImage)
@@ -378,17 +378,17 @@ void SVGTextPathObserver::OnRenderingCha
     return;
   }
   mValid = nowValid;
 
   // Repaint asynchronously in case the path frame is being torn down
   nsChangeHint changeHint =
       nsChangeHint(nsChangeHint_RepaintFrame | nsChangeHint_UpdateTextPath);
   frame->PresContext()->RestyleManager()->PostRestyleEvent(
-      frame->GetContent()->AsElement(), nsRestyleHint(0), changeHint);
+      frame->GetContent()->AsElement(), RestyleHint{0}, changeHint);
 }
 
 class SVGMarkerObserver final : public nsSVGRenderingObserverProperty {
  public:
   SVGMarkerObserver(URLAndReferrerInfo* aURI, nsIFrame* aFrame,
                     bool aReferenceImage)
       : nsSVGRenderingObserverProperty(aURI, aFrame, aReferenceImage) {}
 
@@ -409,17 +409,17 @@ void SVGMarkerObserver::OnRenderingChang
   // Don't need to request ReflowFrame if we're being reflowed.
   if (!(frame->GetStateBits() & NS_FRAME_IN_REFLOW)) {
     // XXXjwatt: We need to unify SVG into standard reflow so we can just use
     // nsChangeHint_NeedReflow | nsChangeHint_NeedDirtyReflow here.
     // XXXSDL KILL THIS!!!
     nsSVGUtils::ScheduleReflowSVG(frame);
   }
   frame->PresContext()->RestyleManager()->PostRestyleEvent(
-      frame->GetContent()->AsElement(), nsRestyleHint(0),
+      frame->GetContent()->AsElement(), RestyleHint{0},
       nsChangeHint_RepaintFrame);
 }
 
 class nsSVGPaintingProperty : public nsSVGRenderingObserverProperty {
  public:
   nsSVGPaintingProperty(URLAndReferrerInfo* aURI, nsIFrame* aFrame,
                         bool aReferenceImage)
       : nsSVGRenderingObserverProperty(aURI, aFrame, aReferenceImage) {}
@@ -670,17 +670,17 @@ void SVGFilterObserverListForCSSProp::On
     changeHint |= nsChangeHint_InvalidateRenderingObservers;
   }
 
   // Don't need to request UpdateOverflow if we're being reflowed.
   if (!(frame->GetStateBits() & NS_FRAME_IN_REFLOW)) {
     changeHint |= nsChangeHint_UpdateOverflow;
   }
   frame->PresContext()->RestyleManager()->PostRestyleEvent(
-      frame->GetContent()->AsElement(), nsRestyleHint(0), changeHint);
+      frame->GetContent()->AsElement(), RestyleHint{0}, changeHint);
 }
 
 class SVGFilterObserverListForCanvasContext final
     : public SVGFilterObserverList {
  public:
   SVGFilterObserverListForCanvasContext(CanvasRenderingContext2D* aContext,
                                         Element* aCanvasElement,
                                         nsTArray<nsStyleFilter>& aFilters)
--- a/layout/svg/SVGTextFrame.cpp
+++ b/layout/svg/SVGTextFrame.cpp
@@ -5019,17 +5019,17 @@ void SVGTextFrame::ScheduleReflowSVG() {
 }
 
 void SVGTextFrame::NotifyGlyphMetricsChange() {
   // TODO: perf - adding NS_STATE_SVG_TEXT_CORRESPONDENCE_DIRTY is overly
   // aggressive here.  Ideally we would only set that bit when our descendant
   // frame tree changes (i.e. after frame construction).
   AddStateBits(NS_STATE_SVG_TEXT_CORRESPONDENCE_DIRTY |
                NS_STATE_SVG_POSITIONING_DIRTY);
-  nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), nsRestyleHint(0),
+  nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), RestyleHint{0},
                                   nsChangeHint_InvalidateRenderingObservers);
   ScheduleReflowSVG();
 }
 
 void SVGTextFrame::UpdateGlyphPositioning() {
   nsIFrame* kid = PrincipalChildList().FirstChild();
   if (!kid) {
     return;
--- a/layout/svg/nsSVGContainerFrame.cpp
+++ b/layout/svg/nsSVGContainerFrame.cpp
@@ -183,17 +183,17 @@ void nsSVGDisplayContainerFrame::RemoveF
                                              nsIFrame* aOldFrame) {
   SVGObserverUtils::InvalidateRenderingObservers(aOldFrame);
 
   // nsSVGContainerFrame::RemoveFrame doesn't call down into
   // nsContainerFrame::RemoveFrame, so it doesn't call FrameNeedsReflow. We
   // need to schedule a repaint and schedule an update to our overflow rects.
   SchedulePaint();
   PresContext()->RestyleManager()->PostRestyleEvent(
-      mContent->AsElement(), nsRestyleHint(0), nsChangeHint_UpdateOverflow);
+      mContent->AsElement(), RestyleHint{0}, nsChangeHint_UpdateOverflow);
 
   nsSVGContainerFrame::RemoveFrame(aListID, aOldFrame);
 }
 
 bool nsSVGDisplayContainerFrame::IsSVGTransformed(
     gfx::Matrix* aOwnTransform, gfx::Matrix* aFromParentTransform) const {
   bool foundTransform = false;
 
--- a/layout/svg/nsSVGForeignObjectFrame.cpp
+++ b/layout/svg/nsSVGForeignObjectFrame.cpp
@@ -77,38 +77,38 @@ void nsSVGForeignObjectFrame::DestroyFro
 }
 
 nsresult nsSVGForeignObjectFrame::AttributeChanged(int32_t aNameSpaceID,
                                                    nsAtom* aAttribute,
                                                    int32_t aModType) {
   if (aNameSpaceID == kNameSpaceID_None) {
     if (aAttribute == nsGkAtoms::width || aAttribute == nsGkAtoms::height) {
       nsLayoutUtils::PostRestyleEvent(
-          mContent->AsElement(), nsRestyleHint(0),
+          mContent->AsElement(), RestyleHint{0},
           nsChangeHint_InvalidateRenderingObservers);
       nsSVGUtils::ScheduleReflowSVG(this);
       // XXXjwatt: why mark intrinsic widths dirty? can't we just use eResize?
       RequestReflow(nsIPresShell::eStyleChange);
     } else if (aAttribute == nsGkAtoms::x || aAttribute == nsGkAtoms::y) {
       // make sure our cached transform matrix gets (lazily) updated
       mCanvasTM = nullptr;
       nsLayoutUtils::PostRestyleEvent(
-          mContent->AsElement(), nsRestyleHint(0),
+          mContent->AsElement(), RestyleHint{0},
           nsChangeHint_InvalidateRenderingObservers);
       nsSVGUtils::ScheduleReflowSVG(this);
     } else if (aAttribute == nsGkAtoms::transform) {
       // We don't invalidate for transform changes (the layers code does that).
       // Also note that SVGTransformableElement::GetAttributeChangeHint will
       // return nsChangeHint_UpdateOverflow for "transform" attribute changes
       // and cause DoApplyRenderingChangeToTree to make the SchedulePaint call.
       mCanvasTM = nullptr;
     } else if (aAttribute == nsGkAtoms::viewBox ||
                aAttribute == nsGkAtoms::preserveAspectRatio) {
       nsLayoutUtils::PostRestyleEvent(
-          mContent->AsElement(), nsRestyleHint(0),
+          mContent->AsElement(), RestyleHint{0},
           nsChangeHint_InvalidateRenderingObservers);
     }
   }
 
   return NS_OK;
 }
 
 void nsSVGForeignObjectFrame::Reflow(nsPresContext* aPresContext,
--- a/layout/svg/nsSVGImageFrame.cpp
+++ b/layout/svg/nsSVGImageFrame.cpp
@@ -115,17 +115,17 @@ void nsSVGImageFrame::DestroyFrom(nsIFra
 
 nsresult nsSVGImageFrame::AttributeChanged(int32_t aNameSpaceID,
                                            nsAtom* aAttribute,
                                            int32_t aModType) {
   if (aNameSpaceID == kNameSpaceID_None) {
     if (aAttribute == nsGkAtoms::x || aAttribute == nsGkAtoms::y ||
         aAttribute == nsGkAtoms::width || aAttribute == nsGkAtoms::height) {
       nsLayoutUtils::PostRestyleEvent(
-          mContent->AsElement(), nsRestyleHint(0),
+          mContent->AsElement(), RestyleHint{0},
           nsChangeHint_InvalidateRenderingObservers);
       nsSVGUtils::ScheduleReflowSVG(this);
       return NS_OK;
     } else if (aAttribute == nsGkAtoms::preserveAspectRatio) {
       // We don't paint the content of the image using display lists, therefore
       // we have to invalidate for this children-only transform changes since
       // there is no layer tree to notice that the transform changed and
       // recomposite.
@@ -508,39 +508,39 @@ nsSVGImageListener::Notify(imgIRequest* 
                            const nsIntRect* aData) {
   if (!mFrame) {
     return NS_ERROR_FAILURE;
   }
 
   if (aType == imgINotificationObserver::LOAD_COMPLETE) {
     mFrame->InvalidateFrame();
     nsLayoutUtils::PostRestyleEvent(mFrame->GetContent()->AsElement(),
-                                    nsRestyleHint(0),
+                                    RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     nsSVGUtils::ScheduleReflowSVG(mFrame);
   }
 
   if (aType == imgINotificationObserver::FRAME_UPDATE) {
     // No new dimensions, so we don't need to call
     // nsSVGUtils::InvalidateAndScheduleBoundsUpdate.
     nsLayoutUtils::PostRestyleEvent(mFrame->GetContent()->AsElement(),
-                                    nsRestyleHint(0),
+                                    RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     mFrame->InvalidateFrame();
   }
 
   if (aType == imgINotificationObserver::SIZE_AVAILABLE) {
     // Called once the resource's dimensions have been obtained.
     nsCOMPtr<imgIContainer> image;
     aRequest->GetImage(getter_AddRefs(image));
     if (image) {
       image->SetAnimationMode(mFrame->PresContext()->ImageAnimationMode());
       mFrame->mImageContainer = image.forget();
     }
     mFrame->InvalidateFrame();
     nsLayoutUtils::PostRestyleEvent(mFrame->GetContent()->AsElement(),
-                                    nsRestyleHint(0),
+                                    RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     nsSVGUtils::ScheduleReflowSVG(mFrame);
   }
 
   return NS_OK;
 }
--- a/layout/svg/nsSVGUseFrame.cpp
+++ b/layout/svg/nsSVGUseFrame.cpp
@@ -47,39 +47,39 @@ nsresult nsSVGUseFrame::AttributeChanged
   }
 
   return nsSVGGFrame::AttributeChanged(aNamespaceID, aAttribute, aModType);
 }
 
 void nsSVGUseFrame::PositionAttributeChanged() {
   // make sure our cached transform matrix gets (lazily) updated
   mCanvasTM = nullptr;
-  nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), nsRestyleHint(0),
+  nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), RestyleHint{0},
                                   nsChangeHint_InvalidateRenderingObservers);
   nsSVGUtils::ScheduleReflowSVG(this);
   nsSVGUtils::NotifyChildrenOfSVGChange(this, TRANSFORM_CHANGED);
 }
 
 void nsSVGUseFrame::DimensionAttributeChanged(bool aHadValidDimensions,
                                               bool aAttributeIsUsed) {
   bool invalidate = aAttributeIsUsed;
   if (mHasValidDimensions != aHadValidDimensions) {
     mHasValidDimensions = !mHasValidDimensions;
     invalidate = true;
   }
 
   if (invalidate) {
-    nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), nsRestyleHint(0),
+    nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), RestyleHint{0},
                                     nsChangeHint_InvalidateRenderingObservers);
     nsSVGUtils::ScheduleReflowSVG(this);
   }
 }
 
 void nsSVGUseFrame::HrefChanged() {
-  nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), nsRestyleHint(0),
+  nsLayoutUtils::PostRestyleEvent(GetContent()->AsElement(), RestyleHint{0},
                                   nsChangeHint_InvalidateRenderingObservers);
   nsSVGUtils::ScheduleReflowSVG(this);
 }
 
 //----------------------------------------------------------------------
 // nsSVGDisplayableFrame methods
 
 void nsSVGUseFrame::ReflowSVG() {
--- a/layout/svg/nsSVGViewportFrame.cpp
+++ b/layout/svg/nsSVGViewportFrame.cpp
@@ -163,17 +163,17 @@ nsresult nsSVGViewportFrame::AttributeCh
                                               int32_t aModType) {
   if (aNameSpaceID == kNameSpaceID_None &&
       !(GetStateBits() & NS_FRAME_IS_NONDISPLAY)) {
     SVGViewportElement* content =
         static_cast<SVGViewportElement*>(GetContent());
 
     if (aAttribute == nsGkAtoms::width || aAttribute == nsGkAtoms::height) {
       nsLayoutUtils::PostRestyleEvent(
-          mContent->AsElement(), nsRestyleHint(0),
+          mContent->AsElement(), RestyleHint{0},
           nsChangeHint_InvalidateRenderingObservers);
       nsSVGUtils::ScheduleReflowSVG(this);
 
       if (content->HasViewBoxOrSyntheticViewBox()) {
         // make sure our cached transform matrix gets (lazily) updated
         mCanvasTM = nullptr;
         content->ChildrenOnlyTransformChanged();
         nsSVGUtils::NotifyChildrenOfSVGChange(this, TRANSFORM_CHANGED);
@@ -200,17 +200,17 @@ nsresult nsSVGViewportFrame::AttributeCh
 
       // We don't invalidate for transform changes (the layers code does that).
       // Also note that SVGTransformableElement::GetAttributeChangeHint will
       // return nsChangeHint_UpdateOverflow for "transform" attribute changes
       // and cause DoApplyRenderingChangeToTree to make the SchedulePaint call.
 
       if (aAttribute == nsGkAtoms::x || aAttribute == nsGkAtoms::y) {
         nsLayoutUtils::PostRestyleEvent(
-            mContent->AsElement(), nsRestyleHint(0),
+            mContent->AsElement(), RestyleHint{0},
             nsChangeHint_InvalidateRenderingObservers);
         nsSVGUtils::ScheduleReflowSVG(this);
       } else if (aAttribute == nsGkAtoms::viewBox ||
                  (aAttribute == nsGkAtoms::preserveAspectRatio &&
                   content->HasViewBoxOrSyntheticViewBox())) {
         content->ChildrenOnlyTransformChanged();
         // SchedulePaint sets a global state flag so we only need to call it
         // once (on ourself is fine), not once on each child (despite bug
--- a/layout/tables/nsTableCellFrame.cpp
+++ b/layout/tables/nsTableCellFrame.cpp
@@ -199,17 +199,17 @@ nsresult nsTableCellFrame::AttributeChan
   // BasicTableLayoutStrategy
   if (aNameSpaceID == kNameSpaceID_None && aAttribute == nsGkAtoms::nowrap &&
       PresContext()->CompatibilityMode() == eCompatibility_NavQuirks) {
     PresShell()->FrameNeedsReflow(this, nsIPresShell::eTreeChange,
                                   NS_FRAME_IS_DIRTY);
   }
 
   if (aAttribute == nsGkAtoms::rowspan || aAttribute == nsGkAtoms::colspan) {
-    nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), nsRestyleHint(0),
+    nsLayoutUtils::PostRestyleEvent(mContent->AsElement(), RestyleHint{0},
                                     nsChangeHint_UpdateTableCellSpans);
   }
   return NS_OK;
 }
 
 /* virtual */
 void nsTableCellFrame::DidSetComputedStyle(ComputedStyle* aOldComputedStyle) {
   nsContainerFrame::DidSetComputedStyle(aOldComputedStyle);
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -888,16 +888,17 @@ public class BrowserApp extends GeckoApp
     private boolean handleSearchWidgetIntent(Intent intent) {
         SearchWidgetProvider.InputType input = getWidgetInputType(intent);
 
         if (input == null) {
             return false;
         }
 
         MmaDelegate.track(INTERACT_WITH_SEARCH_WIDGET_URL_AREA);
+        Telemetry.sendUIEvent(TelemetryContract.Event.SEARCH, TelemetryContract.Method.WIDGET);
 
         switch (input) {
             case TEXT:
                 handleTabEditingMode(false);
                 return true;
             case VOICE:
                 handleTabEditingMode(true);
                 return true;
--- a/mobile/android/docs/uitelemetry.rst
+++ b/mobile/android/docs/uitelemetry.rst
@@ -193,16 +193,19 @@ Events
   Sent when the user removes a search engine.
 
 ``search.restore.1``
   Sent when the user restores the search engine configuration back to the built-in configuration.
 
 ``search.setdefault.1``
   Sent when the user sets a search engine to be the default.
 
+``search.widget.1``
+  Sent when the user initiates a search through the widget.
+
 ``share.1``
   Sharing content.
 
 ``show.1``
   Sent when a contextual UI element is shown to the user.
 
 ``undo.1``
   Sent when performing an undo-style action, like undoing a closed tab.
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/TelemetryContract.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/TelemetryContract.java
@@ -83,16 +83,19 @@ public interface TelemetryContract {
         SEARCH_REMOVE("search.remove.1"),
 
         // Restore default search engines.
         SEARCH_RESTORE_DEFAULTS("search.restoredefaults.1"),
 
         // Set default search engine.
         SEARCH_SET_DEFAULT("search.setdefault.1"),
 
+        // Searches initiated from the widget.
+        SEARCH_WIDGET("search.widget.1"),
+
         // Sharing content.
         SHARE("share.1"),
 
         // Show a UI element.
         SHOW("show.1"),
 
         // Undoing a user action.
         // Note: Only used in JavaScript for now, but here for completeness.
--- a/modules/libjar/nsJARChannel.cpp
+++ b/modules/libjar/nsJARChannel.cpp
@@ -674,16 +674,17 @@ nsJARChannel::SetOwner(nsISupports *aOwn
 NS_IMETHODIMP
 nsJARChannel::GetLoadInfo(nsILoadInfo **aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsJARChannel::SetLoadInfo(nsILoadInfo *aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsJARChannel::GetNotificationCallbacks(nsIInterfaceRequestor **aCallbacks) {
   NS_IF_ADDREF(*aCallbacks = mCallbacks);
   return NS_OK;
--- a/netwerk/base/nsBaseChannel.cpp
+++ b/netwerk/base/nsBaseChannel.cpp
@@ -437,16 +437,17 @@ nsBaseChannel::GetOwner(nsISupports **aO
 NS_IMETHODIMP
 nsBaseChannel::SetOwner(nsISupports *aOwner) {
   mOwner = aOwner;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsBaseChannel::SetLoadInfo(nsILoadInfo *aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
 
   // Need to update |mNeckoTarget| when load info has changed.
   SetupNeckoTarget();
   return NS_OK;
 }
 
 NS_IMETHODIMP
--- a/netwerk/cookie/CookieSettings.cpp
+++ b/netwerk/cookie/CookieSettings.cpp
@@ -73,17 +73,17 @@ already_AddRefed<nsICookieSettings> Cook
   MOZ_ASSERT(NS_IsMainThread());
 
   RefPtr<CookieSettings> cookieSettings = new CookieSettings(
       StaticPrefs::network_cookie_cookieBehavior(), eProgressive);
   return cookieSettings.forget();
 }
 
 CookieSettings::CookieSettings(uint32_t aCookieBehavior, State aState)
-    : mCookieBehavior(aCookieBehavior), mState(aState) {
+    : mCookieBehavior(aCookieBehavior), mState(aState), mToBeMerged(false) {
   MOZ_ASSERT(NS_IsMainThread());
 }
 
 CookieSettings::~CookieSettings() {
   if (!NS_IsMainThread() && !mCookiePermissions.IsEmpty()) {
     nsCOMPtr<nsIEventTarget> systemGroupEventTarget =
         mozilla::SystemGroup::EventTargetFor(mozilla::TaskCategory::Other);
     MOZ_ASSERT(systemGroupEventTarget);
@@ -144,16 +144,17 @@ CookieSettings::CookiePermission(nsIPrin
   // race conditions.
 
   nsCOMPtr<nsIPermission> permission = nsPermission::Create(
       aPrincipal, NS_LITERAL_CSTRING("cookie"), *aCookiePermission, 0, 0);
   if (permission) {
     mCookiePermissions.AppendElement(permission);
   }
 
+  mToBeMerged = true;
   return NS_OK;
 }
 
 void CookieSettings::Serialize(CookieSettingsArgs& aData) {
   MOZ_ASSERT(NS_IsMainThread());
 
   aData.isFixed() = mState == eFixed;
   aData.cookieBehavior() = mCookieBehavior;
@@ -175,16 +176,18 @@ void CookieSettings::Serialize(CookieSet
     rv = permission->GetCapability(&cookiePermission);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       continue;
     }
 
     aData.cookiePermissions().AppendElement(
         CookiePermissionData(principalInfo, cookiePermission));
   }
+
+  mToBeMerged = false;
 }
 
 /* static */ void CookieSettings::Deserialize(
     const CookieSettingsArgs& aData, nsICookieSettings** aCookieSettings) {
   MOZ_ASSERT(NS_IsMainThread());
 
   CookiePermissionList list;
   for (const CookiePermissionData& data : aData.cookiePermissions()) {
--- a/netwerk/cookie/CookieSettings.h
+++ b/netwerk/cookie/CookieSettings.h
@@ -115,16 +115,21 @@ class CookieSettings final : public nsIC
 
   void Serialize(CookieSettingsArgs& aData);
 
   static void Deserialize(const CookieSettingsArgs& aData,
                           nsICookieSettings** aCookieSettings);
 
   void Merge(const CookieSettingsArgs& aData);
 
+  // We don't want to send this object from parent to child process if there are
+  // no reasons. HasBeenChanged() returns true if the object has changed its
+  // internal state and it must be sent beck to the content process.
+  bool HasBeenChanged() const { return mToBeMerged; }
+
  private:
   enum State {
     // No cookie permissions are allowed to be stored in this object.
     eFixed,
 
     // Cookie permissions can be stored in case they are unknown when they are
     // asked or when they are sent from the parent process.
     eProgressive,
@@ -132,14 +137,16 @@ class CookieSettings final : public nsIC
 
   CookieSettings(uint32_t aCookieBehavior, State aState);
   ~CookieSettings();
 
   uint32_t mCookieBehavior;
   CookiePermissionList mCookiePermissions;
 
   State mState;
+
+  bool mToBeMerged;
 };
 
 }  // namespace net
 }  // namespace mozilla
 
 #endif  // mozilla_net_CookieSettings_h
--- a/netwerk/protocol/http/HttpBaseChannel.cpp
+++ b/netwerk/protocol/http/HttpBaseChannel.cpp
@@ -553,16 +553,17 @@ HttpBaseChannel::GetOwner(nsISupports** 
 NS_IMETHODIMP
 HttpBaseChannel::SetOwner(nsISupports* aOwner) {
   mOwner = aOwner;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 HttpBaseChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 HttpBaseChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
--- a/netwerk/protocol/http/TrackingDummyChannel.cpp
+++ b/netwerk/protocol/http/TrackingDummyChannel.cpp
@@ -231,16 +231,17 @@ TrackingDummyChannel::GetContentDisposit
 NS_IMETHODIMP
 TrackingDummyChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 TrackingDummyChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 //-----------------------------------------------------------------------------
 // TrackingDummyChannel::nsIRequest
 //-----------------------------------------------------------------------------
 
--- a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp
+++ b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp
@@ -528,17 +528,17 @@ nsViewSourceChannel::GetLoadInfo(nsILoad
   NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE);
 
   return mChannel->GetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsViewSourceChannel::SetLoadInfo(nsILoadInfo *aLoadInfo) {
   NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE);
-
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   return mChannel->SetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsViewSourceChannel::GetIsDocument(bool *aIsDocument) {
   NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE);
 
   return mChannel->GetIsDocument(aIsDocument);
--- a/netwerk/protocol/websocket/BaseWebSocketChannel.cpp
+++ b/netwerk/protocol/websocket/BaseWebSocketChannel.cpp
@@ -116,16 +116,17 @@ NS_IMETHODIMP
 BaseWebSocketChannel::SetLoadGroup(nsILoadGroup *aLoadGroup) {
   LOG(("BaseWebSocketChannel::SetLoadGroup() %p\n", this));
   mLoadGroup = aLoadGroup;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 BaseWebSocketChannel::SetLoadInfo(nsILoadInfo *aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   mLoadInfo = aLoadInfo;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 BaseWebSocketChannel::GetLoadInfo(nsILoadInfo **aLoadInfo) {
   NS_IF_ADDREF(*aLoadInfo = mLoadInfo);
   return NS_OK;
--- a/netwerk/streamconv/converters/nsMultiMixedConv.cpp
+++ b/netwerk/streamconv/converters/nsMultiMixedConv.cpp
@@ -230,16 +230,17 @@ nsPartChannel::SetOwner(nsISupports *aOw
 
 NS_IMETHODIMP
 nsPartChannel::GetLoadInfo(nsILoadInfo **aLoadInfo) {
   return mMultipartChannel->GetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsPartChannel::SetLoadInfo(nsILoadInfo *aLoadInfo) {
+  MOZ_RELEASE_ASSERT(aLoadInfo, "loadinfo can't be null");
   return mMultipartChannel->SetLoadInfo(aLoadInfo);
 }
 
 NS_IMETHODIMP
 nsPartChannel::GetNotificationCallbacks(nsIInterfaceRequestor **aCallbacks) {
   return mMultipartChannel->GetNotificationCallbacks(aCallbacks);
 }
 
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1146,9 +1146,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 484;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1560774076545000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1561033299756000);
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,42 +3,43 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.                */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1563193272486000);
+const PRTime gPreloadListExpirationTime = INT64_C(1563452494928000);
 %%
 0-1.party, 1
 000books.net, 1
 00100010.net, 1
 0010100.net, 1
 00120012.net, 1
 00130013.net, 1
 00140014.net, 1
 00150015.net, 1
 00160016.net, 1
 00180018.net, 1
 00190019.net, 1
 00220022.net, 1
 00330033.net, 1
+00334.vip, 1
 003971.com, 1
 00440044.net, 1
 00550055.net, 1
 00660066.net, 1
-007-preisvergleich.de, 1
 00770077.net, 1
 007kf.com, 1
 008207.com, 1
 008251.com, 1
 008253.com, 1
 008271.com, 1
+0086286.com, 1
 00880088.net, 1
 00990099.net, 1
 009p.com, 1
 00dani.me, 1
 00f.net, 1
 00wbf.com, 1
 0100dev.com, 0
 0100dev.nl, 0
@@ -58,16 +59,17 @@ 022507.com, 1
 022561.com, 1
 022571.com, 1
 022601.com, 1
 022609.com, 1
 022610.com, 1
 02327.net, 1
 02375.net, 1
 023sec.com, 1
+025ks.com, 1
 02607.com, 1
 026122.com, 1
 02638.net, 1
 029inno.com, 1
 02smh.com, 1
 03-09-2016.wedding, 1
 03012.net, 1
 03018.net, 1
@@ -98,16 +100,17 @@ 056976.com, 1
 056985.com, 1
 0573wk.com, 1
 057587.com, 1
 057596.com, 1
 058509.com, 1
 058596.com, 1
 058679.com, 1
 059957.com, 1
+060258.com, 1
 060757.com, 1
 060795.com, 1
 060796.com, 1
 060798.com, 1
 0607p.com, 1
 060870.com, 1
 060875.com, 1
 06091994.xyz, 1
@@ -130,16 +133,17 @@ 069657.com, 1
 069676.com, 1
 06se.com, 1
 070709.net, 1
 0708p.com, 1
 070968.com, 1
 070986.com, 1
 0720p.com, 1
 0736ks.com, 1
+0768ks.com, 1
 077768.net, 1
 0788yh.com, 1
 0792112.com, 1
 079606.com, 1
 079607.com, 1
 0798rcw.com, 1
 0809yh.com, 1
 081115.com, 1
@@ -216,16 +220,17 @@ 0x00ff00ff.com, 1
 0x17.de, 1
 0x378.net, 1
 0x41.us, 1
 0x48.pw, 1
 0x52.net, 1
 0x52.org, 1
 0x7d.com, 1
 0x7fffffff.net, 1
+0x80.org, 1
 0x90.in, 1
 0x90.io, 1
 0xaa55.me, 1
 0xabe.io, 1
 0xacab.org, 1
 0xaf.tk, 1
 0xda.de, 1
 0xdc.io, 0
@@ -234,16 +239,19 @@ 0xee.eu, 1
 0xf00.ch, 1
 0xfc.de, 1
 0xff.se, 1
 0xn.de, 1
 0yen.org, 1
 1-2-3bounce.co.uk, 1
 100-downloads.com, 1
 10000v.ru, 1
+1000cp4.cc, 1
+1000cp5.cc, 1
+1000cp6.cc, 1
 1000minds.com, 1
 1000serien.com, 1
 1001.best, 1
 1001carats.fr, 1
 1001firms.com, 1
 1001kartini.com, 1
 1001kerstpakketten.com, 0
 1001mv.com, 1
@@ -251,16 +259,17 @@ 10086.nl, 1
 10086.ru, 1
 100k.eu, 1
 100kredite.de, 1
 100lat.pl, 1
 100mani.it, 1
 100onrainkajino.com, 1
 100pounds.co.uk, 1
 101.qa, 1
+101010.pl, 1
 1011100.com, 1
 101sauna.kz, 1
 101sauna.ru, 1
 1041263497.rsc.cdn77.org, 1
 10414.org, 1
 10430.net, 1
 10435.net, 1
 10436.net, 1
@@ -436,16 +445,17 @@ 18f.gsa.gov, 0
 191090.com, 1
 1911trust.com, 1
 1912x.com, 1
 192168ll.repair, 1
 1921958389.rsc.cdn77.org, 1
 192433.com, 1
 1972969867.rsc.cdn77.org, 1
 1981612088.rsc.cdn77.org, 1
+198ks.net, 1
 19area.cn, 1
 19hundert84.de, 1
 19qq.vip, 1
 1a-diamantscheiben.de, 1
 1a-werkstattgeraete.de, 1
 1ab-machinery.com, 1
 1android.de, 1
 1b1.pl, 1
@@ -583,17 +593,16 @@ 2600edinburgh.org, 1
 2600hq.com, 1
 260887.com, 1
 263.info, 1
 2718282.net, 1
 27728522.com, 1
 28-industries.com, 1
 281180.de, 1
 2858958.com, 1
-286.com, 1
 288game.net, 1
 28peaks.com, 1
 28spots.net, 1
 291167.xyz, 1
 2912.nl, 1
 29227.com, 1
 2948.ca, 1
 297computers.com, 1
@@ -749,16 +758,17 @@ 356433.com, 1
 357maelai.co, 1
 360-staffing.com, 1
 360live.fr, 1
 360rail.nl, 1
 360vrs.com, 1
 360woodworking.com, 1
 361171.com, 1
 361173.com, 1
+361183.com, 1
 364553.com, 1
 365365.com, 1
 365beautyworld.com, 1
 365daysreview.com, 1
 365healthworld.com, 1
 365propertybuyer.co.uk, 0
 365skulls.com, 1
 367553.com, 1
@@ -884,32 +894,34 @@ 41844.de, 1
 41studio.com, 1
 41where.com, 1
 420java.com, 1
 42ch.com, 1
 42day.info, 1
 42l.fr, 1
 42t.ru, 1
 439050.com, 1
+43klive.com, 1
 440887.com, 1
 440hz.radio, 1
 441jj.com, 0
 441jz.com, 0
 442887.com, 1
 442jz.com, 0
 443887.com, 1
 443jz.com, 0
 444887.com, 1
 445887.com, 1
 44sec.com, 1
 451.ooo, 1
 4553.com, 1
 4553s.com, 1
 4553vip.com, 1
 46fa.com, 1
+47.rs, 1
 4706666.com, 1
 4716666.com, 1
 4726666.com, 1
 4736666.com, 1
 4756666.com, 1
 4786666.com, 1
 47essays.com, 1
 47tech.com, 1
@@ -923,16 +935,17 @@ 4baby.com.br, 1
 4c-haircare.com, 1
 4d2.xyz, 1
 4dbygg.se, 1
 4eyes.ch, 1
 4fit.ro, 1
 4flex.info, 1
 4freepress.com, 1
 4g-server.eu, 0
+4gnews.pt, 1
 4hmediaproductions.com, 1
 4host.ch, 1
 4kprojektory.cz, 1
 4loc.us, 1
 4mm.org, 1
 4o5.xyz, 1
 4plebs.moe, 1
 4project.co.il, 1
@@ -1024,16 +1037,17 @@ 545922.com, 1
 546802.com, 1
 54below.com, 1
 5518k3.com, 1
 5533445.com, 1
 5555yh.com, 1
 555w.org, 1
 555wfcp.com, 1
 555xl.com, 1
+556185.com, 1
 55639.com, 1
 55797.com, 1
 566380.com, 0
 56877.com, 1
 575380.com, 0
 576422.com, 1
 578380.com, 0
 579422.com, 1
@@ -1199,37 +1213,42 @@ 69759.com, 1
 698da.com, 1
 69928.com, 1
 6997896.com, 1
 69butterfly.com, 1
 69fps.gg, 1
 69games.xxx, 1
 69mentor.com, 1
 69wasted.net, 1
+6boy.net, 1
 6bwcp.com, 1
 6dec.gc.ca, 1
 6hzx.com, 1
 6ird.com, 1
 6lo.zgora.pl, 1
 6t-montjoye.org, 1
 700.az, 1
+701135.com, 1
 701605.com, 1
 704233.com, 1
 7045.com, 1
 704533.com, 1
 7045h.com, 1
 704633.com, 1
+705994.com, 1
 7080997.com, 1
 709129.com, 1
 712433.com, 1
 713433.com, 1
 714133.com, 1
 714533.com, 1
 714633.com, 1
 715433.com, 1
+716176.com, 1
+718113.com, 1
 7183.org, 1
 718433.com, 1
 719433.com, 1
 721172.com, 1
 724233.com, 1
 724go.com, 1
 7261696e626f77.net, 1
 726433.com, 1
@@ -1278,16 +1297,17 @@ 7nw.eu, 1
 7plus.com.au, 1
 7proxies.com, 1
 7qly.com, 1
 7sons.de, 1
 7thcircledesigns.com, 1
 7trade8.com, 1
 7x24servis.com, 1
 8003pay.com, 1
+803001.com, 1
 804322.com, 1
 8080883.com, 1
 8080889.com, 1
 80883.cc, 1
 80887.cc, 1
 808phone.net, 1
 809088.cc, 1
 809422.com, 1
@@ -1305,17 +1325,16 @@ 8211p.com, 1
 8212p.com, 1
 8213p.com, 1
 8214p.com, 1
 8215p.com, 1
 8216p.com, 1
 8349822.com, 1
 848jz.com, 1
 850226.com, 1
-8522.com, 1
 8522club.com, 1
 8522hk.com, 1
 8522ph.com, 1
 8522top.com, 1
 8522tw.com, 1
 8522usa.com, 1
 85383838.com, 1
 8560.be, 1
@@ -1455,17 +1474,16 @@ 8917818.com, 1
 8917818.net, 1
 8951889.com, 1
 8951889.net, 1
 8989k3.com, 1
 8992088.com, 1
 8992088.net, 1
 89he.com, 1
 8ack.de, 1
-8ackprotect.com, 1
 8ballbombom.uk, 1
 8balls.nl, 1
 8da188.com, 1
 8da2018.com, 1
 8da222.com, 1
 8da88.com, 1
 8da999.com, 1
 8dabet.com, 1
@@ -1803,21 +1821,21 @@ ac-admin.pl, 1
 ac-elektro.com.ua, 1
 ac-epmservices.com, 1
 ac-town.com, 1
 ac.milan.it, 1
 ac0g.dyndns.org, 1
 aca-creative.co.uk, 1
 academiadebomberosonline.com, 1
 academicexperts.us, 1
-academichealthscience.net, 1
 academie-de-police.ch, 1
 academkin.com, 1
 academytv.com.au, 1
 acaeum.com, 1
+acandroid.top, 1
 acaonegocios.com.br, 1
 acaptureservices.com, 1
 acara-yoga.de, 1
 acareer.in, 1
 acat.io, 1
 acbrussels-used.be, 1
 accbay.com, 1
 accelaway.com, 1
@@ -1892,17 +1910,16 @@ achromatisch.de, 1
 achterblog.de, 1
 achterhoekseveiligheidsbeurs.nl, 1
 achterstieg.dedyn.io, 1
 achtzehn.eu, 1
 achtzehnterachter.de, 1
 achtzig20.de, 1
 achwo.de, 1
 acid.ninja, 1
-acidbin.co, 1
 aciety.com, 1
 aciksite.com, 1
 acinq.co, 1
 ackermann.ch, 1
 ackis.duckdns.org, 0
 acklandstainless.com.au, 1
 acl.gov, 1
 acl.ink, 1
@@ -2105,16 +2122,17 @@ adm-sarov.ru, 1
 adme.co.il, 1
 admin-serv.net, 1
 admin.casa, 1
 admin.fedoraproject.org, 1
 admin.google.com, 1
 admin.stg.fedoraproject.org, 1
 admind.at, 1
 adminforge.de, 1
+administracionessaez.es, 1
 administratiekantoorblom.nl, 1
 administrator.de, 1
 administratorserwera.pl, 1
 adminless.ovh, 1
 adminlinux.pl, 1
 admino.cz, 1
 admins.tech, 1
 adminton.eu, 1
@@ -2144,16 +2162,17 @@ adorno-gymnasium.de, 1
 adoucisseur.shop, 1
 adquisitio.co.uk, 1
 adquisitio.es, 1
 adquisitio.fr, 1
 adquisitio.it, 1
 adr.gov, 1
 adra.com, 1
 adrafinil.wiki, 1
+adrenalin.od.ua, 1
 adrenaline-gaming.ru, 1
 adresults.com, 1
 adresults.nl, 1
 adrianajewelry.my, 1
 adrianbechtold.de, 1
 adriancitu.com, 1
 adriancostin.ro, 1
 adrianjensen.com, 1
@@ -2162,32 +2181,34 @@ adrianobarbosa.xyz, 1
 adrienkohlbecker.com, 1
 adriennesmiles.com, 1
 adrinet.tk, 1
 adrup.com, 1
 adsamcik.com, 1
 adsbouncycastles.co.uk, 1
 adsbtc.org, 1
 adsl2meg.fr, 1
+adswoo.com, 1
 adtelligent.com, 1
+adtgroup.com, 1
 adult.properties, 1
 adultbizz.eu, 1
 adurra.com, 1
 aduvi.de, 1
 adv.cr, 1
 advaithbot.com, 1
 advaithnikhi.ml, 1
 advaithnikhi.tk, 1
 advance.hr, 1
 advanced-fleet-services.com, 1
 advanced-online.eu, 1
 advanced-scribes.com, 1
 advanced.info, 1
 advanceddieselspokane.com, 1
-advanceddisposables.co.uk, 1
+advanceddisposables.co.uk, 0
 advancedoneroofing.com, 1
 advancedprotectionkey.com, 1
 advancedprotectionsecuritykey.com, 1
 advancedseotool.it, 1
 advancedsurgicalconsultantsllc.com, 1
 advancedweb.hu, 1
 advancedwriters.com, 1
 advanceworx.com, 1
@@ -2218,17 +2239,17 @@ adviserplus.com, 1
 advocate-europe.eu, 1
 advocaten-avocats.be, 1
 advocatenalkmaar.org, 1
 advocator.ca, 1
 advocoeurdehaan.nl, 1
 advogatech.com.br, 1
 advokat-romanov.com, 1
 advtran.com, 1
-adware.pl, 1
+adware.pl, 0
 adwokatkosterka.pl, 1
 adwokatzdunek.pl, 1
 adws.io, 1
 adxperience.com, 1
 adzie.xyz, 1
 adzuna.at, 1
 adzuna.ca, 1
 adzuna.co.nz, 1
@@ -2280,16 +2301,17 @@ aeronautix.com, 1
 aeronote.net, 1
 aeropole.de, 1
 aeropole.eu, 1
 aerosimexperience.com, 1
 aerospace-schools.com, 1
 aerotechcoatings.com, 1
 aertel.ie, 1
 aestheticdr.org, 1
+aestheticsplus.xyz, 1
 aesthetx.com, 1
 aestore.by, 1
 aesym.de, 1
 aeternus.tech, 1
 aetherc0r3.eu, 1
 aethonan.pro, 1
 aetoscg.com, 1
 aetoscg.com.au, 1
@@ -2344,17 +2366,16 @@ afp548.com, 1
 afri.cc, 1
 africa.dating, 1
 african-bay.de, 1
 africanexponent.com, 1
 africanimpact.com, 1
 africankitchen.gallery, 1
 africantourer.com, 1
 afrikarl.de, 1
-afrishade.com, 1
 afrodigital.uk, 1
 afs-asso.org, 1
 afscheidsportret.nl, 1
 aftab-alam.de, 1
 after.digital, 1
 afterdwi.info, 1
 afterhate.fr, 1
 afterskool.eu, 1
@@ -2488,16 +2509,17 @@ ai1989.com, 1
 aia.de, 1
 aianipid.ee, 1
 aiasesoriainmobiliaria.com, 1
 aibaoyou.com, 1
 aibenzi.com, 1
 aibiying.com, 1
 aibsoftware.mx, 1
 aicial.co.uk, 1
+aicv.club, 1
 aid-web.ch, 1
 aidanapple.com, 1
 aidanmitchell.co.uk, 1
 aidanmitchell.uk, 1
 aidanmontare.net, 1
 aidanpr.com, 1
 aidanpr.net, 1
 aidarikako.com, 1
@@ -2672,16 +2694,17 @@ aistrope.com, 1
 ait.com.ar, 1
 aiticon.com, 1
 aitosoftware.com, 1
 aiutodomestico.ch, 1
 aivan.ai, 1
 aivd.lol, 1
 aivene.com, 1
 aiwdirect.com, 1
+aiwosq.cn, 1
 aizxxs.com, 1
 aizxxs.net, 1
 ajapaik.ee, 1
 ajarope.com, 1
 ajaxed.net, 1
 ajbouncycastles.co.uk, 1
 ajces.com, 1
 ajdiaz.me, 1
@@ -2925,16 +2948,17 @@ alibiloungelv.com, 1
 alibip.de, 1
 alice-noutore.com, 1
 alice.tw, 1
 alicemaywebdesign.com.au, 1
 alicestudio.it, 1
 alicetone.net, 1
 alicialab.org, 1
 alieke.design, 1
+alien6.com, 1
 alienation.biz, 1
 alienflight.com, 1
 alienslab.net, 1
 alienstat.com, 1
 alighierirescaldina.it, 1
 alignrs.com, 1
 aliim.gdn, 1
 alijammusic.com, 1
@@ -3223,16 +3247,17 @@ amalficoastchauffeur.com, 1
 amalfilapiazzetta.it, 1
 amalfipositanoboatrental.com, 1
 amalfirock.it, 1
 amalfitabula.it, 1
 amaliagamis.com, 1
 amanatrustbooks.org.uk, 1
 amandadamsphotography.com, 1
 amandasage.ca, 1
+amanet.ro, 1
 amani-kinderdorf.de, 1
 amaranthus.com.ph, 1
 amardham.org, 1
 amaresq.com, 1
 amartinz.at, 1
 amateri.com, 1
 amateurchef.co.uk, 1
 amateurradionotes.com, 1
@@ -3468,16 +3493,17 @@ andrejbenz.com, 1
 andrelauzier.com, 1
 andreoliveira.io, 1
 andrepicard.de, 1
 andrespaz.com, 1
 andreundnina.de, 1
 andrew.fi, 1
 andrew.london, 1
 andrewbdesign.com, 1
+andrewbennett.ltd, 1
 andrewdaws.co, 1
 andrewdaws.info, 1
 andrewdaws.io, 1
 andrewdaws.me, 1
 andrewdaws.tv, 1
 andrewensley.com, 1
 andrewhowden.com, 1
 andrewimeson.com, 1
@@ -3531,17 +3557,16 @@ andzia.art.pl, 1
 anecuni-club.com, 1
 anecuni-rec.com, 1
 anedot-sandbox.com, 1
 anedot.com, 1
 anedot.space, 1
 anedot.xyz, 1
 aneebahmed.com, 1
 anegabawa.com, 1
-anekdotes.com, 0
 aneslix.com, 0
 anetaben.nl, 1
 anextraordinaryday.net, 1
 ange-de-bonheur444.com, 1
 angehardy.com, 1
 angel-body.com, 1
 angelcojuelo.com, 1
 angelesydemonios.es, 1
@@ -3968,17 +3993,16 @@ aprz.de, 1
 apsa.paris, 1
 apstudynotes.org, 1
 aptitudetests.org, 1
 aptive.co.uk, 1
 aptumseguros.mx, 1
 apu-board.de, 1
 apv-ollon.ch, 1
 apviz.io, 1
-aqdun.com, 1
 aqilacademy.com.au, 1
 aqqrate.com, 1
 aqsiq.net, 1
 aqua-bucht.de, 1
 aqua-fitness-nacht.de, 1
 aqua-fotowelt.de, 1
 aquabio.ch, 1
 aquadonis.ch, 1
@@ -4003,16 +4027,17 @@ aquitroc.com, 1
 ar-informatique.ch, 1
 arab.dating, 1
 arabhardware.net, 1
 arabicxz.com, 1
 arabsexi.info, 1
 arachina.com, 1
 arackiralama.name.tr, 1
 arados.de, 1
+aragon.fun, 1
 arai21.net, 1
 araleeniken.com, 1
 aramido.de, 1
 aranchhomes.com, 1
 aranel.me, 1
 aranycsillag.net, 1
 araratour.com, 1
 araro.ch, 1
@@ -4203,16 +4228,17 @@ arroba.digital, 1
 arrow-analytics.nl, 1
 arrow-api.nl, 1
 arrowfastener.com, 1
 arrowgrove.com, 1
 arrowheadaddict.com, 1
 arrowheadflats.com, 1
 arrowit.net, 1
 arrowwebprojects.nl, 1
+ars-online.pl, 1
 arschkrebs.org, 1
 arsenal.ru, 1
 arshell.me, 1
 arsk1.com, 1
 arslankaynakmetal.com, 1
 arsplus.ru, 0
 arswb.men, 1
 art-auction.jp, 1
@@ -4235,17 +4261,16 @@ arteaga.uk, 1
 arteaga.xyz, 1
 artecat.ch, 1
 artedellavetrina.it, 1
 artedona.com, 1
 arteequipamientos.com.uy, 1
 artefakt.es, 1
 arteinstudio.it, 1
 artelt.com, 1
-artemis.re, 1
 arterienundvenen.ch, 1
 arteshow.ch, 1
 artetrama.com, 0
 artfabrics.com, 1
 artforum.sk, 1
 artfullyelegant.com, 1
 arthan.me, 1
 arthermitage.org, 1
@@ -4327,17 +4352,16 @@ asafaweb.com, 1
 asafilm.co, 1
 asafomba.com, 1
 asandu.eu, 1
 asanger.biz, 1
 asato-jewelry.com, 1
 asbestosthedarkarts.com, 1
 asbito.de, 1
 ascamso.com, 1
-ascendprime.com, 1
 ascension.run, 1
 ascensori.biz, 1
 ascgathering.com, 1
 ascii.moe, 1
 asciitable.tips, 1
 asciiwwdc.com, 1
 ascpaphilatelie.eu, 1
 asd.gov.au, 1
@@ -4430,16 +4454,17 @@ asra.gr, 1
 asral7.com, 1
 asrob.eu, 0
 assdecoeur.org, 1
 asseenfromthesidecar.org, 1
 assemble-together.org, 1
 assempsaibiza.com, 1
 assertion.de, 1
 assessoriati.com.br, 1
+assetsec.io, 1
 assetvault.co.za, 1
 assguidesporrentruy.ch, 1
 assign-it.co.uk, 0
 assistance-personnes-agees.ch, 1
 assistcart.com, 1
 assistel.com, 1
 assistenzaferrodastiro.org, 1
 assistenzafrigorifero.org, 1
@@ -4484,16 +4509,17 @@ asurbernardo.com, 1
 asurepay.cc, 0
 asustreiber.de, 1
 asvsa.ch, 1
 asws.nl, 1
 asylbarn.no, 1
 asystent-dzierzawy.pl, 1
 at.search.yahoo.com, 0
 at1.co, 1
+at5.nl, 1
 at7s.me, 1
 ataber.pw, 1
 atac.no, 1
 atacadooptico.com.br, 1
 atallo.com, 1
 atallo.es, 1
 ataton.ch, 1
 atc.cuneo.it, 1
@@ -4560,16 +4586,17 @@ atlantichomes.com.au, 1
 atlanticpediatricortho.com, 1
 atlantis-kh.noip.me, 1
 atlantischild.hu, 1
 atlantishq.de, 1
 atlantiswaterproofing.com, 1
 atlas-5.site, 1
 atlas-heritage.com, 1
 atlas-staging.ml, 1
+atlasauthority.com, 1
 atlasbrown.com, 1
 atlaschiropractic.org, 1
 atlascoffeeclub.com, 1
 atlascultural.com, 1
 atlasdev.nl, 1
 atlasone.us, 1
 atlassian.io, 1
 atlassignsandplaques.com, 1
@@ -4699,16 +4726,17 @@ aurorarecordings.com, 1
 auroware.com, 1
 auroz.tech, 1
 auroz.video, 1
 aus-ryugaku.info, 1
 ausec.ch, 1
 ausmwoid.de, 1
 auspicacious.org, 1
 ausrecord.com, 1
+ausschreibungen-suedtirol.it, 1
 aussiefunadvisor.com, 1
 aussieservicedown.com, 1
 aussiestoresonline.com, 1
 austenplumbing.com, 1
 austin-pearce.com, 1
 austin-security-cameras.com, 1
 austincardiac.com, 1
 austinheap.com, 0
@@ -4740,16 +4768,17 @@ author24.info, 1
 authoritysolutions.com, 1
 authsrv.nl.eu.org, 1
 autimatisering.nl, 1
 autismewoerden.nl, 1
 auto-anleitung.de, 1
 auto-dealership-news.com, 1
 auto-motor-i-sport.pl, 1
 auto-plus.tn, 1
+auto-res.ru, 1
 auto-spurgo.com, 1
 auto.nl, 1
 auto1.fi, 1
 autoauctionsohio.com, 1
 autoauctionsvirginia.com, 1
 autobahnco.com, 1
 autobarn.co.nz, 1
 autobedrijfgarant.nl, 1
@@ -4763,16 +4792,17 @@ autocorner.com, 1
 autocrypt.org, 1
 autod.hu, 1
 autodalmacija.com, 1
 autodidactic.ai, 1
 autodidacticstudios.com, 1
 autodidacticstudios.net, 1
 autodidacticstudios.org, 1
 autoecoledumontblanc.com, 1
+autoelettricaperbambini.com, 1
 autoentrepreneurinfo.com, 1
 autoepc.ro, 1
 autoi.ch, 1
 autoinsurancehavasu.com, 1
 autokeyreplacementsanantonio.com, 1
 autokovrik-diskont.ru, 1
 autolawetawroclaw.pl, 1
 autoledky.sk, 1
@@ -4898,16 +4928,17 @@ avocadooo.stream, 1
 avocode.com, 1
 avonlearningcampus.com, 1
 avonture.be, 1
 avova.de, 1
 avpres.net, 1
 avptp.org, 1
 avqueen.cn, 0
 avs-building-services.co.uk, 1
+avselectrical.co.uk, 1
 avso.pw, 1
 avsox.com, 1
 avspot.net, 1
 avtek.pl, 1
 avticket.ru, 0
 avtobania.pro, 1
 avtoforex.ru, 1
 avtogara-isperih.com, 1
@@ -5339,17 +5370,17 @@ balmeo.co.uk, 1
 balmofgilead.org.uk, 1
 balonmano.co, 1
 balslev.io, 1
 balter.com, 1
 balticer.de, 1
 balticmed.pl, 1
 balticnetworks.com, 1
 bamahammer.com, 1
-bambambaby.com.br, 1
+bambambaby.com.br, 0
 bambooforest.nl, 1
 bamboorelay.com, 1
 bamily.rocks, 1
 bamtoki.com, 1
 bananavapes.com, 1
 bananice.moe, 1
 bananium.fr, 1
 banburybid.com, 1
@@ -5445,29 +5476,32 @@ barcelonapremium.es, 1
 barcelonapremiummini.es, 1
 barclays.net, 1
 barcodeberlin.com, 1
 barcoderealty.com, 1
 bardes.org, 1
 bardiharborow.com, 1
 bardiharborow.tk, 1
 baresquare.com, 1
+bariatrica.es, 1
 baripedia.org, 1
 baris-sagdic.com, 1
 bariseau-mottrie.be, 1
 barisi.me, 1
 bariskaragoz.nl, 1
 baristador.com, 1
 bariumoxide.com, 1
 barkerjr.xyz, 1
 barlex.pl, 1
 barlotta.net, 1
+barmayoon.ir, 1
 barnabycolby.io, 1
 barnel.com, 1
 barneveldcentrum.nl, 1
+barneydavey.com, 1
 barnfotografistockholm.se, 1
 barnrats.com, 1
 barpodsosnami.pl, 1
 barprive.com, 1
 barqo.co, 1
 barracuda.blog, 1
 barracuda.com.tr, 1
 barrera.io, 1
@@ -5552,16 +5586,17 @@ batten.eu.org, 1
 batterystaple.pw, 1
 battle-game.com, 1
 battleboxx.com, 0
 battleofthegridiron.com, 1
 batvip9.net, 1
 bauer.network, 1
 bauernmarkt-fernitz.at, 1
 baugeldspezi.de, 1
+baugelitt.eu, 1
 baugemeinschaftbernstein.de, 1
 baumannfabrice.com, 1
 baumkuchen-aus-dresden.de, 1
 baur.de, 1
 bausep.de, 1
 baustils.com, 1
 bauthier-occasions.be, 1
 bautied.de, 1
@@ -5611,17 +5646,16 @@ bbgeschenke.ch, 1
 bbimarketing.com, 1
 bbinsure.com, 1
 bbka.org.uk, 1
 bbkaforum.co.uk, 1
 bbkworldwide.jp, 1
 bbld.de, 1
 bblove.me, 1
 bblsa.ch, 1
-bbnbb.de, 1
 bbnx.net, 1
 bbs8080.net, 1
 bbsec.xyz, 1
 bbswin9.cc, 1
 bbswin9.com, 1
 bbuio.com, 0
 bbw-wrestling.com, 1
 bbw.dating, 1
@@ -5629,16 +5663,17 @@ bbwcs.co.uk, 1
 bbwfacesitting.us, 1
 bbwteens.org, 1
 bbxin9.com, 1
 bbxin9.net, 1
 bc-bd.org, 0
 bc-diffusion.com, 1
 bcansw.com.au, 1
 bcbulle.ch, 1
+bcdiesel.ca, 1
 bcdonadio.com, 1
 bcdonadio.com.br, 1
 bcdonadio.org, 1
 bceventhire.co.uk, 1
 bch7al.ma, 1
 bchep.com, 1
 bck-koethen.de, 1
 bck-lelystad.nl, 1
@@ -5798,17 +5833,16 @@ beeswax-orgone.com, 1
 beetgroup.id, 1
 beethoveninlove.com, 1
 beetman.net, 1
 beeutifulparties.co.uk, 1
 beexfit.com, 1
 beezkneezcastles.co.uk, 1
 beeznest.com, 1
 befoodsafe.gov, 1
-beforesunrise.de, 1
 beforeyoueatoc.com, 1
 beframed.ch, 1
 befreewifi.info, 1
 befundonline.de, 1
 begabungsfoerderung.info, 1
 begbie.com, 1
 beginner.nl, 1
 beginwp.top, 1
@@ -5869,17 +5903,16 @@ bellyandbrain.amsterdam, 1
 belmontgoessolar.org, 1
 belos.at, 1
 belouga.org, 1
 belpbleibtbelp.ch, 1
 belt.black, 1
 beltar.nl, 1
 belvoirbouncycastles.co.uk, 1
 belwederczykow.eu, 1
-bely-mishka.by, 1
 belyoung.com.br, 1
 bemcorp.de, 1
 bemindly.com, 1
 bemsoft.pl, 1
 ben-energy.com, 0
 ben-stock.de, 1
 ben.ninja, 1
 benabrams.it, 1
@@ -5918,17 +5951,17 @@ benhaney.com, 1
 benhartmann.de, 1
 benhavenarchives.org, 1
 benjamin-hering.com, 1
 benjamin-horvath.com, 1
 benjamin-suess.de, 1
 benjamin.pe, 1
 benjaminbedard.com, 1
 benjaminblack.net, 1
-benjamindietrich.com, 0
+benjamindietrich.com, 1
 benjamindietrich.de, 1
 benjaminjurke.com, 1
 benjaminkopelke.com, 1
 benjaminpiquet.fr, 1
 benjamins.com, 1
 benjaminvasel.de, 1
 benjii.me, 1
 benjijaldoner.nl, 1
@@ -5970,17 +6003,16 @@ bepsvpt.me, 1
 bequiia.com, 1
 beranovi.com, 1
 berasavocate.com, 1
 beraten-entwickeln-steuern.de, 1
 beratungswelt.dvag, 1
 berdaguermontes.eu, 0
 berdu.id, 1
 bereginy.com.ua, 1
-beretech.fr, 1
 berg-freunde.at, 1
 berg-freunde.ch, 1
 bergenhave.nl, 1
 berger-chiro.com, 1
 bergevoet-fa.nl, 1
 bergfreunde.de, 1
 bergfreunde.dk, 1
 bergfreunde.es, 1
@@ -6108,16 +6140,17 @@ besthotsales.com, 1
 besti.it, 1
 bestiahosting.com, 1
 bestinductioncooktop.us, 1
 bestinshowing.com, 1
 bestinsider.net, 1
 bestinver.es, 0
 bestjumptrampolines.be, 1
 bestkenmoredentists.com, 1
+bestladyshaver.co.uk, 1
 bestleftwild.com, 1
 bestlooperpedalsguide.com, 1
 bestmotherfucking.website, 1
 bestoffert.club, 1
 bestoliveoils.com, 1
 bestpal.eu, 1
 bestparking.xyz, 1
 bestpartyhire.com, 1
@@ -6154,16 +6187,17 @@ bethanyduke.com, 1
 bethpage.net, 1
 betkoo.com, 1
 betleakbot.com, 1
 betobaccofree.gov, 1
 betonbit.com, 1
 betonmarkets.info, 1
 betonmoney.com, 1
 betpamm.com, 1
+betrifft-mich-dsgvo.ch, 1
 bets.gg, 1
 betseybuckheit.com, 1
 betsharpangles.com, 1
 betshoot.com, 1
 betsonlinefree.com.au, 1
 betsyshilling.com, 1
 bett1.de, 1
 better-bounce.co.uk, 1
@@ -6278,16 +6312,17 @@ bh.sb, 1
 bharath-g.in, 1
 bhodisoft.com, 1
 bhost.net, 1
 bhserralheria.com.br, 1
 bhtelecom.ba, 1
 bhuntr.com, 1
 bhxch.moe, 1
 bi.search.yahoo.com, 0
+bi1gif.radio, 1
 bia.gov, 0
 biaggeo.com, 1
 bianinapiccanovias.com, 1
 biano-ai.com, 1
 biasmath.es, 1
 biathloncup.ru, 1
 bibica.net, 1
 bible-maroc.com, 1
@@ -6339,16 +6374,17 @@ bierwebshop.be, 1
 bieser.ch, 1
 biester.pro, 1
 bieumau.net, 1
 bifrost.cz, 1
 biftin.net, 1
 big-andy.co.uk, 1
 big-bounce.co.uk, 1
 big-fluglaerm-hamburg.de, 1
+bigadcompany.com, 1
 bigbendguide.com, 1
 bigbluedoor.net, 1
 bigbouncebouncycastles.co.uk, 1
 bigbouncetheory.co.uk, 1
 bigbounceuk.com, 1
 bigbrotherawards.nl, 1
 bigcakes.dk, 1
 bigclassaction.com, 1
@@ -6515,16 +6551,17 @@ biometrics.es, 1
 biomin.co.uk, 1
 biomodra.cz, 1
 bionima.com, 1
 biopreferred.gov, 1
 biopronut.com, 1
 biopsychiatry.com, 1
 bioresonanz-ibiza.com, 1
 biosafe.ch, 1
+biosalts.it, 1
 biosbits.org, 1
 bioshine.com.sg, 1
 bioshome.de, 1
 biosignalanalytics.com, 1
 biospeak.solutions, 1
 biosphere.cc, 1
 biospw.com, 1
 biotechware.com, 1
@@ -6767,17 +6804,16 @@ blackbase.de, 1
 blackberrycentral.com, 1
 blackbird-whitebird.com, 1
 blackburn.link, 0
 blackbyte.it, 1
 blackcat.ca, 1
 blackcatinformatics.ca, 1
 blackcatinformatics.com, 1
 blackcicada.com, 1
-blackdesertsp.com, 1
 blackdotbrewery.com, 1
 blackdown.de, 1
 blackdragoninc.org, 1
 blackedbyte.com, 1
 blackevent.be, 1
 blackfire.io, 1
 blackgamelp.de, 1
 blackgate.org, 1
@@ -6798,16 +6834,17 @@ blacknetwork.eu, 1
 blacknova.io, 1
 blackonion.com, 1
 blackpapermoon.de, 1
 blackpayment.ru, 1
 blackphantom.de, 1
 blackphoenix.de, 1
 blackpi.dedyn.io, 1
 blackroadphotography.de, 1
+blackroot.eu, 1
 blackscreen.me, 1
 blackscytheconsulting.com, 1
 blackseals.net, 1
 blacktown.eu, 1
 blackyau.cc, 1
 blackys-chamber.de, 1
 blaindalefarms.com, 1
 blaise.io, 1
@@ -6856,16 +6893,17 @@ blessedguy.com, 1
 blewebprojects.com, 1
 blichmann.eu, 1
 blicy.net, 1
 blidz.com, 1
 blieque.co.uk, 1
 bliesekow.net, 1
 bliker.ga, 1
 blikk.no, 1
+blikund.swedbank.se, 1
 blindaryproduction.tk, 1
 blinder.com.co, 1
 blindpigandtheacorn.com, 1
 blinds-unlimited.com, 1
 bling9.com, 1
 bling999.cc, 1
 bling999.com, 1
 bling999.net, 1
@@ -6942,17 +6980,16 @@ bloglyric.com, 1
 blognr.com, 1
 blogom.at, 1
 blogpentrusuflet.ro, 1
 blogpronto.com.br, 1
 blogreen.org, 1
 blogsdna.com, 1
 blogthedayaway.com, 1
 blogtroterzy.pl, 1
-blok56.nl, 1
 blokmy.com, 1
 blood4pets.tk, 1
 bloodhunt.pl, 1
 bloodsports.org, 1
 bloody.pw, 1
 bloom-avenue.com, 1
 bloom.sh, 0
 blopezabogado.es, 1
@@ -7161,16 +7198,17 @@ bondank.com, 1
 bondarenko.dn.ua, 1
 bondingwithbaby.ca, 1
 bondlink.com, 1
 bondpro.gov, 1
 bondskampeerder.nl, 1
 bonebunny.de, 1
 bonesserver.com, 1
 bonfi.net, 1
+bongloy.com, 1
 bongo.cat, 1
 bonifacius.be, 1
 bonita.com.br, 1
 bonito.pl, 1
 bonnant-associes.ch, 1
 bonnant-partners.ch, 1
 bonnebouffe.fr, 1
 bonniecoloring.com, 1
@@ -7183,17 +7221,19 @@ bonnyprints.ch, 1
 bonnyprints.es, 1
 bonnyprints.fr, 1
 bonobo.cz, 1
 bonprix.co.uk, 1
 bonqoeur.ca, 1
 bonrecipe.com, 1
 bonsaimedia.nl, 1
 bonsi.net, 1
+bonus.ca, 1
 bonus.pl, 1
+bonussource.com, 1
 bonux.co, 1
 boobox.xyz, 1
 boodmo.com, 1
 boof.com, 0
 boogaerdtmakelaars.nl, 1
 boogiebouncecastles.co.uk, 1
 book-in-hotel.com, 1
 booker.ly, 1
@@ -7407,16 +7447,17 @@ bouncyrainbows.co.uk, 1
 bouncytime.co.uk, 1
 bouncywouncy.co.uk, 1
 bound2bounce.co.uk, 1
 boundarybrighton.com, 1
 bountiful.gov, 1
 bountyfactory.io, 1
 bourasse.fr, 1
 bourdon.fr.eu.org, 1
+bourgeoisdoorco.com, 1
 bournefun.co.uk, 1
 bourqu.in, 1
 bourse-aux-jouets.org, 0
 bourse-aux-vetements.org, 0
 bourse-puericulture.org, 0
 boutiqueguenaelleverdin.com, 1
 boutoncoupdepoing.fr, 1
 bouw.live, 1
@@ -7523,16 +7564,17 @@ bran.soy, 1
 branch-bookkeeper.com, 1
 branchtrack.com, 1
 brandand.co.uk, 1
 brandbil.dk, 1
 brandbuilderwebsites.com, 1
 brandcodeconsulting.com, 1
 brandcodestyle.com, 1
 brandingclic.com, 1
+brandingclick.com, 1
 brando753.xyz, 1
 brandongomez.me, 1
 brandonhubbard.com, 1
 brandonlui.ml, 1
 brandontaylor-black.com, 1
 brandonwalker.me, 1
 brandrocket.dk, 1
 brandstead.com, 1
@@ -7570,17 +7612,16 @@ bravor.pe, 1
 brazilian.dating, 1
 brazoriabar.org, 1
 brb.city, 1
 brck.nl, 1
 brd.ro, 1
 breadandlife.org, 1
 breadofgod.org, 1
 breakingtech.it, 1
-breakpoint.at, 1
 breakwall.ml, 1
 breaky.de, 1
 breathedreamgo.com, 1
 breathingblanket.com, 1
 brecht.ch, 1
 breckle.com.ua, 1
 brecknell.biz, 1
 brecknell.com, 1
@@ -7611,17 +7652,16 @@ bressier.fr, 1
 bretcarmichael.com, 1
 brettabel.com, 1
 brettcornwall.com, 1
 brettlawyer.com, 1
 brettw.xyz, 1
 bretzner.fr, 1
 brevboxar.se, 1
 brewsouth.com, 1
-brewspark.co, 1
 brewvo.com, 1
 breznet.com, 1
 brfvh24.se, 1
 brgins.com, 1
 brian-gordon.name, 1
 brianalaway.com, 1
 brianalawayconsulting.com, 1
 briandwells.com, 1
@@ -7727,16 +7767,18 @@ brookframework.org, 1
 brooklynrealestateblog.com, 1
 brookworth.com, 1
 brossman.it, 1
 brossmanit.com, 1
 brouillard.ch, 1
 brouwerijdeblauweijsbeer.nl, 1
 brovelton.com, 1
 brownfieldstsc.org, 1
+brownforces.desi, 1
+brownforces.org, 1
 brownihc.com, 1
 browntowncountryclub.com, 1
 browsedns.net, 1
 browsemycity.com, 1
 browserleaks.com, 1
 brrd.io, 1
 brring.com, 1
 brrr.fr, 1
@@ -7824,23 +7866,25 @@ bt780.com, 1
 bta.lv, 0
 btc2secure.com, 1
 btcarmory.com, 1
 btcbolsa.com, 1
 btcontract.com, 1
 btcp.space, 1
 btcpop.co, 1
 btine.tk, 1
+btio.pw, 0
 btku.org, 1
 btnissanparts.com, 1
 btorrent.xyz, 1
 btrb.ml, 1
 btsapem.com, 1
 btshe.net, 1
 btsoft.eu, 1
+btsow.com, 0
 bttc.co.uk, 1
 btth.live, 1
 btth.pl, 1
 btth.tv, 1
 btth.xyz, 1
 bttorj45.com, 1
 bturboo.com, 1
 buayacorp.com, 1
@@ -7875,16 +7919,17 @@ budgetalk.com, 1
 budgetcastlehire.co.uk, 1
 budgetenergievriendenvoordeel.nl, 1
 budgetlob.gov, 1
 budgetlovers.nl, 1
 budgiesballoons.com, 1
 budntod.com, 1
 budolangnau.ch, 1
 budolfs.de, 1
+budweisermeats.com, 1
 bueltge.de, 1
 buena-vista.cz, 1
 buena.me, 1
 bueny.com, 1
 bueny.net, 1
 buerger-lenke.de, 1
 buergerdialog.net, 1
 bueroplus.de, 1
@@ -7899,20 +7944,20 @@ bug.ee, 1
 bugcrowd.com, 1
 bugginslab.co.uk, 1
 bugs.chromium.org, 1
 bugsmashed.com, 1
 bugu.org, 1
 bugwie.com, 1
 bugzil.la, 1
 bugzilla.mozilla.org, 1
+buhayguro.com, 1
 build.chromium.org, 1
 buildbox.io, 1
 buildbytes.com, 1
-buildfaith.ca, 1
 buildhoscaletraingi.com, 1
 buildingclouds.de, 1
 buildingcostestimators.co.uk, 1
 builditfl.com, 1
 builditsolutions.net, 1
 buildkite.com, 1
 buildmorebuslanes.com, 1
 buildplease.com, 1
@@ -7956,16 +8001,17 @@ bunbun.be, 0
 bund-von-theramore.de, 1
 bundespolizei-forum.de, 1
 bungee.pw, 1
 bungee.systems, 1
 bungeetaco.com, 1
 bunix.de, 1
 bunkyo-life.com, 1
 bunny-rabbits.com, 1
+bunny.parts, 1
 bunnycarenotes.com, 1
 bunnydiamond.de, 1
 bunnyvishal.com, 1
 bunq.love, 1
 bunzy.ca, 1
 buonventosbt.eu, 1
 bupropion.com, 1
 bupu.ml, 1
@@ -8040,16 +8086,17 @@ bustabit.com, 1
 bustadice.com, 1
 bustup-tips.com, 1
 busuttil.org.uk, 1
 busybee360.com, 1
 busyon.cloud, 1
 butarque.es, 1
 buthowdoyoubuygroceries.com, 1
 butikvip.ru, 1
+butlercountyhistory.org, 1
 butlerfm.dk, 1
 butt.repair, 1
 butteramotors.com, 1
 buttermilk.cf, 1
 buttonline.ch, 1
 buttonrun.com, 1
 butts-are.cool, 1
 butzies.ddnss.org, 1
@@ -8114,16 +8161,17 @@ bwin8602.com, 1
 bwin8603.com, 1
 bwin8604.com, 1
 bwin8605.com, 1
 bwin8606.com, 1
 bwl-earth.club, 1
 bws16.de, 1
 bwserhoscaletrainaz.com, 1
 bx-n.de, 1
+bx49.cc, 1
 bxdev.me, 1
 bxp40.at, 1
 by1899.com, 1
 byange.pro, 1
 byatte.com, 1
 bydisk.com, 0
 bye-bye.us, 1
 byeskille.no, 1
@@ -8419,16 +8467,17 @@ campcambodia.org, 1
 campcanada.org, 1
 campeonatoalemao.com.br, 1
 camperdays.de, 1
 camperlist.com, 1
 campermanaustralia.com, 1
 campertrailerfinance.com.au, 1
 camperverzekerd.nl, 1
 campfiretails.org, 1
+camphub.co, 1
 camping-landes.com, 1
 camping-le-pasquier.com, 1
 camping-seilershof.de, 1
 campingcarlovers.com, 1
 campinghuntingshooting.com, 1
 campingskyhooks.com, 1
 campistry.net, 1
 campsoulfestival.com, 1
@@ -8474,24 +8523,26 @@ candeo-books.nl, 1
 candex.com, 1
 candguchocolat.com, 1
 candicecity.com, 1
 candidasa.com, 1
 candidaturedunprix.com, 1
 candlcastles.co.uk, 1
 cando.eu, 1
 candylion.rocks, 1
+candyout.com, 1
 canfield.gov, 1
 cangelloplasticsurgery.com, 1
 cangku.in, 1
 cangku.moe, 1
 canglong.net, 1
 canhazip.com, 1
 canicaprice.com, 1
 canihavesome.coffee, 1
+caniuse.email, 1
 canker.org, 1
 canlidoviz.com, 1
 canmipai.com, 1
 cannabis-marijuana.com, 1
 cannabismd.com, 1
 cannacards.ca, 1
 cannaffiliate.com, 1
 cannahealth.com, 1
@@ -8637,17 +8688,17 @@ carespottravelmedicine.com, 1
 carespottravelmedicine.mobi, 1
 carespoturgentcare.com, 1
 carespoturgentcare.info, 1
 carespoturgentcare.net, 1
 carespoturgentcare.org, 1
 carespoturgentcare.us, 1
 caretta.co.uk, 1
 careyshop.cn, 1
-carezone.com, 1
+carezone.com, 0
 carfinancehelp.com, 1
 carfraemill.co.uk, 1
 cargobay.net, 1
 cargomaps.com, 1
 cargorestraintsystems.com.au, 1
 carhunters.cz, 1
 caribbean.dating, 1
 caribbeanexams.com, 1
@@ -8693,16 +8744,17 @@ caroli.biz, 1
 caroli.com, 1
 caroli.info, 1
 caroli.name, 1
 caroli.net, 1
 carolina.cz, 1
 carolinaclimatecontrolsc.com, 1
 carolineeball.com, 1
 carolynjoyce.com.au, 1
+carparo.net, 1
 carpetandhardwoodflooringpros.com, 1
 carpetcleaningtomball.com, 1
 carplus.net, 1
 carrando.com, 1
 carrando.de, 1
 carre-lutz.com, 1
 carrentalsathens.com, 1
 carriedin.com, 1
@@ -8862,16 +8914,17 @@ catgirl.pics, 1
 catgirl.science, 1
 catharinesomerville.com, 1
 catharisme.eu, 1
 catharisme.net, 1
 catharisme.org, 1
 catherinejf.com, 1
 catherinesofpartick.co.uk, 1
 catholics.dating, 1
+catholicteacherresources.com, 1
 cathosa.nl, 1
 cathosting.org, 1
 cathy.guru, 1
 cathy.website, 1
 cathyfitzpatrick.com, 1
 cathyjf.ca, 1
 cathyjf.com, 1
 cathyjf.net, 1
@@ -9411,28 +9464,30 @@ cheltenhambouncycastles.co.uk, 1
 cheltik.ru, 1
 chemco.mu, 1
 chemicalcrux.org, 1
 chemicalguys-ruhrpott.de, 1
 chemiphys.com, 1
 chemistry-schools.com, 1
 chenapartment.com, 1
 chengarda.com, 1
+chenghao360.top, 1
 chengl.com, 1
 chengxindong.com, 1
 chenkun.pro, 1
 chenky.com, 1
 chenna.me, 1
 chennien.com, 1
 chenpei.org, 1
 chenqinghua.com, 1
 chentianyi.cn, 1
 chenzhekl.me, 1
 chenzhipeng.com.cn, 1
 cheolguso.com, 1
+cheque-transitionactive.fr, 1
 cherevoiture.com, 1
 cherie-belle.com, 1
 cherrett.digital, 1
 cherry-green.ch, 1
 cherrybread.net, 1
 cherryonit.com, 1
 cherrywoodtech.com, 1
 chertseybouncycastles.co.uk, 1
@@ -9618,16 +9673,17 @@ christianfaq.org, 1
 christianforums.com, 1
 christiangehring.org, 1
 christianhoffmann.info, 1
 christianillies.de, 1
 christianjens.com, 1
 christianliebel.com, 1
 christianlis.org.uk, 1
 christianlis.uk, 1
+christianoliff.com, 1
 christianpeltier.com, 1
 christianpilgrimage.com.au, 1
 christianpusch.de, 1
 christians.dating, 1
 christiansayswords.com, 1
 christianscholz.de, 0
 christiehawkes.com, 1
 christiesantiques.com, 1
@@ -9979,17 +10035,16 @@ clien.net, 1
 client.coach, 1
 clientboss.com, 1
 clientsecure.me, 1
 clifflu.net, 1
 climaencusco.com, 1
 climaprecio.es, 1
 climateinteractive.org, 1
 climatestew.com, 1
-climaticarus.ru, 1
 clindoeilmontagne.com, 1
 clingout.com, 1
 clinicaltrials.gov, 1
 clinicasmedicas.com.br, 1
 clinicminds.com, 1
 cliniquecomplementaire.com, 1
 cliniquevethuy.be, 1
 clintonbloodworth.com, 1
@@ -10124,17 +10179,16 @@ clubnoetig-ink2g.de, 1
 clubon.space, 1
 cluj.apartments, 1
 cluj.help, 1
 clush.pw, 1
 cluster.biz.tr, 1
 clusteranalyse.net, 1
 clusterfuck.nz, 1
 clustermaze.net, 1
-clweb.ch, 1
 clycat.ru, 1
 cm.center, 1
 cm3.pw, 1
 cmacacias.ch, 1
 cmadeangelis.it, 1
 cmc.pt, 1
 cmcc.network, 1
 cmcelectrical.com, 1
@@ -10265,16 +10319,17 @@ codefordus.nrw, 1
 codefoundry.it, 0
 codehz.one, 1
 codein.ca, 1
 codeine.co.uk, 1
 codeit.guru, 1
 codeit.us, 1
 codejots.com, 1
 codejunkie.de, 0
+codeknights.com, 1
 codeloop.pw, 1
 codemill.se, 1
 codemonster.eu, 1
 codemperium.com, 1
 codenlife.xyz, 1
 codenode.io, 1
 codeofhonor.tech, 1
 codeofthenorth.com, 1
@@ -10294,16 +10349,17 @@ coderware.co.uk, 1
 codes.pk, 1
 codesplain.in, 1
 codesport.io, 1
 codespromo.be, 1
 codestep.io, 1
 codestudies.net, 1
 codesyncro.com, 1
 codetheworld.com, 1
+codetipi.com, 1
 codetripping.net, 1
 codeux.com, 0
 codeux.info, 0
 codeux.net, 0
 codevat.com, 1
 codeventure.de, 1
 codeversetech.com, 1
 codewild.de, 1
@@ -10591,34 +10647,37 @@ complexorganization.com, 1
 complexorganizations.com, 1
 compliance-management.ch, 1
 compliance-systeme.de, 1
 compliancedictionary.com, 1
 compliancerisksoftware.co.uk, 1
 complt.xyz, 1
 componentshop.co.uk, 1
 compostatebien.com.ar, 1
+compostelle-bouddha.fr, 1
 compoundingrxusa.com, 1
 compraneta.com, 0
 compraporinternet.online, 1
 comprarefiereygana.com, 1
 comprarimpresoras-3d.com, 1
+compreair.com, 1
 compree.com, 1
 comprefitasadere.com.br, 1
 comprehensiveihc.com, 1
 compromised.com, 1
 compservice.in.ua, 1
 comptablevilledequebec.com, 1
 comptrollerofthecurrency.gov, 1
 comptu.com, 1
 compubench.com, 1
 compucorner.mx, 1
 compunetwor.com, 1
 compuplast.cz, 1
 compusolve.nl, 1
+computec.ch, 1
 computehealth.com, 1
 computer-acquisti.com, 1
 computer-menschen.de, 1
 computer-science-schools.com, 1
 computerassistance.co.uk, 1
 computerbas.nl, 1
 computerbase.de, 1
 computercamaccgi.com, 1
@@ -10641,16 +10700,17 @@ conatus.ai, 1
 conaudisa.com, 0
 concept-web.ch, 1
 conceptatelier.de, 1
 conception.sk, 1
 concertengine.com, 1
 concerto.amsterdam, 1
 concertsenboite.fr, 1
 concertsto.com, 1
+concilio.com, 1
 conciliumnotaire.ca, 1
 conclave.global, 1
 conclinica.com.br, 1
 concordsoftwareleasing.com, 1
 concretehermit.com, 0
 concretelevelingsystems.com, 1
 concreterepairatlanta.com, 1
 concreterepairconcreteraising.com, 1
@@ -10959,16 +11019,19 @@ coslinker.com, 1
 cosmechic.fr, 1
 cosmekaitori.jp, 1
 cosmetic-surgery-prices.co.uk, 1
 cosmeticappraisal.com, 1
 cosmeticasimple.com, 1
 cosmeticos-naturales.com, 1
 cosmiatria.pe, 1
 cosmicnavigator.com, 1
+cosmicworlds.com, 1
+cosmicworlds.mobi, 1
+cosmintataru.ro, 1
 cosmodacollection.com, 1
 cosmofunnel.com, 1
 cosmundi.de, 1
 cosni.co, 1
 cosplayer.com, 1
 cospol.ch, 1
 costa-rica-reisen.de, 1
 costablanca.villas, 1
@@ -11001,17 +11064,16 @@ country-creativ.de, 1
 countryattire.com, 1
 countrybrewer.com.au, 1
 countryfrog.uk, 1
 countryhouseresort.com, 1
 countryoutlaws.ca, 1
 countybankdel.com, 1
 countyjailinmatesearch.com, 1
 coup-dun-soir.ch, 1
-coupe-bordure.com, 1
 couplay.org, 1
 couponcodesme.com, 1
 cour4g3.me, 1
 couragefound.org, 1
 coursables.com, 1
 course.rs, 1
 courseconfidence.com, 1
 coursera.org, 1
@@ -11023,28 +11085,29 @@ cousincouples.com, 0
 coussinsky.net, 1
 couvreur-hinault.fr, 1
 covbounce.co.uk, 1
 covenantoftheriver.org, 1
 covermytrip.com.au, 1
 covershousing.nl, 1
 covery.ai, 1
 covoiturage.fr, 0
-covve.com, 1
+covve.com, 0
 covybrat.cz, 1
 cowbird.org, 1
 cowboyim.com, 1
 coweo.cz, 1
 coworking-luzern.ch, 1
 cowsay.blog, 1
 coxcapitalmanagement.com, 1
 coxxs.me, 1
 coxxs.moe, 1
 coya.tw, 1
 cozmaadrian.ro, 1
+cozmoapp.com, 1
 cozo.me, 1
 cozyeggdesigns.com, 1
 cp-st-martin.be, 1
 cpahunt.com, 0
 cpaneltips.com, 1
 cpap.com, 1
 cpasperdu.com, 1
 cpbanq.com, 1
@@ -11190,16 +11253,17 @@ creativosonline.org, 1
 creatixx-network.de, 0
 creato.top, 1
 creators-design.com, 1
 creators.co, 1
 creators.direct, 1
 creatorswave.com, 1
 creatujoya.com, 1
 crecips.com, 1
+crecman.fr, 1
 credential.eu, 1
 credex.bg, 1
 credigo.se, 1
 creditos-rapidos.com, 1
 creditozen.es, 1
 creditozen.mx, 1
 creditproautos.com, 0
 creditscoretalk.com, 1
@@ -11542,16 +11606,17 @@ curlybracket.co.uk, 1
 currency-strength.com, 1
 current-usa.com, 1
 currentlystreaming.com, 1
 currentlyusa.com, 1
 currentobserver.com, 1
 currynissanmaparts.com, 1
 cursos-trabajadores.net, 1
 cursos.com, 1
+cursosdeinglesmexico.com, 1
 cursosforex.com, 1
 cursosingles.com, 1
 cursossena.co, 1
 cursosypostgrados.com, 1
 cursuri-de-actorie.ro, 1
 curtacircuitos.com.br, 0
 curtis-smith.me.uk, 1
 curtis-smith.uk, 1
@@ -11595,16 +11660,17 @@ cuvva.io, 1
 cuvva.it, 1
 cuvva.me, 1
 cuvva.net, 1
 cuvva.org, 1
 cuvva.uk, 1
 cuvva.us, 1
 cuxpool.club, 1
 cuxpool.net, 1
+cvazquez.es, 1
 cvc.digital, 1
 cvchomes.com, 1
 cvcoders.com, 1
 cve-le-carrousel.ch, 1
 cviip.ca, 1
 cviip.com, 1
 cvjd.me, 1
 cvl.ch, 1
@@ -11710,17 +11776,17 @@ cyclisjumper.gallery, 1
 cyclop-editorial.fr, 1
 cydetec.com, 1
 cyelint.com, 1
 cyfly.org, 1
 cygnaltech.com, 1
 cygnan.com, 1
 cygnatus.com, 1
 cygnius.net, 1
-cyhour.com, 1
+cyhour.com, 0
 cykelbanor.se, 1
 cyl6.com, 1
 cylindehea.com, 1
 cylindricity.com, 1
 cynicaloptimist.me, 1
 cyon.ch, 1
 cype.dedyn.io, 1
 cyph.audio, 1
@@ -11776,16 +11842,17 @@ d0xq.com, 1
 d0xq.net, 1
 d2.gg, 1
 d2ph.com, 1
 d2qa61rbluifiq.cloudfront.net, 1
 d2s.uk, 1
 d3lab.net, 1
 d3x.pw, 1
 d3xt3r01.tk, 1
+d3xx3r.de, 1
 d42.no, 1
 d4done.com, 1
 d4fx.de, 1
 d4rkdeagle.tk, 1
 d4wson.com, 1
 d4x.de, 1
 d66.nl, 1
 d6c5yfulmsbv6.cloudfront.net, 1
@@ -11802,16 +11869,17 @@ da-sh.cc, 1
 da.hn, 1
 da42foripad.com, 1
 daallexx.eu, 1
 dabasstacija.lv, 1
 dabblegoat.com, 1
 dabneydriveanimalhospital.com, 1
 dabuttonfactory.com, 1
 dachb0den.net, 1
+dachdecker-ranzenberger.de, 1
 dachdeckermeister-egon-weiss.de, 1
 dachtechnik-windschuettl.de, 1
 daciaforum.nl, 1
 daciamodellen.nl, 1
 dadadani.xyz, 1
 daddybio.com, 1
 daddyfinger.me, 1
 dado.fr, 1
@@ -11923,26 +11991,28 @@ daniel-baumann.ch, 0
 daniel-cholewa.de, 1
 daniel-kulbe.de, 1
 daniel-milnes.co.uk, 1
 daniel-milnes.uk, 1
 daniel-ruf.de, 1
 daniel-stahl.net, 1
 daniel-wildhaber.ch, 1
 daniel.domains, 1
+daniel.sb, 1
 danielalvarez.net, 1
 danielas.boutique, 1
+daniele.tech, 1
 danielehniss.de, 1
 danielepestilli.com, 1
 danielfeau.com, 1
 danielgorr.de, 1
 danielgray.email, 1
 danielgray.me, 1
 danielgraziano.ca, 1
-danielheal.net, 1
+danielheal.net, 0
 danielhinterlechner.eu, 1
 danielhochleitner.de, 1
 danieljamesscott.org, 1
 danieljstevens.com, 1
 danielkoster.nl, 1
 danielmartin.de, 1
 danielmoch.com, 1
 danielmorell.com, 1
@@ -12007,17 +12077,16 @@ danstillman.com, 1
 dantelistan.com, 1
 dantransports.fr, 1
 danw.io, 1
 danwin1210.me, 1
 danwolff.se, 1
 danyabanya.com, 1
 danzac.com, 1
 dao.spb.su, 1
-daop.co.uk, 1
 daoro.net, 1
 daphne.informatik.uni-freiburg.de, 1
 dapianw.com, 1
 dapim.co.il, 1
 daplie.com, 1
 dapps.earth, 1
 dappworld.com, 1
 dara-berlin.de, 1
@@ -12117,17 +12186,16 @@ datacalle.com, 1
 datacandy.com, 1
 datacave.is, 1
 datacool.tk, 1
 datadit.hu, 1
 datadyne.technology, 1
 datafd.com, 1
 datafd.net, 1
 dataformers.at, 1
-datagir.ir, 1
 datagrail.io, 1
 dataguidance.com, 1
 dataharvest.at, 1
 datahive360.com, 1
 datahjalp.nu, 1
 datahoarder.xyz, 1
 datahove.no, 0
 datajobs.ai, 1
@@ -12209,16 +12277,17 @@ david-pearce.com, 1
 david-reess.de, 1
 david-schiffmann.de, 1
 david.kitchen, 1
 davidadrian.org, 1
 davidandersson.se, 1
 davidandrewcoaching.com, 1
 davidbranco.me, 1
 davidbrito.tech, 1
+davidbrookes.me, 1
 davidbuckell.com, 1
 davidcrx.net, 1
 daviddever.net, 1
 davidfetveit.com, 1
 davidforward.com, 1
 davidforward.net, 1
 davidfrancoeur.com, 1
 davidgouveia.net, 1
@@ -12348,16 +12417,17 @@ ddns-test.de, 1
 ddnsweb.com, 1
 ddos-mitigation.co.uk, 1
 ddos-mitigation.info, 1
 ddoser.cn, 1
 ddosolitary.org, 1
 ddproxy.cf, 1
 ddracepro.net, 1
 dds.mil, 1
+ddsmatchsouthwest.com, 1
 ddy.tw, 1
 de-gucci.com, 1
 de-mail.info, 1
 de-medici.nl, 1
 de-osopanda.com, 1
 de-rwa.de, 1
 de-servers.de, 1
 de-spil.be, 1
@@ -12401,55 +12471,58 @@ deanpearce.net, 1
 dearfcc.com, 1
 dearfcc.net, 1
 dearfcc.org, 1
 dearktiel.nl, 1
 dearnevalleybouncycastles.co.uk, 1
 deathberry.ddns.net, 1
 deathofspring.com, 1
 deathy.ro, 1
+deautomaat.nl, 1
 debarrasantony.com, 1
 debarrasasnieressurseine.com, 1
 debarrasboulognebillancourt.com, 1
 debarrasclichy.com, 1
 debarrascolombes.com, 1
 debarrasnanterre.com, 1
 debatereport.com, 1
 debbyefurd.com, 1
 debie-usedcars.be, 1
 debigare.com, 1
 debora-singkreis.de, 1
 deborahmarinelli.eu, 1
 debron-ot.nl, 1
 debrusoft.ch, 1
-debt.com, 1
 debtrecycling.com.au, 1
 debuemon.com, 1
 debuis.nl, 1
 dec6.gc.ca, 1
 decaffeinated.io, 1
 decalquai.ch, 1
 decay24.de, 1
+dechat.nl, 1
 decher.de, 1
 decidetreatment.org, 1
 decimatechnologies.eu, 1
 decis.fr, 1
 decisivetactics.com, 1
 deckbuilderamerica.com, 1
 declivitas.com, 1
 decoating.pl, 1
 decock-usedcars.be, 1
 decodeanddestroy.com, 1
 decompiled.de, 1
+deconsolas.tk, 1
 decoora.com, 1
 decor-d.com, 1
 decor-live.ru, 1
 decoratingadvice.co.uk, 1
 decoratore.roma.it, 1
 decoratrix.com, 1
+decorauvent.ca, 1
 decorincasa.com.br, 1
 decormiernissanparts.com, 1
 decorumcomics.com, 1
 decosoftware.com, 1
 decrousaz-ceramique.ch, 1
 decrypto.net, 1
 decs.es, 1
 dede.ml, 1
@@ -12482,17 +12555,16 @@ deepinsight.io, 1
 deeps.cat, 1
 deeps.me, 1
 deepserve.info, 1
 deepsouthsounds.com, 1
 deepspace.dedyn.io, 1
 deepspace4.com, 1
 deepvalley.tech, 1
 deepwealth.institute, 1
-deepz.pt, 1
 deer.team, 1
 deerfieldapartmentsstl.com, 1
 deezeno.com, 1
 def-pos.ru, 1
 defcon.org, 1
 defcongroups.org, 1
 defeestboek.nl, 1
 defendas.com, 1
@@ -12556,19 +12628,21 @@ delahrzolder.nl, 1
 delam.site, 1
 delandalucia.com, 1
 delbecqvo.be, 1
 delbrouck.ch, 1
 delcopa.gov, 1
 deleenheir.be, 1
 deleidscheflesch.nl, 1
 delfic.org, 1
+delfino.cr, 1
 delhionlinegifts.com, 1
 deli-tochigi.jp, 1
 deliacreates.com, 1
+deliandiver.org, 1
 deliberatedigital.com, 1
 deliciisanatoase.ro, 1
 deliciousmedia.co.uk, 1
 deliciousmedia.net, 1
 delicioustable.com, 1
 delid.cz, 1
 delitto.top, 1
 delivery.co.at, 1
@@ -12581,29 +12655,31 @@ delta-data.ch, 1
 delta-smart.ch, 1
 delta.ru, 1
 delta23.de, 0
 deltaacademy.org, 1
 deltadata.ch, 1
 deltafinanceiro.com.br, 1
 deltanio.nl, 1
 deltaonlineguards.com, 1
+deltaservers.blog.br, 1
 deltaservers.com.br, 1
 deltasigmachi.org, 1
 deltava.org, 1
 deltawolf.tk, 1
 demarle.ch, 1
 dementiapraecox.de, 1
 demeyere-usedcars.be, 1
 demfloro.ru, 1
 demijn.nl, 1
 demilletech.net, 1
 demiranda.com, 1
 demmer.one, 1
 demo.sb, 1
+demo.swedbank.se, 1
 demo9.ovh, 1
 democracychronicles.com, 1
 democracyineurope.eu, 1
 democraziaineuropa.eu, 1
 demolandia.net, 1
 demomanca.com, 1
 demoniak.ch, 1
 demonwav.com, 1
@@ -12856,16 +12932,17 @@ devh.de, 1
 devh.net, 1
 deviajesturismo.com, 1
 deviant.email, 1
 devillers-occasions.be, 1
 devils-point.de, 1
 devilshakerz.com, 1
 deviltraxxx.de, 1
 devinfo.net, 0
+devinite.com, 1
 devirc.net, 1
 deviser.wang, 1
 devisnow.fr, 1
 devkid.net, 1
 devkit.cc, 0
 devklog.net, 1
 devlamvzw.org, 0
 devlatron.net, 1
@@ -12888,18 +12965,18 @@ devstroke.io, 1
 devswag.io, 1
 devtestfan1.gov, 1
 devtoys.ru, 1
 devtty.org, 1
 devzero.io, 1
 dewaard.de, 1
 dewalch.net, 1
 dewapress.com, 1
-dewebwerf.nl, 1
 dewinter.com, 1
+dewolden.nl, 1
 dex.top, 1
 dexalo.de, 1
 dexigner.com, 1
 dexonrest.azurewebsites.net, 1
 dexonsoftware.com, 1
 deyute.com, 1
 dez-online.de, 1
 dezeregio.nl, 1
@@ -13016,16 +13093,17 @@ didche.net, 1
 diddens.de, 1
 dideeducacion.com, 1
 didefamilia.com, 1
 didesalud.com, 1
 didierghez.com, 1
 didigotoffer.com, 1
 didikhari.web.id, 1
 die-bergfuehrer.de, 1
+die-besten-bewertungen.de, 1
 die-besten-weisheiten.de, 1
 die-blahuts.de, 1
 die-bobbeloase.com, 1
 die-borts.ch, 1
 die-gruenen-teufel.de, 1
 die-partei-reutlingen.de, 1
 die-pizzabaeckerei.de, 1
 die-seide.de, 1
@@ -13068,16 +13146,17 @@ diethood.com, 1
 dieti.net, 1
 dietlin.com, 1
 dietrich.cx, 1
 dieumfrage.com, 1
 different.cz, 0
 differenta.ro, 0
 diffnow.com, 1
 difoosion.com, 1
+digaxtest.com, 1
 digcit.org, 1
 digdata.de, 1
 dighans.com, 1
 digiarc.net, 1
 digibild.ch, 1
 digibones.be, 1
 digibull.email, 1
 digibull.link, 1
@@ -13142,16 +13221,18 @@ digitalposition.com, 1
 digitalrights.center, 1
 digitalrights.fund, 1
 digitalroar.com, 1
 digitalskillswap.com, 1
 digitalsurge.io, 1
 digitaltcertifikat.dk, 1
 digitaltechnologies.ltd.uk, 1
 digitalunite.de, 1
+digitec.ch, 1
+digitecgalaxus.ch, 1
 digitise.io, 1
 digitkon.com, 1
 digitreads.com, 1
 digminecraft.com, 1
 diguass.us, 1
 digwp.com, 1
 dihesan.com, 1
 dijitaller.com, 1
@@ -13193,16 +13274,17 @@ dinepont.fr, 1
 dinerroboticurology.com, 1
 dingcc.me, 1
 dingelbob-schuhcreme.gq, 1
 dingsbums.shop, 1
 dingss.com, 1
 dinheirolucrar.com, 1
 dinkommunikasjon.no, 1
 dinmtb.dk, 1
+dino.lol, 1
 dinocarrozzeria.com, 1
 dinotv.at, 1
 dinstec.cl, 1
 dintillat.fr, 1
 dintrafic.net, 1
 diodeled.com, 1
 diodo.me, 1
 dionysos-ios.gr, 1
@@ -13238,16 +13320,17 @@ dirk-weise.de, 1
 dirkdoering.de, 1
 dirkjonker.nl, 1
 dirko.net, 1
 dirkwolf.de, 1
 dirtcraft.ca, 1
 dirtycat.ru, 1
 dirtyincest.com, 1
 dirtyprettyartwear.com, 1
+dirtytiles.xyz, 1
 disability.gov, 1
 disabled.dating, 1
 disadattamentolavorativo.it, 1
 disanteimpianti.com, 1
 disc.uz, 1
 discarica.bari.it, 1
 discarica.bologna.it, 1
 discarica.it, 1
@@ -13324,16 +13407,17 @@ disking.co.uk, 1
 dismail.de, 1
 disposable.link, 1
 disroot.org, 1
 disrupters.ch, 1
 dissectcyber.com, 1
 dissertationhelp.com, 1
 dissidence.ovh, 1
 dissident.host, 1
+dissieux.com, 1
 dist-it.com, 1
 dist.torproject.org, 0
 disti.com, 1
 distiduffer.org, 1
 distillery.com, 1
 distinctdesign2009.com, 1
 distinctivephotography.com.au, 1
 distinguishedprisoner.com, 1
@@ -13367,28 +13451,28 @@ dividendz.net, 1
 divinasaiamodas.com.br, 1
 divinegames.studio, 1
 divineglowinghealth.com, 1
 divinemercyparishvld.com, 1
 diving.photo, 1
 divingwithnic.com, 1
 divisuite.com, 1
 divorcelawyersformen.com, 1
-divorciosmurcia.com, 1
 diwei.vip, 1
 dixi.fi, 1
 dixibox.com, 1
 dixmag.com, 1
 diybook.at, 1
 diycc.org, 1
 diymediahome.org, 1
 diyosun.com, 1
 diysec.tk, 1
 diytechguides.com, 1
 diyvideoeditor.com, 1
+dizalty.tv, 0
 dizzie.org, 1
 dizzieforums.com, 1
 dizzythewizard.co.uk, 1
 dj-leszwolle.nl, 1
 dj-x.info, 1
 dj3dub.com, 1
 djangobirthday.com, 1
 djangogolf.com, 1
@@ -13466,17 +13550,16 @@ dmschilderwerken.nl, 1
 dmwall.cn, 1
 dmx.xyz, 1
 dmxledlights.com, 1
 dmzlab.se, 1
 dn3s.me, 1
 dn42.us, 1
 dna.li, 1
 dnacloud.pl, 1
-dnakids.co.uk, 1
 dnalounge.com, 1
 dnapizza.com, 1
 dnastatic.com, 1
 dnc.org.nz, 1
 dndtools.net, 1
 dnfc.rocks, 1
 dnlr.tech, 1
 dnmaze.com, 1
@@ -13496,16 +13579,17 @@ dnshallinta.fi, 1
 dnsinfo.ml, 1
 dnsipv6.srv.br, 1
 dnskeep.com, 1
 dnskeeper.com, 1
 dnslog.com, 1
 dnsman.se, 1
 dnspod.ml, 1
 dnsql.io, 1
+dnsrate.com, 1
 dnstwister.report, 1
 do-prod.com, 1
 do.gd, 1
 do.search.yahoo.com, 0
 do13.net, 1
 do67.de, 1
 do67.net, 1
 dobraprace.cz, 1
@@ -13786,17 +13870,16 @@ dosvientosoutdoorlighting.com, 1
 doswap.com, 1
 dosyauzantisi.com, 1
 dot.ro, 1
 dot42.no, 1
 dota2huds.com, 1
 dotacni-parazit.cz, 1
 dotbox.org, 1
 dotcircle.co, 1
-dotconnor.com, 1
 dotesports.com, 1
 dotgov.gov, 1
 dothebangthingsalon.com, 1
 dothydesign.com, 1
 dotjesper.com, 1
 dotjesper.dk, 1
 dotjesper.net, 1
 dotjs.party, 1
@@ -13991,17 +14074,16 @@ dreamlordpress.it, 1
 dreamlux.cz, 1
 dreamlux.sk, 1
 dreammaker-nw.com, 1
 dreammakerremodelil.com, 1
 dreammakerutah.com, 1
 dreamof.net, 0
 dreamonkey.com, 1
 dreamrae.net, 1
-dreamstream.mobi, 1
 dreamstream.network, 1
 dreamstream.nl, 1
 dreamstream.tv, 1
 dreamstream.video, 1
 dreax.win, 1
 dreemurr.com, 1
 drei01.com, 1
 drei01.de, 1
@@ -14171,17 +14253,19 @@ dsbutler.de, 1
 dschwarzachtaler.de, 1
 dsdalismerkezi.com, 1
 dsebastien.net, 1
 dsektionen.se, 0
 dsgarms.com, 1
 dsgholsters.com, 1
 dsgnet.hu, 1
 dsgvo.name, 1
+dsh.io, 1
 dshield.org, 1
+dsimons.tk, 1
 dsm5.com, 1
 dsmjs.com, 1
 dsmnet.org, 1
 dso-imaging.co.uk, 1
 dso-izlake.si, 1
 dsol.hu, 1
 dstamou.de, 1
 dstat.cc, 1
@@ -14319,32 +14403,32 @@ dustri.org, 1
 dustycloth.com, 1
 dustygroove.com, 1
 dustyro.se, 1
 dustyspokesbnb.ca, 1
 dustywilson.com, 1
 dutch.desi, 1
 dutch1.nl, 1
 dutchdare.nl, 1
-dutchessuganda.com, 1
 dutchfoodie.nl, 1
 dutchforkrunners.com, 1
 dutchrank.nl, 1
 dutchsailors.com, 1
 dutchwanderers.nl, 1
 dutchweballiance.nl, 1
 duval.paris, 1
 duyao.de, 0
 dv189.com, 1
 dvbris.co.uk, 1
 dvbris.com, 1
 dvdinmotion.com, 1
 dvdland.com.au, 1
 dvhosting.be, 1
 dvipadmin.com, 1
+dvlot.ru, 1
 dvnatura.ch, 1
 dvorupotocnych.sk, 1
 dvwc.org, 1
 dvx.cloud, 1
 dw-loewe.de, 1
 dwgf.xyz, 1
 dwhd.org, 1
 dwi-sued.de, 1
@@ -14548,16 +14632,17 @@ eashwar.com, 1
 eason-yang.com, 1
 east-line.su, 1
 eastarm.net, 1
 eastblue.org, 1
 eastcoastbubbleandbounce.co.uk, 1
 easterncapebirding.co.za, 1
 eastlothianbouncycastles.co.uk, 1
 eastmanbusinessinstitute.com, 1
+eastmidlandsstargazers.org.uk, 0
 eastnorschool.co.uk, 1
 eastpeoria-il.gov, 1
 eastplan.co.kr, 1
 eastsideroofingcontractor.com, 1
 easy-factures.fr, 1
 easy-rpg.org, 0
 easy2bathe.co.uk, 1
 easyadsnbanners.tk, 0
@@ -14700,16 +14785,17 @@ ecohostingservices.uk, 1
 ecolala.my, 1
 ecole-attalens.ch, 1
 ecole-iaf.fr, 1
 ecoledusabbat.org, 1
 ecolemathurincordier.com, 1
 ecombustibil.ro, 1
 ecomia.dk, 1
 ecompen.co.za, 1
+ecomycie.com, 1
 econativa.pt, 1
 economiafinanzas.com, 1
 economias.pt, 1
 economic-sanctions.com, 1
 economicinclusion.gov, 1
 economics-colleges.com, 1
 economiefidu.ch, 1
 economies.ch, 1
@@ -14736,17 +14822,17 @@ ectora.com, 1
 ecuinformacion.com, 1
 ecupcafe.com, 0
 ecuteam.com, 0
 ecxforum.com, 1
 ed.gs, 1
 ed4becky.net, 1
 edakoe.ru, 1
 edanni.io, 1
-edas.info, 1
+edas.info, 0
 edd-miles.com, 1
 eddesign.ch, 1
 eddmil.es, 1
 eddokloosterman.com, 1
 eddyn.net, 1
 edeca.net, 1
 edehsa.com, 1
 edeka-jbl-treueaktion.de, 1
@@ -14866,16 +14952,17 @@ eerstejaarsweekend.nl, 1
 eery.de, 1
 eesti.xyz, 1
 eewna.org, 1
 eez.ee, 1
 ef-georgia.org, 1
 ef.gy, 1
 efa-football.com, 1
 efaas.nl, 1
+efag.com, 1
 efcross.com, 1
 efeen.nl, 1
 eff.org, 1
 effdocs.com, 1
 effe.ch, 1
 effective-altruist.com, 1
 effectivecoffee.com, 1
 effectiveosgi.com, 1
@@ -14941,16 +15028,17 @@ ehbssl.com, 1
 eheliche-disziplin.schule, 1
 ehertz.uk, 1
 ehipaa.com, 1
 ehlacademy.org, 1
 ehmsen.nu, 1
 ehmtheblueline.com, 1
 ehne.de, 1
 ehomusicgear.com, 1
+ehorizon.jp, 1
 ehr.gov, 1
 ehrenburg.info, 1
 ehrlichesbier.de, 1
 ehub.cz, 1
 ehub.hu, 1
 ehub.pl, 1
 ehub.sk, 1
 ehuber.info, 1
@@ -14976,16 +15064,17 @@ eihaikyo.com, 1
 eikounoayumi.jp, 1
 eilandprojectkeukens.nl, 1
 eilhan.com, 1
 eimacs.com, 1
 einaros.is, 1
 einfachbahn.de, 1
 einfachmaldiefressehalten.de, 1
 einheft.info, 1
+einheizpreis.de, 1
 einhorn.space, 1
 einmonolog.de, 1
 einrichtwerk.de, 1
 einrichtwerk.shop, 1
 einsatzstellenverwaltung.de, 1
 einsatzstiefel.info, 1
 einser.com, 1
 einsteinathome.org, 1
@@ -15311,17 +15400,16 @@ eltern-verein.ch, 1
 elternbeiratswahl.online, 1
 elternforum-birmensdorf.ch, 1
 elternverein-utzenstorf.ch, 1
 eltip.click, 1
 eltlaw.com, 1
 eltransportquevolem.org, 1
 elucron.com, 1
 eluhome.de, 1
-eluvio.com, 1
 elvcino.com, 0
 elvidence.com.au, 1
 elviraszabo.com, 1
 elvispresley.net, 1
 elvn.tokyo, 0
 elwave.org, 1
 elwix.com, 1
 elxsi.de, 1
@@ -15355,16 +15443,17 @@ embellir-aroma.com, 1
 embellir-kyujin.com, 1
 emberlife.com, 1
 embodiaacademy.com, 1
 embodiaapp.com, 1
 embox.net, 1
 embraceni.org, 1
 embracethedarkness.co.uk, 1
 embroideryexpress.co.uk, 1
+embsaypreschool.co.uk, 1
 emby.cloud, 1
 emcspotlight.com, 1
 emdrupholm.dk, 1
 emecew.com, 1
 emeliefalk.se, 1
 ememsei.com, 1
 emeraldcbdshop.com, 0
 emeraldcityswagger.com, 1
@@ -15441,16 +15530,17 @@ empower.net, 1
 empowerdb.com, 1
 emprechtinger.com, 1
 emprego.pt, 1
 empregosrj.com, 1
 emprunterlivre.ci, 1
 empyrean-advisors.com, 1
 emrenovation.com, 1
 emresaglam.com, 1
+ems.gov, 1
 emtradingacademy.com, 1
 emultiagent.pl, 1
 emvoice.net, 1
 emvoiceapp.com, 1
 emw3.com, 1
 emyr.net, 1
 en-booster.jp, 1
 en-crypt.me, 1
@@ -15500,17 +15590,16 @@ endohaus.us, 1
 endspamwith.us, 1
 enduranceday.be, 1
 endviolence.gc.ca, 1
 endzeit-architekten.com, 0
 eneamarcantoni.com, 1
 enemiesoflight.de, 1
 energie-sante.ch, 1
 energiekeurplus.nl, 1
-energisammenslutningen.dk, 1
 energy-drink-magazin.de, 1
 energy-in-balance.eu, 1
 energy-infra.nl, 1
 energy-initiative.com, 1
 energyatlas.com, 1
 energyaupair.se, 1
 energycodes.gov, 1
 energydrinkblog.de, 1
@@ -15609,17 +15698,16 @@ entersoftsecurity.com, 1
 entersynapse.com, 1
 entheogens.com, 1
 entheorie.net, 1
 enthusiaformazione.com, 1
 entradaweb.cl, 1
 entrainr.com, 1
 entravex.com, 1
 entrecieletpierres.com, 1
-entreprise-toiture-clement.fr, 1
 entropia.de, 0
 entrusted.io, 1
 entryboss.cc, 1
 entrypoint.sh, 1
 entwickler.land, 1
 enuchi.jp, 1
 enuygun.com, 1
 envant.co.uk, 1
@@ -15723,17 +15811,16 @@ eppelblei.lu, 1
 eppelduerferjugend.lu, 1
 eppelpress.lu, 1
 epreskripce.cz, 1
 epsilon.dk, 1
 epspolymer.com, 1
 epublibre.org, 1
 epyonsuniverse.net, 1
 eq-serve.com, 1
-eqibank.com, 1
 eqorg.com, 1
 equalcloud.com, 1
 equallove.me, 1
 equeim.ru, 1
 equidam.com, 1
 equinecoaching.ca, 1
 equinetherapy.ca, 1
 equinox.io, 1
@@ -15747,24 +15834,24 @@ er1s.xyz, 1
 erad.fr, 1
 erasmo.info, 1
 erasmusplusrooms.com, 1
 erate.fi, 1
 erath.fr, 1
 erclab.kr, 1
 erdethamburgeronsdag.no, 1
 ereader.uno, 1
-erecciontotalal100.com, 1
 erectiepillenwinkel.nl, 1
 erethon.com, 1
 erf-neuilly.com, 1
 ergo-open.de, 1
 ergobyte.eu, 1
 ergobyte.gr, 1
 ergodark.com, 1
+ergoterapeutas.lt, 1
 eriador.io, 1
 ericabrahamsen.net, 1
 ericairwin.com, 1
 ericdiao.com, 1
 erichogue.ca, 1
 erichorstmanshof.nl, 1
 ericjohnltd.com, 1
 erick.blog, 1
@@ -15814,16 +15901,17 @@ errlytics.com, 1
 error418.nl, 0
 ers35.com, 1
 ersa-shop.com, 1
 ershiwo.com, 1
 ersindemirtas.com, 1
 ersinerce.com, 1
 erspro.net, 1
 erstehilfeprodukte.at, 1
+ert.ovh, 1
 eru.im, 0
 eru.me, 1
 eru.moe, 1
 erudicia.com, 1
 erudicia.de, 1
 erudicia.es, 1
 erudicia.fr, 1
 erudicia.it, 1
@@ -15919,17 +16007,16 @@ esb777.us, 1
 esb886.com, 1
 esb888.net, 1
 esb8886.com, 1
 esb9527.com, 1
 esb9588.com, 1
 esb9588.info, 0
 esb9588.net, 1
 esb9588.org, 1
-esb999.biz, 1
 esb999.com, 1
 esb999.info, 1
 esb999.org, 1
 esb999.us, 1
 esba11.cc, 1
 esba11.com, 1
 esba11.in, 1
 esba11.net, 1
@@ -16064,17 +16151,17 @@ essayjob.com, 1
 essaylib.com, 1
 essaynews.com, 1
 essaypro.net, 1
 essayscam.org, 1
 essayshark.com, 0
 essaytalk.com, 1
 essaywriting.biz, 1
 essenalablog.de, 1
-essenceofvitalitydetox.com, 1
+essencespresso.es, 1
 essential12.com, 1
 essentialoilsimports.com, 1
 essentiel-physique.com, 1
 esseriumani.com, 1
 essex.cc, 1
 essexcosmeticdentists.co.uk, 0
 essite.net, 1
 esslm.sk, 1
@@ -16125,16 +16212,17 @@ et-inf.de, 1
 eta.cz, 1
 etaes.eu, 1
 etajerka-spb.ru, 1
 etaoinwu.win, 1
 etasigmaphi.org, 1
 etath.com, 1
 etax.com.au, 1
 etccooperative.org, 1
+etch.co, 1
 etd-glasfaser.de, 1
 etda.or.th, 1
 etduvindemoselle.fr, 1
 etech-solution.com, 1
 etech-solution.net, 1
 etech-solutions.com, 1
 etechsolution.net, 1
 eteesheet.com, 1
@@ -16170,16 +16258,17 @@ ethicsburg.gov, 1
 ethika.com, 1
 ethiobaba.com, 1
 ethiopian.dating, 1
 ethiopiannews247.com, 1
 ethitter.com, 1
 ethosinfo.com, 1
 etidni.help, 1
 etienne.cc, 1
+etiennes.work, 1
 etikus-hacker.hu, 1
 etincelle.ml, 1
 etiquetaunica.com.br, 1
 etkaddict.com, 1
 etnoria.com, 1
 etoile-usedcars.com, 1
 etre-soi.ch, 1
 etre-vivant.fr, 1
@@ -16292,16 +16381,17 @@ evamathil.de, 1
 evamira.com, 1
 evanfiddes.com, 1
 evangelicalmagazine.com, 1
 evangelosm.com, 1
 evanreev.es, 1
 evansdesignstudio.com, 1
 evansville-wy.gov, 1
 evantage.org, 1
+evantageglobal.com, 1
 evanwang0.com, 1
 evapp.org, 1
 evasion-energie.com, 1
 evasioncreole.com, 1
 evasovova.cz, 1
 evavolfova.cz, 1
 eve.ac, 1
 eve0s.com, 1
@@ -16535,17 +16625,16 @@ expoort.fr, 1
 expoort.it, 1
 expopodium.com, 1
 exporta.cz, 1
 exposurecompensation.co.uk, 1
 express-shina.ru, 1
 express-vpn.com, 1
 express1040.com, 1
 expressemotion.net, 1
-expressglobal.org, 1
 expresshosting.org, 1
 expressmarket.ru, 1
 expresstinte.de, 1
 expressvpn.com, 1
 expresswins.co.uk, 1
 expxkcd.com, 1
 exs.lv, 1
 exside.com, 1
@@ -16606,16 +16695,17 @@ eyeonid.com, 1
 eyep.me, 1
 eyes-berg.ch, 1
 eyes-berg.com, 1
 eyesandearsrescue.org, 1
 eynio.com, 1
 eyona.com, 1
 eyps.net, 1
 eyrelles-tissus.com, 1
+eyrid.com, 1
 eythorsson.com, 1
 eytosh.net, 1
 eyyit.com, 0
 eyyubyilmaz.com, 1
 ez3d.eu, 1
 ezakazivanje.rs, 1
 ezdog.press, 1
 ezequiel-garzon.net, 1
@@ -16654,16 +16744,17 @@ f88-line.net, 1
 f8842.com, 1
 f88line.com, 1
 f88line.net, 1
 f88yule1.com, 1
 f88yule5.com, 1
 f88yule6.com, 1
 f88yule7.com, 1
 f88yule8.com, 1
+f8s.co, 1
 fa-works.com, 1
 fabbro-roma.org, 1
 fabbro.roma.it, 1
 faber.org.ru, 1
 fabian-fingerle.de, 1
 fabian-klose.com, 1
 fabian-klose.de, 1
 fabian-klose.net, 1
@@ -16792,23 +16883,25 @@ fakeemergency.com, 1
 fakerli.com, 1
 fakti.bg, 1
 faktotum.tech, 1
 fakturi.com, 1
 fakturoid.cz, 1
 falaeapp.org, 1
 falaowang.com, 1
 falbros.com, 1
+falce.in, 1
 falcema.com, 1
 falcona.io, 1
 falconfrag.com, 1
 falconvintners.com, 1
 falcoz.co, 1
 faldoria.de, 1
 falegname-roma.it, 1
+falegname.roma.it, 1
 falkhusemann.de, 1
 falkus.net, 1
 falldennismarketing.com, 1
 fallenangeldrinks.co.uk, 1
 fallenangeldrinks.com, 1
 fallenangeldrinks.eu, 1
 fallenangelspirits.co.uk, 1
 fallenangelspirits.com, 1
@@ -16838,16 +16931,17 @@ familie-monka.de, 1
 familie-poeppinghaus.de, 1
 familie-remke.de, 1
 familieholme.de, 1
 familiekiekjes.nl, 1
 familienportal.de, 1
 familiereimann.com, 1
 familjenfrodlund.se, 1
 familjenm.se, 1
+familledessaint.fr, 1
 familylawhotline.org, 1
 familyparties.co.uk, 1
 familyreal.ru, 1
 familytreehq.com, 1
 familyworld.gr, 1
 famion.eu, 1
 famososnaweb.com, 1
 famousbirthdays.com, 1
@@ -17237,17 +17331,16 @@ feuerwerksmanufaktur.de, 1
 feuetgloire.com, 1
 fewo-hafeninsel-stralsund.de, 1
 fewo-thueringer-wald.de, 1
 fexco.com, 1
 feybiblia.com, 1
 feyermedia.de, 1
 ff-bad-hoehenstadt.de, 1
 ff-bg.xyz, 1
-ff-getzersdorf.at, 1
 ff-obersunzing-niedersunzing.de, 1
 ff14-mstdn.xyz, 0
 ffb.gov, 1
 ffbsee.net, 1
 ffh.me, 1
 ffiec.gov, 1
 ffis.me, 1
 ffkoenigsberg.de, 1
@@ -17504,17 +17597,16 @@ firstfinca.de, 1
 firstinnovation.co.jp, 1
 firstinnovationltd.com, 1
 firstmall.de, 1
 firstnetworksouth.com, 1
 firstq.xyz, 1
 firstsecurity.cl, 1
 fischer-its.com, 0
 fischer-kundendienst.de, 1
-fischers.cc, 1
 fischers.it, 1
 fischers.srv.br, 1
 fiscoeconti.it, 1
 fise.cz, 1
 fish-hook.ru, 1
 fish2.me, 1
 fishbattle.io, 1
 fishbattle.net, 1
@@ -17538,17 +17630,16 @@ fit-mit-nina.com, 1
 fit-mit-system.eu, 1
 fit365.jp, 0
 fitchannel.com, 1
 fitinclass.com, 1
 fitkram.cz, 1
 fitness-challenge.co.uk, 1
 fitness.gov, 1
 fitnessunder50.com, 1
-fitrate.site, 1
 fitseven.ru, 1
 fittelo.cz, 1
 fitzsim.org, 1
 fiuxy.bz, 1
 fiuxy.co, 1
 fiuxy.me, 1
 fiuxy.org, 1
 fiveboosts.xyz, 1
@@ -17682,16 +17773,17 @@ fliino.eu, 1
 fliino.info, 1
 fliino.net, 1
 fliino.org, 1
 fliio.com, 1
 flikmsg.co, 1
 flinch.io, 1
 fling.dating, 1
 flip.kim, 1
+flipbell.com, 1
 flipneus.net, 1
 fliptable.org, 1
 flirtee.net, 1
 flirtos.de, 1
 flixports.com, 1
 flmortgagebank.com, 1
 floatationlocations.com, 1
 floaternet.com, 1
@@ -17723,16 +17815,17 @@ floresvilleedc.org, 1
 florian-bachelet.fr, 1
 florian-thie.de, 1
 florian2833z.de, 1
 floriankarmen.com, 1
 floriankeller.de, 1
 florianmitrea.uk, 1
 florianschmitt.ca, 1
 floriantanner.ch, 1
+floridaengineering.org, 1
 floridafabrication.net, 1
 floridafieros.org, 1
 floridagulfbeachrealty.com, 1
 floridahomesinvest.com, 1
 floridasexhealth.com, 1
 florinapp.com, 1
 florinlungu.it, 1
 florismoo.nl, 1
@@ -17778,25 +17871,26 @@ fluxoid.com, 1
 flw365365.com, 1
 fly-en-drive.nl, 1
 fly.moe, 1
 flyboyfpv.com, 1
 flydrivesicilie.nl, 1
 flyer.tools, 1
 flygon.pink, 1
 flyingdoggy.net, 1
+flyinghigh.co.jp, 1
 flyinglocksmiths.com, 1
 flyingpackets.net, 1
 flyingrub.me, 1
 flyingspaghettimonsterdonationsfund.nl, 1
 flymns.fr, 1
 flynn.io, 1
 flyp.me, 1
 flypenge.dk, 1
-flyserver.co.il, 1
+flyserver.co.il, 0
 flyss.net, 1
 flyssh.net, 1
 flyswoop.com, 1
 flyt.online, 1
 flytoadventures.com, 1
 fm-cdn.de, 1
 fm.ie, 1
 fmapplication.com, 1
@@ -17992,17 +18086,16 @@ fortress.sk, 1
 fortuna-apotheke-lahnstein.de, 1
 fortuna-loessnitz.de, 1
 fortuna-s.com, 1
 forty-two.nl, 1
 forty8creates.com, 1
 fortytwo.cloud, 1
 forum-bonn.de, 1
 forum-heg.ch, 1
-forum3.ru, 1
 forumvoordemocratie.nl, 1
 forvisualdesign.com, 1
 forward-fly-fishing.ch, 1
 foryouandyourcustomers.com, 1
 foryourhealthybody.com, 1
 fosaudit.com, 1
 foscamcanada.com, 1
 fosdem.org, 1
@@ -18157,28 +18250,34 @@ frau-inge.de, 1
 frau-pusteblu.me, 1
 frau-sucht-bauer.de, 1
 fraudmarc.com, 1
 frauenarzt-niendorf.de, 1
 frauenarzt-zinke.de, 1
 frauenlob.rocks, 1
 fraurichter.net, 1
 fraye.net, 1
+frazell.net, 1
 frbracch.it, 1
 frc.gov, 1
 frccsgo.tk, 1
 frdl.ch, 1
 freaksites.dk, 1
 freaksports.com.au, 1
 freakyawesome.agency, 1
 freakyawesome.art, 1
 freakyawesome.band, 1
 freakyawesome.business, 1
+freakyawesome.ca, 1
+freakyawesome.co, 1
+freakyawesome.co.uk, 1
+freakyawesome.com, 1
 freakyawesome.design, 1
 freakyawesome.fm, 1
+freakyawesome.in, 1
 freakyawesome.io, 1
 freakyawesome.lgbt, 1
 freakyawesome.net, 1
 freakyawesome.org, 1
 freakyawesome.solutions, 1
 freakyawesome.world, 1
 freakyawesome.yoga, 1
 frebi.org, 1
@@ -18197,16 +18296,17 @@ fredloya.com, 1
 fredriksslaktforskning.se, 1
 fredtec.ru, 1
 fredvoyage.fr, 1
 free-ss.site, 1
 free-your-pc.com, 1
 free.ac.cn, 1
 free.com.tw, 1
 free8.xyz, 1
+freeaf.gq, 1
 freeassangenow.org, 1
 freeasyshop.com, 1
 freebarrettbrown.org, 1
 freebcard.com, 1
 freeben666.fr, 1
 freebetoffers.co.uk, 1
 freebies.id, 1
 freebookmakersbetsandbonuses.com.au, 1
@@ -18492,17 +18592,17 @@ fuck-your-false-positive.de, 1
 fuckav.ru, 1
 fuckcf.cf, 1
 fuckcie.com, 1
 fucklife.ch, 1
 fuckobr.com, 1
 fuckobr.net, 1
 fuckobr.org, 1
 fuckobr.su, 1
-fuckonthefirst.date, 1
+fuckonthefirst.date, 0
 fuckup.dk, 1
 fuckz.net, 1
 fuechschen.org, 1
 fuelfirebrand.com, 1
 fuelingyourdreams.com, 1
 fuerstenfelder-immobilien.de, 1
 fugle.de, 1
 fuglede.dk, 1
@@ -18606,26 +18706,26 @@ furkot.es, 1
 furkot.fr, 1
 furkot.it, 1
 furkot.pl, 1
 furlan.co, 1
 furlog.it, 0
 furnfurs.com, 1
 furnishedproperty.com.au, 1
 furnitureconcept.co.uk, 1
+furniturezoneboone.com, 1
 furries-united.de, 1
 furry.agency, 1
 furry.bot, 1
 furry.cat, 1
 furry.cool, 1
 furry.dk, 1
 furrybot.me, 1
 furrytech.network, 1
 furrytf.club, 1
-furryyiff.site, 1
 fursuitbutts.com, 1
 fusa-miyamoto.jp, 1
 fuselight.nl, 1
 fuseos.net, 1
 fushee.com, 1
 fusiongaming.de, 1
 fuskator.com, 1
 fussball-xxl.de, 1
@@ -18731,16 +18831,17 @@ g3circuit.com, 1
 g3d.ro, 1
 g3dev.ch, 1
 g3rv4.com, 1
 g4w.co, 1
 g5.gov, 1
 g6666g.tk, 1
 g8energysolutions.co.uk, 1
 ga-2.it, 1
+ga-part.ru, 1
 gaasuper6.com, 1
 gaaz.fr, 1
 gabe565.com, 1
 gabeb1920.com, 1
 gabecook.com, 1
 gabethebabetv.com, 1
 gabinetpsychoterapii.krakow.pl, 1
 gabiocs.com, 1
@@ -18790,16 +18891,21 @@ gakkainavi-epsilon.net, 1
 gakki.photos, 1
 gaku-architect.com, 1
 gala.kiev.ua, 0
 galabau-maurmann.de, 1
 galacg.me, 1
 galactic-crew.org, 1
 galak.ch, 1
 galanight.cz, 1
+galaxus.at, 1
+galaxus.ch, 1
+galaxus.com, 1
+galaxus.de, 1
+galaxus.fr, 1
 galaxy.edu.pe, 1
 galaxymimi.com, 1
 galeria42.com, 1
 galeriajardim.com.br, 1
 galerialottus.com.br, 1
 galeriarr.pl, 1
 galeriart.xyz, 1
 galeries.photo, 1
@@ -18876,16 +18982,17 @@ gamerepublic.hu, 1
 gameres.com, 1
 gamerezo.com, 1
 gamerwares.com, 1
 gamerzdot.com, 1
 games4theworld.org, 1
 gamesaviour.com, 1
 gamesdepartment.co.uk, 1
 gameserver-sponsor.me, 1
+gameshogun.xyz, 1
 gameshowchallenge.ie, 1
 gamesided.com, 1
 gamesplanet.com, 1
 gamesputnik.ru, 1
 gamestats.gg, 1
 gameswitchers.uk, 1
 gametilt.com, 1
 gametium.com, 1
@@ -18951,16 +19058,17 @@ garbagedisposalguides.com, 1
 garbomuffin.com, 1
 garcia-franco.com, 1
 garciagerman.com, 1
 garda-see.mobi, 1
 gardedenfantspourtous.fr, 1
 garden-life.org, 1
 gardencarezone.com, 1
 gardengameshireuk.com, 1
+gardeningdirect.co.uk, 1
 gardikagigih.com, 1
 gardinte.com, 1
 gardis.ua, 1
 garedtech.com, 0
 garethbowker.com, 1
 garethkirk.com, 1
 garethkirkreviews.com, 1
 garethrhugh.es, 1
@@ -19127,16 +19235,17 @@ gehopft.de, 1
 gehreslaw.com, 1
 gehrke.cloud, 1
 gehrke.in, 1
 gehrke.nrw, 1
 gehsicht.de, 1
 geigenbauer.in, 0
 geigr.de, 1
 geiser-family.ch, 1
+geisser-elektronikdata.de, 1
 geitenijs.com, 1
 gekosoft.eu, 1
 gelb-computer.de, 1
 geld-im-blick.de, 1
 geld24.nl, 1
 geldimblick.de, 1
 geldteveel.eu, 1
 geleenbeekdal.nl, 1
@@ -19176,16 +19285,17 @@ general-anaesthesia.com, 1
 general-anaesthetics.com, 1
 general-anesthesia.com, 1
 general-insurance.tk, 1
 general-plast.com, 1
 generali-worldwide.com, 1
 generalinsuranceservices.com, 1
 generationgoat.com, 1
 generationnext.pl, 1
+generationr.nl, 1
 generationsweldom.com, 1
 generator.creditcard, 1
 generic.cx, 1
 genesiseureka.com, 1
 genesismachina.ca, 1
 genesistrading.com, 1
 genesysmi.com, 1
 genetargetsolutions.com.au, 1
@@ -19205,17 +19315,16 @@ geniuszone.biz, 1
 genocidediary.org, 1
 genodeftest.de, 1
 genome.gov, 1
 genomequestlive.com, 1
 genoog.com, 1
 genosse-einhorn.de, 1
 genossen.ru, 1
 genoveve.de, 1
-gensend.com, 1
 gensenwedding.jp, 1
 genshiken-itb.org, 1
 gensicke.de, 1
 genslerapps.com, 1
 genslerwisp.com, 1
 gensokyo.chat, 0
 gensokyo.re, 1
 gensonline.eu, 1
@@ -19347,17 +19456,16 @@ getitpeople.com, 1
 getlawyered.com.au, 1
 getleanflorida.gov, 1
 getmango.com, 1
 getmdl.io, 1
 getmerch.eu, 1
 getmovil.com, 1
 getnib.com, 1
 getnikola.com, 1
-getoutofdebt.org, 1
 getpagespeed.com, 1
 getpanelapp.com, 1
 getpei.com, 1
 getprivacy.de, 1
 getprivacy.net, 1
 getpublii.com, 1
 getpuck.com, 1
 getrambling.com, 1
@@ -19401,16 +19509,17 @@ gfelite.de, 1
 gfestival.fo, 1
 gfk-kunststoff-luebben.de, 1
 gflame.de, 1
 gfms.ru, 1
 gfnetfun.cf, 1
 gforce.ninja, 1
 gfoss.eu, 1
 gfoss.gr, 1
+gfourmis.co, 1
 gfournier.ca, 1
 gfw.moe, 1
 gfxbench.com, 1
 ggdcpt.com, 1
 gginin.today, 1
 ggl-luzern.ch, 1
 gglks.com, 1
 ggma.co.uk, 1
@@ -19608,16 +19717,17 @@ glamourdaze.com, 1
 glasdon.com, 1
 glasen-hardt.de, 1
 glasfaser-im-hanseviertel.de, 1
 glasgestaltung.biz, 1
 glasner.photo, 1
 glaspe.com, 1
 glass.google.com, 1
 glasschmuck-millefiori.de, 1
+glassemployees.com, 1
 glassexpertswa.com, 1
 glassrainbowtrust.org.je, 1
 glassrom.pw, 1
 glasweld.com, 1
 glavsudexpertiza.ru, 1
 glazedmag.fr, 1
 glcastlekings.co.uk, 1
 gle, 1
@@ -19816,17 +19926,16 @@ gokmenguresci.com, 1
 golang.org, 1
 golang.zone, 1
 golangnews.com, 1
 goldclubcasino.com, 1
 goldcoastasian.com, 1
 goldcoasthypnotherapyhypnosis.com.au, 1
 goldcoastphotographycourses.com, 1
 goldcoaststumpbusters.com, 1
-goldegg-training.com, 0
 goldenbadger.de, 1
 goldendawnapersonalaffair.com, 1
 goldenhillsoftware.com, 1
 goldenhost.ca, 1
 goldenplate.com.sg, 1
 goldenruleemail.com, 1
 goldfelt.com, 1
 goldfmromania.ro, 1
@@ -19859,16 +19968,17 @@ gomelphoto.com, 1
 gommista.roma.it, 1
 gondawa.com, 1
 gondelvaartdwarsgracht.nl, 1
 gongjianwei.com, 1
 gongjuhao.com, 1
 gonx.dk, 0
 gonzalesca.gov, 1
 goo.gl, 1
+good-tips.pro, 1
 good588.com, 1
 gooday.life, 1
 gooddomainna.me, 1
 goodfeels.net, 1
 goodhealthtv.com, 1
 goodiesoftware.xyz, 1
 goodquote.gq, 1
 goodryb.top, 1
@@ -19959,16 +20069,17 @@ governorhub.com, 1
 govisitcostarica.co.cr, 1
 govisitcostarica.com, 1
 govsurvey.us, 1
 govtjobs.blog, 1
 govype.com, 1
 gow220.ru, 1
 gowancommunications.com, 1
 gowe.wang, 0
+goweraesthetics.co.uk, 1
 gowildrodeo.co.uk, 1
 gowin9.com, 1
 gowin9.net, 1
 gowithflo.de, 1
 gozadentro.com, 1
 gozenhost.com, 1
 gpalabs.com, 1
 gpcsolutions.fr, 1
@@ -19982,16 +20093,17 @@ gplintegratedit.com, 1
 gpm.ltd, 1
 gprs.uk.com, 1
 gps.com.br, 1
 gpsarena.ro, 1
 gpscamera.nl, 1
 gpsfix.cz, 1
 gpsolarpanels.com, 1
 gpsvideocanada.com, 1
+gpu.nu, 1
 gpureport.cz, 1
 gpws.ovh, 1
 gpyy.net, 1
 gr.search.yahoo.com, 0
 gr8engineer2b.com, 1
 gra2.com, 1
 graandco.com, 0
 graasp.net, 0
@@ -20134,16 +20246,17 @@ green-attitude.be, 1
 green-care.nl, 1
 green-light.cf, 1
 green-light.co.nz, 1
 green-light.ga, 1
 green-light.gq, 1
 green-light.ml, 1
 greenaddress.it, 1
 greenapproach.ca, 1
+greencard.su, 1
 greencircleplantnursery.com.au, 1
 greencircleplantnursery.net.au, 1
 greenconn.ca, 1
 greener.pl, 1
 greengoblindev.com, 1
 greengov.gov, 1
 greenhats.de, 1
 greenliquidsystem.com, 1
@@ -20260,16 +20373,17 @@ gronau-it-cloud-computing.de, 1
 grondius.com, 1
 groomershop.ru, 0
 groomscroft.co.uk, 1
 groomscroft.com, 1
 grootinadvies.nl, 1
 groovydisk.com, 1
 groovygoldfish.org, 1
 gropp.org, 1
+gross-gerau-hausarzt.de, 1
 gross.business, 1
 grossberger-ge.org, 1
 grossell.ru, 1
 grossmisconduct.news, 1
 groszek.pl, 1
 groth.im, 1
 groth.xyz, 1
 grothoff.org, 1
@@ -20301,17 +20415,16 @@ gruelang.org, 1
 gruenderlehrstuhl.de, 1
 gruenderwoche-dresden.de, 1
 gruene-im-rvr.de, 1
 gruene-wattenscheid.de, 1
 gruenes-wp.de, 1
 gruenprint.de, 1
 grumpy.fr, 1
 grumpygamers.com, 1
-grundlage.com.ua, 1
 grunwaldzki.center, 1
 grunwasser.fr, 1
 grupodatco.com, 1
 grupomakben.com, 1
 grupomedlegal.com, 1
 grupoparco.com, 1
 grupoproabienesraices.com.mx, 1
 gruselgrotte.com, 1
@@ -20458,16 +20571,17 @@ guts.me, 1
 guts.moe, 1
 gutschein-spezialist.de, 1
 gutscheingeiz.de, 1
 gutuia.blue, 1
 guus-thijssen.nl, 1
 guusvandewal.nl, 1
 guvernalternativa.ro, 1
 guyeskens.be, 1
+guysauto.com, 1
 gv-neumann.de, 1
 gv-salto.nl, 1
 gvatas.in, 1
 gvc-it.tk, 1
 gvchannel.xyz, 1
 gveh.de, 1
 gvi-timing.ch, 1
 gviedu.com, 1
@@ -20478,16 +20592,17 @@ gvoetbaldagenalcides.nl, 1
 gvt2.com, 1
 gvt3.com, 1
 gvwgroup.com, 1
 gw2efficiency.com, 1
 gw2treasures.com, 1
 gw2zone.net, 1
 gwerder.net, 1
 gwhois.org, 1
+gwo24.pl, 1
 gwrtech.com, 1
 gwsec.co.uk, 1
 gwynfryncottages.com, 1
 gxgx.org, 1
 gxlrx.net, 1
 gxmyqy.net, 1
 gyara.moe, 1
 gyas.nl, 1
@@ -20572,16 +20687,17 @@ hackademix.net, 1
 hackadena.com, 1
 hackanders.com, 1
 hackattack.com, 1
 hackbarth.guru, 1
 hackbeil.name, 1
 hackbubble.me, 1
 hackcraft.net, 1
 hackdown.me, 1
+hackdown.org, 1
 hackenkunjeleren.nl, 1
 hackenturet.dk, 1
 hacker.club, 1
 hacker.deals, 1
 hacker.holiday, 1
 hacker.im, 1
 hacker.one, 1
 hacker.parts, 1
@@ -20664,16 +20780,17 @@ hakase.pw, 1
 hakatabijin-mind.com, 1
 hake.me, 1
 hakkasannightclub.com, 1
 hakugin.me, 1
 hakurei.moe, 1
 hal-9th.space, 1
 halacs.hu, 1
 halbich.design, 1
+halbowman.com, 1
 halcyonsbastion.com, 1
 haleo.net, 1
 half-logic.eu.org, 1
 half.host, 1
 halfco.de, 1
 halfhosting.de, 1
 halfwaythere.eu, 1
 halkirkbouncycastles.co.uk, 1
@@ -20700,16 +20817,17 @@ hamburg40grad.de, 1
 hamburgerbesteld.nl, 1
 hamcocc.com, 1
 hamcram.io, 1
 hamikala.com, 1
 hamiltonlinen.com, 1
 hamiltonmedical.nl, 1
 hamking.tk, 1
 hammamsayad.com, 1
+hammer-schnaps.com, 1
 hammer-sms.com, 1
 hammerpondkennels.co.uk, 1
 hampl.tv, 1
 hampshiretechservices.co.uk, 1
 hamsters-uk.org, 1
 hamu.blue, 1
 hana.ondemand.com, 1
 hanakaraku.com, 1
@@ -20782,16 +20900,17 @@ haorenka.org, 1
 haozhang.org, 1
 haozhexie.com, 1
 haozi.me, 1
 haozijing.com, 1
 hapheemraadssingel.nl, 1
 hapijs.cn, 1
 hapissl.com, 1
 hapivm.com, 1
+haplogroup.org, 1
 happy-baby.info, 1
 happy-end-shukatsu.com, 1
 happy-life-food.de, 1
 happyagain.de, 1
 happyagain.se, 1
 happyandrelaxeddogs.eu, 1
 happybeerdaytome.com, 1
 happybirthdaywisher.com, 1
@@ -20853,17 +20972,16 @@ harrcostl.com, 1
 harringtonca.com, 1
 harrisconsulting.ie, 1
 harrisonsand.com, 0
 harrisonswebsites.com, 1
 harrisonvillenaz.org, 1
 harry-baker.com, 1
 harrygerritstransport.nl, 1
 harrymclaren.co.uk, 1
-harryphoto.fr, 1
 harrypottereditor.com, 1
 harrypottereditor.net, 1
 harrysgardengamehire.co.uk, 1
 harrysmallbones.co.uk, 1
 harrysqnc.co.uk, 1
 harschnitz.nl, 0
 hartie95.de, 1
 hartkampforkids.nl, 1
@@ -20901,16 +21019,17 @@ hashicorp.com, 1
 hashimah.ca, 1
 hashimoto-jimusho.com, 1
 hashinteractive.com, 1
 hashish.net, 1
 hashiura.jp, 1
 hashnode.com, 1
 hashplex.com, 1
 hashru.nl, 1
+hashtagpatriot.com, 1
 hashworks.net, 1
 hashxp.org, 1
 hasilocke.de, 1
 haskovec.com, 1
 hasselbach-dellwig.de, 1
 hatarisecurity.co.ke, 1
 hatcher.cloud, 1
 hatethe.uk, 1
@@ -20951,16 +21070,17 @@ haven-moon.com, 1
 haven-staging.cloud, 1
 havencyber.com, 1
 havenstrategies.com, 1
 havernbenefits.com, 1
 haverstack.com, 1
 havetherelationshipyouwant.com, 1
 hawaar.com, 1
 hawaiianchoice.com, 1
+hawaiioceanproject.com, 1
 hawawa.kr, 1
 hawaya.com, 1
 hawk-la.com, 1
 hawkeyeinsight.com, 1
 hawkinsonkiaparts.com, 1
 hawkon.dk, 1
 hawksguild.com, 1
 hawksracing.de, 1
@@ -20968,16 +21088,18 @@ hax.to, 1
 haxdroid.com, 1
 haxo.nl, 0
 haxx.hu, 1
 hayai.space, 1
 hayashi-rin.net, 1
 haydenjames.io, 1
 haydentomas.com, 1
 hayfordoleary.com, 1
+haynes-davis.com, 1
+haystack-staging.com, 1
 hayvid.com, 1
 haz.cat, 1
 haze-productions.com, 1
 haze.productions, 1
 hazeover.com, 1
 hazloconlapix.com, 1
 hazukilab.com, 1
 hb8522.com, 1
@@ -21015,17 +21137,16 @@ hdv.paris, 1
 hdwallpapers.net, 1
 hdy.nz, 1
 heaaart.com, 1
 head.org, 1
 head.ru, 1
 headforcloud.com, 1
 headjapan.com, 1
 headlinepublishing.be, 1
-headshopinternational.com, 1
 headshotharp.de, 1
 healike.hk, 1
 health-and-beauty-news.net, 1
 health-match.com.au, 1
 health-plan-news.com, 1
 health.gov, 1
 health.graphics, 1
 healthand-beautynews.net, 1
@@ -21093,17 +21214,16 @@ hebergeurssd.com, 1
 heberut.gov, 1
 hebikhiv.nl, 1
 hebingying.cn, 1
 hebocon.nl, 1
 hec-espace-entreprise.ch, 1
 hec.global, 1
 heckelektro.de, 1
 heckerundknopp.de, 1
-heckticmedia.com, 1
 hectorj.net, 1
 hedgeschool.ie, 1
 hedonism.org, 1
 hedonistic-imperative.com, 1
 hedonistic.org, 1
 hedonium.com, 1
 hedweb.co.uk, 1
 hedweb.com, 1
@@ -21141,17 +21261,16 @@ heinzelmann.co, 1
 heiraten-gardasee.de, 1
 heiraten-venedig.de, 1
 heisenberg.co, 1
 heissluft-fritteuse.com, 1
 heistheguy.com, 1
 heitepriem.info, 1
 heitland-it.de, 1
 heiwa-valve.co.jp, 0
-hejahanif.se, 1
 hejianpeng.cn, 1
 hejsupport.se, 1
 heka.ai, 1
 hekeki.com, 1
 helber-it-services.de, 1
 helden-spielen.de, 1
 heldenhalde.de, 1
 heldtech.services, 1
@@ -21255,16 +21374,17 @@ hentschke-bau.de, 1
 hentschke-betonfertigteilwerk.de, 1
 hentschke-invest.de, 1
 henzenhoning.nl, 1
 heppler.net, 1
 heptafrogs.de, 1
 heptner24.de, 1
 her25.com, 0
 heracles-hotel.eu, 1
+heraldik-wiki.de, 1
 herba-belgie.be, 1
 herbandpat.org, 1
 herberichfamily.com, 1
 herbert.io, 1
 herbertjanvandinther.nl, 1
 herbhuang.com, 1
 herbweb.net, 1
 herbweb.org, 1
@@ -21367,31 +21487,31 @@ hg71839.com, 1
 hg881.com, 1
 hgbet.com, 1
 hgfa.fi, 1
 hgpowerglue.nl, 1
 hguandl.com, 1
 hgvnet.de, 1
 hgw168.com, 1
 hh-medic.com, 1
-hh-wolke.dedyn.io, 1
 hhgdo.de, 1
 hhh1080.com, 1
 hhhdb.com, 1
 hhidr.org, 1
 hhmmmm.de, 1
 hhs.gov, 1
 hhuitvaart.nl, 1
 hialatv.com, 1
 hibari.moe, 1
 hiccupsandjuice.co.uk, 1
 hickorywinecellar.com, 1
 hicl.org, 1
 hicoria.com, 1
 hicts.nl, 1
+hiczp.com, 1
 hidbo.de, 1
 hiddendepth.ie, 1
 hiddenhillselectric.com, 1
 hiddenhillselectrical.com, 1
 hiddenhillselectrician.com, 1
 hiddenhillsexteriorlighting.com, 1
 hiddenhillslandscapelighting.com, 1
 hiddenhillslighting.com, 1
@@ -21403,30 +21523,32 @@ hideo54.com, 1
 hideouswebsite.com, 1
 hideout.agency, 0
 hieu.com.au, 1
 hig.gov, 1
 higgsboson.tk, 1
 higgstools.org, 1
 highair.net, 1
 higherpress.org, 1
+highkick.jp, 1
 highland-webcams.com, 1
 highlandparkcog.org, 1
 highlatitudestravel.com, 1
 highlegshop.com, 1
 highlevelwoodlands.com, 1
 highlightsfootball.com, 1
 highlnk.com, 1
 highspeed-arnsberg.de, 1
 highspeedinternet.my, 1
 hightechbasementsystems.com, 1
 hightechgadgets.net, 1
 hightimes.com, 1
 highwaytohoell.de, 1
 higilopocht.li, 1
+hijackpost.com, 0
 hikawa.top, 1
 hike.pics, 1
 hikerone.com, 1
 hikinggearlab.com, 1
 hikingguy.com, 1
 hilahdih.cz, 1
 hilaolu.com, 1
 hilaryhutler.com, 1
@@ -21666,17 +21788,16 @@ holyfamilyrussell.org, 1
 holyghost-church.org, 1
 holygrail.games, 1
 holyhiphopdatabase.com, 1
 holymartyrschurch.org, 1
 holyspiritpalmyra.com, 1
 holyspiritweb.org, 1
 holytransaction.com, 1
 holywhite.com, 1
-holz.nu, 1
 holzed.com, 1
 holzheizer-forum.de, 1
 holzheizerforum.de, 1
 holzschutz-holzbearbeitung.de, 1
 holzspielzeug-shop.ch, 1
 holzstueckwerk.de, 1
 holzundgarten.de, 1
 holzvergaser-forum.de, 1
@@ -21749,16 +21870,17 @@ honkion.net, 1
 honoka-seitai.jp, 1
 honoka.tech, 1
 honovere.de, 1
 hontoir.eu, 1
 hoodoo.io, 1
 hoodoo.tech, 1
 hoodtrader.com, 1
 hoofddorp-centraal.nl, 1
+hoogeveen.nl, 1
 hookany.com, 1
 hookbin.com, 1
 hookupndate.com, 1
 hoooc.com, 1
 hooowl.com, 1
 hoop.la, 1
 hoopertechnicalsolutions.com, 1
 hooplessinseattle.com, 1
@@ -21818,16 +21940,17 @@ horvatnyelvkonyv.hu, 1
 hory.me, 1
 horza.org, 1
 hoshinplan.com, 1
 hoshisato.com, 1
 hosiet.me, 1
 hosmussynergie.nl, 0
 hospitalhomelottery.org, 1
 hospitality-colleges.com, 1
+host97.de, 1
 hostadvice.com, 1
 hostam.link, 1
 hostarea51.com, 1
 hostco.nl, 1
 hosteasy.nl, 0
 hostedcomments.com, 1
 hostedtalkgadget.google.com, 1
 hostfission.com, 1
@@ -21907,16 +22030,17 @@ hottheme.net, 1
 hotting.nl, 1
 hottubhirenewcastle.co.uk, 1
 hottubspasnewcastle.co.uk, 1
 hotwifer.com, 1
 houdremont-la-courneuve.info, 1
 houraiteahouse.net, 1
 house-of-japan.co.jp, 1
 house-sparrow.com, 1
+houseandgarden.co.uk, 1
 houseboydesigns.com, 1
 houseinvestor.com, 1
 housekeeperlondon.co.uk, 1
 houselocal.co.uk, 1
 houseofherbs.gr, 1
 houseofhouston.com, 1
 houseofyee.com, 1
 houser.lu, 1
@@ -22024,16 +22148,17 @@ hsuan.pw, 1
 hsulei.com, 1
 hszemi.de, 1
 ht.mk, 1
 htaccessbook.com, 1
 htaps.com, 1
 hte.ovh, 1
 hti.digital, 1
 htlball.at, 1
+htmanager.fr, 1
 html.moe, 1
 html5.org, 1
 html5media.info, 1
 htmlacademy.ru, 1
 htmlvalidator.com, 1
 htmlyse.com, 1
 htmue.net, 1
 htmue.org, 1
@@ -22269,16 +22394,17 @@ hybridworx.eu, 1
 hybridworx.net, 1
 hybridworx.org, 1
 hybrydowe-samochody.pl, 1
 hybula.com, 1
 hycken.com, 1
 hyckenberg.com, 1
 hyderabadonlinegifts.com, 1
 hydra.zone, 1
+hydracommunity.net, 1
 hydrante.ch, 1
 hydrasolutions.de, 1
 hydro17.com, 1
 hydroagro.pl, 1
 hydrocloud.net, 1
 hydrographicsocietybenelux.eu, 1
 hydronicheatingaustralia.com.au, 1
 hydroturbine.info, 1
@@ -22287,16 +22413,17 @@ hyec.jp, 1
 hygo.com, 1
 hyk.me, 1
 hylemorphica.org, 1
 hylians.com, 1
 hynek.me, 1
 hyparia.fr, 1
 hyparia.org, 1
 hype.ru, 1
+hypehost.net, 1
 hypeitems.pl, 1
 hypemgmt.com, 1
 hyper-matrix.org, 1
 hyper-text.org, 1
 hyperactive.am, 1
 hyperalgesia.com, 1
 hyperautomotive.com.au, 1
 hyperbolic-mayonnaise-interceptor.ovh, 1
@@ -22313,17 +22440,16 @@ hypotecnicentrum.cz, 1
 hypothecairelening.net, 1
 hypotheekbond.nl, 1
 hypotheques24.ch, 1
 hypothes.is, 1
 hypothesis.link, 1
 hypothyroidmom.com, 1
 hyr.mn, 1
 hysh.jp, 1
-hysolate.com, 1
 hytale.com, 1
 hyundai.no, 1
 hyvanilmankampaamo.fi, 1
 hyvinvointineuvoja.fi, 1
 hyvive.com, 1
 hyyen.com, 1
 hztgzz.com, 1
 i--b.com, 1
@@ -22565,16 +22691,17 @@ idesoftinnovacion.es, 1
 idexxpublicationportal.com, 1
 idfy.io, 1
 idgard.de, 0
 idgateway.co.uk, 1
 idhosts.co.id, 1
 idid.tk, 1
 idiotentruppe.de, 1
 idisposable.co.uk, 1
+idleleo.com, 1
 idlethoughtsandramblings.com, 1
 idmanagement.gov, 1
 idmobile.co.uk, 1
 idndx.com, 1
 idoc24.com, 1
 idodiandina.com, 1
 idol-bikes.ru, 1
 idolf.dk, 1
@@ -22618,16 +22745,18 @@ if0.ru, 1
 ifan.ch, 1
 ifan.ws, 1
 ifangpei.cn, 1
 ifangpei.com.cn, 1
 ifasec.de, 0
 ifcfg.jp, 1
 ifcfg.me, 1
 ifelse.io, 1
+ifengge.cn, 1
+ifengge.me, 1
 ifgcdn.com, 1
 ifibe.com, 1
 ifightsurveillance.com, 1
 ifightsurveillance.net, 1
 ifightsurveillance.org, 1
 ifixe.ch, 1
 iflare.de, 1
 ifly.pw, 1
@@ -22812,16 +22941,17 @@ ilovethiscampsite.com, 1
 ilrg.com, 1
 iltec-prom.ru, 1
 iltec.ru, 1
 iltuogiardino.org, 1
 ilweb.es, 1
 ilya.pp.ua, 1
 im-c-shop.com, 1
 im-haus-sonnenschein.de, 1
+im-in.space, 1
 im2net.com, 1
 im4h.de, 1
 im4h.eu, 1
 im4h.info, 1
 im66.net, 1
 ima-tourcoing.fr, 1
 ima.re, 1
 imacs.org, 1
@@ -22848,16 +22978,17 @@ imanageproducts.co.uk, 1
 imanageproducts.uk, 1
 imanesdeviaje.com, 1
 imanolbarba.net, 1
 imap2imap.de, 1
 imaple.org, 1
 imarkethost.co.uk, 1
 imask.ml, 1
 imawhale.com, 1
+imbiancatura.milano.it, 1
 imbianchino.roma.it, 1
 imbrian.org, 1
 imbushuo.net, 1
 imcsi.cn, 1
 imcsx.co, 1
 imdemos.com, 1
 ime.moe, 1
 imedes.de, 1
@@ -23056,17 +23187,16 @@ indiegame.space, 1
 indievelopment.nl, 1
 indigitalagency.com, 1
 indigoinflatables.com, 1
 indigolawnscape.net, 1
 indigosakura.com, 1
 indigotreeservice.com, 1
 indika.pe, 1
 indio.co.jp, 1
-indiraactive.com, 1
 inditip.com, 1
 indochina.io, 1
 indogermanstartup.com, 1
 indogermantrade.de, 1
 indoorcomfortteam.com, 1
 indovinabank.com.vn, 1
 indusap.com, 1
 indusfastremit-ca.com, 1
@@ -23143,16 +23273,17 @@ infocommsociety.com, 1
 infocon.org, 1
 infocusvr.net, 1
 infodesigners.eu, 1
 infoduv.fr, 1
 infogram.com, 1
 infogrfx.com, 1
 infomasx.com, 1
 infomegastore.com, 1
+infomir.eu, 1
 infomisto.com, 1
 infopier.sg, 1
 infopulsa.com, 1
 infopuntzorg.nl, 1
 infor-allaitement.be, 1
 informaciondeciclismo.com, 1
 informatiebeveiliging.nl, 1
 informatik-handwerk.de, 1
@@ -23521,16 +23652,17 @@ internetmuseum.se, 1
 internetnz.nz, 1
 internetofdon.gs, 1
 internetoffensive.fail, 1
 internetofinsecurethings.com, 1
 internetovehazardnihry.cz, 1
 internetpro.me, 1
 internetstaff.com, 1
 internetzentrale.net, 1
+interociter-enterprises.com, 0
 interparcel.com, 1
 interpol.gov, 1
 interracial.dating, 1
 interseller.io, 1
 interspot.nl, 1
 interssl.com, 1
 interstateautomotiveinc.com, 1
 intertime.services, 1
@@ -23582,16 +23714,17 @@ inventoryimages.com, 1
 inventtatte.com, 1
 inventtheworld.com.au, 1
 inventum.cloud, 1
 inverselink-user-content.com, 1
 inverselink.com, 1
 inversioneseconomicas.com, 1
 investarholding.nl, 1
 investigatore.it, 1
+investigazione.milano.it, 1
 investigazionimoretti.it, 1
 investingdiary.cn, 1
 investingtrader.net, 1
 investinturkey.com.tr, 1
 investir.ch, 1
 investor-academy.jp, 1
 investor.gov, 1
 investoren-beteiligung.de, 1
@@ -23637,16 +23770,17 @@ iodu.re, 1
 iofort.com, 1
 iojo.net, 1
 ioliver.co.uk, 1
 iomedia.ch, 1
 iompost.com, 1
 iomstamps.com, 1
 ionc.ca, 1
 iondrey.cf, 1
+iondrey.fr, 1
 iondrey.ga, 1
 iondrey.gq, 1
 iondrey.ml, 1
 iondrey.tk, 1
 ionlabs.kr, 1
 ionovia.de, 1
 ionspin.com, 1
 ionx.co.uk, 1
@@ -24019,16 +24153,17 @@ itm-c.de, 1
 itmanie.cz, 1
 itmindscape.com, 1
 itn.co.uk, 1
 itneeds.tech, 1
 itnota.com, 1
 itochan.jp, 1
 itooky.com, 1
 itouriria.com, 1
+itpanda.pl, 1
 itpro-mg.de, 1
 itpro.ua, 1
 itraveille.fr, 1
 itreallyaddsup.com, 1
 itring.pl, 0
 itruss.com.tw, 1
 itruth.tk, 1
 its-future.com, 1
@@ -24046,17 +24181,16 @@ itsayardlife.com, 1
 itsblue.de, 1
 itsdcdn.com, 1
 itsecblog.de, 1
 itsecguy.com, 1
 itseeze.com, 1
 itsense.fr, 1
 itsevident.com, 1
 itsgoingdown.org, 1
-itshka.rv.ua, 1
 itsmejohn.org, 1
 itsmyparty.ie, 1
 itsnotquitethehilton.com, 1
 itsok.de, 1
 itspartytimeonline.co.uk, 1
 itspartytimesweetinflations.com, 1
 itspecialista.eu, 1
 itspersonaltraining.nl, 1
@@ -24115,16 +24249,17 @@ iwch.tk, 1
 iwd.gc.ca, 1
 iwell.de, 1
 iwex.swiss, 1
 iwizerunek.pl, 1
 iworos.com, 1
 iwos.io, 1
 iww.me, 1
 iww.mx, 1
+ix.mk, 1
 ix8.ru, 0
 ixds.org, 1
 ixio.cz, 1
 ixnext.de, 1
 ixquick-proxy.com, 1
 ixquick.co.uk, 1
 ixquick.com, 1
 ixquick.de, 1
@@ -24190,16 +24325,18 @@ jabjab.de, 1
 jaccblog.com, 1
 jacekowski.org, 1
 jacik.cz, 1
 jack2celebrities.com, 1
 jackassofalltrades.org, 1
 jackdawphoto.co.uk, 1
 jackdelik.de, 1
 jackf.me, 1
+jackflet.ch, 1
+jackfletcher.me, 1
 jackgreenrealty.com, 1
 jackhoodtransportation.com, 1
 jackingramnissanparts.com, 1
 jackjack.ga, 1
 jackops.com, 1
 jackpothappy.com, 1
 jackrusselterrier.com.br, 1
 jacksanalytics.com, 1
@@ -24383,17 +24520,16 @@ jaot.info, 1
 japanesemotorsports.net, 1
 japangids.nl, 1
 japaniac.de, 0
 japanphilosophy.com, 0
 japansm.com, 1
 japanwatches.xyz, 1
 jape.today, 1
 japon-japan.com, 1
-jardin-exotique-rennes.fr, 1
 jardinderline.ch, 1
 jardineriaon.com, 1
 jardiniersduminotaure.fr, 1
 jaredeberle.org, 0
 jaredfernandez.com, 1
 jaredfraser.com, 1
 jarl.ninja, 1
 jarniashop.se, 1
@@ -24616,29 +24752,31 @@ jeroensangers.com, 1
 jerret.de, 1
 jerrypau.ca, 1
 jerrysretailstores.com, 1
 jerryweb.org, 1
 jerryyu.ca, 1
 jerseybikehire.co.uk, 1
 jerseyjumpingbeans.co.uk, 1
 jerseylvi2013.org, 1
+jerseyplantsdirect.com, 1
 jes.events, 1
 jesec.io, 1
 jesiensredniowiecza.pl, 1
 jesse3.com, 1
 jesseerbach.com, 1
 jessekaufman.com, 1
 jessesjumpingcastles.co.uk, 1
 jessevictors.com, 1
 jessgranger.com, 0
 jessicabenedictus.nl, 0
 jessicahrehor.com, 1
 jesters-court.net, 1
 jesuisadmin.fr, 1
+jesusvazquez.online, 1
 jet-stream.fr, 1
 jetapi.org, 1
 jetbbs.com, 1
 jetflex.de, 1
 jetkittens.co.uk, 1
 jetsetboyz.net, 1
 jetsieswerda.nl, 1
 jettlarue.com, 1
@@ -24727,17 +24865,16 @@ jinkuru.net, 1
 jinliming.ml, 1
 jino-jossy.appspot.com, 1
 jinshuju.net, 1
 jintaiyang123.org, 1
 jiogo.com, 1
 jiosongs.biz, 1
 jirav.com, 1
 jiripudil.cz, 1
-jirosworld.com, 1
 jisai.net.cn, 1
 jisha.site, 1
 jix.im, 1
 jixun.moe, 1
 jiyue.com, 1
 jiyue.moe, 1
 jiyuu-ni.com, 1
 jiyuu-ni.net, 1
@@ -24834,16 +24971,17 @@ jodaniels.photography, 1
 jodbush.com, 1
 jodlajodla.si, 1
 joduska.me, 1
 jodyboucher.com, 0
 joe262.com, 1
 joearodriguez.com, 1
 joecod.es, 1
 joedavison.me, 1
+joedinardo.com, 1
 joedoyle.us, 1
 joedroll.com, 1
 joefixit.co, 1
 joefixit.co.uk, 1
 joehenry.co.uk, 1
 joel.coffee, 1
 joelcoustrain.com, 1
 joeldrapper.com, 1
@@ -24865,17 +25003,16 @@ joerss.at, 1
 joeseago.com, 1
 joeskup.com, 1
 joesniderman.com, 1
 joespaintingpgh.com, 1
 joestead.codes, 0
 joetsutj.com, 1
 joetyson.io, 1
 joetyson.me, 1
-joeyfelix.com, 1
 joeygitalian.com, 1
 joeyhoer.com, 1
 joeysmith.com, 1
 joeyvanvenrooij.nl, 1
 joeyvilaro.com, 1
 jogi-server.de, 1
 jogjacar.com, 1
 jogorama.com.br, 0
@@ -24938,16 +25075,17 @@ jojosplaycentreandcafeteria.co.uk, 1
 jokedalderup.nl, 1
 joker.menu, 1
 jokerice.co.uk, 1
 jokesbykids.com, 1
 jokescoff.com, 1
 jokewignand.nl, 1
 joliet.gov, 1
 joliettech.com, 1
+jolinebrussel.nl, 1
 jollausers.de, 1
 jolle.io, 1
 jollygoodspudz.ca, 1
 jollykidswobbleworld.co.uk, 1
 jolokia.ch, 1
 jomagus.de, 1
 jomibe.de, 1
 jomo.tv, 1
@@ -24987,16 +25125,17 @@ jongbloed.nl, 1
 jongcs.com, 1
 jongpay.com, 1
 jonilar.com, 1
 jonincharacter.com, 1
 jonirrings.com, 1
 jonkermedia.nl, 0
 jonlabelle.com, 1
 jonlu.ca, 1
+jonny5.ru, 1
 jonnybarnes.uk, 1
 jonnystoten.com, 1
 jonoalderson.com, 1
 jonola.com, 1
 jonpads.com, 1
 jonpavelich.com, 1
 jons.org, 1
 jonscaife.com, 1
@@ -25143,17 +25282,16 @@ jsproxy.tk, 1
 jss.moe, 1
 jsteward.moe, 1
 jstore.ch, 1
 jsvr.tk, 0
 jsxc.ch, 1
 jtcat.com, 1
 jtcjewelry.com, 1
 jtconsultancy.sg, 1
-jthackery.com, 0
 jtl-software.com, 1
 jtmar.me, 1
 jtp.id, 1
 jts3servermod.com, 1
 jtslay.com, 1
 ju.io, 1
 juan23.edu.uy, 1
 juanfrancisco.tech, 1
@@ -25260,16 +25398,17 @@ jungesforumkonstanz.de, 1
 jungidee.at, 1
 jungleducks.ca, 1
 junglejackscastles.co.uk, 1
 junglememories.co.uk, 1
 junglist.org, 1
 jungundwild-design.de, 0
 juni.io, 1
 junias-fenske.de, 1
+juniorhandball.com, 1
 juniperroots.ca, 1
 juniwalk.cz, 1
 junjhome.com, 1
 junjun-web.net, 1
 junkdrome.org, 1
 juno.co.uk, 1
 junoaroma.com, 1
 junodownload.com, 1
@@ -25377,16 +25516,17 @@ k4law.com, 1
 k4r.ru, 1
 k7azx.com, 1
 k82.org, 1
 k8n.de, 1
 k9swx.com, 1
 kaamoscreations.com, 1
 kaangenc.me, 1
 kaany.io, 1
+kaas.wtf, 1
 kaasbesteld.nl, 1
 kaatha-kamrater.se, 1
 kab-s.de, 1
 kabaca.design, 1
 kabarlinux.id, 1
 kabat-fans.cz, 1
 kabeltv.co.nz, 1
 kabeuchi.com, 1
@@ -25475,16 +25615,17 @@ kamikatse.net, 1
 kamilki.me, 1
 kaminbau-laub.de, 1
 kamisato-ent.com, 1
 kamitech.ch, 1
 kamixa.se, 1
 kampunginggris-ue.com, 1
 kamranmirhazar.com, 1
 kamui.co.uk, 1
+kamuniang.org, 1
 kan3.de, 1
 kana-mono.biz, 1
 kana.me, 1
 kanaete-uranai.com, 1
 kanag.pl, 1
 kanal-schaefer.de, 1
 kanal-tv-haensch.de, 1
 kanar.nl, 1
@@ -25596,31 +25737,31 @@ kartonmodellbau.org, 1
 karula.org, 1
 karuneshjohri.com, 1
 karupp-did.net, 1
 kasadara.com, 1
 kasei.im, 1
 kashinavi.com, 1
 kashis.com.au, 0
 kashmirobserver.net, 1
+kasinobonus.com, 1
 kasko.io, 1
 kasnoffskinclinic.com, 1
 kassa.at, 1
 kassa.expert, 1
 kastankaoffice.cz, 1
 kastelruth.biz, 1
 kastemperaturen.ga, 1
 kastgroup.com, 1
 kastorsky.ru, 1
 kat.marketing, 1
 katagena.com, 1
 katalogbajugamismu.com, 1
 katalogbutikker.dk, 1
 katarsisuib.no, 1
-katata-kango.ac.jp, 1
 katcleaning.com.au, 1
 katedra.de, 1
 kateduggan.net, 1
 kateenzenauer.com, 1
 katekligys.com, 1
 katemarsh.com, 1
 katemihalikova.cz, 1
 katericke.com, 1
@@ -25649,26 +25790,26 @@ katzensklave.me, 1
 katzrkool.xyz, 1
 kau-boys.com, 1
 kau-boys.de, 1
 kaufberatung.community, 1
 kaufmanbankruptcylaw.com, 1
 kauperwood.ovh, 1
 kausta.me, 1
 kavik.no, 1
+kavorka.me, 1
 kavovary-kava.cz, 1
 kawaii.io, 1
 kawaiii.link, 1
 kawaiiku.com, 1
 kawaiiku.de, 1
 kaweus.de, 1
 kay.la, 1
 kayakabovegroundswimmingpools.com, 1
 kaydan.io, 1
-kayipmurekkep.com, 1
 kayleen.net, 1
 kaylyn.ink, 0
 kayo.digital, 1
 kayon.cf, 1
 kayscs.com, 1
 kaysis.gov.tr, 0
 kazakov.lt, 1
 kazanasolutions.de, 1
@@ -25828,16 +25969,17 @@ kenyons.info, 1
 keops-spine.fr, 1
 keops-spine.us, 1
 kep-sbt.hu, 1
 kepkonyvtar.hu, 1
 keponews.com, 1
 kepsbt.hu, 1
 keralit.nl, 1
 kerebro.com, 1
+kerenos.rocks, 1
 kerforhome.com, 0
 kerijacoby.com, 1
 kermadec.com, 1
 kermadec.fr, 1
 kermadec.net, 1
 kernel-error.de, 1
 kernelpanics.nl, 1
 kernelprogrammer.com, 1
@@ -25929,17 +26071,17 @@ kgv-schlauroth.de, 1
 khaledgarbaya.net, 0
 khanovaskola.cz, 1
 khas.co.uk, 1
 khasiatmanfaat.com, 1
 kheshtar.pl, 1
 khetzal.info, 1
 khg-orchester.de, 1
 khipu.com, 1
-khmb.ru, 0
+khmb.ru, 1
 khojirdesign.ir, 1
 khorne.me, 1
 khosla.uk, 1
 khoury-dulla.ch, 1
 khs1994.com, 1
 khslaw.com, 1
 khudothiswanpark.vn, 1
 khushiandjoel.com, 1
@@ -25949,18 +26091,18 @@ kiaka.co, 1
 kiano.net, 1
 kiapartscenter.net, 1
 kiapartsdepartment.com, 1
 kiapps.ovh, 1
 kiarayoga.com, 1
 kiasystems.com, 1
 kibbesfusion.com, 1
 kibea.net, 1
-kibibit.net, 1
 kibriscicek.net, 1
+kichy.net, 1
 kick-in.nl, 1
 kickasscanadians.ca, 1
 kickedmycat.com, 1
 kicou.info, 0
 kidaptive.com, 1
 kidbacker.com, 1
 kiddieschristian.academy, 1
 kiddyboom.ua, 1
@@ -26182,16 +26324,17 @@ kj1396.net, 1
 kj1397.com, 1
 kjaer.io, 1
 kjarni.cc, 1
 kjarrval.is, 1
 kjchernov.info, 1
 kjellner.com, 1
 kjelltitulaer.com, 1
 kjellvn.net, 1
+kjgmuenster.org, 1
 kjmedia.dk, 1
 kjnotes.com, 1
 kjoglum.me, 1
 kk-neudorf-duissern.de, 0
 kk.in.th, 1
 kk.sb, 1
 kki.org, 1
 kkovacs.eu, 1
@@ -26350,16 +26493,17 @@ kodamail.com, 1
 kodden.com.br, 1
 kode-it.de, 1
 kode.ch, 1
 kodify.net, 1
 koe.hn, 1
 koebbes.de, 1
 koecollege.com, 1
 koeeusa.org, 1
+koehlhoff.de, 1
 koehn.com, 1
 koelbli.ch, 1
 koelnmafia.de, 1
 koenigsbrunner-tafel.de, 1
 koenleemans.nl, 1
 koenrouwhorst.nl, 1
 koenzk.nl, 1
 koerperkult.ch, 1
@@ -26399,17 +26543,16 @@ kokona.ch, 1
 kokumoto.com, 1
 kolania.com, 1
 kolania.de, 1
 kolania.net, 1
 kolaykaydet.com, 1
 kolbeck.tk, 1
 kolbeinsson.se, 1
 kolcsey.eu, 1
-kolektivbrand.com, 1
 kolibrisolutions.nl, 1
 kolin.org, 1
 kolizaskrap.bg, 1
 kolja-engelmann.de, 1
 koljakrekow.de, 1
 kolkataflowermall.com, 1
 kollawat.me, 1
 kollect.ie, 1
@@ -26453,17 +26596,16 @@ konicaprinterdriver.com, 1
 koniecfica.sk, 0
 konijntjes.nl, 1
 konings.it, 0
 koningskwartiertje.nl, 1
 koninkrijk.net, 1
 konkai.store, 1
 konklone.com, 1
 konkurs.ba, 1
-konoe.studio, 1
 konosuke.jp, 1
 konplott.shop, 1
 konpyuta.nl, 1
 konsertoversikt.no, 1
 konst.se, 1
 kontaxis.org, 1
 kontorhaus-schlachte.de, 1
 kontorhaus-stralsund.de, 1
@@ -26555,16 +26697,17 @@ kovspace.com, 1
 kowalmik.tk, 1
 kowalstwo.com.pl, 1
 kowarschick.de, 1
 kowshiksundararajan.com, 1
 koyaanis.com, 1
 koyo.kr, 1
 kozawa.tokyo, 1
 kozmik.co, 1
+kozossegireklamozas.hu, 1
 kozuch.biz, 1
 kpfanworld.com, 1
 kpforme.org, 1
 kpinvest.eu, 1
 kplasticsurgery.com, 1
 kplnet.net, 1
 kpop.re, 1
 kpumuk.info, 1
@@ -26621,16 +26764,17 @@ kretschmann.consulting, 1
 kreuzpfadfinder.de, 1
 krey.is, 1
 kreza.de, 1
 krfuli.com, 1
 kriechel.de, 1
 kriegskindernothilfe.de, 1
 krinetzki.de, 1
 kringloopwinkelsteenwijk.nl, 1
+krinnovations.ie, 1
 kriptosec.com, 1
 kris.click, 1
 krise-chance.ch, 1
 krisftp.fr, 1
 krishnenduayur.org, 1
 krishofer.com, 1
 krishouse.fr, 1
 krislamoureux.com, 1
@@ -26677,20 +26821,22 @@ kry.se, 1
 kryglik.com, 1
 kryha.io, 0
 krypmonet.com, 1
 krypsys.com, 1
 krypt.com, 1
 kryptera.se, 1
 kryptomech.com, 1
 kryptomodkingz.com, 1
+kryptux.xyz, 1
 krytykawszystkiego.com, 1
 krytykawszystkiego.pl, 1
 kryx.de, 1
 ks-watch.de, 1
+ks181.com, 1
 ks626.com, 1
 ks88.com, 1
 kscarlett.com, 1
 kschv-rdeck.de, 1
 kselenia.ee, 1
 ksero.center, 1
 ksero.wroclaw.pl, 1
 ksham.net, 1
@@ -26921,17 +27067,16 @@ labortogether.com, 1
 labouncycastlehire.co.uk, 1
 labourreedevergheas.fr, 1
 laboutiquedejuliette.com, 1
 laboutiquemarocaineduconvoyeur.com, 1
 laboutiquemarocaineduconvoyeur.ma, 1
 laboxfaitsoncinema.com, 1
 labradorpuppiesforsalebyregisteredlabradorbreeders.com, 0
 labrat.mobi, 0
-labspack.com, 1
 labtest.ltd, 1
 lacaey.se, 1
 lacantine.xyz, 1
 lacasa.fr, 1
 lacasabelucci.com, 1
 lacaserita.org, 1
 lacasseroy.com, 1
 lacaveducinquantenaire.com, 1
@@ -26979,17 +27124,16 @@ lafeemam.fr, 1
 lafema.de, 1
 lafermegourmande.fr, 1
 lafillepolyvalente.ca, 1
 lafillepolyvalente.com, 1
 lafka.org, 1
 lafkor.de, 1
 laflash.com, 1
 laforetenchantee.ch, 1
-lafr4nc3.net, 1
 lafr4nc3.xyz, 1
 lag-gbr.gq, 1
 lagarderob.ru, 0
 lagazzettadigitale.it, 1
 lagerauftrag.info, 1
 lagier.xyz, 1
 lagit.in, 1
 laglab.org, 0
@@ -27066,16 +27210,17 @@ lampenwelt.at, 1
 lampenwelt.ch, 1
 lampenwelt.de, 1
 lampl.info, 0
 lampposthomeschool.com, 1
 lampsh.ml, 1
 lampy.pl, 1
 lamunyon.com, 1
 lan.biz.tr, 1
+lana.swedbank.se, 1
 lanahallen.com, 1
 lanbroa.eu, 1
 lancashirecca.org.uk, 1
 lancejames.com, 1
 lancelafontaine.com, 1
 lancelhoff.com, 1
 lancemanion.com, 1
 lanceyip.com, 1
@@ -27143,17 +27288,16 @@ lanternalauth.com, 1
 lanternhealth.org, 1
 lantian.pub, 1
 lanturtle.com, 1
 lanuovariviera.it, 1
 lanyang.tk, 1
 lanzamientovirtual.es, 1
 lanzarote-online.info, 1
 laos.dating, 1
-laospage.com, 1
 laozhu.me, 1
 lapakus.com, 1
 lapassiondutrading.com, 1
 lapatio.dk, 1
 laperfumista.es, 1
 lapetition.be, 1
 lapicena.eu, 1
 lapidge.net, 1
@@ -27265,16 +27409,17 @@ lauensteiner.de, 0
 laufpix.de, 1
 lauftreff-himmelgeist.de, 1
 laughinggrapepublishing.com, 1
 laukstein.com, 1
 launayflorian.net, 1
 launcher-minecraft.com, 1
 launchkey.com, 0
 launchmylifend.com, 1
+launchpad-app2.com, 1
 launchpadder2.com, 1
 laupv.online, 1
 lauraandwill.wedding, 0
 lauraenvoyage.fr, 1
 laurakashiwase.com, 1
 lauraofrank.com, 1
 lauraohagan.com, 1
 laurasplacefamilysupport.org.au, 1
@@ -27416,25 +27561,25 @@ leaks.directory, 1
 leamsigc.com, 0
 leanclub.org, 1
 leandre.cn, 1
 leankit.com, 1
 leanplando.com, 1
 leaodarodesia.com.br, 1
 leap-it.be, 1
 leapandjump.co.uk, 1
+leapworks.io, 1
 learndev.info, 1
 learnedhacker.com, 1
 learnerdriving.com, 0
 learnflakes.net, 1
 learnforestry.com, 1
 learning-id.com, 1
 learningis1.st, 1
 learninglaw.com, 1
-learningman.top, 1
 learnlux.com, 1
 learnpianogreece.com, 1
 learnplayground.com, 1
 learntale.com, 1
 learnthetruth.tk, 1
 leaseit24.com, 1
 leaseit24.de, 1
 leaseourthings.com, 1
@@ -27517,17 +27662,16 @@ legalrobot.com, 1
 legaltip.eu, 1
 legatofmrc.fr, 1
 legendesdechine.ch, 1
 legendofkrystal.com, 1
 legends-game.ru, 0
 legible.es, 1
 legilimens.de, 1
 legioniv.org, 1
-legionminecraft.com, 1
 legiscontabilidade.com.br, 1
 legissa.ovh, 1
 legit.nz, 1
 legjobblogo.hu, 1
 legland.fr, 1
 legnami24.it, 1
 legoutcheznous.com, 1
 legoutdesplantes.be, 1
@@ -27892,16 +28036,17 @@ lifecism.com, 1
 lifefoto.de, 1
 lifegrip.com.au, 1
 lifeinhex.com, 1
 lifeinsurancepro.org, 1
 lifeisabug.com, 1
 lifekiss.ru, 1
 lifelenz.com, 1
 lifematenutrition.com, 1
+lifemcserver.com, 1
 lifemstyle.com, 1
 lifenexto.com, 1
 lifeqa.net, 1
 lifequotes-uk.co.uk, 1
 lifereset.it, 1
 lifeslonglist.com, 1
 lifestyle7788.com, 1
 lifestylecent.com, 1
@@ -28157,16 +28302,17 @@ listminut.be, 1
 lists.fedoraproject.org, 1
 lists.mayfirst.org, 0
 lists.stg.fedoraproject.org, 1
 litcc.com, 1
 litchidova.nl, 1
 litcomphonors.com, 1
 litebit.eu, 1
 litebitanalytics.eu, 1
+litebitcdn.eu, 1
 litebits.com, 1
 litemind.com, 0
 literarymachin.es, 1
 literature-schools.com, 1
 litfin.name, 1
 lithan.com, 1
 lithesalar.se, 1
 lithianissaneugeneparts.com, 1
@@ -28246,16 +28392,17 @@ livekortti.fi, 1
 livela.jp, 1
 livelexi.com, 1
 livelifewithintent.com, 1
 livepaperhelp.com, 1
 liveperformersmeeting.net, 1
 liveregistratie.nl, 1
 liverider.co.jp, 1
 livesheep.com, 1
+liveslides.com, 1
 livesure.com, 1
 livetoride.co.za, 1
 livi.co, 1
 livi.co.uk, 1
 livi.fr, 1
 living-space.co.nz, 1
 living-with-outlook-2010.com, 1
 living.digital, 1
@@ -28271,16 +28418,17 @@ livnev.me, 1
 livnev.xyz, 1
 livogeva.dk, 1
 livolett.de, 1
 livroseuniformes.com.br, 1
 lixiaoyu.live, 1
 lixtick.com, 1
 liyang.pro, 0
 liyin.date, 1
+liyinjia.com, 1
 liz.ee, 1
 lizardsystems.com, 1
 lizheng.de, 1
 lizhi.io, 1
 lizhi123.net, 1
 lizhuogui.ga, 1
 lizzaran.io, 1
 lizzwood.com, 1
@@ -28293,16 +28441,17 @@ ljw.me, 1
 lk-hardware.cz, 1
 lkbk.uk, 1
 lkellar.org, 1
 lknw.de, 1
 lkp111138.me, 1
 lkummer.cz, 1
 llamacuba.com, 1
 llamasweet.tech, 1
+llandudnochristmasfayre.co.uk, 1
 llemoz.com, 1
 ller.xyz, 1
 lll.st, 1
 llm-guide.com, 1
 llnl.gov, 1
 lloyd-day.me, 1
 llslb.com, 0
 llvm.us, 1
@@ -28397,16 +28546,17 @@ lockaby.org, 1
 locker.email, 1
 locker.plus, 1
 locker3.com, 1
 lockify.com, 1
 lockoutgroup.com, 1
 lockpick.nl, 1
 lockpicks.se, 1
 lockr.io, 1
+locksmith--sanantoniotx.com, 1
 locksmith-durbannorth.co.za, 1
 locksmith-sanantonio-tx.com, 1
 locksmithbalchsprings.com, 1
 locksmithballito.com, 1
 locksmithbluff.co.za, 1
 locksmithcarrolltontx.com, 1
 locksmithdearborn.com, 1
 locksmithdrippingspringstx.com, 1
@@ -28491,16 +28641,17 @@ logtalk.org, 1
 logtalk.pt, 1
 logue.be, 1
 logze.nl, 1
 lohmeier.it, 1
 loic.gr, 1
 loichot.ch, 1
 loigiai.net, 1
 loihay.net, 1
+loisircreatif.net, 1
 lojadosomautomotivo.com.br, 1
 lojahunamarcenaria.com.br, 1
 lojamagicalx.com, 1
 lojatema.com.br, 1
 lojix.com, 1
 lojj.pt, 1
 lok.space, 1
 lokaal.org, 1
@@ -28510,17 +28661,16 @@ loket.nl, 1
 lolcorp.pl, 1
 lolcow.farm, 1
 lolhax.org, 1
 loli.com, 1
 loli.net, 1
 loli.pet, 1
 loli.ski, 1
 loli.tube, 1
-loli.world, 1
 loliblogs.cf, 1
 loliblogs.ga, 1
 loliblogs.gq, 1
 loliblogs.ml, 1
 lolibrary.org, 1
 lolic.xyz, 1
 lolicon.eu, 1
 lolicon.info, 1
@@ -28536,17 +28686,16 @@ lolnames.gg, 1
 lolpatrol.de, 1
 lolpatrol.wtf, 1
 loma.ml, 1
 lommeregneren.dk, 1
 lommyfleet.com, 1
 lon-so.com, 1
 lona.io, 1
 lonal.com, 1
-lonay.me, 1
 london-transfers.com, 1
 london.dating, 1
 londongallery.net, 1
 londongynaecologist.co, 1
 londonkan.jp, 1
 londonkeyholdingcompany.co.uk, 1
 londonpropertymatch.com, 1
 londonseedcentre.co.uk, 1
@@ -28611,17 +28760,17 @@ loreofthenorth.com, 1
 loreofthenorth.nl, 1
 loricozengeller.com, 1
 lorientlejour.com, 1
 loritaboegl.de, 1
 lormansas.com, 1
 losangelestown.com, 1
 losebellyfat.pro, 1
 loshogares.com.mx, 1
-losless.fr, 1
+losmedicamentos.net, 1
 losreyesdeldescanso.com.ar, 1
 loss.no, 1
 lost.host, 1
 lost.report, 1
 lostandcash.com, 1
 lostarq.com, 1
 lostingames.de, 1
 lostinweb.eu, 1
@@ -28695,16 +28844,17 @@ lovetravel360.com, 1
 lovevape.co, 1
 loveysa.ch, 1
 lovg.ren, 1
 lovingearth.co, 1
 lovingthermo.com, 1
 lovizaim.ru, 1
 low-diets.com, 1
 lowbidders.com, 1
+lowcost.to, 1
 lowcostwire.com.au, 1
 lowerpricefinder.com, 1
 lowmagnitude.com, 1
 lowsec.space, 1
 lowsidetna.com, 1
 lowson.ca, 1
 lowt.us, 1
 loyaleco.it, 1
@@ -28716,21 +28866,23 @@ lpacademy.com.br, 1
 lpbk-bethel.de, 0
 lpt-nebreziny.eu, 1
 lq.hr, 1
 lra-cloud.de, 1
 lrdo.net, 1
 lrhstsa.com, 1
 lriese.ch, 1
 lrssystems.com, 1
+lrumeq.com, 1
 ls-alarm.de, 1
 ls-modcompany.com, 1
 lsal.me, 1
 lsc-dillingen.de, 1
 lsc.gov, 1
+lsh1688.com, 1
 lshiy.com, 1
 lsmentor.com, 1
 lsmpx.com, 1
 lsquo.com, 1
 lsscreens.de, 1
 lstma.com, 1
 lsy.cn, 1
 lsys.ac, 1
@@ -28763,16 +28915,17 @@ lucafontana.net, 1
 lucafrancesca.me, 1
 lucakrebs.de, 1
 lucasantarella.com, 1
 lucasbergen.ca, 1
 lucascodes.com, 1
 lucasem.com, 1
 lucasgaland.com, 1
 lucasgymnastics.com, 1
+lucasit.com, 1
 lucaslarson.net, 1
 lucassoler.com.ar, 0
 luce.life, 1
 luchscheider.de, 0
 luchthavenmaastricht.nl, 1
 lucianoalbanes.com, 1
 lucid-light.de, 1
 lucid-reality.ch, 1
@@ -28933,17 +29086,17 @@ lv.search.yahoo.com, 0
 lv0.it, 1
 lv5.top, 1
 lvcshu.com, 1
 lvftw.com, 1
 lvguitars.com, 1
 lvmoo.com, 1
 lvrsystems.com, 1
 lw-addons.net, 1
-lwl-foej-bewerbung.de, 0
+lwl-foej-bewerbung.de, 1
 lwl.moe, 1
 lwl12.com, 1
 lxai.net, 1
 lxd.cc, 1
 lxd.pm, 1
 lyam.fr, 1
 lycee-saintjoseph-mesnieres.fr, 1
 lychankiet.name.vn, 0
@@ -29147,16 +29300,17 @@ maggie.com, 1
 magi-cake.com, 1
 magi.systems, 1
 magic-cards.info, 1
 magical-secrets.com, 1
 magical.rocks, 1
 magicalcircuslv.com, 1
 magicamulet.me, 1
 magicball.co, 1
+magicbeanschool.com, 1
 magicbroccoli.de, 1
 magiccards.info, 1
 magicdaysomagh.co.uk, 1
 magicdlp.com, 1
 magicjudges.org, 1
 magiclen.org, 1
 magicsms.pl, 1
 magicspaceninjapirates.de, 1
@@ -29409,17 +29563,16 @@ manicbouncycastles.co.uk, 1
 manicode.com, 1
 maniorpedi.com, 1
 maniosglass.gr, 1
 manipil.ch, 1
 manja-und-martin.de, 1
 manjaro.ru, 1
 mankans.com, 1
 mankomarketing.com, 1
-manmeetgill.com, 1
 mann-und-maeuse.de, 1
 manneguiden.no, 1
 mannford.com, 1
 mannheimbloggt.tk, 1
 manns-solutions.co.uk, 1
 mannschafft.ch, 1
 manoirdecontres.com, 1
 manojsharan.me, 1
@@ -29589,39 +29742,42 @@ marinbusinesscenter.ch, 1
 marine.gov, 1
 marinecadastre.gov, 1
 marinekaplama.com, 1
 marinela.com.mx, 0
 marinelausa.com, 0
 marines-shop.com, 1
 mario.party, 0
 marioabela.com, 1
+marioberluchi.by, 1
 mariogeckler.de, 0
 mariposah.ch, 1
 marisamorby.com, 0
 mariskavankasbergen.nl, 1
 maritim.go.id, 0
 mariushubatschek.de, 1
 mariviolin.com, 1
 marix.ro, 1
 marjeta-gurtner.ch, 1
 marjoleindens.be, 1
+marjorie-wiki.de, 1
 marjoriecarvalho.com.br, 1
 mark-armstrong-gaming.com, 1
 mark-dietzer.de, 1
 mark-semmler.de, 1
 mark1998.com, 1
 markaconnor.com, 1
 markandrosalind.co.uk, 1
 markantoffice.com, 1
 markbiesheuvel.nl, 1
 markdain.net, 1
 markdescande.com, 1
 markel.com.es, 1
 markepps.com, 1
+market-vanna.ru, 1
 market.android.com, 1
 marketespace.fr, 0
 marketindex.com.au, 1
 marketing-2.de, 1
 marketing-advertising.eu, 1
 marketing.limited, 1
 marketing91.com, 1
 marketingbrandingnews.com, 1
@@ -29652,16 +29808,17 @@ markom.rs, 1
 markprof.ru, 1
 markrego.com, 1
 markri.nl, 1
 markridgwell.co.uk, 1
 markridgwell.com, 1
 markridgwellcom.appspot.com, 1
 markrobin.de, 1
 markscastles.co.uk, 1
+markshroyer.com, 1
 marksm.it, 1
 marksmanhomes.com, 1
 marksmit.co, 1
 marksouthall.com, 1
 markspres.org, 1
 markstickley.co.uk, 1
 markt-heiligenstadt.de, 0
 marktcontact.com, 1
@@ -29914,16 +30071,17 @@ mattdbarton.com, 1
 matteobrenci.com, 1
 matteomarescotti.it, 1
 mattessons.co.uk, 1
 mattferderer.com, 1
 mattfin.ch, 1
 mattforster.ca, 1
 matthecat.com, 1
 matthew-carson.info, 1
+matthew-cash.com, 1
 matthewfells.com, 1
 matthewgallagher.co.uk, 1
 matthewj.ca, 1
 matthewkenny.co.uk, 1
 matthewljiang.com, 1
 matthewohare.com, 1
 matthewsetter.com, 1
 matthey.nl, 1
@@ -30290,16 +30448,17 @@ medikalakademi.com.tr, 1
 medikuma.com, 1
 medino.com, 1
 medinside.ch, 1
 medinside.li, 1
 medinsider.ch, 1
 medinsider.li, 1
 medireport.fr, 1
 meditadvisors.com, 1
+meditation-rennes.org, 1
 meditel.nl, 1
 medium.com, 1
 mediweed.tk, 1
 medja.net, 1
 medlineplus.gov, 1
 medo64.com, 1
 medovea.ru, 1
 medpeer.co.jp, 1
@@ -30334,16 +30493,17 @@ medpostwellness.com, 1
 medsblalabs.com, 1
 medschat.com, 1
 medtalents.ch, 1
 medtehnika.ua, 1
 medusa.wtf, 1
 meduza.io, 1
 medvedikorenka.cz, 1
 medvet.com.es, 1
+medvezhii-ozera.ru, 1
 medwaybouncycastlehire.co.uk, 1
 medy-me.com, 1
 medyotan.ga, 1
 meedoenhartvanwestbrabant.nl, 1
 meedoennoordkop.nl, 0
 meehle.com, 1
 meeko.cc, 1
 meereskunst.de, 1
@@ -30363,16 +30523,17 @@ meetmibaby.co.uk, 1
 meetmygoods.com, 1
 meetscompany.jp, 1
 meeusen-usedcars.be, 1
 meeztertom.nl, 1
 meg-a-bounce.co.uk, 1
 mega-aukcion.ru, 1
 mega-byte.nl, 1
 mega-feeling.de, 1
+mega-key.eu, 1
 mega.co.nz, 1
 mega.nz, 1
 megablogging.org, 1
 megabounce.co.uk, 1
 megabounceni.co.uk, 1
 megabouncingcastles.com, 1
 megadrol.com, 1
 megaflix.nl, 1
@@ -30386,16 +30547,17 @@ megamp3.eu, 1
 meganandmarc.us, 1
 meganreel.com, 0
 megapixel.cz, 1
 megaplan.cz, 1
 megaplan.ru, 1
 megaplonk.com, 1
 megarex.jp, 1
 megauction.tk, 1
+megawarez.org, 1
 megaxchange.com, 1
 megaxchange.org, 1
 meggidesign.com, 1
 mego.cloud, 1
 megumico.net, 1
 megztosidejos.lt, 1
 meh.is, 1
 mehalick.com, 1
@@ -30511,21 +30673,23 @@ memrise.com, 1
 menanwc.org, 1
 menaraannonces.com, 1
 menchez.me, 1
 menden.com, 1
 mendipbouncycastles.co.uk, 1
 mendozagenevieve.com, 1
 mendy.jp, 1
 mengliangyun.xyz, 1
+mengxin.life, 1
 menhadendefenders.org, 1
 menhera.org, 1
 menielias.com, 1
 menkyo-blog.com, 1
 mennace.com, 1
+menno.me, 1
 menole.com, 1
 menole.de, 1
 menole.net, 1
 mensagemaniversario.com.br, 1
 mensagemdaluz.com, 1
 mensagensaniversario.com.br, 1
 mensagensdeconforto.com.br, 1
 mensarena.gr, 1
@@ -30575,26 +30739,28 @@ meridianfresno.com, 1
 meridianmetals.com, 1
 merimatka.fi, 1
 merkel.me, 1
 merlet.eu, 1
 merlinsoap.com, 1
 merloaded.rocks, 1
 merojob.com, 1
 meronberry.jp, 1
+merpay.com, 1
 mers.one, 1
 merson.org, 1
 merson.tv, 1
 mertarauh.com, 1
 mertcangokgoz.com, 1
 meruri.com, 1
 merzai.co.uk, 1
 mes-bouquins.fr, 1
 mes-finances.be, 1
 mes10doigts.ovh, 1
+mesami-art.de, 1
 mesappros.com, 1
 mescaline.com, 1
 mescaline.org, 1
 mesec.cz, 1
 mesh.gov, 1
 meshok.info, 1
 meshok.ru, 0
 mesicka.com, 1
@@ -30670,30 +30836,32 @@ metron-networks.com, 1
 metron-online.com, 1
 metronaut.de, 1
 metropolisil.gov, 1
 metropop.ch, 1
 metsasta.com, 1
 mettekopp.dk, 1
 meubanco7.com.br, 1
 meuble-house.fr, 1
+meubleko.com, 1
 meujeitodigital.com.br, 0
 meupainel.me, 1
 meurisse.org, 1
 meusigno.com, 1
 mevanshop.com, 0
 mevs.cz, 1
 mexican.dating, 1
 mexicanjokes.net, 1
 mexico.sh, 1
 mexicodental.co, 1
 mexicom.org, 1
 mexior.nl, 1
 meyash.co, 1
 meyeraviation.com, 1
+meyerburger.com, 1
 mf-fischer.de, 1
 mfen.de, 1
 mfgusa.com, 1
 mfiles.pl, 1
 mfits.co.uk, 1
 mflodin.se, 1
 mfpccprod.com, 1
 mft.global, 1
@@ -30852,17 +31020,16 @@ midweststructuralrepair.com, 1
 miegl.com, 1
 miegl.cz, 1
 miele-katerini.gr, 1
 miembarcacion.com, 1
 miemus.eu, 1
 mieterschutzkartei.de, 1
 mietwohnungen-vermietung.com, 1
 mieuxgrandir.ch, 1
-mieuxvivreadarvoy.fr, 1
 miffy.me, 1
 mig5.net, 1
 miggy.org, 1
 mightysighty.com, 1
 migrantskillsregister.org.uk, 1
 miguel.pw, 1
 migueldemoura.com, 1
 migueldominguez.ch, 1
@@ -30889,16 +31056,18 @@ mijntelefoonboek.com, 1
 mijntransacties.nl, 1
 mika.cat, 1
 mika.moe, 1
 mikadoe.nl, 1
 mikakalathil.ca, 1
 mikakalevi.com, 1
 mikalikes.men, 1
 mike-bland.com, 1
+mike-burns.com, 1
+mike-et-pascale-sanger.com, 1
 mike2k.de, 1
 mikeandersondj.com, 1
 mikebelanger.ca, 1
 mikeblog.site, 1
 mikebutcher.ca, 1
 mikecb.org, 1
 mikegao.net, 0
 mikegao.org, 1
@@ -31016,17 +31185,17 @@ mindoktor.se, 0
 mindorbs.com, 1
 mindox.com.br, 1
 mindsetatx.com, 1
 mindstretchers.co.uk, 1
 mindwerks.net, 1
 mindwork.space, 1
 mine-craftlife.com, 1
 mine-pixl.de, 1
-mine260309.me, 1
+mine260309.me, 0
 minebier.dk, 1
 minecraft-forum.eu, 1
 minecraft-server.eu, 1
 minecraftforum.de, 1
 minecraftforum.ovh, 1
 minecraftjson.com, 0
 minecraftstal.com, 1
 minehattan.de, 1
@@ -31181,46 +31350,49 @@ mitabu.net, 1
 mitaines.ch, 1
 mitarbeitermotivation-anleitungen.de, 1
 mitchellhandymanservices.co.uk, 1
 mitchelmore.ca, 1
 mitdip-mit-group-ch.azurewebsites.net, 1
 miticobikes.com, 1
 mitigationcommission.gov, 1
 mitior.net, 1
+mitnetz-gas.de, 1
+mitnetz-strom.de, 1
 mitre10.com.au, 1
 mitrecaasd.org, 1
 mitremai.org, 1
 mitrostudios.com, 1
 mitsign.com, 1
 mitsonnenbrillen.de, 1
 mitsu-szene.de, 1
 mitsukabose.com, 1
 mittagonggardencentre.com.au, 1
 mittagonghomestead.com.au, 1
 mittbolan.se, 1
+mittelalter-lexikon.de, 1
 mittelunsachlich.de, 1
 mittenofficesystems.com, 1
 mitylite.com, 1
 mitzpettel.com, 1
 miui-germany.de, 1
 miukimodafeminina.com, 1
-mivestuariolaboral.com, 1
 mivzak.im, 1
 mivzakim.biz, 1
 mivzakim.cf, 1
 mivzakim.ga, 1
 mivzakim.gq, 1
 mivzakim.info, 1
 mivzakim.ml, 1
 mivzakim.mobi, 1
 mivzakim.net, 1
 mivzakim.org, 1
 mivzakim.tk, 1
 mivzakim.tv, 1
+mivzaklive.co.il, 0
 miweb.cr, 0
 mixinglight.com, 1
 mixmister.com, 1
 mixposure.com, 1
 mixtafrica.com, 1
 mixtape.moe, 1
 mixx.com.hk, 1
 miya.io, 1
@@ -31302,16 +31474,17 @@ mmaps.ddns.net, 1
 mmaps.org, 1
 mmarnitz.de, 1
 mmbb.org, 1
 mmgal.com, 1
 mmilog.hu, 1
 mmin.us, 0
 mmmarco.com, 1
 mmmaximaliselmeny.hu, 1
+mmmm.mn, 1
 mmogah.com, 1
 mmonit.com, 1
 mms.is, 1
 mmsmotor.com.hk, 1
 mmstick.tk, 1
 mmt.my, 1
 mmucha.de, 1
 mna7e.com, 1
@@ -31399,47 +31572,49 @@ mococo.co.uk, 1
 mocurio.com, 1
 modafinil.com, 1
 modafinil.net, 1
 modafinil.wiki, 1
 modafo.com, 1
 modalogi.com, 1
 modalrakyat.com, 1
 modcasts.video, 1
+modcover.com, 1
 modded-minecraft-server-list.com, 1
 modding-forum.com, 1
 modding-welt.com, 1
+moddiy.com, 1
 mode-hautnah.de, 1
 mode-individuell.de, 1
 modecaso.com, 1
 modehaus-marionk.de, 1
 modelcase.co.jp, 0
 modelclub-draveil.eu, 1
 modelcube.com, 1
 modeldimension.com, 1
 modelisme-rc.net, 1
 modelisme-voiture-rc.fr, 1
 modelservis.cz, 1
 modemaille.com, 1
 modemchild.net, 1
 modeportaal.nl, 1
 moderatoren.org, 1
 modern-family.tv, 1
-modernapprenticeships.org, 1
 moderncoinmart.com, 1
 moderncommercialrealestate.com, 1
 modernibytovytextil.cz, 1
 moderntld.net, 1
 modifiedmind.com, 1
 modistry.com, 1
 modistryusercontent.com, 1
 modmountain.com, 1
 modonor.dk, 1
 mods-community.de, 1
 mods-pic.de, 1
+modscrew.com, 1
 modul21.com, 1
 modul21.eu, 1
 module.market, 1
 modulex-gmbh.de, 1
 moe-max.jp, 1
 moe.pe, 1
 moe.wtf, 1
 moeali.com, 1
@@ -31548,16 +31723,17 @@ moneyhouse.de, 1
 moneypark.ch, 1
 moneytoday.se, 1
 mongla168.net, 1
 mongla88.net, 1
 mongolieenfrance.fr, 1
 monique.io, 1
 moniquedekermadec.com, 1
 moniquemunhoz.com.br, 1
+monitman.com, 1
 monitman.solutions, 1
 monitori.ng, 1
 monitoring.kalisz.pl, 1
 monitoringd.de, 1
 monitzer.com, 1
 monix.io, 1
 monkay.de, 1
 monkeybusiness.agency, 1
@@ -31610,17 +31786,16 @@ montsaintaignan.fr, 1
 montychristie.com, 1
 monwarez.ovh, 1
 monzo.com, 1
 monzo.me, 1
 moo.la, 1
 moodfoods.com, 1
 moodforsex.com, 1
 moodifiers.com, 1
-moodzshop.com, 1
 moojp.co.jp, 1
 moolah.rocks, 1
 moon.fish, 1
 moonagic.com, 1
 moonagic.io, 1
 moonbench.xyz, 1
 moonbot.io, 1
 moonchart.co.uk, 1
@@ -31820,18 +31995,20 @@ mplant.io, 1
 mplicka.cz, 1
 mplusm.eu, 1
 mpodraza.pl, 1
 mpreserver.com, 0
 mprsco.eu, 1
 mpserver12.org, 1
 mpsgarage.com.au, 1
 mpsoundcraft.com, 1
+mpu-giessen.com, 1
 mpu-ibbi.de, 1
 mpu-vorbereitung.com, 1
+mpublicidad.com, 1
 mpy.ovh, 1
 mqas.net, 1
 mr-anderson.org, 1
 mr-coffee.net, 1
 mr-labo.jp, 1
 mr-nachhilfe.de, 1
 mr-wolf.nl, 0
 mr3.io, 1
@@ -31845,17 +32022,16 @@ mrbuckykat.com, 1
 mrca-sharp.com, 1
 mrcoolevents.com, 1
 mrcrowley217.com, 1
 mrd.ninja, 1
 mrdatenschutz.de, 1
 mrdayman.com, 1
 mremallin.ca, 1
 mrevolution.eu, 1
-mrgiveaways.com, 1
 mrhc.ru, 1
 mrhee.com, 1
 mrhookupsd.com, 1
 mrinalpurohit.in, 1
 mrizzio.com, 1
 mrjbanksy.com, 1
 mrjhnsn.com, 1
 mrjooz.com, 1
@@ -31897,17 +32073,16 @@ mschuessler.org, 1
 msebera.cz, 1
 msgallery.tk, 1
 msh100.uk, 1
 mshemailmarketer.com.au, 1
 msi-zlin.cz, 1
 msiegmund.com, 1
 msize48.ch, 1
 msmails.de, 1
-msno.no, 1
 msnr.net, 1
 msp66.de, 0
 mspnocsupport.com, 1
 mspsocial.net, 1
 msquadrat.de, 1
 msroot.de, 1
 mssora.com, 1
 mssys.de, 1
@@ -31921,16 +32096,17 @@ msuess.me, 1
 msuna.net, 1
 msv-limpezas.pt, 1
 msx.org, 1
 msz-fotografie.de, 1
 mszavodumiru.cz, 1
 mt-bank.jp, 1
 mt.search.yahoo.com, 0
 mt2414.com, 1
+mt4programming.com, 1
 mta.fail, 1
 mta.org.ua, 1
 mtane0412.com, 1
 mtasa.com, 1
 mtasa.hu, 1
 mtauburnassociates.com, 1
 mtb.wtf, 1
 mtcgf.com, 0
@@ -31986,17 +32162,16 @@ muffs.ru, 1
 mufibot.net, 1
 muga.space, 1
 mugen.technology, 1
 muguayuan.com, 1
 muh.io, 1
 mui.jp, 1
 muilties.com, 1
 muitadica.com, 1
-muj-svet.cz, 1
 mujerfutura.com, 1
 muk-kobetsu.com, 1
 mukilteodentalarts.com, 1
 mukilteoeuropeanautorepair.com, 1
 mukyu.moe, 1
 mulaccosmetics.com, 1
 mulaisehat.com, 1
 mulej.net, 1
@@ -32006,16 +32181,17 @@ mullens-usedcars.be, 1
 mullerimoveisrj.com.br, 1
 multi-vpn.biz, 1
 multibit.org, 1
 multiclinicacardio.com.br, 1
 multicomhost.com, 1
 multigamecard.com, 1
 multigeist.de, 1
 multikalender.de, 0
+multimail.work, 1
 multimatte.com, 0
 multimed-solutions.com, 1
 multimed.krakow.pl, 1
 multimedia-pool.com, 1
 multimediapc.de, 1
 multiplayernow.com, 1
 multipleservers.com, 1
 multiplexcy.com, 1
@@ -32277,16 +32453,17 @@ mydatadoneright.eu, 1
 mydaywebapp.com, 1
 mydebian.in.ua, 1
 mydentalplan.gr, 1
 mydevolo.com, 1
 mydevolo.de, 1
 mydigitalweek.com, 1
 mydmdi.com, 1
 mydna.bio, 1
+mydnshost.co.uk, 1
 mydoc.fr, 1
 mydocserve.com, 1
 mydomaindesk.com, 1
 mydreamlifelab.com, 1
 mydreamshaadi.in, 1
 myduffyfamily.com, 1
 myeasybooking.de, 1
 myeberspaecher.com, 1
@@ -32296,17 +32473,16 @@ myeisenbahn.de, 1
 myeml.net, 0
 myepass.bg, 1
 myepass.de, 1
 myessaygeek.com, 1
 myetherwallet.com, 1
 myf.cloud, 1
 myfae.eu, 1
 myfantasysportstalk.com, 1
-myfappening.org, 1
 myfdic.gov, 1
 myfedloan.org, 1
 myfirenet.com, 1
 myfishpalace.at, 1
 myfloridacfo.gov, 1
 myfloridadeferredcomp.com, 1
 myforfaitmobile.com, 1
 myfreemp3.click, 1
@@ -32351,16 +32527,17 @@ myjumparoo.co.uk, 1
 myjumpsuit.de, 1
 mykeepsake.xyz, 0
 myki.co, 1
 mykontool.de, 1
 mykumedir.com, 1
 mylatestnews.org, 1
 mylawyer.be, 1
 myleanfactory.de, 1
+mylene-chandelier.me, 1
 mylife360mag.com, 1
 mylifeabundant.com, 1
 mylittlechat.ru, 1
 myliveupdates.com, 1
 myloan.hk, 1
 myloneworkers.com, 1
 mylookout.com, 0
 mylotto.co.nz, 1
@@ -32501,17 +32678,17 @@ myrnabiondo.com.br, 1
 myrotvorets.center, 1
 myrotvorets.news, 1
 myrp.co, 1
 myruststats.com, 1
 mysad.de, 1
 mysber.ru, 1
 myschoolphoto.org, 1
 myseatime.com, 1
-mysecretcase.com, 1
+mysecretcase.com, 0
 mysectools.org, 1
 myself5.de, 1
 myseo.ga, 1
 myserv.one, 1
 myservice.store, 0
 myservicearl.com, 1
 mysexydate24.com, 1
 mysignal.com, 1
@@ -32575,17 +32752,16 @@ myvitalhealthsolutions.com.au, 1
 myvoipnews.com, 0
 myvpl.com, 1
 mywari.com, 1
 mywebinar.io, 1
 mywebmanager.co.uk, 1
 mywebpanel.eu, 1
 mywebpanel.nl, 1
 myweddingaway.co.uk, 1
-myweddingreceptionideas.com, 1
 myworkinfo.com, 0
 myworth.com.au, 1
 myxnr.com, 1
 myyubikey.net, 1
 myyubikey.org, 1
 myzhili.com, 1
 myzina.cz, 0
 mz-mz.net, 1
@@ -32812,16 +32988,19 @@ nataliedawnhanson.com, 1
 natanaelys.com, 0
 nataniel-perissier.fr, 1
 natation-nsh.com, 0
 natchmatch.com, 1
 nate.sh, 1
 nateandxtina.wedding, 1
 natecraun.net, 0
 natehobi.com, 1
+natenom.com, 1
+natenom.de, 1
+natenom.name, 1
 natgeofreshwater.com, 1
 nathaliebaron.ch, 1
 nathaliebaroncoaching.ch, 1
 nathaliedijkxhoorn.com, 1
 nathaliedijkxhoorn.nl, 1
 nathan.io, 1
 nathan.ovh, 1
 nathankonopinski.com, 1
@@ -32849,17 +33028,16 @@ natropie.pl, 1
 natsumihoshino.com, 1
 natuerlichabnehmen.ch, 1
 natur-udvar.hu, 1
 natur.com, 1
 natura-sense.com, 1
 naturalcommission.com, 1
 naturalezafengshui.com, 1
 naturalfit.co.uk, 1
-naturalhealthcures.net, 1
 naturalkitchen.co.uk, 1
 naturalspacesdomes.com, 1
 naturaum.de, 1
 nature-et-bio.fr, 1
 natureclaim.com, 1
 natureflo.net, 1
 naturesbest.co.uk, 1
 naturesorganichaven.com, 1
@@ -32878,16 +33056,17 @@ nausicaahotel.it, 1
 naut.ca, 1
 nautiljon.com, 1
 nautsch.de, 1
 navarralanparty.org, 1
 navdeep.ca, 1
 navenlle.com, 1
 navienna.com, 1
 navient.com, 1
+navigator.ca, 1
 naviteq.eu, 1
 navstevnik.sk, 1
 navycs.com, 1
 nawir.de, 1
 nawroth.info, 1
 nayahe.ru, 1
 nayami64.xyz, 1
 nayanaas.com, 1
@@ -32948,17 +33127,16 @@ nbalivecn.com, 1
 nbalivex.com, 1
 nbari.com, 1
 nbask.com, 1
 nbasky.com, 1
 nbaspot.com, 1
 nbavc.com, 1
 nbavg.com, 1
 nbayouxi.com, 1
-nbgrooves.de, 1
 nbhorsetraining.com, 1
 nbib.gov, 1
 nbis.gov, 1
 nbl.org.tw, 1
 nbnnetwork.com, 1
 nbrain.de, 1
 nbrii.com, 1
 nbriresearch.com, 1
@@ -33014,43 +33192,45 @@ ndx.ee, 1
 ndy.sex, 1
 ne-on.org, 1
 nea.gov, 1
 neap.io, 1
 nearbi.com.mx, 1
 nearby.in.th, 1
 nearon.nl, 1
 neartothesky.com, 1
+neasahourigan.com, 1
 neat-patch.de, 1
 neatous.cz, 1
 neatous.net, 1
 neatzy.co.uk, 1
 neave.tv, 1
 neba.io, 1
 nebelhauch.de, 1
 nebelheim.de, 1
 nebenbeiblog.ch, 1
 nebra.io, 1
 nebracy.com, 1
 nebras.ga, 1
 nebul.at, 1
 nebula.exchange, 1
 nebulae.co, 1
 nebuluxcapital.com, 1
+nebuso.com, 1
 necesitodinero.org, 1
 necessaryandproportionate.net, 1
 necessaryandproportionate.org, 1
-nechiactua.com, 1
 necio.ca, 1
 neckbeard.xyz, 1
 necormansir.com, 1
 nectarleaf.com, 1
 nectir-staging.com, 1
 nectir.co, 1
 nedcdata.org, 1
+nederdraad.org, 1
 nederland.media, 1
 nederlands-vastgoedfonds.nl, 1
 nedim-accueil.fr, 1
 nedlinin.com, 1
 nedraconsult.ru, 1
 neecist.org, 1
 needemand.com, 1
 needle.net.nz, 1
@@ -33148,16 +33328,17 @@ neotiv.com, 1
 neowa.tk, 1
 neowin.net, 1
 neowlan.net, 1
 neoxcrf.com, 1
 nepageeks.com, 1
 nepal-evolution.org, 1
 nepezzano13.com, 1
 nephelion.org, 1
+nephology.net.au, 1
 nephos.xyz, 1
 nephy.jp, 1
 nepovolenainternetovahazardnihra.cz, 1
 neppglobal.top, 1
 nepremicninar.com, 1
 nepremicnine.click, 1
 nepremicnine.net, 1
 nerdca.st, 1
@@ -33394,16 +33575,17 @@ newspiritfilms.com, 1
 newspsychology.com, 1
 newstone-tech.com, 1
 newsyslog.org, 1
 newtnote.com, 1
 newtonhaus.com, 1
 newtonproject.org, 1
 newtrackon.com, 1
 newvehicle.com, 1
+newyorkcoffeejobs.com, 1
 nex.li, 1
 nex.sx, 1
 nexd.com, 1
 nexgeneration-solutions.com, 1
 nexicafiles.com, 1
 next-idea.co, 1
 next-log.ru, 0
 next-taxi.ru, 0
@@ -33471,27 +33653,29 @@ ngc.gov, 0
 nghe.net, 1
 ngiemboon.net, 1
 nginxconfig.com, 1
 nginxconfig.io, 1
 nginxyii.tk, 1
 ngla.gov, 1
 ngndn.jp, 1
 ngocuong.net, 1
+ngojclee.com, 1
 ngt.gr, 1
 nguyencucthanh.com, 1
 nguyenminhhung.com, 0
 ngvf.de, 1
 ngx.hk, 1
 ngxpkg.com, 1
 nhccnews.org, 1
 nhchalton.com, 1
 nhdsilentheroes.org, 1
 nhgteam.hu, 1
 nhimf.org, 1
+nhnieuws.nl, 1
 nhome.ba, 1
 nhsolutions.be, 1
 nhsuites.com, 1
 nhw.ovh, 1
 ni-mate.com, 1
 ni.search.yahoo.com, 0
 niadd.com, 1
 niagara.ru, 0
@@ -33946,17 +34130,16 @@ notadd.store, 1
 notallmine.net, 1
 notalone.gov, 1
 notar-glagowski.com, 1
 notar-glagowski.de, 1
 notar-peikert.com, 1
 notare-marktplatz24.info, 1
 notariusz-bialystok.com, 1
 notarkrauss.de, 1
-notarvysocina.cz, 1
 notbolaget.se, 1
 notboring.co.uk, 1
 notcompletelycorrect.com, 1
 notdienstreform-nordrhein.de, 1
 note7forever.com, 1
 noteboat.net, 1
 notepad.nz, 1
 notesforpebble.com, 1
@@ -34034,16 +34217,17 @@ nowremindme.com, 1
 nowzuwan.org, 0
 noxi.ga, 1
 noxlogic.nl, 1
 noxx.global, 1
 noydeen.com, 1
 noyocenter.org, 1
 np-edv.at, 1
 np.search.yahoo.com, 0
+np39.de, 1
 npath.de, 1
 npbeta.com, 1
 npcrcss.org, 1
 nphrm.com, 1
 npmcdn.com, 1
 npregion.org, 1
 npsas.org, 1
 npw.net, 1
@@ -34057,16 +34241,17 @@ nrsmart.com, 1
 nrsweb.org, 1
 nrvn.cc, 0
 nrvnastudios.com, 1
 ns-frontier.com, 1
 ns2servers.pw, 1
 nsa.lol, 1
 nsa.ovh, 1
 nsa.wtf, 1
+nsadns.uk, 1
 nsamail.uk, 1
 nsapwn.com, 1
 nsbfalconacademy.org, 1
 nsboston.org, 1
 nsboutique.com, 1
 nscnet.jp, 1
 nsdev.cn, 1
 nsfw-story.com, 1
@@ -34083,16 +34268,17 @@ nsoft.nu, 1
 nsp.ua, 1
 nst-maroc.com, 1
 nstatic.xyz, 1
 nstd.net, 1
 nstremsdoerfer.ovh, 1
 nstrust.co.uk, 1
 nsure.us, 1
 nsworks.com, 1
+nszipline.com, 1
 nt-catala.com, 1
 ntags.org, 1
 ntcoss.org.au, 1
 ntcp.ph, 1
 nte.email, 1
 nth.sh, 1
 nti.de, 1
 ntia.gov, 1
@@ -34336,31 +34522,31 @@ oceanlord.me, 1
 oceanvisuals.com, 1
 ocenovani-inspekce.cz, 1
 ocf.io, 1
 ocg-card.com, 1
 ochrebridge.com, 1
 ochrepoint.com.au, 1
 ochsenfeld.co, 1
 ochsundjunior.ch, 1
-ochsundjunior.swiss, 1
 ocim.ch, 1
 ockendenhemming.co.uk, 1
 oclausen.com, 1
 ocloud.fr, 1
 ocloudhost.com, 1
 ocni-ambulance-most.cz, 1
 ocolere.ch, 1
 ocotg.com, 1
 ocrn.nl, 1
 ocsigroup.fr, 1
 octa.store, 1
 octagongroup.co, 1
 octarineparrot.com, 1
 octav.name, 0
+octava.ua, 1
 octo.im, 1
 octobered.com, 1
 octocaptcha.com, 1
 octod.tk, 1
 octofox.de, 1
 octohedralpvp.tk, 1
 octolopagon.games, 1
 octomist.com, 1
@@ -34400,16 +34586,17 @@ oeko-bundesfreiwilligendienst.de, 1
 oeko-jahr-jubilaeum.de, 1
 oeko-jahr.de, 1
 oelbilder-oelmalerei.de, 1
 oelsner.net, 1
 oemspace.net, 1
 oemspace.nl, 1
 oemwolf.com, 1
 oenings.eu, 1
+oepsbanaan.nl, 1
 oes.org.gt, 1
 oessi.eu, 1
 of2m.fr, 1
 ofcampuslausanne.ch, 1
 ofda.gov, 1
 ofertasadsl.com, 1
 ofertino.es, 1
 ofertolino.fr, 1
@@ -34520,16 +34707,17 @@ okonetwork.org.uk, 1
 okotoksbeach.ca, 1
 okqubit.net, 1
 oksafe-t.org, 1
 oktime.cz, 1
 oktoberfeststore.nl, 1
 oktomus.com, 1
 okukan.com.au, 1
 okurapictures.com, 1
+okuscapital.com, 1
 okusiassociates.com, 1
 okviz.com, 1
 olanderflorist.com, 1
 olandiz.com, 1
 olasouris.com, 1
 olastrafford.org, 1
 olback.net, 1
 olbat.net, 1
@@ -34596,23 +34784,25 @@ ollies.cloud, 1
 ollies.cz, 1
 olliespage.com, 1
 olliespage.net, 1
 olliespage.uk, 1
 ollning.com, 1
 olltechjob.com, 1
 olmari.fi, 1
 olmc-nutley.org, 1
+olmcjc.com, 1
 olmcnewark.com, 1
 olmmcc.tk, 1
 olmsted.io, 1
 olofsson.cc, 1
 olomercy.com, 1
 olphseaside.org, 1
 olqoa.org, 1
+olschurch.com, 1
 olsh-hilltown.com, 1
 olsonproperties.com, 1
 olygazoo.com, 1
 olymp-arts.world, 1
 olympeakgaming.tv, 1
 olympiads.ca, 1
 olympic-research.com, 1
 om.yoga, 1
@@ -34649,17 +34839,16 @@ omniverse.ru, 1
 omoide-hitokoto.com, 1
 omori.ch, 1
 omoteura.com, 1
 omranic.com, 1
 omronwellness.com, 1
 omsdieppe.fr, 1
 omskrock.com, 1
 on-tech.co.uk, 1
-on.tax, 1
 ona.io, 1
 onaboat.se, 1
 onahonavi.com, 1
 onarto.com, 1
 onazikgu.com, 1
 onbuzzer.com, 0
 onceuponarainbow.co.uk, 1
 oncf.asso.fr, 1
@@ -34675,39 +34864,40 @@ one---line.com, 1
 one-resource.com, 1
 one-s.co.jp, 1
 one-tab.com, 1
 one2edit.com, 1
 oneazcu.com, 0
 onebigcow.com, 1
 oneclic.ch, 1
 onedegreehealth.com, 1
-onedot.nl, 1
 onedottwelve.co.jp, 0
 onedottwelve.com, 0
 onedrive.com, 1
 onedrive.live.com, 0
 onee3.org, 1
 onefour.ga, 0
 oneheartbali.church, 1
 oneidentity.me, 1
 oneindex.tk, 1
 oneiroi.co.uk, 1
 onelawsuit.com, 1
+onemeter.com, 1
 onemid.net, 1
 onemoonmedia.de, 1
 oneononeonone.de, 1
 oneononeonone.tv, 1
 onepercentrentals.com, 1
 onepointsafeband.ca, 1
 onepointsafeband.com, 1
 onepointzero.com, 1
 oneprediction.com, 1
 onesnzeroes.com, 1
 onesports.cz, 1
+onestasolar.com, 1
 onestepfootcare.com, 1
 onestop-study.com, 1
 onestopcastles.co.uk, 1
 onetcenter.org, 1
 onetcodeconnector.org, 1
 onetech.it, 1
 onetime.info, 1
 onetly.com, 1
@@ -34748,16 +34938,17 @@ online-health-insurance.com, 1
 online-lernprogramme.de, 1
 online-pr.at, 1
 online-scene.com, 1
 online-stopwatch.com, 1
 online-textil.com, 1
 online-textil.cz, 1
 online-textil.sk, 1
 online.net.gr, 1
+online.swedbank.se, 1
 online24.pt, 1
 onlinebiller.com, 1
 onlinecasino.vlaanderen, 1
 onlinecasinobluebook.com, 1
 onlinecensorship.org, 1
 onlinecollegeessay.com, 1
 onlinefashion.it, 1
 onlinehashfollow.com, 1
@@ -35097,17 +35288,16 @@ os24.cz, 1
 osacrypt.studio, 1
 osakeannit.fi, 1
 osao.org, 1
 osbi.pl, 1
 osborn.io, 1
 osborneinn.com, 1
 osburn.com, 1
 oscamp.eu, 1
-oscarproductions.no, 1
 oscarvk.ch, 1
 oscillation-services.fr, 1
 oscloud.com, 1
 osdls.gov, 1
 osepideasthatwork.org, 1
 osereso.tn, 1
 oses.mobi, 1
 osez-l-odyssee.fr, 1
@@ -35229,16 +35419,17 @@ outfit-weimar.eu, 1
 outgress.com, 1
 outincanberra.com.au, 1
 outka.xyz, 1
 outline.ski, 1
 outlookonthedesktop.com, 1
 outofcontrol.ca, 1
 outplnr.fr, 1
 outpostinfo.com, 1
+output.clothing, 1
 outsideconnections.com, 1
 outsiders.paris, 1
 ovelhaostra.com, 0
 overalglas.nl, 1
 overamsteluitgevers.nl, 1
 overclockers.ge, 1
 overdrive-usedcars.be, 1
 overkillshop.com, 1
@@ -35283,28 +35474,30 @@ ownmay.com, 0
 ownspec.com, 1
 oxanababy.com, 1
 oxborrow.ca, 1
 oxelie.com, 1
 oxia.me, 1
 oxiame.eu, 1
 oximo.lviv.ua, 1
 oxo.cloud, 1
-oxygin.net, 1
 oxynux.xyz, 1
 oxytocin.org, 1
+oxyx.tk, 1
 oxz.me, 1
 oxzeth3sboard.com, 1
 oyashirosama.tokyo, 1
 oyesunn.com, 1
 oyoony.de, 1
 oyosoft.fr, 1
 oyosoft.net, 1
 oysterworldwide.com, 1
+ozalp.dk, 1
 ozark.be, 1
+ozarktrailcooler.com, 1
 oznamovacipovinnost.cz, 1
 ozonitron.com, 1
 ozonitron.de, 1
 ozonitron.eu, 1
 ozonytron.com, 1
 ozonytron.de, 1
 ozonytron.eu, 1
 ozoz.cc, 1
@@ -35447,16 +35640,17 @@ pakeystonescholars.gov, 1
 pakho.xyz, 1
 pakingas.lt, 1
 pakistani.dating, 1
 pakitow.fr, 1
 pakke.de, 1
 pakremit.com, 1
 pakroyalpress.com, 1
 paktolos.net, 1
+palabr.as, 1
 palace-bayreuth.de, 1
 palapadev.com, 1
 palariviera.com, 1
 palary.work, 1
 palatin.at, 1
 palationtrade.com, 1
 palava.tv, 1
 palavalbasket.it, 1
@@ -35478,16 +35672,17 @@ palestra.roma.it, 1
 palladium46.com, 1
 pallas.in, 1
 palletflow.com, 1
 palli.ch, 1
 palmaprop.com, 1
 palmavile.us, 1
 palmaville.com, 1
 palmen-apotheke.de, 1
+pama.fun, 1
 pamaniqu.nl, 1
 pamatv.hk, 1
 pamsorel.co.za, 1
 pan.digital, 1
 panamatrippin.com, 1
 panasca.is, 1
 panascais.co, 1
 panascais.com, 1
@@ -35510,16 +35705,17 @@ panda.tf, 1
 pandaltd.nl, 1
 pandapsy.com, 1
 pandemicflu.gov, 1
 pandkonijn.nl, 1
 pandoraflora.com, 1
 pandymic.com, 1
 paneldewelopera.pl, 1
 paneu.de, 1
+panghu.me, 1
 panhandlemenshealth.com, 1
 panic.tk, 1
 panier-legumes.bio, 1
 paniodpolskiego.eu, 1
 paniyanovska.ua, 1
 panj.ws, 1
 panjiva.com, 1
 panmetro.com, 1
@@ -35537,28 +35733,30 @@ panthur.com.au, 0
 pantographe.info, 1
 pantou.org, 0
 pants-off.xyz, 1
 panzer72.ru, 1
 panzerscreen.dk, 1
 paolotagliaferri.com, 1
 pap.la, 0
 papa-webzeit.de, 1
+papabearsautocenter.com, 1
 papadopoulos.me, 1
 papakatsu-life.com, 1
 papapa-members.club, 1
 papatest24.de, 1
 papaya.me.uk, 1
 papayame.com, 1
 papayapythons.com, 1
 papelcraft.co.uk, 1
 paper-republic.org, 1
 paper.sc, 1
 paperhoney.by, 1
 paperlesssolutionsltd.com.ng, 1
+papermuseum.jp, 1
 papersmart.net, 1
 papertracker.net, 1
 paperturn.com, 1
 paperwallets.io, 1
 paperwork.co.za, 1
 paperwritinghelp.net, 1
 papiermakerijdehoop.nl, 1
 papiermeteenverhaal.nl, 1
@@ -35652,16 +35850,17 @@ partnertaxhub.com, 1
 partou.de, 1
 partridge.tech, 1
 parts4phone.com, 1
 partsestore.com, 1
 parturi-manner.fi, 1
 partusedtyres.net, 1
 party-and-play.co.uk, 1
 party-calendar.net, 1
+party-kneipe-bar.com, 1
 party-time-inflatables-durham.co.uk, 1
 partybounceplay.co.uk, 1
 partycentrumopenhuis.nl, 1
 partyhireisleofwight.co.uk, 1
 partyhireliverpool.co.uk, 1
 partypearl.de, 1
 partyrocksbounce.co.uk, 1
 partyschnaps.com, 1
@@ -35676,31 +35875,31 @@ partyzone.ie, 1
 parvaneh.fr, 1
 parys.org, 1
 pasadenapooch.org, 1
 pasadenasandwichcompany.com, 1
 pasalt.com, 1
 pasarella.eu, 1
 pascal-bourhis.com, 1
 pascal-bourhis.net, 1
-pascal-kannchen.de, 1
 pascal-wittmann.de, 1
 pascaline-jouis.fr, 1
 pascalleguern.com, 1
 pascalmathis.com, 1
 pascalmathis.me, 1
 pascalmathis.net, 1
 pascalspoerri.ch, 0
 pascualinmuebles.com, 1
 pasearch.nl, 1
 pashminacachemire.com, 1
 pass.org.my, 1
 passabook.com, 1
 passcod.name, 1
 passendonderwijs.nl, 0
+passengertravelportal.com, 1
 passfilesafe.com, 1
 passfoto-deinfoto.ch, 1
 passieposse.nl, 1
 passionatefoodie.co.uk, 1
 passionatehorsemanship.com, 1
 passionatelife.com.au, 1
 passionebenessere.com, 1
 passionpictures.eu, 1
@@ -35973,17 +36172,16 @@ pearlsonly.ca, 1
 pearlsonly.com, 1
 pearlsonly.com.au, 1
 pearlsonly.de, 1
 peatsbeast.com, 1
 peaudorange.net, 1
 pebbleparents.com, 1
 pebblepointapartmentsstl.com, 1
 pebbles.net.in, 1
-peckcloths.com, 1
 pecker-johnson.com, 1
 peda.net, 1
 peddock.com, 1
 peddy.dyndns.org, 1
 pedicurean.nl, 1
 pedicureduiven.nl, 1
 pedidamanosevilla.com, 1
 pedikura-vitu.cz, 1
@@ -35991,17 +36189,16 @@ pedimanie.cz, 1
 pedro.com.es, 1
 pedrosaurus.com, 1
 pedrosluiter.nl, 1
 pedroventura.com, 0
 peeekaaabooo.com, 1
 peekier.com, 1
 peen.ch, 1
 peep.gq, 1
-peepsfoundation.org, 1
 peercraft.at, 1
 peercraft.be, 1
 peercraft.biz, 1
 peercraft.ch, 1
 peercraft.cn, 1
 peercraft.co.uk, 1
 peercraft.com, 1
 peercraft.de, 1
@@ -36140,16 +36337,17 @@ perm4.com, 1
 permajackofstlouis.com, 1
 permanence-juridique.com, 1
 permanencejuridique-ge.ch, 1
 permanencejuridique.com, 1
 permaseal.net, 1
 permeance108.com, 1
 permistheorique.be, 1
 permistheoriqueenligne.be, 1
+pernambuconoticias.com.br, 1
 perniciousgames.com, 1
 perot.me, 1
 perpetualemotion.com, 1
 perrau.lt, 1
 perrone.co, 1
 perroquet-passion.ch, 1
 persephone.gr, 1
 persiart.shop, 1
@@ -36223,16 +36421,17 @@ petplus.com, 1
 petpost.co.nz, 0
 petpower.eu, 1
 petr.as, 1
 petrachuk.ru, 1
 petrasestakova.cz, 1
 petravdbos.nl, 1
 petresort.pt, 1
 petroleum-schools.com, 1
+petrologisticsllc.com, 1
 petroscand.eu, 1
 petrostathis.com, 1
 petrotranz.com, 1
 petrpikora.com, 1
 petrsvec.cz, 1
 petrucciresidential.com, 1
 petruzz.net, 1
 pets4life.com.au, 1
@@ -36289,16 +36488,17 @@ ph.search.yahoo.com, 0
 ph3r3tz.net, 1
 phantasie.cc, 1
 phantastikon.de, 1
 pharma-display.com, 1
 pharmaboard.de, 1
 pharmaboard.org, 1
 pharmacie-fr.org, 1
 pharmacieplusfm.ch, 1
+pharmacy.org.pk, 1
 pharmacyglobalrx.net, 1
 pharmafoto.ch, 1
 pharmaphoto.ch, 1
 pharmapolitics.com, 1
 pharmaquality.com, 1
 pharmasana.co.uk, 1
 pharmasana.de, 1
 pharmgkb.org, 0
@@ -36364,17 +36564,17 @@ philslab.cloud, 1
 philslab.ninja, 1
 philsown.de, 1
 philsturgeon.uk, 1
 philux.ch, 1
 phishing-studie.org, 1
 phishingusertraining.com, 1
 phligence.com, 1
 phocean.net, 1
-phoenics.de, 1
+phoenics.de, 0
 phoenixlogan.com, 1
 phoenixnest.ltd, 1
 phoenixurbanspaces.com, 1
 phographer.com, 1
 pholder.com, 1
 phone-service-center.de, 1
 phonenumber-info.co.uk, 1
 phonix-company.fr, 1
@@ -36396,21 +36596,21 @@ photographe-reims.com, 1
 photographersdaydream.com, 1
 photography-workshops.net, 1
 photographyforchange.com, 1
 photographyforchange.org, 1
 photolium.net, 0
 photomodelcasting.com, 1
 photon.sh, 1
 photops.fr, 1
-photosafari.com.my, 1
 photosafaribg.com, 1
 photosoftware.nl, 1
 phototravel.uk, 1
 phototrio.com, 1
+photoutils.com, 1
 phoxden.net, 1
 phoxmeh.com, 1
 php-developer.org, 1
 php-tuning.de, 1
 php.watch, 1
 phparcade.com, 1
 phpartners.org, 1
 phpbbchinese.com, 1
@@ -36434,16 +36634,17 @@ phuket-idc.com, 1
 phuket-idc.de, 1
 phuong.faith, 1
 phurl.de, 1
 phurl.io, 1
 phus.lu, 1
 phyley.com, 1
 physicalism.com, 1
 physicalist.com, 1
+physicentrix.ca, 1
 physics-schools.com, 1
 physik.hu, 1
 physiotherapie-seiwald.de, 1
 physiovesenaz.ch, 1
 pi-box.ml, 1
 pi-control.de, 1
 pi-dash.com, 1
 pi-net.dedyn.io, 1
@@ -36496,16 +36697,17 @@ pieceofme.be, 0
 pieces-or.com, 1
 piekacz.co.uk, 1
 piekacz.eu.org, 1
 piekacz.net, 1
 piekacz.tel, 1
 pieland.eu, 1
 pieldenaranja.com, 1
 piem.org, 1
+piening.ddns.net, 1
 piepermail.nl, 1
 pieq.eu, 1
 pieq.eu.org, 1
 pier28.com, 1
 piercing-store.com, 1
 piercraft.com, 1
 pierre-denoblens.net, 1
 pierre-schmitz.com, 1
@@ -36758,17 +36960,16 @@ planetknauer.net, 1
 planetofthegames.tv, 1
 planetromeo.com, 1
 planetromeofoundation.org, 1
 planetsoftware.com.au, 1
 planify.io, 1
 planitz.com, 1
 planitz.net, 1
 planktonforhealth.co.uk, 1
-planktonholland.nl, 1
 planlos.net, 1
 planmemberpartners.com, 1
 plannedlink.com, 1
 planningexcellence.com.au, 1
 planolowcarb.com, 1
 plant-gift.jp, 1
 plantastique.ch, 1
 plantastique.com, 1
@@ -37037,16 +37238,17 @@ pocatellonissanparts.com, 1
 pochaneko.com, 1
 pocitacezababku.cz, 1
 pocketfruity.com, 1
 pocketinsure.com, 1
 pocketmemories.net, 1
 pocpok.com, 0
 pocqipai.com, 0
 podcast.style, 1
+poddr.co, 1
 podemos.info, 1
 podia.com.gr, 0
 podipod.com, 1
 podo-podo.com, 1
 podroof.com, 1
 podroof.com.au, 1
 podshrink.de, 1
 poe.digital, 1
@@ -37368,17 +37570,16 @@ pouwels-oss.nl, 1
 povareschka.ru, 1
 povertymind.com, 1
 povesham.tk, 1
 povmacrostabiliteit.nl, 1
 pow-s.com, 1
 pow.jp, 1
 powelljones.co.uk, 1
 power-coonies.de, 1
-power-fit.org, 1
 power-flowengineer.com, 1
 power-tools24.com, 1
 powerb.ch, 0
 powerball.shop, 1
 powerblanket.com, 1
 powercloud.technology, 1
 poweredbyiris.nl, 1
 powerentertainment.tv, 1
@@ -37405,16 +37606,17 @@ powerwellness-korecki.de, 1
 pozemedicale.org, 1
 pozlife.net, 1
 pozytywnyplan.pl, 1
 pozzitiv.ro, 1
 pp-server.com, 1
 pp3345.net, 1
 ppcrestaurants.com, 1
 ppipe.net, 1
+ppiproperties.com, 1
 pplsoft.nl, 1
 pplsvc.com, 1
 ppmathis.ch, 1
 ppmathis.com, 1
 ppmoon.com, 1
 ppoou.co.uk, 1
 ppoozl.com, 1
 pppo.gov, 1
@@ -37520,22 +37722,24 @@ prenatalgeboortekaartjes.nl, 1
 prepadefi.fr, 1
 prepaid-cards.xyz, 1
 prepaid-voip.nl, 1
 prepaidgirl.com, 1
 prepaidkredietkaart.be, 1
 prepare-job-hunting.com, 1
 preparetheword.com, 0
 prepavesale.fr, 1
+prepedia.org, 1
 preposted.com, 1
 preprodfan.gov, 1
 presbee.com, 1
 presbvm.org, 1
 presbyterian-colleges.com, 1
 prescotonline.co.uk, 1
+presdesdunes.com, 1
 present-m.com, 1
 presentationmedia.com, 1
 preserveourhillcountry.org, 1
 president.bg, 1
 presidio.gov, 1
 prespanok.sk, 1
 pressakey.com, 1
 presscenter.jp, 1
@@ -37565,16 +37769,17 @@ pretty.hu, 1
 prettygirlcheats.com, 1
 prettynode.com, 0
 prettytunesapp.com, 1
 pretwolk.nl, 1
 pretzelx.com, 1
 prevenir.ch, 1
 preventshare.com, 1
 preview-it-now.com, 1
+pricegg.com, 1
 priceholic.com, 1
 priceremoval.net, 1
 pricesniffer.co, 1
 prideindomination.com, 1
 pridetechdesign.com, 0
 prielwurmjaeger.de, 1
 prifo.se, 1
 prihatno.my.id, 1
@@ -37766,16 +37971,17 @@ profi-durchgangsmelder.de, 1
 profidea.cz, 1
 profile.tf, 1
 profiles.google.com, 1
 profilib.top, 1
 profinetz.de, 1
 profitablewebprojects.com, 1
 profitopia.de, 1
 profloorstl.com, 1
+profmetod.com, 1
 proft.eu, 1
 progarm.org, 1
 progenda.be, 1
 progenitor.space, 1
 progeon.nl, 1
 progettograjau.com, 1
 progg.no, 1
 proggersession.com, 1
@@ -37800,16 +38006,17 @@ prohrcloud.com, 1
 proimpact.it, 1
 proj.org.cn, 1
 project-rune.tech, 1
 project-stats.com, 1
 project86fashion.com, 1
 projectarmy.net, 0
 projectbenson.com, 0
 projectborealisgitlab.site, 1
+projectbotticelli.com, 1
 projectforge.org, 1
 projectl1b1t1na.tk, 1
 projectlinuseasttn.org, 1
 projectmakeit.com, 1
 projectnom.com, 1
 projectsafechildhood.gov, 1
 projectsecretidentity.com, 1
 projectsecretidentity.org, 1
@@ -37883,28 +38090,29 @@ prosocialmachines.com, 1
 prospanek.cz, 1
 prospecto.com.au, 1
 prospecto.ee, 1
 prospecto.hr, 1
 prospecto.lt, 1
 prosperfit.com, 1
 prosperity-textile.com, 1
 prosperontheweb.com, 1
+prosperops.com, 1
 prospo.co, 1
 prostecheat.xyz, 1
 prostohobby.ru, 1
 prostoporno.net, 1
 prostoporno.sexy, 1
 prostoporno.video, 1
 prostoporno.vip, 1
 prostye-recepty.com, 1
 prosurveillancegear.com, 1
 prot.ch, 1
 proteapower.co.za, 1
-protech.ge, 1
+protech.ge, 0
 protectedreport.com, 1
 protectem.de, 1
 protectoraanimalesalicante.org, 1
 protectr.de, 1
 protege.moi, 1
 protegetudescanso.com, 1
 protein-riegel-test.de, 1
 protempore.fr, 1
@@ -37940,17 +38148,16 @@ proxirealtime.com, 1
 proxybay.bet, 1
 proxybay.bz, 1
 proxybay.cc, 1
 proxybay.co, 1
 proxybay.eu.org, 1
 proxybay.la, 1
 proxybay.one, 1
 proxybay.tv, 1
-proxydesk.eu, 1
 proxyportal.eu, 1
 proxyportal.net, 1
 proyectafengshui.com, 1
 proyecto13.com, 1
 prpferrara.it, 1
 prplz.io, 1
 prpr.cloud, 1
 prstatic.com, 1
@@ -38035,17 +38242,16 @@ psychoco.net, 0
 psychologie-hofner.at, 1
 psychotechnique.be, 1
 psychotechnique.ch, 1
 psychotechniquetest.fr, 1
 psychotherapie-kp.de, 1
 psycolleges.com, 1
 psydix.org, 1
 psyk.yt, 1
-psylab.re, 1
 psylab.vip, 1
 psynapse.net.au, 1
 psytrance-pro.com, 1
 pt-d.ru, 1
 pt-server.de, 1
 pt.im, 1
 ptal.eu, 1
 ptasiepodroze.eu, 1
@@ -38086,16 +38292,18 @@ publicsuffix.org, 1
 publimepa.it, 0
 publiq.space, 1
 publisherservices.co, 1
 pubmire.com, 0
 pubreview.com.au, 1
 pucchi.net, 1
 pucssa.org, 1
 puddis.de, 1
+puestifiestas.mx, 1
+puestosdeferia.mx, 1
 puetter.eu, 1
 puggan.se, 1
 pugilares.com.pl, 1
 pugovka72.ru, 1
 puhe.se, 1
 puhka.me, 1
 puissancemac.ch, 1
 pukfalkenberg.dk, 1
@@ -38133,17 +38341,16 @@ puppo.space, 1
 puq.moe, 1
 puralps.ch, 1
 puravida-estate.com, 1
 pure-gmbh.com, 1
 purecabo.com, 1
 purefkh.xyz, 1
 purefreefrom.co.uk, 1
 pureitsolutionsllp.com, 1
-purejewels.com, 1
 purelunch.co.uk, 1
 purenvi.ca, 1
 purevapeofficial.com, 1
 purikore.com, 1
 purityclothing.co.uk, 1
 purplebooth.co.uk, 0
 purplebricks.co.uk, 1
 purplebricks.com, 1
@@ -38291,16 +38498,17 @@ qgblog.org, 1
 qgustavor.tk, 1
 qhse-professionals.nl, 1
 qianalysis.com, 1
 qianmo.com, 1
 qianqiao.me, 1
 qiaohong.org, 1
 qifu.me, 1
 qifu.org.cn, 1
+qihl.gg, 1
 qikan.net, 0
 qiliang.wang, 1
 qingcao.org, 1
 qingly.me, 1
 qingpat.com, 1
 qingpei.me, 1
 qionouu.cn, 1
 qipl.org, 1
@@ -38360,16 +38568,17 @@ qtpower.org, 1
 qtvr.com, 1
 qtxh.net, 1
 quackerswaterproofing.com, 1
 quadra.srl, 1
 quaedam.org, 1
 quaggan.co, 1
 quai10.org, 0
 quakelive.dk, 0
+qualitation.co.uk, 1
 qualite-ecole-et-formation.ch, 1
 quality-life.gr, 1
 qualityhomesystems.com, 1
 qualityhvacservices.com, 1
 qualitylogoproducts.com, 1
 qualityofcourse.com, 1
 qualitypropertycare.co.uk, 1
 qualitywaterproofing.com, 1
@@ -38418,16 +38627,17 @@ quehacerencusco.com, 1
 quelle.at, 1
 quelle.ch, 1
 quelle.de, 1
 quelleformation.net, 1
 quemeloquitan.com, 1
 queminventou.com.br, 1
 quemmeliga.com, 1
 quenotejodan.cl, 1
+quentin-sauvetre.fr, 1
 quentinchevre.ch, 1
 queo.com.co, 1
 quera.ir, 1
 quermail.com, 1
 query-massage.com, 1
 question.com, 1
 questionable.host, 1
 questoj.cn, 1
@@ -38582,20 +38792,22 @@ radior9.it, 1
 radiormi.com, 1
 radiorsvp.com, 0
 radiosendungen.com, 1
 radis-adopt.com, 1
 radiumcode.com, 1
 radiumone.io, 1
 radiumtree.com, 1
 radom-pack.pl, 1
+radomir-online.ru, 1
 radondetectionandcontrol.com, 1
 radreisetraumtreibstoff.de, 1
 radyabkhodro.net, 1
 radyn.com, 1
+radzikow.ski, 1
 raeder-test.azurewebsites.net, 1
 raeu.me, 1
 raeven.nl, 1
 raevinnd.com, 1
 rafaelmagalhaesweb.com, 1
 rafas.com.tr, 1
 rafey.xyz, 1
 raffaellaosti.com, 1
@@ -38632,21 +38844,21 @@ railorama.nl, 1
 railpassie.nl, 1
 railtoo.com, 1
 railvideo.co.uk, 1
 railvideo.net, 1
 railvideo.nl, 1
 railwaytech.net, 1
 raimondos.com, 1
 rain.bz, 1
-rainbin.com, 1
 rainbowbay.org, 1
 rainbowinflatables.co.uk, 1
 rainbowstore.com.au, 1
 rainbowstore.com.ua, 1
+raincoat.systems, 1
 rainel.at, 1
 rainforest.engineering, 1
 rainiv.com, 1
 rainpaper.com, 1
 rainstormsinjuly.co, 1
 rainville.me, 1
 rainway.com, 1
 rainway.io, 1
@@ -38738,16 +38950,17 @@ rapido.nu, 1
 rapidoo.com.br, 1
 rapidshit.net, 1
 rapidstone.com, 1
 raptorsrapture.com, 1
 raraflora.com.au, 1
 rareative.com, 1
 raryosu.info, 1
 rasagiline.com, 1
+rascahan.org, 1
 rascals-castles.co.uk, 1
 rascalscastles.co.uk, 1
 rascalscastlesdoncaster.co.uk, 1
 rasebo.ro, 1
 raspberry.us, 1
 raspberrypi.tv, 1
 raspii.tech, 1
 raspitec.ddns.net, 1
@@ -38838,17 +39051,16 @@ rca.ink, 1
 rcd.cz, 1
 rcdocuments.com, 1
 rcgoncalves.pt, 1
 rchavez.site, 1
 rchrdsn.uk, 1
 rcifsgapinsurance.co.uk, 1
 rclsm.net, 1
 rcmlinx.com, 1
-rcmpsplib.com, 1
 rcmurphy.com, 1
 rcnitrotalk.com, 1
 rcoliveira.com, 1
 rcraigmurphy.com, 1
 rcraigmurphy.net, 1
 rcsolutions.nl, 1
 rct.sk, 1
 rct.uk, 1
@@ -38913,17 +39125,16 @@ real-digital.co.uk, 1
 real-it.nl, 1
 realcapoeira.ru, 1
 realcli.com, 1
 realcolors.net, 1
 realestate-in-uruguay.com, 1
 realestatecentralcoast.info, 1
 realestatemarketingblog.org, 1
 realestateonehowell.com, 1
-realestateradioshow.com, 1
 realfamilyincest.com, 1
 realfood.space, 1
 realfreedom.city, 0
 realgear.net, 1
 realhorsegirls.net, 1
 realhost.name, 1
 realhypnosistraining.com.au, 1
 realincest.tv, 1
@@ -39197,16 +39408,17 @@ rehabreviews.com, 1
 rehabthailand.com, 1
 rehabthailand.org, 1
 reher.pro, 1
 rei.ki, 1
 reichardt-home.goip.de, 1
 reichel-steinmetz.de, 1
 reichelt-cloud.de, 1
 reichl-online.net, 1
+reiciunas.lt, 1
 reifr.net, 1
 reignsphere.net, 1
 reiki-coaching.nl, 0
 reiki-france.fr, 1
 reilly.io, 1
 reimaginebelonging.de, 1
 reimaginebelonging.org, 1
 reimann.me, 1
@@ -39239,16 +39451,17 @@ rejahrehim.com, 1
 rejects.email, 1
 rejsehuskelisten.dk, 1
 rejushiiplotter.ru, 1
 rekisuta.com, 1
 reklamjog.hu, 1
 rekonstrukcestatu.cz, 1
 rekorsanat.com.tr, 1
 rekyou.com, 0
+relaispourlavie.net, 1
 relates.link, 1
 relatethesport.com, 0
 relatic.net, 1
 relax.hn, 1
 relaxdom.net, 1
 relaxhavefun.com, 1
 relaxpointhyncice.cz, 1
 relaybox.io, 1
@@ -39363,16 +39576,17 @@ reproduciblescience.org, 1
 reproductive-revolution.com, 1
 reproductiverevolution.com, 1
 reprogramming-predators.com, 1
 reprogrammingpredators.com, 1
 reprozip.org, 1
 repsltd.co.uk, 1
 repsomelt.com, 1
 reptrax.com, 1
+reptv.online, 1
 republic.gr, 1
 republicmo.gov, 1
 republictelecom.net, 1
 republique.org, 1
 repugnant-conclusion.com, 1
 repugnantconclusion.com, 1
 reputationweaver.com, 1
 reqognize.com, 1
@@ -39510,17 +39724,16 @@ reviewbestseller.com, 1
 reviewninja.net, 1
 reviews.anime.my, 0
 revirt.global, 1
 revision.co.zw, 1
 revisionnotes.xyz, 1
 revista-programar.info, 1
 revivalinhisword.com, 1
 revivalprayerfellowship.com, 1
-revivalsstores.com, 1
 revivingtheredeemed.org, 1
 revlect.com, 1
 revolt.tv, 1
 revolutionhive.com, 1
 revthefox.co.uk, 1
 revuestarlight.me, 1
 rewardingexcellence.com, 1
 rewrite3.com, 1
@@ -39536,16 +39749,17 @@ rezexpert.com, 1
 rezosup.net, 1
 rezosup.org, 1
 rezultant.ru, 1
 rfeif.org, 1
 rftoon.com, 1
 rfxanalyst.com, 1
 rga.sh, 1
 rgbinnovation.com, 1
+rgbpty.com, 1
 rgcomportement.fr, 1
 rgraph.net, 1
 rgz.ee, 1
 rhaegal.me, 1
 rhd-instruments.com, 1
 rhd-instruments.de, 1
 rhees.nl, 1
 rheinneckarmetal.com, 1
@@ -39554,16 +39768,17 @@ rheocube.com, 1
 rhese.net, 1
 rhetorical.ml, 1
 rhetthenckel.com, 1
 rheuma-online.de, 1
 rhevelo.com, 1
 rhinelander.ca, 1
 rhinobase.net, 0
 rhinoceroses.org, 1
+rhiskiapril.com, 1
 rhnet.at, 1
 rhodenmanorcattery.co.uk, 1
 rhodes.ml, 1
 rhodesianridgeback.com.br, 1
 rhodri.io, 1
 rhondanp.com, 1
 rhowell.io, 1
 rhumblineadvisers.com, 1
@@ -39726,17 +39941,16 @@ rit.space, 0
 ritirocalcinacci.viterbo.it, 1
 rittau.biz, 1
 rittau.org, 1
 ritzlux.com.tw, 1
 rivaforum.de, 1
 rivalsa.cn, 1
 rivastation.de, 1
 riverbanktearooms.co.uk, 1
-riverbendessentialoil.com, 1
 riverbendroofingnd.com, 1
 riverford.co.uk, 1
 rivermist.com.au, 1
 riverridgecc.com, 1
 riversidebaptistchurch.net, 1
 riversideradio.nl, 1
 riverstyxgame.com, 1
 riverviewcourtapts.com, 1
@@ -39758,32 +39972,31 @@ rjan.nl, 1
 rkc-hygrotherm.de, 1
 rkfp.cz, 1
 rkkhok.hu, 0
 rkmedia.no, 1
 rkmns.edu.in, 1
 rlalique.com, 1
 rld.org, 1