Merge autoland to mozilla-central. a=merge
authorNoemi Erli <nerli@mozilla.com>
Tue, 09 Oct 2018 07:01:46 +0300
changeset 440136 adf7408d9bc64caec663921f7a21e43164b0a387
parent 440135 f95186d58bfaad221b599e284b57d980ade32468 (current diff)
parent 440040 cd94fba048645c2e73776138aac06c1b85ad334b (diff)
child 440137 6a6c984745eff7fdcaeb6ec930e9c0669abaab9a
push id70564
push usernerli@mozilla.com
push dateTue, 09 Oct 2018 04:06:18 +0000
treeherderautoland@ac590db9a294 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone64.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 autoland to mozilla-central. a=merge
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -3275,46 +3275,87 @@ function BrowserFullScreen() {
   window.fullScreen = !window.fullScreen;
 }
 
 function getWebNavigation() {
   return gBrowser.webNavigation;
 }
 
 function BrowserReloadWithFlags(reloadFlags) {
-  let url = gBrowser.currentURI.spec;
-  if (gBrowser.updateBrowserRemotenessByURL(gBrowser.selectedBrowser, url)) {
-    // If the remoteness has changed, the new browser doesn't have any
-    // information of what was loaded before, so we need to load the previous
-    // URL again.
-    gBrowser.loadURI(url, {
-      flags: reloadFlags,
-      triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal,
-    });
+  let unchangedRemoteness = [];
+
+  for (let tab of gBrowser.selectedTabs) {
+    let browser = tab.linkedBrowser;
+    let url = browser.currentURI.spec;
+    if (gBrowser.updateBrowserRemotenessByURL(browser, url)) {
+      // If the remoteness has changed, the new browser doesn't have any
+      // information of what was loaded before, so we need to load the previous
+      // URL again.
+      if (tab.linkedPanel) {
+        loadBrowserURI(browser, url);
+      } else {
+        // Shift to fully loaded browser and make
+        // sure load handler is instantiated.
+        tab.addEventListener("SSTabRestoring",
+                             () => loadBrowserURI(browser, url),
+                             { once: true });
+        gBrowser._insertBrowser(tab);
+      }
+    } else {
+      unchangedRemoteness.push(tab);
+    }
+  }
+
+  if (unchangedRemoteness.length == 0) {
     return;
   }
 
   // Do this after the above case where we might flip remoteness.
   // Unfortunately, we'll count the remoteness flip case as a
   // "newURL" load, since we're using loadURI, but hopefully
   // that's rare enough to not matter.
-  maybeRecordAbandonmentTelemetry(gBrowser.selectedTab, "reload");
-
-  // Reset temporary permissions on the current tab. This is done here
-  // because we only want to reset permissions on user reload.
-  SitePermissions.clearTemporaryPermissions(gBrowser.selectedBrowser);
+  for (let tab of unchangedRemoteness) {
+    maybeRecordAbandonmentTelemetry(tab, "reload");
+  }
+
+  // Reset temporary permissions on the remaining tabs to reload.
+  // This is done here because we only want to reset
+  // permissions on user reload.
+  for (let tab of unchangedRemoteness) {
+    SitePermissions.clearTemporaryPermissions(tab.linkedBrowser);
+  }
   PanelMultiView.hidePopup(gIdentityHandler._identityPopup);
 
 
   let handlingUserInput = window.windowUtils.isHandlingUserInput;
 
-  gBrowser.selectedBrowser
-          .messageManager
-          .sendAsyncMessage("Browser:Reload",
-                            { flags: reloadFlags, handlingUserInput });
+  for (let tab of unchangedRemoteness) {
+    if (tab.linkedPanel) {
+      sendReloadMessage(tab);
+    } else {
+      // Shift to fully loaded browser and make
+      // sure load handler is instantiated.
+      tab.addEventListener("SSTabRestoring", () => sendReloadMessage(tab), { once: true });
+      gBrowser._insertBrowser(tab);
+    }
+  }
+
+  function loadBrowserURI(browser, url) {
+    browser.loadURI(url, {
+      flags: reloadFlags,
+      triggeringPrincipal: browser.contentPrincipal,
+    });
+  }
+
+  function sendReloadMessage(tab) {
+    tab.linkedBrowser
+         .messageManager
+         .sendAsyncMessage("Browser:Reload",
+                           { flags: reloadFlags, handlingUserInput });
+  }
 }
 
 function getSecurityInfo(securityInfoAsString) {
   if (!securityInfoAsString)
     return null;
 
   const serhelper = Cc["@mozilla.org/network/serialization-helper;1"]
                        .getService(Ci.nsISerializationHelper);
--- a/browser/base/content/test/tabs/browser_multiselect_tabs_reload.js
+++ b/browser/base/content/test/tabs/browser_multiselect_tabs_reload.js
@@ -1,50 +1,89 @@
 const PREF_MULTISELECT_TABS = "browser.tabs.multiselect";
 
 async function tabLoaded(tab) {
-    const browser = gBrowser.getBrowserForTab(tab);
-    await BrowserTestUtils.browserLoaded(browser);
-    return true;
+  const browser = gBrowser.getBrowserForTab(tab);
+  await BrowserTestUtils.browserLoaded(browser);
+  return true;
 }
 
 add_task(async function setPref() {
-    await SpecialPowers.pushPrefEnv({
-        set: [[PREF_MULTISELECT_TABS, true]],
-    });
+  await SpecialPowers.pushPrefEnv({
+    set: [[PREF_MULTISELECT_TABS, true]],
+  });
 });
 
-add_task(async function test() {
+add_task(async function test_usingTabContextMenu() {
+  let tab1 = await addTab();
+  let tab2 = await addTab();
+  let tab3 = await addTab();
+
+  let menuItemReloadTab = document.getElementById("context_reloadTab");
+  let menuItemReloadSelectedTabs = document.getElementById("context_reloadSelectedTabs");
+
+  await BrowserTestUtils.switchTab(gBrowser, tab1);
+  await triggerClickOn(tab2, { ctrlKey: true });
+
+  ok(tab1.multiselected, "Tab1 is multi-selected");
+  ok(tab2.multiselected, "Tab2 is multi-selected");
+  ok(!tab3.multiselected, "Tab3 is not multi-selected");
+
+  updateTabContextMenu(tab3);
+  is(menuItemReloadTab.hidden, false, "Reload Tab is visible");
+  is(menuItemReloadSelectedTabs.hidden, true, "Reload Tabs is hidden");
+
+  updateTabContextMenu(tab2);
+  is(menuItemReloadTab.hidden, true, "Reload Tab is hidden");
+  is(menuItemReloadSelectedTabs.hidden, false, "Reload Tabs is visible");
+
+  let tab1Loaded = tabLoaded(tab1);
+  let tab2Loaded = tabLoaded(tab2);
+  menuItemReloadSelectedTabs.click();
+  await tab1Loaded;
+  await tab2Loaded;
+
+  // We got here because tab1 and tab2 are reloaded. Otherwise the test would have timed out and failed.
+  ok(true, "Tab1 and Tab2 are reloaded");
+
+  BrowserTestUtils.removeTab(tab1);
+  BrowserTestUtils.removeTab(tab2);
+  BrowserTestUtils.removeTab(tab3);
+});
+
+add_task(async function test_usingKeyboardShortcuts() {
+  let keys = [
+    ["R", { accelKey: true }],
+    ["R", { accelKey: true, shift: true }],
+    ["VK_F5", {}],
+  ];
+
+  if (AppConstants.platform != "macosx") {
+    keys.push(["VK_F5", { accelKey: true }]);
+  }
+
+  for (let key of keys) {
+
     let tab1 = await addTab();
     let tab2 = await addTab();
     let tab3 = await addTab();
 
-    let menuItemReloadTab = document.getElementById("context_reloadTab");
-    let menuItemReloadSelectedTabs = document.getElementById("context_reloadSelectedTabs");
-
     await BrowserTestUtils.switchTab(gBrowser, tab1);
     await triggerClickOn(tab2, { ctrlKey: true });
 
     ok(tab1.multiselected, "Tab1 is multi-selected");
     ok(tab2.multiselected, "Tab2 is multi-selected");
     ok(!tab3.multiselected, "Tab3 is not multi-selected");
 
-    updateTabContextMenu(tab3);
-    is(menuItemReloadTab.hidden, false, "Reload Tab is visible");
-    is(menuItemReloadSelectedTabs.hidden, true, "Reload Selected Tabs is hidden");
-
-    updateTabContextMenu(tab2);
-    is(menuItemReloadTab.hidden, true, "Reload Tab is hidden");
-    is(menuItemReloadSelectedTabs.hidden, false, "Reload Selected Tabs is visible");
-
     let tab1Loaded = tabLoaded(tab1);
     let tab2Loaded = tabLoaded(tab2);
-    menuItemReloadSelectedTabs.click();
+    EventUtils.synthesizeKey(key[0], key[1]);
     await tab1Loaded;
     await tab2Loaded;
 
     // We got here because tab1 and tab2 are reloaded. Otherwise the test would have timed out and failed.
     ok(true, "Tab1 and Tab2 are reloaded");
 
     BrowserTestUtils.removeTab(tab1);
     BrowserTestUtils.removeTab(tab2);
     BrowserTestUtils.removeTab(tab3);
+  }
 });
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -73,17 +73,16 @@ skip-if = (os == 'mac' && debug) # Bug 1
 [browser_ext_commands_execute_page_action.js]
 skip-if = (verify && (os == 'linux' || os == 'mac'))
 [browser_ext_commands_execute_sidebar_action.js]
 [browser_ext_commands_getAll.js]
 [browser_ext_commands_onCommand.js]
 [browser_ext_commands_update.js]
 [browser_ext_connect_and_move_tabs.js]
 [browser_ext_contentscript_connect.js]
-[browser_ext_contentscript_nontab_connect.js]
 [browser_ext_contextMenus.js]
 [browser_ext_contextMenus_checkboxes.js]
 [browser_ext_contextMenus_commands.js]
 [browser_ext_contextMenus_icons.js]
 [browser_ext_contextMenus_onclick.js]
 [browser_ext_contextMenus_radioGroups.js]
 [browser_ext_contextMenus_targetUrlPatterns.js]
 [browser_ext_contextMenus_uninstall.js]
--- a/browser/components/extensions/test/browser/browser-remote.ini
+++ b/browser/components/extensions/test/browser/browser-remote.ini
@@ -6,12 +6,14 @@
 # in this manifest to the sub-directory "test-oop-extensions", and then check
 # whether we're running from that directory from head.js
 install-to-subdir = test-oop-extensions
 tags = webextensions remote-webextensions
 skip-if = !e10s
 support-files =
   head.js
 
+[browser_ext_contentscript_nontab_connect.js]
+
 [browser_ext_popup_select.js]
 skip-if = debug || os != 'win' # FIXME: re-enable on debug build (bug 1442822)
 
 [include:browser-common.ini]
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -93,16 +93,20 @@ DOMInterfaces = {
         'channelInterpretation': 'channelInterpretationValue',
     },
 },
 
 'AudioWorklet': {
     'nativeType': 'mozilla::dom::Worklet',
 },
 
+'AudioWorkletGlobalScope': {
+    'implicitJSContext': [ 'registerProcessor' ],
+},
+
 'BarProp': {
     'headerFile': 'mozilla/dom/BarProps.h',
 },
 
 'BaseAudioContext': {
     'nativeType': 'mozilla::dom::AudioContext',
 },
 
--- a/dom/bindings/Errors.msg
+++ b/dom/bindings/Errors.msg
@@ -110,8 +110,9 @@ MSG_DEF(MSG_INVALID_CURVE_DURATION_ERROR
 MSG_DEF(MSG_INVALID_AUDIOPARAM_METHOD_START_TIME_ERROR, 0, JSEXN_RANGEERR, "The start time for an AudioParam method must be non-negative.")
 MSG_DEF(MSG_INVALID_AUDIOPARAM_METHOD_END_TIME_ERROR, 0, JSEXN_RANGEERR, "The end time for an AudioParam method must be non-negative.")
 MSG_DEF(MSG_INVALID_AUDIOPARAM_EXPONENTIAL_VALUE_ERROR, 0, JSEXN_RANGEERR, "The value passed to exponentialRampToValueAtTime must be positive.")
 MSG_DEF(MSG_INVALID_AUDIOPARAM_EXPONENTIAL_CONSTANT_ERROR, 0, JSEXN_RANGEERR, "The exponential constant passed to setTargetAtTime must be non-negative.")
 MSG_DEF(MSG_VALUE_OUT_OF_RANGE, 1, JSEXN_RANGEERR, "The value for the {0} is outside the valid range.")
 MSG_DEF(MSG_INVALID_PANNERNODE_REFDISTANCE_ERROR, 0, JSEXN_RANGEERR, "The refDistance value passed to PannerNode must not be negative.")
 MSG_DEF(MSG_INVALID_PANNERNODE_MAXDISTANCE_ERROR, 0, JSEXN_RANGEERR, "The maxDistance value passed to PannerNode must be positive.")
 MSG_DEF(MSG_INVALID_PANNERNODE_ROLLOFF_ERROR, 0, JSEXN_RANGEERR, "The rolloffFactor value passed to PannerNode must not be negative.")
+MSG_DEF(MSG_NOT_ARRAY_NOR_UNDEFINED, 1, JSEXN_TYPEERR, "{0} is neither an array nor undefined.")
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -2694,18 +2694,18 @@ HTMLMediaElement::CurrentTime() const
 }
 
 void
 HTMLMediaElement::FastSeek(double aTime, ErrorResult& aRv)
 {
   LOG(LogLevel::Debug, ("%p FastSeek(%f) called by JS", this, aTime));
   LOG(LogLevel::Debug, ("Reporting telemetry VIDEO_FASTSEEK_USED"));
   Telemetry::Accumulate(Telemetry::VIDEO_FASTSEEK_USED, 1);
-  RefPtr<Promise> tobeDropped = Seek(aTime, SeekTarget::PrevSyncPoint, aRv);
-  aRv.SuppressException();
+  RefPtr<Promise> tobeDropped = Seek(aTime, SeekTarget::PrevSyncPoint,
+                                     IgnoreErrors());
 }
 
 already_AddRefed<Promise>
 HTMLMediaElement::SeekToNextFrame(ErrorResult& aRv)
 {
   /* This will cause JIT code to be kept around longer, to help performance
    * when using SeekToNextFrame to iterate through every frame of a video.
    */
@@ -2720,18 +2720,18 @@ HTMLMediaElement::SeekToNextFrame(ErrorR
   return Seek(CurrentTime(), SeekTarget::NextFrame, aRv);
 }
 
 void
 HTMLMediaElement::SetCurrentTime(double aCurrentTime, ErrorResult& aRv)
 {
   LOG(LogLevel::Debug,
       ("%p SetCurrentTime(%f) called by JS", this, aCurrentTime));
-  RefPtr<Promise> tobeDropped = Seek(aCurrentTime, SeekTarget::Accurate, aRv);
-  aRv.SuppressException();
+  RefPtr<Promise> tobeDropped = Seek(aCurrentTime, SeekTarget::Accurate,
+                                     IgnoreErrors());
 }
 
 /**
  * Check if aValue is inside a range of aRanges, and if so returns true
  * and puts the range index in aIntervalIndex. If aValue is not
  * inside a range, returns false, and aIntervalIndex
  * is set to the index of the range which starts immediately after aValue
  * (and can be aRanges.Length() if aValue is after the last range).
@@ -2764,16 +2764,17 @@ HTMLMediaElement::Seek(double aTime,
 {
   // Note: Seek is called both by synchronous code that expects errors thrown in
   // aRv, as well as asynchronous code that expects a promise. Make sure all
   // synchronous errors are returned using aRv, not promise rejections.
 
   // aTime should be non-NaN.
   MOZ_ASSERT(!mozilla::IsNaN(aTime));
 
+  RefPtr<Promise> promise = CreateDOMPromise(aRv);
   if (NS_WARN_IF(aRv.Failed())) {
     return nullptr;
   }
 
   // Detect if user has interacted with element by seeking so that
   // play will not be blocked when initiated by a script.
   if (EventStateManager::IsHandlingUserInput()) {
     mIsBlessed = true;
@@ -2885,17 +2886,19 @@ HTMLMediaElement::Seek(double aTime,
   // event if it changes the playback position as a result of the seek.
   LOG(LogLevel::Debug, ("%p SetCurrentTime(%f) starting seek", this, aTime));
   mDecoder->Seek(aTime, aSeekType);
 
   // We changed whether we're seeking so we need to AddRemoveSelfReference.
   AddRemoveSelfReference();
 
   // Keep the DOM promise.
-  return do_AddRef(mSeekDOMPromise = CreateDOMPromise(aRv));
+  mSeekDOMPromise = promise;
+
+  return promise.forget();
 }
 
 double
 HTMLMediaElement::Duration() const
 {
   if (mSrcStream) {
     return std::numeric_limits<double>::infinity();
   }
@@ -4274,47 +4277,54 @@ HTMLMediaElement::UpdateWakeLock()
   MOZ_ASSERT(NS_IsMainThread());
   // Ensure we have a wake lock if we're playing audibly. This ensures the
   // device doesn't sleep while playing.
   bool playing = !mPaused;
   bool isAudible =
     Volume() > 0.0 && !mMuted && mIsAudioTrackAudible;
   // WakeLock when playing audible media.
   if (playing && isAudible) {
-    WakeLockCreate();
+    CreateAudioWakeLockIfNeeded();
   } else {
-    WakeLockRelease();
-  }
-}
-
-void
-HTMLMediaElement::WakeLockCreate()
+    ReleaseAudioWakeLockIfExists();
+  }
+}
+
+void
+HTMLMediaElement::CreateAudioWakeLockIfNeeded()
 {
   if (!mWakeLock) {
     RefPtr<power::PowerManagerService> pmService =
       power::PowerManagerService::GetInstance();
     NS_ENSURE_TRUE_VOID(pmService);
 
     ErrorResult rv;
-    mWakeLock = pmService->NewWakeLock(
-      NS_LITERAL_STRING("audio-playing"), OwnerDoc()->GetInnerWindow(), rv);
-  }
-}
-
-void
-HTMLMediaElement::WakeLockRelease()
+    mWakeLock = pmService->NewWakeLock(NS_LITERAL_STRING("audio-playing"),
+                                       OwnerDoc()->GetInnerWindow(),
+                                       rv);
+  }
+}
+
+void
+HTMLMediaElement::ReleaseAudioWakeLockIfExists()
 {
   if (mWakeLock) {
     ErrorResult rv;
     mWakeLock->Unlock(rv);
     rv.SuppressException();
     mWakeLock = nullptr;
   }
 }
 
+void
+HTMLMediaElement::WakeLockRelease()
+{
+  ReleaseAudioWakeLockIfExists();
+}
+
 HTMLMediaElement::OutputMediaStream::OutputMediaStream()
   : mNextAvailableTrackID(1)
   , mFinishWhenEnded(false)
   , mCapturingAudioOnly(false)
   , mCapturingDecoder(false)
   , mCapturingMediaStream(false)
 {
 }
@@ -7748,16 +7758,17 @@ HTMLMediaElement::SetMediaInfo(const Med
   if (aInfo.HasAudio() != oldHasAudio) {
     UpdateAudioChannelPlayingState();
     NotifyAudioPlaybackChanged(
       AudioChannelService::AudibleChangedReasons::eDataAudibleChanged);
   }
   if (mAudioChannelWrapper) {
     mAudioChannelWrapper->AudioCaptureStreamChangeIfNeeded();
   }
+  UpdateWakeLock();
 }
 
 void
 HTMLMediaElement::AudioCaptureStreamChange(bool aCapture)
 {
   // No need to capture a silence media element.
   if (!HasAudio()) {
     return;
@@ -8186,31 +8197,31 @@ HasDebuggerOrTabsPrivilege(JSContext* aC
 void
 HTMLMediaElement::AsyncResolveSeekDOMPromiseIfExists()
 {
   MOZ_ASSERT(NS_IsMainThread());
   if (mSeekDOMPromise) {
     RefPtr<dom::Promise> promise = mSeekDOMPromise.forget();
     nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
       "dom::HTMLMediaElement::AsyncResolveSeekDOMPromiseIfExists",
-      [=]() { promise->MaybeResolveWithUndefined(); });
+      [promise]() { promise->MaybeResolveWithUndefined(); });
     mAbstractMainThread->Dispatch(r.forget());
     mSeekDOMPromise = nullptr;
   }
 }
 
 void
 HTMLMediaElement::AsyncRejectSeekDOMPromiseIfExists()
 {
   MOZ_ASSERT(NS_IsMainThread());
   if (mSeekDOMPromise) {
     RefPtr<dom::Promise> promise = mSeekDOMPromise.forget();
     nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
       "dom::HTMLMediaElement::AsyncRejectSeekDOMPromiseIfExists",
-      [=]() { promise->MaybeReject(NS_ERROR_DOM_ABORT_ERR); });
+      [promise]() { promise->MaybeReject(NS_ERROR_DOM_ABORT_ERR); });
     mAbstractMainThread->Dispatch(r.forget());
     mSeekDOMPromise = nullptr;
   }
 }
 
 void
 HTMLMediaElement::ReportCanPlayTelemetry()
 {
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -839,18 +839,16 @@ protected:
   class StreamListener;
   class StreamSizeListener;
   class ShutdownObserver;
 
   MediaDecoderOwner::NextFrameStatus NextFrameStatus();
 
   void SetDecoder(MediaDecoder* aDecoder);
 
-  void UpdateWakeLock();
-
   // Holds references to the DOM wrappers for the MediaStreams that we're
   // writing to.
   struct OutputMediaStream {
     OutputMediaStream();
     ~OutputMediaStream();
 
     RefPtr<DOMMediaStream> mStream;
     TrackID mNextAvailableTrackID;
@@ -877,21 +875,24 @@ protected:
 
   /**
    * Use this method to change the mNetworkState member, so required
    * actions will be taken during the transition.
    */
   void ChangeNetworkState(nsMediaNetworkState aState);
 
   /**
-   * These two methods are called when mPaused is changed to ensure we have
-   * a wake lock active when we're playing audibly.
+   * The MediaElement will be responsible for creating and releasing the audio
+   * wakelock depending on the playing and audible state.
    */
-  virtual void WakeLockCreate();
   virtual void WakeLockRelease();
+  virtual void UpdateWakeLock();
+
+  void CreateAudioWakeLockIfNeeded();
+  void ReleaseAudioWakeLockIfExists();
   RefPtr<WakeLock> mWakeLock;
 
   /**
    * Logs a warning message to the web console to report various failures.
    * aMsg is the localized message identifier, aParams is the parameters to
    * be substituted into the localized message, and aParamCount is the number
    * of parameters in aParams.
    */
--- a/dom/html/HTMLVideoElement.cpp
+++ b/dom/html/HTMLVideoElement.cpp
@@ -291,54 +291,72 @@ HTMLVideoElement::GetVideoPlaybackQualit
   }
 
   RefPtr<VideoPlaybackQuality> playbackQuality =
     new VideoPlaybackQuality(this, creationTime, totalFrames, droppedFrames,
                              corruptedFrames);
   return playbackQuality.forget();
 }
 
-void
-HTMLVideoElement::WakeLockCreate()
-{
-  HTMLMediaElement::WakeLockCreate();
-  UpdateScreenWakeLock();
-}
 
 void
 HTMLVideoElement::WakeLockRelease()
 {
-  UpdateScreenWakeLock();
   HTMLMediaElement::WakeLockRelease();
+  ReleaseVideoWakeLockIfExists();
 }
 
 void
-HTMLVideoElement::UpdateScreenWakeLock()
+HTMLVideoElement::UpdateWakeLock()
 {
-  if (mScreenWakeLock && mPaused) {
-    ErrorResult rv;
-    mScreenWakeLock->Unlock(rv);
-    rv.SuppressException();
-    mScreenWakeLock = nullptr;
-    return;
+  HTMLMediaElement::UpdateWakeLock();
+  if (!mPaused) {
+    CreateVideoWakeLockIfNeeded();
+  } else {
+    ReleaseVideoWakeLockIfExists();
   }
+}
 
-  if (!mScreenWakeLock && !mPaused && HasVideo()) {
+bool
+HTMLVideoElement::ShouldCreateVideoWakeLock() const
+{
+  // Make sure we only request wake lock for video with audio track, because
+  // video without audio track is often used as background image which seems no
+  // need to hold a wakelock.
+  return HasVideo() && HasAudio();
+}
+
+void
+HTMLVideoElement::CreateVideoWakeLockIfNeeded()
+{
+  if (!mScreenWakeLock && ShouldCreateVideoWakeLock()) {
     RefPtr<power::PowerManagerService> pmService =
       power::PowerManagerService::GetInstance();
     NS_ENSURE_TRUE_VOID(pmService);
 
     ErrorResult rv;
     mScreenWakeLock = pmService->NewWakeLock(NS_LITERAL_STRING("video-playing"),
                                              OwnerDoc()->GetInnerWindow(),
                                              rv);
   }
 }
 
 void
+HTMLVideoElement::ReleaseVideoWakeLockIfExists()
+{
+  if (mScreenWakeLock) {
+    ErrorResult rv;
+    mScreenWakeLock->Unlock(rv);
+    rv.SuppressException();
+    mScreenWakeLock = nullptr;
+    return;
+  }
+}
+
+void
 HTMLVideoElement::Init()
 {
   Preferences::AddBoolVarCache(&sVideoStatsEnabled, "media.video_stats.enabled");
 }
 
 /* static */
 bool
 HTMLVideoElement::IsVideoStatsEnabled()
--- a/dom/html/HTMLVideoElement.h
+++ b/dom/html/HTMLVideoElement.h
@@ -150,19 +150,28 @@ public:
     mIsOrientationLocked = aLock;
   }
 
 protected:
   virtual ~HTMLVideoElement();
 
   virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
 
-  virtual void WakeLockCreate() override;
-  virtual void WakeLockRelease() override;
-  void UpdateScreenWakeLock();
+  /**
+   * We create video wakelock when the video is playing and release it when
+   * video pauses. Note, the actual platform wakelock will automatically be
+   * released when the page is in the background, so we don't need to check the
+   * video's visibility by ourselves.
+   */
+  void WakeLockRelease() override;
+  void UpdateWakeLock() override;
+
+  bool ShouldCreateVideoWakeLock() const;
+  void CreateVideoWakeLockIfNeeded();
+  void ReleaseVideoWakeLockIfExists();
 
   RefPtr<WakeLock> mScreenWakeLock;
 
   bool mIsOrientationLocked;
 
 private:
   static void MapAttributesIntoRule(const nsMappedAttributes* aAttributes,
                                     MappedDeclarations&);
--- a/dom/webidl/AudioWorkletGlobalScope.webidl
+++ b/dom/webidl/AudioWorkletGlobalScope.webidl
@@ -4,13 +4,14 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * The origin of this IDL file is
  * https://webaudio.github.io/web-audio-api/#audioworkletglobalscope
  */
 
 [Global=(Worklet,AudioWorklet),Exposed=AudioWorklet]
 interface AudioWorkletGlobalScope : WorkletGlobalScope {
+    [Throws]
     void registerProcessor (DOMString name, VoidFunction processorCtor);
     readonly  attribute   unsigned long long currentFrame;
     readonly  attribute   double currentTime;
     readonly  attribute   float sampleRate;
 };
--- a/dom/worklet/AudioWorkletGlobalScope.cpp
+++ b/dom/worklet/AudioWorkletGlobalScope.cpp
@@ -1,22 +1,31 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "AudioWorkletGlobalScope.h"
-#include "WorkletPrincipal.h"
+#include "jsapi.h"
 #include "mozilla/dom/AudioWorkletGlobalScopeBinding.h"
-#include "mozilla/dom/FunctionBinding.h"
+#include "WorkletPrincipal.h"
 
 namespace mozilla {
 namespace dom {
 
+NS_IMPL_CYCLE_COLLECTION_INHERITED(AudioWorkletGlobalScope, WorkletGlobalScope,
+                                   mNameToProcessorMap);
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AudioWorkletGlobalScope)
+NS_INTERFACE_MAP_END_INHERITING(WorkletGlobalScope)
+
+NS_IMPL_ADDREF_INHERITED(AudioWorkletGlobalScope, WorkletGlobalScope)
+NS_IMPL_RELEASE_INHERITED(AudioWorkletGlobalScope, WorkletGlobalScope)
+
 AudioWorkletGlobalScope::AudioWorkletGlobalScope(WorkletImpl* aImpl)
   : WorkletGlobalScope(aImpl)
   , mCurrentFrame(0)
   , mCurrentTime(0)
   , mSampleRate(0.0)
 {}
 
 bool
@@ -26,20 +35,163 @@ AudioWorkletGlobalScope::WrapGlobalObjec
   JS::RealmOptions options;
   return AudioWorkletGlobalScope_Binding::Wrap(aCx, this, this,
                                               options,
                                               WorkletPrincipal::GetWorkletPrincipal(),
                                               true, aReflector);
 }
 
 void
-AudioWorkletGlobalScope::RegisterProcessor(const nsAString& aType,
-                                           VoidFunction& aProcessorCtor)
+AudioWorkletGlobalScope::RegisterProcessor(JSContext* aCx,
+                                           const nsAString& aName,
+                                           VoidFunction& aProcessorCtor,
+                                           ErrorResult& aRv)
 {
-  // Nothing to do here.
+  JS::Rooted<JSObject*> processorConstructor(aCx, aProcessorCtor.CallableOrNull());
+
+  /**
+   * 1. If the name is the empty string, throw a NotSupportedError
+   *    exception and abort these steps because the empty string is not
+   *    a valid key.
+   */
+  if (aName.IsEmpty()) {
+    aRv.ThrowDOMException(NS_ERROR_DOM_NOT_SUPPORTED_ERR,
+            NS_LITERAL_CSTRING(
+                "Argument 1 of AudioWorkletGlobalScope.registerProcessor "
+                "should not be an empty string."));
+    return;
+  }
+
+  /**
+   * 2. If the name exists as a key in the node name to processor
+   *    definition map, throw a NotSupportedError exception and abort
+   *    these steps because registering a definition with a duplicated
+   *    key is not allowed.
+   */
+  if (mNameToProcessorMap.GetWeak(aName)) {
+    // Duplicate names are not allowed
+    aRv.ThrowDOMException(NS_ERROR_DOM_NOT_SUPPORTED_ERR,
+        NS_LITERAL_CSTRING(
+            "Argument 1 of AudioWorkletGlobalScope.registerProcessor "
+            "is invalid: a class with the same name is already registered."));
+    return;
+  }
+
+  JS::Rooted<JSObject*> constructorUnwrapped(
+      aCx, js::CheckedUnwrap(processorConstructor));
+  if (!constructorUnwrapped) {
+    // If the caller's compartment does not have permission to access the
+    // unwrapped constructor then throw.
+    aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
+    return;
+  }
+
+  /**
+   * 3. If the result of IsConstructor(argument=processorCtor) is false,
+   *    throw a TypeError and abort these steps.
+   */
+  if (!JS::IsConstructor(constructorUnwrapped)) {
+    aRv.ThrowTypeError<MSG_NOT_CONSTRUCTOR>(NS_LITERAL_STRING(
+        "Argument 2 of AudioWorkletGlobalScope.registerProcessor"));
+    return;
+  }
+
+  /**
+   * 4. Let prototype be the result of Get(O=processorCtor, P="prototype").
+   */
+  // The .prototype on the constructor passed could be an "expando" of a
+  // wrapper. So we should get it from wrapper instead of the underlying
+  // object.
+  JS::Rooted<JS::Value> prototype(aCx);
+  if (!JS_GetProperty(aCx, processorConstructor, "prototype", &prototype)) {
+    aRv.NoteJSContextException(aCx);
+    return;
+  }
+
+  /**
+   * 5. If the result of Type(argument=prototype) is not Object, throw a
+   *    TypeError and abort all these steps.
+   */
+  if (!prototype.isObject()) {
+    aRv.ThrowTypeError<MSG_NOT_OBJECT>(NS_LITERAL_STRING(
+        "Argument 2 of AudioWorkletGlobalScope.registerProcessor "
+        "processorCtor.prototype"));
+    return;
+  }
+
+  /**
+   * 6. If the result of IsCallable(argument=Get(O=prototype, P="process"))
+   *    is false, throw a TypeError and abort these steps.
+   */
+  JS::Rooted<JS::Value> process(aCx);
+  JS::Rooted<JSObject*> prototypeObject(aCx, &prototype.toObject());
+  if (!JS_GetProperty(aCx, prototypeObject, "process", &process)) {
+    aRv.NoteJSContextException(aCx);
+    return;
+  }
+
+  if (!process.isObjectOrNull() ||
+      !JS::IsCallable(process.toObjectOrNull())) {
+    aRv.ThrowTypeError<MSG_NOT_CALLABLE>(NS_LITERAL_STRING(
+        "Argument 2 of AudioWorkletGlobalScope.registerProcessor "
+        "constructor.process"));
+    return;
+  }
+
+  /**
+   * 7. Let descriptors be the result of Get(O=processorCtor,
+   *    P="parameterDescriptors").
+   */
+  JS::Rooted<JS::Value> descriptors(aCx);
+  if (!JS_GetProperty(aCx, processorConstructor, "parameterDescriptors",
+                      &descriptors)) {
+    aRv.NoteJSContextException(aCx);
+    return;
+  }
+
+  /**
+   * 8. If descriptors is neither an array nor undefined, throw a
+   *    TypeError and abort these steps.
+   */
+  bool isArray = false;
+  if (!JS_IsArrayObject(aCx, descriptors, &isArray)) {
+    // I would assume isArray won't be set to true if JS_IsArrayObject
+    // failed, but just in case, force it to false
+    isArray = false;
+    JS_ClearPendingException(aCx);
+  }
+
+  if (!descriptors.isUndefined() && !isArray) {
+    aRv.ThrowTypeError<MSG_NOT_ARRAY_NOR_UNDEFINED>(NS_LITERAL_STRING(
+           "Argument 2 of AudioWorkletGlobalScope.registerProcessor "
+           "constructor.parameterDescriptors"));
+    return;
+  }
+
+  /**
+   * 9. Let definition be a new AudioWorkletProcessor definition with:
+   *    - node name being name
+   *    - processor class constructor being processorCtor
+   * 10. Add the key-value pair (name - definition) to the node name to
+   *     processor definition map of the associated AudioWorkletGlobalScope.
+   */
+  if (!mNameToProcessorMap.Put(aName, &aProcessorCtor, fallible)) {
+    aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
+    return;
+  }
+
+  /**
+   * 11. Queue a task to the control thread to add the key-value pair
+   *     (name - descriptors) to the node name to parameter descriptor
+   *     map of the associated BaseAudioContext.
+   */
+  // TODO: we don't have a proper mechanism to communicate with the
+  // control thread currently. See
+  // https://bugzilla.mozilla.org/show_bug.cgi?id=1473467#c3
+  // and https://bugzilla.mozilla.org/show_bug.cgi?id=1492014
 }
 
 uint64_t AudioWorkletGlobalScope::CurrentFrame() const
 {
   return mCurrentFrame;
 }
 
 double AudioWorkletGlobalScope::CurrentTime() const
--- a/dom/worklet/AudioWorkletGlobalScope.h
+++ b/dom/worklet/AudioWorkletGlobalScope.h
@@ -2,49 +2,57 @@
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_dom_AudioWorkletGlobalScope_h
 #define mozilla_dom_AudioWorkletGlobalScope_h
 
+#include "mozilla/dom/FunctionBinding.h"
 #include "mozilla/dom/WorkletGlobalScope.h"
+#include "nsRefPtrHashtable.h"
 
 namespace mozilla {
 
 class WorkletImpl;
 
 namespace dom {
 
-class VoidFunction;
 
 class AudioWorkletGlobalScope final : public WorkletGlobalScope
 {
 public:
+  NS_DECL_ISUPPORTS_INHERITED
+  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AudioWorkletGlobalScope, WorkletGlobalScope);
+
   explicit AudioWorkletGlobalScope(WorkletImpl* aImpl);
 
   bool
   WrapGlobalObject(JSContext* aCx,
                    JS::MutableHandle<JSObject*> aReflector) override;
 
   void
-  RegisterProcessor(const nsAString& aType,
-                    VoidFunction& aProcessorCtor);
+  RegisterProcessor(JSContext* aCx, const nsAString& aName,
+                    VoidFunction& aProcessorCtor,
+                    ErrorResult& aRv);
 
   uint64_t CurrentFrame() const;
 
   double CurrentTime() const;
 
   float SampleRate() const;
 
 private:
   ~AudioWorkletGlobalScope() = default;
 
   uint64_t mCurrentFrame;
   double mCurrentTime;
   float mSampleRate;
+
+  typedef nsRefPtrHashtable<nsStringHashKey, VoidFunction> NodeNameToProcessorDefinitionMap;
+  NodeNameToProcessorDefinitionMap mNameToProcessorMap;
 };
 
 } // namespace dom
 } // namespace mozilla
 
 #endif // mozilla_dom_AudioWorkletGlobalScope_h
--- a/dom/worklet/tests/mochitest.ini
+++ b/dom/worklet/tests/mochitest.ini
@@ -11,13 +11,15 @@ support-files=worklet_console.js
 skip-if = verify
 support-files=server_import_with_cache.sjs
 [test_dump.html]
 support-files=worklet_dump.js
 [test_audioWorklet_insecureContext.html]
 scheme = http
 [test_audioWorklet.html]
 support-files=worklet_audioWorklet.js
+[test_audioWorkletGlobalScopeRegisterProcessor.html]
+support-files=worklet_test_audioWorkletGlobalScopeRegisterProcessor.js
 [test_exception.html]
 support-files=worklet_exception.js
 [test_paintWorklet.html]
 scheme = http
 support-files=worklet_paintWorklet.js
new file mode 100644
--- /dev/null
+++ b/dom/worklet/tests/test_audioWorkletGlobalScopeRegisterProcessor.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Test for AudioWorklet</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <script type="application/javascript" src="common.js"></script>
+</head>
+<body>
+
+<script type="application/javascript">
+
+function configureTest() {
+
+  var expected_errors = [
+    "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not a constructor.",
+    "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor should not be an empty string.",
+    "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not an object.",
+    "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.process is not callable.",
+    "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.process is not callable.",
+    "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.parameterDescriptors is neither an array nor undefined.",
+    "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor is invalid: a class with the same name is already registered.",
+    ];
+
+  var expected_errors_i = 0;
+
+  function consoleListener() {
+    SpecialPowers.addObserver(this, "console-api-log-event");
+  }
+
+  consoleListener.prototype  = {
+    observe: function(aSubject, aTopic, aData) {
+      if (aTopic == "console-api-log-event") {
+        var obj = aSubject.wrappedJSObject;
+        if (obj.arguments[0] == expected_errors[expected_errors_i]) {
+          ok(true, "Expected error received: " + obj.arguments[0]);
+          expected_errors_i++;
+        }
+
+        if (expected_errors_i == expected_errors.length) {
+          // All errors have been received, this test has been completed
+          // succesfully!
+          SpecialPowers.removeObserver(this, "console-api-log-event");
+          SimpleTest.finish();
+          return;
+        }
+      }
+    }
+  }
+
+  var cl = new consoleListener();
+
+  return SpecialPowers.pushPrefEnv(
+    {"set": [["dom.audioworklet.enabled", true],
+             ["dom.worklet.enabled", true]]});
+}
+
+// This function is called into an iframe.
+function runTestInIframe() {
+  ok(window.isSecureContext, "Test should run in secure context");
+  var audioContext = new AudioContext();
+  ok(audioContext.audioWorklet instanceof AudioWorklet,
+     "AudioContext.audioWorklet should be an instance of AudioWorklet");
+  audioContext.audioWorklet.addModule("worklet_test_audioWorkletGlobalScopeRegisterProcessor.js")
+}
+</script>
+</body>
+</html>
--- a/dom/worklet/tests/worklet_audioWorklet.js
+++ b/dom/worklet/tests/worklet_audioWorklet.js
@@ -1,3 +1,12 @@
-// This should work for real... at some point.
-registerProcessor("sure!", () => {});
+class DummyProcessWorkletProcessor extends AudioWorkletProcessor {
+  constructor() { super(); }
+
+  process() {
+    // Do nothing, output silence
+  }
+}
+
+// We need to pass a valid AudioWorkletProcessor here, otherwise, it will fail,
+// and the console.log won't be executed
+registerProcessor("sure!", DummyProcessWorkletProcessor);
 console.log(this instanceof AudioWorkletGlobalScope ? "So far so good" : "error");
new file mode 100644
--- /dev/null
+++ b/dom/worklet/tests/worklet_test_audioWorkletGlobalScopeRegisterProcessor.js
@@ -0,0 +1,106 @@
+// Define several classes.
+// Only the last ones are valid.
+class EmptyWorkletProcessor extends AudioWorkletProcessor {
+}
+
+class NoProcessWorkletProcessor extends AudioWorkletProcessor {
+  constructor() { super(); }
+}
+
+class BadDescriptorsWorkletProcessor extends AudioWorkletProcessor {
+  constructor() { super(); }
+
+  process() {
+    // Do nothing, output silence
+  }
+
+  static get parameterDescriptors() {
+    return "A string";
+  }
+}
+
+class GoodDescriptorsWorkletProcessor extends AudioWorkletProcessor {
+  constructor() { super(); }
+
+  process() {
+    // Do nothing, output silence
+  }
+
+  static get parameterDescriptors() {
+    return [{
+      name: 'myParam', defaultValue: 0.707
+    }];
+  }
+}
+
+class DummyProcessWorkletProcessor extends AudioWorkletProcessor {
+  constructor() { super(); }
+
+  process() {
+    // Do nothing, output silence
+  }
+}
+
+// Test not a constructor
+// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not a constructor."
+try {
+  registerProcessor("sure!", () => {});
+} catch (e) {
+  console.log(e)
+}
+
+// Test empty name
+// "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor should not be an empty string."
+try {
+  registerProcessor("", EmptyWorkletProcessor);
+} catch (e) {
+  console.log(e)
+}
+
+// Test not an object
+// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not an object."
+try {
+  registerProcessor("my-worklet-processor", "");
+} catch (e) {
+  console.log(e)
+}
+
+// Test Empty class definition
+// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.process is not callable."
+try {
+  registerProcessor("empty-worklet-processor", EmptyWorkletProcessor);
+} catch (e) {
+  console.log(e)
+}
+
+// Test class with constructor but not process function
+// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.process is not callable."
+try {
+  registerProcessor("no-worklet-processor", NoProcessWorkletProcessor);
+} catch (e) {
+  console.log(e)
+}
+
+// Test class with parameterDescriptors not being array nor undefined
+// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor constructor.parameterDescriptors is neither an array nor undefined."
+try {
+  registerProcessor("bad-descriptors-worklet-processor", BadDescriptorsWorkletProcessor);
+} catch (e) {
+  console.log(e)
+}
+
+// Test class with good parameterDescriptors
+// No error expected here
+registerProcessor("good-descriptors-worklet-processor", GoodDescriptorsWorkletProcessor);
+
+// Test class with constructor and process function
+// No error expected here
+registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
+
+// Test class adding class with the same name twice
+// "NotSupportedError: Operation is not supported: Argument 1 of AudioWorkletGlobalScope.registerProcessor is invalid: a class with the same name is already registered."
+try {
+  registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
+} catch (e) {
+  console.log(e)
+}
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -2705,31 +2705,33 @@ JS_AlreadyHasOwnElement(JSContext* cx, J
 
 extern JS_PUBLIC_API(JSObject*)
 JS_NewArrayObject(JSContext* cx, const JS::HandleValueArray& contents);
 
 extern JS_PUBLIC_API(JSObject*)
 JS_NewArrayObject(JSContext* cx, size_t length);
 
 /**
- * Returns true and sets |*isArray| indicating whether |value| is an Array
- * object or a wrapper around one, otherwise returns false on failure.
+ * On success, returns true, setting |*isArray| to true if |value| is an Array
+ * object or a wrapper around one, or to false if not.  Returns false on
+ * failure.
  *
- * This method returns true with |*isArray == false| when passed a proxy whose
- * target is an Array, or when passed a revoked proxy.
+ * This method returns true with |*isArray == false| when passed an ES6 proxy
+ * whose target is an Array, or when passed a revoked proxy.
  */
 extern JS_PUBLIC_API(bool)
 JS_IsArrayObject(JSContext* cx, JS::HandleValue value, bool* isArray);
 
 /**
- * Returns true and sets |*isArray| indicating whether |obj| is an Array object
- * or a wrapper around one, otherwise returns false on failure.
+ * On success, returns true, setting |*isArray| to true if |obj| is an Array
+ * object or a wrapper around one, or to false if not.  Returns false on
+ * failure.
  *
- * This method returns true with |*isArray == false| when passed a proxy whose
- * target is an Array, or when passed a revoked proxy.
+ * This method returns true with |*isArray == false| when passed an ES6 proxy
+ * whose target is an Array, or when passed a revoked proxy.
  */
 extern JS_PUBLIC_API(bool)
 JS_IsArrayObject(JSContext* cx, JS::HandleObject obj, bool* isArray);
 
 extern JS_PUBLIC_API(bool)
 JS_GetArrayLength(JSContext* cx, JS::Handle<JSObject*> obj, uint32_t* lengthp);
 
 extern JS_PUBLIC_API(bool)
--- a/layout/generic/TextOverflow.h
+++ b/layout/generic/TextOverflow.h
@@ -40,17 +40,17 @@ class TextOverflow final {
   /**
    * Constructor, which client code SHOULD NOT use directly. Instead, clients
    * should call WillProcessLines(), which is basically the factory function
    * for TextOverflow instances.
    */
   TextOverflow(nsDisplayListBuilder* aBuilder,
                nsIFrame* aBlockFrame);
 
-  TextOverflow() = default;
+  TextOverflow() = delete;
   ~TextOverflow() = default;
   TextOverflow(TextOverflow&&) = default;
   TextOverflow(const TextOverflow&) = delete;
   TextOverflow& operator=(TextOverflow&&) = default;
   TextOverflow& operator=(const TextOverflow&) = delete;
 
   /**
    * Analyze the display lists for text overflow and what kind of item is at
--- a/security/ct/BTVerifier.cpp
+++ b/security/ct/BTVerifier.cpp
@@ -1,19 +1,23 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "BTVerifier.h"
+
+#include <stdint.h>
+
 #include "CTUtils.h"
 #include "SignedCertificateTimestamp.h"
-
-#include <stdint.h>
+#include "hasht.h"
+#include "mozpkix/pkixnss.h"
+#include "mozpkix/pkixutil.h"
 
 namespace mozilla { namespace ct {
 
 using namespace mozilla::pkix;
 
 typedef mozilla::pkix::Result Result;
 
 // Members of a Inclusion Proof struct
@@ -84,9 +88,156 @@ DecodeInclusionProof(pkix::Reader& reade
 
   InputToBuffer(logId, result.logId);
 
   result.inclusionPath = std::move(inclusionPath);
 
   output = std::move(result);
   return Success;
 }
+
+static Result
+CommonFinishDigest(UniquePK11Context& context, size_t digestAlgorithmLength,
+  /* out */ Buffer& outputBuffer)
+{
+  uint32_t outLen = 0;
+  outputBuffer.assign(digestAlgorithmLength, 0);
+  if (PK11_DigestFinal(context.get(), outputBuffer.data(), &outLen,
+                       digestAlgorithmLength) != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  if (outLen != digestAlgorithmLength) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  return Success;
+}
+
+static Result
+LeafHash(Input leafEntry, size_t digestAlgorithmLength,
+  SECOidTag digestAlgorithmId, /* out */ Buffer& calculatedHash)
+{
+  UniquePK11Context context(PK11_CreateDigestContext(digestAlgorithmId));
+  if (!context) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  const unsigned char zero = 0;
+  if (PK11_DigestOp(context.get(), &zero, 1u) != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  SECItem leafEntryItem = UnsafeMapInputToSECItem(leafEntry);
+  if (PK11_DigestOp(context.get(), leafEntryItem.data, leafEntryItem.len)
+        != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  return CommonFinishDigest(context, digestAlgorithmLength, calculatedHash);
+}
+
+static Result
+NodeHash(const Buffer& left, const Buffer& right, size_t digestAlgorithmLength,
+  SECOidTag digestAlgorithmId, /* out */ Buffer& calculatedHash)
+{
+  UniquePK11Context context(PK11_CreateDigestContext(digestAlgorithmId));
+  if (!context) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  const unsigned char one = 1;
+  if (PK11_DigestOp(context.get(), &one, 1u) != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  if (PK11_DigestOp(context.get(), left.data(), left.size()) != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  if (PK11_DigestOp(context.get(), right.data(), right.size()) != SECSuccess) {
+    return Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  return CommonFinishDigest(context, digestAlgorithmLength, calculatedHash);
+}
+
+static Result
+GetDigestAlgorithmLengthAndIdentifier(DigestAlgorithm digestAlgorithm,
+  /* out */ size_t& digestAlgorithmLength,
+  /* out */ SECOidTag& digestAlgorithmId)
+{
+  switch (digestAlgorithm) {
+    case DigestAlgorithm::sha512:
+      digestAlgorithmLength = SHA512_LENGTH;
+      digestAlgorithmId = SEC_OID_SHA512;
+      return Success;
+    case DigestAlgorithm::sha256:
+      digestAlgorithmLength = SHA256_LENGTH;
+      digestAlgorithmId = SEC_OID_SHA256;
+      return Success;
+    default:
+      return pkix::Result::FATAL_ERROR_INVALID_ARGS;
+  }
+}
+
+// This algorithm is specified by:
+// https://tools.ietf.org/html/draft-ietf-trans-rfc6962-bis-28#section-2.1.3.2
+Result
+VerifyInclusionProof(const InclusionProofDataV2& proof, Input leafEntry,
+                     Input expectedRootHash, DigestAlgorithm digestAlgorithm)
+{
+  if (proof.treeSize == 0) {
+    return pkix::Result::ERROR_BAD_SIGNATURE;
+  }
+  size_t digestAlgorithmLength;
+  SECOidTag digestAlgorithmId;
+  Result rv = GetDigestAlgorithmLengthAndIdentifier(digestAlgorithm,
+    digestAlgorithmLength, digestAlgorithmId);
+  if (rv != Success) {
+    return rv;
+  }
+  if (proof.leafIndex >= proof.treeSize) {
+    return pkix::Result::ERROR_BAD_SIGNATURE;
+  }
+  if (expectedRootHash.GetLength() != digestAlgorithmLength) {
+    return pkix::Result::ERROR_BAD_SIGNATURE;
+  }
+  uint64_t leafIndex = proof.leafIndex;
+  uint64_t lastNodeIndex = proof.treeSize - 1;
+  Buffer calculatedHash;
+  rv = LeafHash(leafEntry, digestAlgorithmLength, digestAlgorithmId,
+                calculatedHash);
+  if (rv != Success) {
+    return rv;
+  }
+  for (const auto& hash: proof.inclusionPath) {
+    if (lastNodeIndex == 0) {
+      return pkix::Result::ERROR_BAD_SIGNATURE;
+    }
+    if (leafIndex % 2 == 1 || leafIndex == lastNodeIndex) {
+      rv = NodeHash(hash, calculatedHash, digestAlgorithmLength,
+                    digestAlgorithmId, calculatedHash);
+      if (rv != Success) {
+        return rv;
+      }
+      if (leafIndex % 2 == 0) {
+        while (leafIndex % 2 == 0 && lastNodeIndex > 0) {
+          leafIndex >>= 1;
+          lastNodeIndex >>= 1;
+        }
+      }
+    } else {
+      rv = NodeHash(calculatedHash, hash, digestAlgorithmLength,
+                    digestAlgorithmId, calculatedHash);
+      if (rv != Success) {
+        return rv;
+      }
+    }
+    leafIndex >>= 1;
+    lastNodeIndex >>= 1;
+  }
+  if (lastNodeIndex != 0) {
+    return pkix::Result::ERROR_BAD_SIGNATURE;
+  }
+  assert(calculatedHash.size() == digestAlgorithmLength);
+  if (calculatedHash.size() != digestAlgorithmLength) {
+    return pkix::Result::FATAL_ERROR_LIBRARY_FAILURE;
+  }
+  if (memcmp(calculatedHash.data(), expectedRootHash.UnsafeGetData(),
+             digestAlgorithmLength) != 0) {
+    return pkix::Result::ERROR_BAD_SIGNATURE;
+  }
+  return Success;
+}
+
 } } //namespace mozilla::ct
--- a/security/ct/BTVerifier.h
+++ b/security/ct/BTVerifier.h
@@ -5,19 +5,27 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef BTVerifier_h
 #define BTVerifier_h
 
 #include "BTInclusionProof.h"
 #include "mozpkix/Input.h"
 #include "mozpkix/Result.h"
+#include "mozpkix/pkixtypes.h"
 
 namespace mozilla { namespace ct {
 
 // Decodes an Inclusion Proof (InclusionProofDataV2 as defined in RFC
 // 6962-bis). This consumes the entirety of the input.
 pkix::Result DecodeInclusionProof(pkix::Reader& input,
   InclusionProofDataV2& output);
+// Given a decoded Inclusion Proof (InclusionProofDataV2 as per RFC 6962-bis),
+// the corresponding leaf data entry, and the expected root hash, returns
+// Success if the proof verifies correctly.
+// (https://tools.ietf.org/html/draft-ietf-trans-rfc6962-bis-28#section-2.1.3.2)
+pkix::Result VerifyInclusionProof(const InclusionProofDataV2& proof,
+  pkix::Input leafEntry, pkix::Input expectedRootHash,
+  pkix::DigestAlgorithm digestAlgorithm);
 
 } } // namespace mozilla::ct
 
 #endif // BTVerifier_h
--- a/security/ct/CTUtils.h
+++ b/security/ct/CTUtils.h
@@ -19,16 +19,17 @@
 #define MOZILLA_CT_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))
 
 struct DeleteHelper
 {
   void operator()(CERTSubjectPublicKeyInfo* value)
   {
     SECKEY_DestroySubjectPublicKeyInfo(value);
   }
+  void operator()(PK11Context* value) { PK11_DestroyContext(value, true); }
   void operator()(PK11SlotInfo* value) { PK11_FreeSlot(value); }
   void operator()(SECKEYPublicKey* value) { SECKEY_DestroyPublicKey(value); }
   void operator()(SECItem* value) { SECITEM_FreeItem(value, true); }
 };
 
 template <class T>
 struct MaybeDeleteHelper
 {
@@ -38,16 +39,18 @@ struct MaybeDeleteHelper
       DeleteHelper del;
       del(ptr);
     }
   }
 };
 
 typedef std::unique_ptr<CERTSubjectPublicKeyInfo, MaybeDeleteHelper<CERTSubjectPublicKeyInfo>>
   UniqueCERTSubjectPublicKeyInfo;
+typedef std::unique_ptr<PK11Context, MaybeDeleteHelper<PK11Context>>
+  UniquePK11Context;
 typedef std::unique_ptr<PK11SlotInfo, MaybeDeleteHelper<PK11SlotInfo>>
   UniquePK11SlotInfo;
 typedef std::unique_ptr<SECKEYPublicKey, MaybeDeleteHelper<SECKEYPublicKey>>
   UniqueSECKEYPublicKey;
 typedef std::unique_ptr<SECItem, MaybeDeleteHelper<SECItem>> UniqueSECItem;
 
 namespace mozilla { namespace ct {
 
new file mode 100644
--- /dev/null
+++ b/security/ct/tests/gtest/BTVerificationTest.cpp
@@ -0,0 +1,263 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "BTVerifier.h"
+#include "CTTestUtils.h"
+#include "gtest/gtest.h"
+
+#include "nss.h"
+
+namespace mozilla { namespace ct {
+
+using namespace pkix;
+
+struct BTVerificationTestParams
+{
+  const char* mInclusionProofHex;
+  const char* mExpectedRootHashHex;
+  const char* mInputHex;
+  pkix::DigestAlgorithm mDigestAlgorithm;
+  pkix::Result mExpectedVerificationResult;
+};
+
+class BTVerificationTest
+  : public ::testing::Test
+  , public ::testing::WithParamInterface<BTVerificationTestParams>
+{
+  void SetUp() override
+  {
+    if (!NSS_IsInitialized()) {
+      if (NSS_NoDB_Init(nullptr) != SECSuccess) {
+        abort();
+      }
+    }
+  }
+};
+
+// This comes from testing/mozharness/test/test_mozilla_merkle.py
+static const char* kValidInclusionProofHex =
+  "020000"
+  "0000000000000007" // 7 total nodes
+  "0000000000000005" // leaf index is 5
+  "0063" // 99 (in base 10) bytes follow
+  "20" // 32 byte hash
+    "2ff3bdac9bec3580b82da8a357746f15919414d9cbe517e2dd96910c9814c30c"
+  "20"
+    "bb13dfb7b202a95f241ea1715c8549dc048d9936ec747028002f7c795de72fcf"
+  "20"
+    "380d0dc6fd7d4f37859a12dbfc7171b3cce29ab0688c6cffd2b15f3e0b21af49";
+
+static const char* kExpectedRootHashHex =
+  "d1a0d3947db4ae8305f2ac32985957e02659b2ea3c10da52a48d2526e9af3bbc";
+
+static const char* kInputHex = "81aae91cf90be172eedd1c75c349bf9e";
+static const char* kAlteredInputHex = "81aae91c0000000000000000c349bf9e";
+
+// Same as kValidInclusionProofHex, but missing the last hash (the proof is
+// still structurally valid, so it decodes successfully).
+static const char* kShortInclusionProofHex =
+  "020000"
+  "0000000000000007" // 7 total nodes
+  "0000000000000005" // leaf index is 5
+  "0042" // 66 (in base 10) bytes follow
+  "20" // 32 byte hash
+    "2ff3bdac9bec3580b82da8a357746f15919414d9cbe517e2dd96910c9814c30c"
+  "20"
+    "bb13dfb7b202a95f241ea1715c8549dc048d9936ec747028002f7c795de72fcf";
+
+// Same as kValidInclusionProofHex, but has too many hashes (the proof is
+// still structurally valid, so it decodes successfully).
+static const char* kLongInclusionProofHex =
+  "020000"
+  "0000000000000007" // 7 total nodes
+  "0000000000000005" // leaf index is 5
+  "0084" // 132 (in base 10) bytes follow
+  "20" // 32 byte hash
+    "2ff3bdac9bec3580b82da8a357746f15919414d9cbe517e2dd96910c9814c30c"
+  "20"
+    "bb13dfb7b202a95f241ea1715c8549dc048d9936ec747028002f7c795de72fcf"
+  "20"
+    "380d0dc6fd7d4f37859a12dbfc7171b3cce29ab0688c6cffd2b15f3e0b21af49"
+  "20"
+    "abbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabbaabba";
+
+static const char* kIncorrectRootHashHex =
+  "beebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeebeee";
+
+static const char* kWrongTreeSizeInclusionProofHex =
+  "020000"
+  "0000000000000009" // 9 total nodes (this is wrong)
+  "0000000000000005" // leaf index is 5
+  "0063" // 99 (in base 10) bytes follow
+  "20" // 32 byte hash
+    "2ff3bdac9bec3580b82da8a357746f15919414d9cbe517e2dd96910c9814c30c"
+  "20"
+    "bb13dfb7b202a95f241ea1715c8549dc048d9936ec747028002f7c795de72fcf"
+  "20"
+    "380d0dc6fd7d4f37859a12dbfc7171b3cce29ab0688c6cffd2b15f3e0b21af49";
+
+static const char* kWrongLeafIndexInclusionProofHex =
+  "020000"
+  "0000000000000007" // 7 total nodes
+  "0000000000000002" // leaf index is 2 (this is wrong)
+  "0063" // 99 (in base 10) bytes follow
+  "20" // 32 byte hash
+    "2ff3bdac9bec3580b82da8a357746f15919414d9cbe517e2dd96910c9814c30c"
+  "20"
+    "bb13dfb7b202a95f241ea1715c8549dc048d9936ec747028002f7c795de72fcf"
+  "20"
+    "380d0dc6fd7d4f37859a12dbfc7171b3cce29ab0688c6cffd2b15f3e0b21af49";
+
+// This is a longer proof taken from the Firefox 62.0.2 release.
+static const char* kValidInclusionProof2Hex =
+  "020000"
+  "0000000000000cb3"
+  "00000000000000e2"
+  "018c"
+  "20"
+    "6d3d060c72c28cd1967a6ce4e87a470c266981ee8beb6e5956745b5839120338"
+  "20"
+    "cd028053c51f52447cd2b1ffea7761be546b72832d776db155008dc3071231eb"
+  "20"
+    "36167b32f7ba4980257c79ed65d133d8c53efbfd7addaa391a121953c78b2b98"
+  "20"
+    "f2b4abf09140b05058a74e25f4008157655e73fa4aeece9b3f2a40dbbae95c16"
+  "20"
+    "a2be4813b2ca0e7bb755ed5459789c25a83465fb3f2808590c04c64cdbb404ef"
+  "20"
+    "43e4341b74ea11f075f35761b867cb256e9d42c4c1253d6b5c958174daa800da"
+  "20"
+    "1c925ec8d2d4014c0b84d7bed8065d9e7b326e3e4eaebc90d7a6a66431249851"
+  "20"
+    "bd275e9e4e48c3725f6ef68c2661d4d6ae415129cfb0ea0881177f5347d683ae"
+  "20"
+    "01e84996a7cc1719b19a4a7e48941657b125bcd0dfd03d183daff87de6a480c3"
+  "20"
+    "664b6962909692980661be55e8bdadc48350b2461d37372457e8ff97824ae8da"
+  "20"
+    "39f7ab1500a58643fccc9e07ed409be4c707c5536b95c57f6716207656464019"
+  "20"
+    "d68c856664d660456d4c85498c2cc2abfb955a63bd1fb23f3e25850da80153f6";
+
+static const char* kExpectedRootHash2Hex =
+  "0d489b16a64b80035a8d08ce55549c89c4b67be64a0456382cc5be1e51ddae1a";
+
+// This the hex encoding of the SHA-256 hash of
+// linux-x86_64/en-US/firefox-62.0.2.tar.bz2, encoded (again) in hex (because
+// that's how generate-checksums.py currently builds the binary transparency
+// tree).
+static const char* kInput2Hex =
+  "3231623461306361626538663030306261663236373235643530313462386434"
+  "3865353561333832336538653665656131343638313062313031623034396536";
+
+// This is the hex encoding of an inclusion proof for
+// update/win32/en-GB/firefox-61.0-62.0.2.partial.mar using SHA-512.
+static const char* kValidInclusionProofSHA512Hex =
+  "020000"
+  "0000000000000cb3"
+  "00000000000007ac"
+  "030c"
+  "40"
+    "b39fbe359108724ec1daed2a8c88511c6b94a74563bfaaf25b774286ab03cab9"
+    "b2e64bbd4eeb02003b7397cd814b5d18a160e14ad08eca04559abe146201e027"
+  "40"
+    "de119745a41884ed482a41638cc1979d89e1bd0ca295e0c412e7ee4b5c2e042d"
+    "a1f4aa9c7f1e58b78fac10400b207197383177401976ef6baa80d482c102a94f"
+  "40"
+    "d0fe203b0e95cbe48e2e663538aba382718c85ae167d8c4ccf326519f81b3860"
+    "55058f6a49943b8ed228af88b3414ec00e939ad8dc736f502ca90d63494eddcd"
+  "40"
+    "ae825352bbe12845fb1d3be27375c27dd462ebd6dc6d7bd0b5929df97aaccf1a"
+    "9eedb304ae1e9742b1e2a2ba8b22408d2d52e3bb3d547632d5f03cfe112572d2"
+  "40"
+    "1ab0f7f7d674c691cf8e51d4409d3402d94927231b82f7f71f16828dd9e36152"
+    "1a69f7e571df06aea16c83df88dc74042444ae8771375a7118477275395b570d"
+  "40"
+    "9c6b94c5be456c68518753cf626daf11b30ce981e18b76c036664dcafeba19b7"
+    "3f5ee20ab35aa38b11c92e2c8f103d1b19113b7171c615ce0b9c5ff520242d8c"
+  "40"
+    "d395ef3cd63ae617a96bd6c5c361d5f6aaccff1ed90599115394310dfa0c528d"
+    "611998d325f374c01a827ee900d72ed66d299845438bba565ba666c588b232a0"
+  "40"
+    "ce3548561f5ec7a94a6c7a2adc604f5e32869d0727cee80f12c95cab2a996965"
+    "6ad61a02b35e0fb2d0031ea496381f1413d33b8cbfdf092accd903881e083ee0"
+  "40"
+    "a4247b649fee9017d9c9e729c4763719b7155056013abc488de0079dc7bddce6"
+    "57a93f2596967cfb123d812a901bc4ffe0338cbecf30adc1a821e7261f88e3cd"
+  "40"
+    "7d2056ea6645b0306373fa2e26fbc4a4ccd4c82cb7d605d2372fa297654cd3a0"
+    "b151f6b0fffe7472661de79c7ce7873cb75e05cad5ea40173be540e16d51414d"
+  "40"
+    "eed2c98b3d8b8035777af74a0d5dd38963f84c09e6f42b6ca4e290674c175035"
+    "b9bc85bb4304fcf3d042c444f951b3b134563c6936a1b176679e35e94c42416b"
+  "40"
+    "6167cccd9d03909f95bb389936766340234b5b3e35dfa8c81d330db9055d7b7d"
+    "bfaf262f1821b4a68f43af62c53987550b4174eaab8357f9bd83f2715c98d441";
+
+// This is the hex encoding of the expected root hash of the SHA-512 tree.
+static const char* kExpectedRootHashSHA512Hex =
+  "6f20812da2980393767e98dd7f79d89aa41e029c790d3908739c02c01d9c6525"
+  "8bb3e24ab608c95b063259620751ce258930d48929cbe543b166c33c4de65e60";
+
+// This the hex encoding of the SHA-512 hash of
+// update/win32/en-GB/firefox-61.0-62.0.2.partial.mar, encoded (again) in hex.
+static const char* kInputSHA512Hex =
+  "6237656563626164353363386432346230383763666437323333303162326437"
+  "6234326136323536663462636336356134623231636437376133613830613734"
+  "3865396533623666306432333839666234623763396563356638643833373534"
+  "6239313635313165333661373238653863303236376564653761666561316638";
+
+static const BTVerificationTestParams BT_VERIFICATION_TEST_PARAMS[] =
+{
+  { kValidInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, Success },
+  { kValidInclusionProofHex, kExpectedRootHashHex, kAlteredInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kShortInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kLongInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kValidInclusionProofHex, kIncorrectRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kWrongTreeSizeInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kWrongLeafIndexInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kValidInclusionProofHex, kExpectedRootHashHex, kInputHex,
+    pkix::DigestAlgorithm::sha512, pkix::Result::ERROR_BAD_SIGNATURE },
+  { kValidInclusionProof2Hex, kExpectedRootHash2Hex, kInput2Hex,
+    pkix::DigestAlgorithm::sha256, Success },
+  { kValidInclusionProofSHA512Hex, kExpectedRootHashSHA512Hex, kInputSHA512Hex,
+    pkix::DigestAlgorithm::sha512, Success },
+  { kValidInclusionProofSHA512Hex, kExpectedRootHashSHA512Hex, kInputSHA512Hex,
+    pkix::DigestAlgorithm::sha256, pkix::Result::ERROR_BAD_SIGNATURE },
+};
+
+TEST_P(BTVerificationTest, BTVerificationSimpleTest)
+{
+  const BTVerificationTestParams& params(GetParam());
+
+  Buffer encodedProofBuffer(HexToBytes(params.mInclusionProofHex));
+  Input encodedProof = InputForBuffer(encodedProofBuffer);
+  Reader encodedProofReader(encodedProof);
+
+  InclusionProofDataV2 ipr;
+  ASSERT_EQ(Success, DecodeInclusionProof(encodedProofReader, ipr));
+
+  Buffer leafEntryBuffer(HexToBytes(params.mInputHex));
+  Input leafEntry = InputForBuffer(leafEntryBuffer);
+  Buffer expectedRootHashBuffer(HexToBytes(params.mExpectedRootHashHex));
+  Input expectedRootHash = InputForBuffer(expectedRootHashBuffer);
+  ASSERT_EQ(params.mExpectedVerificationResult,
+            VerifyInclusionProof(ipr, leafEntry, expectedRootHash,
+                                 params.mDigestAlgorithm));
+}
+
+INSTANTIATE_TEST_CASE_P(BTVerificationTest,
+                        BTVerificationTest,
+                        testing::ValuesIn(BT_VERIFICATION_TEST_PARAMS));
+
+} } //namespace mozilla::ct
--- a/security/ct/tests/gtest/CTTestUtils.cpp
+++ b/security/ct/tests/gtest/CTTestUtils.cpp
@@ -430,17 +430,17 @@ CharToByte(char c)
   } else if (c >= 'a' && c <= 'f') {
     return c - 'a' + 10;
   } else if (c >= 'A' && c <= 'F') {
     return c - 'A' + 10;
   }
   abort();
 }
 
-static Buffer
+Buffer
 HexToBytes(const char* hexData)
 {
   size_t hexLen = strlen(hexData);
   if (!(hexLen > 0 && (hexLen % 2 == 0))) {
     abort();
   }
   size_t resultLen = hexLen / 2;
   Buffer result;
--- a/security/ct/tests/gtest/CTTestUtils.h
+++ b/security/ct/tests/gtest/CTTestUtils.h
@@ -12,16 +12,18 @@
 #include "mozpkix/Input.h"
 #include "mozpkix/Time.h"
 #include "seccomon.h"
 #include "SignedCertificateTimestamp.h"
 #include "SignedTreeHead.h"
 
 namespace mozilla { namespace ct {
 
+Buffer HexToBytes(const char* hexData);
+
 // Note: unless specified otherwise, all test data is taken from
 // Certificate Transparency test data repository at
 // https://github.com/google/certificate-transparency/tree/master/test/testdata
 
 // Fills |entry| with test data for an X.509 entry.
 void GetX509CertLogEntry(LogEntry& entry);
 
 // Returns a DER-encoded X509 cert. The SCT provided by
--- a/security/ct/tests/gtest/moz.build
+++ b/security/ct/tests/gtest/moz.build
@@ -1,16 +1,17 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 SOURCES += [
     'BTSerializationTest.cpp',
+    'BTVerificationTest.cpp',
     'CTDiversityPolicyTest.cpp',
     'CTLogVerifierTest.cpp',
     'CTObjectsExtractorTest.cpp',
     'CTPolicyEnforcerTest.cpp',
     'CTSerializationTest.cpp',
     'CTTestUtils.cpp',
     'MultiLogCTVerifierTest.cpp',
 ]
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1166,9 +1166,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 = 488;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1547121793919000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1547467493204000);
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * 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(1549540988428000);
+const PRTime gPreloadListExpirationTime = INT64_C(1549886688587000);
 %%
 0-1.party, 1
 00100010.net, 1
 0010100.net, 1
 00120012.net, 1
 00130013.net, 1
 00140014.net, 1
 00150015.net, 1
@@ -138,16 +138,17 @@ 0x52.org, 1
 0x7d.com, 1
 0x7fffffff.net, 1
 0x90.in, 1
 0x90.io, 1
 0xaa55.me, 1
 0xabe.io, 1
 0xacab.org, 1
 0xda.de, 1
+0xdc.io, 0
 0xdefaced.de, 1
 0xee.eu, 1
 0xf00.ch, 1
 0xfc.de, 1
 0xn.de, 1
 0yen.org, 1
 1-2-3bounce.co.uk, 1
 100-downloads.com, 1
@@ -337,17 +338,16 @@ 1montre.fr, 1
 1morebounce.co.uk, 1
 1nfr.com, 0
 1nian.vip, 1
 1of16.de, 1
 1on1on1.de, 1
 1on1on1.tv, 1
 1p.ro, 0
 1panorama.ru, 1
-1para.net, 1
 1password.ca, 1
 1password.com, 1
 1password.eu, 1
 1px.tv, 1
 1q2w.nl, 1
 1q365a.com, 1
 1r.is, 1
 1rs.nl, 1
@@ -386,16 +386,17 @@ 2333.press, 1
 23333.link, 1
 2333666.xyz, 1
 2333blog.com, 1
 233abc.com, 1
 233blog.com, 1
 233boy.com, 1
 233bwg.com, 1
 233hugo.com, 1
+233ss.net, 1
 233vps.com, 1
 24-7.jp, 1
 245meadowvistaway.com, 1
 246060.ru, 1
 247a.co.uk, 1
 247exchange.com, 1
 247healthshop.com, 1
 247medplan.com, 1
@@ -1128,16 +1129,17 @@ 8880013.com, 1
 8880021.com, 1
 8880023.com, 1
 8880025.com, 1
 8880057.com, 1
 8880059.com, 1
 8880067.com, 1
 8880083.com, 1
 8880100.com, 1
+8884553.com, 1
 8886737.com, 1
 8886739.com, 1
 8886793.com, 1
 8886806.com, 1
 8886860.com, 1
 8887999.com, 0
 888888722.com, 1
 88889822.com, 1
@@ -1331,16 +1333,17 @@ aandkevents.co.uk, 1
 aanmpc.com, 1
 aaomidi.com, 1
 aapas.org.ar, 1
 aariefhaafiz.com, 1
 aarkue.eu, 1
 aaron.xin, 1
 aaronburt.co.uk, 1
 aaronhorler.com, 1
+aaronhorler.com.au, 1
 aaronkimmig.de, 1
 aaronroyle.com, 1
 aaronsilber.me, 1
 aarvinproperties.com, 1
 aatf.us, 1
 aati.be, 1
 aati.info, 1
 aavienna.com, 1
@@ -1485,17 +1488,16 @@ ac-epmservices.com, 1
 ac-town.com, 1
 ac0g.dyndns.org, 1
 aca-creative.co.uk, 1
 academicexperts.us, 1
 academichealthscience.net, 1
 academie-de-police.ch, 1
 academkin.com, 1
 academytv.com.au, 1
-acadianapatios.com, 1
 acaeum.com, 1
 acampar.com.br, 1
 acaonegocios.com.br, 1
 acaptureservices.com, 1
 acara-yoga.de, 1
 acareer.in, 1
 acat.io, 1
 acbrussels-used.be, 1
@@ -1539,16 +1541,17 @@ aceinflatables.com, 1
 aceinstituteonline.com, 1
 acelpb.com, 1
 acem.org.au, 1
 acemobileforce.com, 1
 acemypaper.com, 1
 acen.eu, 1
 acendealuz.com.br, 1
 acerentalandsales.com, 1
+acerislaw.com, 1
 acessoeducacao.com, 1
 acevik.de, 1
 acfo.org, 1
 acg.mn, 1
 acg.sb, 0
 acg.social, 1
 acg18.us, 0
 acgaudio.com, 1
@@ -1817,16 +1820,17 @@ advancedwriters.com, 1
 advanceworx.com, 1
 advancis.net, 1
 advancyte.com, 1
 advantagehomeexteriors.com, 1
 advara.com, 1
 advelty.cz, 1
 advenacs.com.au, 1
 advenapay.com, 1
+adventaholdings.com, 1
 adventistdeploy.org, 1
 advento.bg, 1
 adventure-inn.com, 1
 adventureally.com, 1
 adventureforest.co.nz, 1
 adventureforest.de, 0
 adventureforest.nz, 1
 adventuregamers.com, 1
@@ -1836,17 +1840,16 @@ adventureswithlillie.ca, 1
 advertis.biz, 1
 advertisemant.com, 1
 advicepro.org.uk, 1
 advocate-europe.eu, 1
 advocaten-avocats.be, 1
 advocatenalkmaar.org, 1
 advocator.ca, 1
 advocoeurdehaan.nl, 1
-advokat-romanov.com, 1
 advtran.com, 1
 adware.pl, 1
 adwokatkosterka.pl, 1
 adwokatzdunek.pl, 1
 adws.io, 1
 adxperience.com, 1
 adzie.xyz, 1
 adzuna.at, 1
@@ -2002,17 +2005,16 @@ agilecraft.com, 1
 agileecommerce.com.br, 1
 agileui.com, 1
 agiley.se, 1
 agilizing.us, 1
 agilob.net, 1
 aging.gov, 1
 agingstats.gov, 1
 agingstop.net, 1
-aginion.net, 1
 agiserv.fr, 1
 agliamici.it, 1
 agnesk.blog, 1
 agoodmind.com, 1
 agoravm.tk, 1
 agoravox.fr, 1
 agoravox.it, 1
 agoravox.tv, 1
@@ -2055,17 +2057,17 @@ agscinemas.com, 1
 agscinemasapp.com, 1
 agung-furniture.com, 1
 agwa.name, 1
 agy.cl, 1
 ahcpr.gov, 0
 ahd.com, 0
 ahelos.tk, 1
 aheng.me, 1
-ahiru3.com, 1
+ahero4all.org, 1
 ahkubiak.ovh, 1
 ahlaejaba.com, 1
 ahlz.sk, 1
 ahmad.works, 1
 ahmadly.com, 1
 ahmedabadflowermall.com, 1
 ahmedcharles.com, 1
 ahmerjamilkhan.org, 1
@@ -2199,17 +2201,16 @@ airbnb.pt, 1
 airbnb.ru, 1
 airbnb.se, 1
 airbnb.tools, 1
 airbnbchina.cn, 1
 airbnbopen.com, 1
 airborne-inflatables.co.uk, 1
 airclass.com, 1
 aircomms.com, 1
-airconsalberton.co.za, 1
 airconssandton.co.za, 1
 airductclean.com, 0
 airductcleaning-fresno.com, 1
 airductcleaninggrandprairie.com, 1
 airductcleaningirving.com, 1
 airdur.eu, 1
 aireaseleaks.org, 1
 airedaleterrier.com.br, 1
@@ -2223,17 +2224,16 @@ airicy.com, 1
 airikai.com, 1
 airlinesettlement.com, 1
 airmail.cc, 1
 airmaxinflatables.com, 1
 airnow.gov, 1
 airpbx.com, 1
 airplay-inflatable-hire.co.uk, 1
 airplayradio.nl, 1
-airportlimototoronto.com, 1
 airpurifierproductsonline.com, 1
 airrestoration.ch, 1
 airsoft.ch, 1
 airtimerewards.co.uk, 1
 airvpn.org, 1
 airvuz.com, 1
 airwaystorage.net, 1
 airwegobouncycastles.co.uk, 1
@@ -2604,25 +2604,23 @@ allthingswild.co.uk, 1
 alltubedownload.net, 1
 allurescarves.com, 1
 alluvion.studio, 1
 allvips.ru, 1
 almaatlantica.com, 1
 almagalla.com, 1
 almatinki.com, 1
 almavios.com, 1
-almorafestival.com, 1
 almstrom.org, 1
 almut-zielonka.de, 1
 alnitech.com, 0
 alocato.com, 1
 aloesoluciones.com.ar, 1
 alohapartyevents.co.uk, 1
 alonetone.com, 1
-alorenzi.eu, 1
 alp.net.cn, 1
 alp.od.ua, 1
 alpca.org, 1
 alpe-d-or.dyn-o-saur.com, 1
 alpencam.com, 1
 alpencams.com, 1
 alpengreis.ch, 1
 alpenjuice.com, 1
@@ -2635,16 +2633,17 @@ alpha88uat.com, 1
 alphaantileak.net, 1
 alphabetsigns.com, 1
 alphabouncycastles.co.uk, 1
 alphabrock.cn, 1
 alphachat.net, 1
 alphadote.com, 1
 alphaetomega3d.fr, 1
 alphafiduciaryservices.ch, 1
+alphafitnesslibya.com, 1
 alphagateanddoor.com, 1
 alphahunks.com, 0
 alphainflatablehire.com, 1
 alphaman.ooo, 1
 alphapengu.in, 1
 alpharotary.com, 1
 alphassl.de, 1
 alphatrash.de, 1
@@ -2918,17 +2917,16 @@ andiplusben.com, 1
 andisadhdspot.com, 1
 andiscyber.space, 1
 anditi.com, 1
 andoms.fi, 1
 andre-ballensiefen.de, 1
 andre-lategan.com, 1
 andre-otto.com, 1
 andrea-kiaora.de, 1
-andrea-m.me, 1
 andrea-wirthensohn.at, 1
 andreaboero.it, 1
 andreadraghetti.it, 1
 andreagourmet.it, 1
 andreahruby.it, 1
 andreamcnett.com, 1
 andreas-hecht.com, 1
 andreas-kluge.eu, 1
@@ -2938,17 +2936,16 @@ andreashecht-blog.de, 1
 andreaskluge.eu, 1
 andreaskrasa.com, 1
 andreaslicht.nl, 1
 andreasolsson.se, 1
 andreasr.com, 1
 andree.cloud, 1
 andrefaber.nl, 1
 andrehansen.de, 1
-andrei-coman.com, 1
 andrei-nakov.org, 1
 andrejbenz.com, 1
 andreoliveira.io, 1
 andrepicard.de, 1
 andrespaz.com, 1
 andreundnina.de, 1
 andrew.fi, 1
 andrew.london, 1
@@ -3177,17 +3174,16 @@ antennista.pavia.it, 1
 antennista.roma.it, 1
 antennista.tv, 1
 antennisti.milano.it, 1
 antennisti.roma.it, 1
 anteprima.info, 1
 anthedesign.fr, 1
 anthisis.tv, 1
 anthony-rouanet.com, 1
-anthony.codes, 1
 anthonycarbonaro.com, 1
 anthonyfontanez.com, 1
 anthonygaidot.fr, 1
 anthonyvadala.me, 1
 anthropoid.ca, 1
 anti-bible.com, 1
 anti-radar.org, 1
 antibioticshome.com, 1
@@ -3520,17 +3516,16 @@ arg.zone, 1
 argama-nature.com, 0
 arganaderm.ch, 1
 argb.de, 1
 argekultur.at, 1
 argh.io, 1
 argonium.com.au, 1
 argot.com, 1
 argovpay.com, 1
-ariaartgallery.com, 1
 ariadermspa.com, 1
 arian.io, 1
 arias.re, 1
 ariba.info, 1
 ariege-pyrenees.net, 1
 arieswdd.com, 1
 arifburhan.online, 1
 arifp.me, 1
@@ -3548,16 +3543,17 @@ aritec-la.com, 1
 arivo.com.br, 1
 arizer.com, 1
 arizonaautomobileclub.com, 1
 arizonabondedtitle.com, 1
 arjandejong.eu, 1
 arjanvaartjes.net, 1
 arjunasdaughter.pub, 1
 arjweb.co.uk, 1
+arkacrao.org, 1
 arkadiyt.com, 1
 arkaic.dyndns.org, 1
 arkbyte.com, 1
 arknodejs.com, 1
 arksan.com.tr, 1
 arkulagunak.com, 0
 arlatools.com, 1
 arlen.tv, 1
@@ -3570,17 +3566,16 @@ armandsdiscount.com, 1
 armanozak.com, 1
 armansfinejewellery.com, 1
 armansfinejewellery.com.au, 1
 armarinhovirtual.com.br, 1
 armazemdaminiatura.com.br, 1
 armazemgourmetbrasil.com.br, 1
 armbrust.me, 1
 armedpoet.com, 1
-armeni-jewellery.gr, 1
 armenians.online, 1
 armil.it, 1
 armin-cme.de, 1
 armin-cpe.de, 1
 arminc.tk, 1
 arminpech.de, 1
 armleads.com, 1
 armor.ai, 1
@@ -3852,17 +3847,17 @@ astrea-voetbal-groningen.nl, 1
 astrology42.com, 1
 astroscopy.ch, 1
 astrosnail.pt.eu.org, 1
 astrovandalistas.cc, 1
 astural.org, 1
 astutikhonda.com, 1
 astutr.co, 1
 asuclassfinder.com, 1
-asucrews.com, 0
+asucrews.com, 1
 asuhe.cc, 1
 asuhe.xyz, 1
 asuka.io, 1
 asun.co, 1
 asurepay.cc, 0
 asustreiber.de, 1
 asvsa.ch, 1
 asws.nl, 1
@@ -3963,16 +3958,17 @@ atplonline.co, 1
 atpnutrition.com, 1
 atracaosexshop.com.br, 1
 atraining.ru, 1
 atraverscugy.ch, 1
 atrevillot.com, 1
 atrinik.org, 1
 atsoftware.de, 1
 attac.us, 1
+atte.fi, 1
 attelage.net, 1
 attendantdesign.com, 1
 attendu.cz, 1
 attention.horse, 1
 attilagyorffy.com, 1
 attilavandervelde.nl, 1
 attinderdhillon.com, 1
 attitudes-bureaux.fr, 1
@@ -4565,16 +4561,17 @@ baiker.info, 1
 bailakomigo.com.br, 1
 baildonbouncycastles.co.uk, 1
 baildonhottubs.co.uk, 1
 baileebee.com, 1
 bailonga.com, 1
 bairdzhang.com, 1
 baitulongbaycruises.com, 1
 baiyangliu.com, 1
+bajajfinserv.in, 1
 bajic.ch, 0
 baka-gamer.net, 1
 baka.network, 1
 baka.org.cn, 1
 bakabt.info, 1
 bakanin.ru, 1
 bakaproxy.moe, 1
 bakermen.com, 1
@@ -5039,16 +5036,17 @@ beeznest.com, 1
 befoodsafe.gov, 1
 beforesunrise.de, 1
 beframed.ch, 1
 befundonline.de, 1
 begabungsfoerderung.info, 1
 begbie.com, 1
 beginatzero.com, 1
 beginner.nl, 1
+beginwp.top, 1
 begoodny.co.il, 1
 behamepresrdce.sk, 1
 behamzdarma.cz, 1
 behindthethrills.com, 1
 behna24hodin.cz, 1
 behoerden-online-dienste.de, 1
 beholdthehurricane.com, 1
 behoreal.cz, 1
@@ -5146,17 +5144,16 @@ benjamindietrich.com, 1
 benjamindietrich.de, 1
 benjaminjurke.com, 1
 benjaminjurke.net, 1
 benjaminkopelke.com, 1
 benjaminpiquet.fr, 1
 benjamins.com, 1
 benjaminvasel.de, 1
 benjii.me, 1
-benleemd.com, 1
 benmatthews.com.au, 1
 benmillett.us, 0
 benmorecentre.co.uk, 1
 bennettsbouncycastlehire.co.uk, 1
 bennettshire.co.uk, 1
 benni1.eu, 1
 bennierobinson.com, 1
 bennink.me, 1
@@ -5224,33 +5221,33 @@ berndklaus.at, 1
 bernhard-seidenspinner.de, 1
 bernhardkau.de, 1
 bernhardluginbuehl.ch, 1
 bernhardluginbuehl.com, 1
 bernieware.de, 1
 berodes.be, 1
 berr.yt, 1
 berra.se, 1
-berruezoabogados.com, 1
 berrus.com, 1
 berry.cat, 1
 berrypay.com, 1
 bersierservices.ch, 1
 bersotavocats.fr, 1
 berst.cz, 1
 berthabailey.com, 1
 berthelier.me, 1
 bertholdsson.com, 1
 bertold.org, 1
 bertoliniodontoiatria.it, 1
 bertrand.bio, 1
 bertrandkeller.info, 1
 bertsmithvwparts.com, 1
 beryl.net, 1
 berz.one, 1
+besb.io, 1
 besb66.club, 1
 besb66.com, 1
 besb66.me, 1
 besb66.ninja, 1
 besb66.rocks, 1
 besb66.us, 1
 beschriftung-metz.de, 1
 bescover.com, 1
@@ -5711,17 +5708,16 @@ bistrocean.com, 1
 bistrodeminas.com, 1
 bistrotdelagare.fr, 1
 biswas.me, 1
 bit-cloud.de, 1
 bit-rapid.com, 1
 bit-sentinel.com, 1
 bit-service-aalter.be, 1
 bit.biz.tr, 1
-bit.voyage, 1
 bit8.com, 1
 bitaccelerate.com, 1
 bitbank.cc, 1
 bitbeans.de, 1
 bitbox.me, 1
 bitbucket.com, 1
 bitbucket.io, 1
 bitbucket.org, 1
@@ -5785,17 +5781,16 @@ bitmarket.net, 1
 bitmarket.pl, 1
 bitmask.me, 1
 bitmessage.ch, 1
 bitmexin.com, 1
 bitmidi.com, 1
 bitminter.com, 1
 bitmoe.com, 1
 bitmon.net, 1
-bitok.com, 1
 bitplay.space, 1
 bitpod.de, 1
 bitpoll.de, 1
 bitpoll.org, 1
 bitpumpe.net, 1
 bitref.com, 1
 bitrush.nl, 1
 bitsafe.com.my, 1
@@ -5804,17 +5799,17 @@ bitshaker.net, 1
 bitskins.co, 1
 bitskrieg.net, 1
 bitsoffreedom.nl, 1
 bitstep.ca, 1
 bitstorm.nl, 1
 bitstorm.org, 1
 bitsum.com, 1
 bitsync.nl, 1
-bitten.pw, 1
+bitten.pw, 0
 bittersweetcandybowl.com, 1
 bittervault.xyz, 1
 bittylicious.com, 1
 bitvest.io, 1
 bitwolk.nl, 1
 bitwrought.net, 1
 bitxel.com.co, 1
 bityes.org, 1
@@ -5943,17 +5938,16 @@ blayne.me, 1
 blayneallan.com, 1
 blazeit.io, 1
 blazing.cz, 1
 blazor.nl, 1
 bleaching-tipps.de, 1
 bleche-onlineshop.at, 1
 bleche-onlineshop.de, 1
 blechinger.io, 1
-blechpirat.name, 1
 blechschmidt.saarland, 1
 bleep.zone, 1
 blenderrecipereviews.com, 1
 blending.kr, 1
 blendle.com, 1
 blendle.nl, 1
 blendr.com, 1
 blenheimears.com, 1
@@ -6699,16 +6693,17 @@ bridgement.com, 1
 bridgeout.com, 1
 bridgevest.com, 1
 bridgingdirectory.com, 1
 brie.tech, 1
 briefassistant.com, 1
 briefhansa.de, 1
 briefvorlagen-papierformat.de, 1
 briffoud.fr, 1
+briggsleroux.com, 1
 brighouse-leisure.co.uk, 1
 brightday.bz, 1
 brightendofleasecleaning.com.au, 1
 brightfuturemadebyme.com, 1
 brightlifedirect.com, 1
 brightonbank.com, 1
 brightonbouncycastles.net, 1
 brightonchilli.org.uk, 1
@@ -7007,16 +7002,17 @@ burzstudios.com, 1
 busanhs.bid, 1
 busanhs.win, 1
 buserror.cn, 1
 bushbaby.com, 1
 bushcraftfriends.com, 1
 busindre.com, 1
 business-garden.com, 1
 business.facebook.com, 0
+businessadviceperth.com.au, 1
 businessamongus.com, 1
 businesscentermarin.ch, 1
 businessesdirectory.eu, 1
 businessetmarketing.com, 1
 businessfactors.de, 1
 businessfurs.info, 1
 businesshub.cz, 0
 businessimmigration-eu.com, 1
@@ -7099,22 +7095,24 @@ bwwb.nu, 1
 bx-n.de, 1
 bxdev.me, 1
 bxp40.at, 1
 by.cx, 1
 by1896.com, 1
 by1898.com, 1
 by1899.com, 1
 byange.pro, 1
+byatte.com, 1
 bydisk.com, 0
 byeskille.no, 1
 bygningsregistrering.dk, 1
 byhe.me, 1
 byiu.info, 0
 byji.com, 1
+byken.cn, 1
 bymark.co, 1
 bymike.co, 1
 bynder.com, 1
 bynet.cz, 1
 bynumlaw.net, 1
 bypass.kr, 1
 bypass.sh, 1
 byrko.cz, 1
@@ -7144,16 +7142,17 @@ bytesatwork.de, 1
 byteshark.org, 1
 byteshift.ca, 1
 bytesign.de, 1
 bytesizedalex.com, 1
 bytesofcode.de, 1
 bytesunlimited.com, 1
 bytesystems.com, 1
 bythisverse.com, 1
+bytrain.net, 1
 byvshie.com, 1
 bywin9.com, 1
 bzhub.bid, 1
 bziaks.xyz, 1
 bzsparks.com, 1
 bztech.com.br, 1
 bztraveler.com, 1
 bztraveler.net, 1
@@ -7204,16 +7203,17 @@ cacaolalina.com, 1
 cacaumidade.com.br, 1
 caceis.bank, 1
 cachetagalong.com, 1
 cachethome.com, 1
 cachetur.no, 1
 cackette.com, 1
 cad-noerdlingen.de, 1
 cadams.io, 1
+cadcreations.co.ke, 1
 cadetsge.ch, 1
 cadmail.nl, 1
 cadman.pw, 1
 cadooz.com, 1
 cadorama.fr, 1
 cadoth.net, 1
 cadra.nl, 0
 cadre.com, 1
@@ -7322,24 +7322,24 @@ camastowncar.com, 1
 cambier.org, 1
 cambiowatch.ch, 1
 cambodian.dating, 1
 cambridge-security.com, 1
 cambridgebouncers.co.uk, 1
 cambridgesecuritygroup.org, 1
 camcapital.com, 1
 camconn.cc, 1
-camda.online, 1
 camdesign.pl, 1
 camel2243.com, 1
 camelservers.com, 1
 cameo-membership.uk, 1
 cameraviva.com.br, 1
 camerweb.es, 1
 camilomodzz.net, 1
+camjobs.net, 1
 camolist.com, 1
 camomile.desi, 1
 camp-pleinsoleil.ch, 1
 camp.co.uk, 1
 campaign-ad.com, 1
 campaign.gov.uk, 1
 campaignagent.com.au, 1
 campaignhelpdesk.org, 1
@@ -7354,16 +7354,17 @@ camperdays.de, 1
 camperlist.com, 1
 campermanaustralia.com, 1
 campertrailerfinance.com.au, 1
 camperverzekerd.nl, 1
 campfiretails.org, 1
 camping-seilershof.de, 1
 campingcarlovers.com, 1
 campinghuntingshooting.com, 1
+campingskyhooks.com, 1
 campistry.net, 1
 campula.cz, 1
 campus-discounts.com, 1
 campus-finance.com, 1
 campusdrugprevention.gov, 1
 campuswire.com, 1
 campvana.com, 1
 campwabashi.org, 1
@@ -7414,17 +7415,16 @@ cannoli.london, 1
 cannyfoxx.me, 1
 canoonic.se, 1
 cant.at, 1
 cantatio.ch, 1
 canterberry.cc, 1
 canterbury.ws, 1
 canterburybouncycastlehire.co.uk, 1
 cantrack.com, 1
-canva-dev.com, 1
 canva.com, 1
 canx.org, 1
 canyoupwn.me, 1
 cao.gov, 1
 cao.la, 1
 caodecristachines.com.br, 1
 caodesantohumberto.com.br, 1
 caoshan60.com, 1
@@ -7854,17 +7854,16 @@ celiendev.ch, 1
 celine-patisserie.fr, 1
 cellartracker.com, 1
 celltek-server.de, 0
 celluliteorangeskin.com, 1
 celluliteremovaldiet.com, 1
 celti.ie.eu.org, 1
 celti.name, 1
 celuliteonline.com, 1
-cem.pw, 1
 cementscience.com, 1
 cemeteriat.com, 1
 ceml.ch, 1
 cenatorium.pl, 1
 cencalvia.org, 1
 censurfridns.dk, 1
 censurfridns.nu, 1
 censys.io, 1
@@ -7950,34 +7949,31 @@ cervejista.com, 1
 cesantias.co, 1
 cesboard.com, 1
 cesdb.com, 1
 cesipagano.com, 1
 ceskepivnesety.sk, 1
 ceskepivnisety.cz, 1
 ceso-saco.com, 1
 cesobaly.cz, 1
-cespri.com.pe, 1
 cestasedelicias.com.br, 1
 cestlav.it, 1
 cestunmetier.ch, 1
-ceta.one, 1
 cetamol.com, 1
 ceu.edu, 0
 cevo.com.hr, 1
 ceyizlikelisleri.com, 1
 cf-ide.de, 1
 cf-tm.net, 1
 cfa.gov, 1
 cfan.space, 1
 cfda.gov, 1
 cfdcre5.org, 1
 cfh.com, 1
 cflsystems.com, 1
-cfneia.org, 1
 cfno.org, 1
 cfo.gov, 1
 cfpa-formation.fr, 1
 cfsh.tk, 1
 cftc.gov, 1
 cftcarouge.com, 1
 cfttt.com, 1
 cfurl.cf, 1
@@ -7991,17 +7987,16 @@ cgan.de, 1
 cgan.pw, 1
 cgbassurances.ch, 1
 cgbilling.com, 1
 cgcookiemarkets.com, 1
 cgnparts.com, 1
 cgpe.com, 1
 cgsmart.com, 1
 cgtx.us, 1
-cgurtner.ch, 1
 ch-laborit.fr, 1
 ch-sc.de, 1
 ch.search.yahoo.com, 0
 ch47f.com, 1
 chabaudparfum.com, 1
 chabert-provence.fr, 1
 chabik.com, 1
 chad.ch, 1
@@ -8133,17 +8128,16 @@ chatfacile.org, 1
 chatint.com, 1
 chatitaly.org, 1
 chatme.im, 0
 chatnbook.com, 1
 chatnederland.eu, 1
 chatsworthelectrical.com, 1
 chatt-gratis.net, 1
 chatt-gratis.org, 1
-chattanoogaface.com, 1
 chattergalerie.eu, 1
 chattergallery.com, 1
 chattersworld.nl, 1
 chatu.io, 1
 chatu.me, 1
 chatucomputers.com, 1
 chatxp.com, 1
 chatxsingle.net, 1
@@ -8187,17 +8181,16 @@ cheapgoa.com, 1
 cheapiesystems.com, 1
 cheapssl.com.tr, 1
 cheapticket.in, 1
 cheapwritinghelp.com, 1
 cheapwritingservice.com, 1
 chebwebb.com, 1
 check.torproject.org, 0
 checkecert.nl, 1
-checkmateshoes.com, 0
 checkmyessay.com, 1
 checkmyessays.com, 1
 checkmyip.com, 1
 checkmypsoriasis.com, 1
 checkout.google.com, 1
 checkpoint-tshirt.com, 1
 checkras.tk, 1
 checkrente.nl, 1
@@ -8361,17 +8354,16 @@ chonghe.org, 1
 chook.as, 1
 choootto.club, 1
 choosemypc.net, 1
 chopperforums.com, 1
 chorkley.co.uk, 1
 chorkley.com, 1
 chorkley.me, 1
 chorkley.uk, 1
-chorleiterverband.de, 1
 chorpinkpoemps.de, 1
 chosenplaintext.org, 1
 chourishi-shigoto.com, 1
 chovancova.sk, 1
 chowii.com, 1
 choyri.com, 1
 chr0me.sh, 1
 chris-edwards.net, 1
@@ -8559,17 +8551,17 @@ cirfi.com, 1
 ciri.com.co, 1
 cirope.com, 1
 cirrus0.de, 1
 cirugiasplasticas.com.mx, 1
 cirujanooral.com, 1
 cirurgicagervasio.com.br, 1
 cirurgicalucena.com.br, 1
 cirurgicasalutar.com.br, 1
-ciscodude.net, 0
+ciscodude.net, 1
 cisoaid.com, 1
 cisofy.com, 1
 cispeo.org, 1
 ciss.ltd, 1
 cisum-cycling.com, 1
 cisy.me, 1
 citationgurus.com, 1
 citcuit.in, 1
@@ -9407,16 +9399,17 @@ constares.de, 1
 constructexpres.ro, 1
 constructieve.nl, 1
 construction-colleges.com, 1
 construction-student.co.uk, 1
 constructionjobs.com, 1
 constructive.men, 1
 consul.io, 1
 consulenza.pro, 1
+consultation.biz.tr, 1
 consultcelerity.com, 1
 consultimator.com, 1
 consultimedia.de, 1
 consultoriosodontologicos.com.br, 1
 consultpetkov.com, 1
 consulvation.com, 1
 consumeractionlawgroup.com, 1
 consumerfiles.com, 1
@@ -9427,33 +9420,31 @@ contaquanto.com.br, 1
 contemplativeeducation.org, 1
 content-api-dev.azurewebsites.net, 0
 content-design.de, 1
 contentcoms.co.uk, 1
 contentdesign.de, 1
 contentpass.net, 1
 contessa32experience.com, 1
 contextplatform.com, 1
-conti-profitlink.co.uk, 1
 continuation.io, 1
 continuum.memorial, 1
 contrabass.net, 1
 contractdigital.co.uk, 1
 contractormountain.com, 1
 contractwriters.com, 1
 contraspin.co.nz, 1
 contratatupoliza.com, 1
 contributor.google.com, 1
 controlarlaansiedad.com, 1
 controlautocom.com.br, 1
 controlbooth.com, 1
 controle.net, 1
 controleer-maar-een-ander.nl, 1
 controltickets.com.br, 1
-contxt-agentur.de, 1
 conv2pdf.com, 1
 convergence.fi, 1
 convergencela.com, 1
 convergnce.com, 1
 conversiones.com, 1
 conversionsciences.com, 1
 convert.im, 1
 convert.zone, 1
@@ -9519,17 +9510,16 @@ corbi.net.au, 1
 corbinhesse.com, 1
 cordejong.nl, 1
 cordep.biz, 1
 corder.tech, 1
 cordeydesign.ch, 1
 cordis.io, 1
 cordis.tk, 1
 cordlessdog.com, 1
-core-concepts.de, 0
 core-networks.de, 1
 core.mx, 1
 core.org.pt, 1
 coreapm.com, 1
 coreapm.org, 1
 corecdn.org, 1
 corecodec.com, 1
 coredump.gr, 1
@@ -9611,16 +9601,17 @@ cosmundi.de, 1
 cosni.co, 1
 cosplayer.com, 1
 cospol.ch, 1
 costa-rica-reisen.ch, 1
 costa-rica-reisen.de, 1
 costablanca.villas, 1
 costablancavoorjou.com, 1
 costcofinance.com, 1
+costellofc.co.uk, 1
 costinstefan.eu, 1
 costreportdata.com, 0
 costulessdirect.com, 1
 coteries.com, 1
 cotonmusic.ch, 1
 cotta.dk, 1
 cotwe-ge.ch, 1
 cougar.dating, 1
@@ -10627,17 +10618,16 @@ dataguidance.com, 1
 dataharvest.at, 1
 datahoarder.xyz, 1
 datahove.no, 0
 datakick.org, 1
 datalife.gr, 1
 datalysis.ch, 1
 datamatic.ru, 1
 dataprotectionadvisors.com, 1
-datapun.ch, 1
 datapure.net, 1
 datascience.cafe, 1
 datascience.ch, 1
 datascomemorativas.com.br, 1
 datasharesystem.com, 1
 dataskydd.net, 1
 dataspace.pl, 1
 datastream.re, 0
@@ -10871,17 +10861,16 @@ debarrascolombes.com, 1
 debarrasnanterre.com, 1
 debbyefurd.com, 1
 debie-usedcars.be, 1
 debigare.com, 1
 debkleinteam.com, 1
 deborahmarinelli.eu, 1
 debron-ot.nl, 1
 debrusoft.ch, 1
-debt.com, 1
 debtrecycling.com.au, 1
 debuemon.com, 1
 debuis.nl, 1
 decaffeinated.io, 1
 decalquai.ch, 1
 dechat.nl, 1
 decidetreatment.org, 1
 decis.fr, 1
@@ -11181,17 +11170,16 @@ desplats.com.ar, 1
 despora.de, 0
 despotika.de, 1
 dessinemoilademocratie.ch, 1
 destech.nl, 1
 desterman.ru, 1
 destileria.net.br, 1
 destinationsofnewyorkstate.com, 1
 destinattorneyjohngreene.com, 1
-destinopiriapolis.com, 1
 destinoytarot.com, 1
 destinyofthephoenix.me, 1
 desu.ne.jp, 1
 desuchan.eu, 1
 desuchan.org, 1
 desuperheroes.co, 1
 desveja.com.br, 1
 det-te.ch, 1
@@ -11237,17 +11225,17 @@ deuxsolutions.com, 1
 dev, 1
 dev-brandywineglobal.com, 1
 dev-pulse-mtn.pantheonsite.io, 1
 dev-tek.de, 1
 devafterdark.com, 1
 devagency.fr, 1
 devalps.eu, 1
 devb.nl, 1
-devcast.io, 1
+devcast.io, 0
 devcf.com, 1
 devct.cz, 0
 devcu.com, 1
 devcu.net, 1
 devdesco.com, 1
 devdoodle.net, 1
 devel.cz, 1
 develerik.com, 0
@@ -11593,16 +11581,17 @@ dipalma.me, 1
 dipl.io, 0
 dipling.de, 1
 diplona.de, 1
 dipulse.it, 1
 dir2epub.com, 1
 dir2epub.org, 1
 dirba.io, 1
 direct-sel.com, 1
+direct2uk.com, 0
 directebanking.com, 1
 directelectricalltd.co.uk, 1
 directlinkfunding.co.uk, 1
 directme.ga, 1
 directnews.be, 1
 directorioz.com, 1
 directreal.sk, 1
 directspa.fr, 1
@@ -11775,16 +11764,17 @@ dk.search.yahoo.com, 0
 dkcomputers.com.au, 1
 dkds.us, 1
 dkravchenko.su, 0
 dkstage.com, 1
 dl.google.com, 1
 dlabouncycastlehire.co.uk, 1
 dlaspania.pl, 1
 dlbouncers.co.uk, 1
+dlcwilson.com, 1
 dlde.ru, 1
 dldl.fr, 1
 dlfsymposium.nl, 1
 dlg.im, 1
 dlitz.net, 1
 dll4free.com, 1
 dlld.com, 1
 dlouwrink.nl, 1
@@ -11859,17 +11849,16 @@ dobrev.family, 1
 dobrisan.ro, 1
 dobsnet.net, 1
 doc.python.org, 1
 doc.to, 1
 doc8643.com, 1
 docabo.ch, 1
 docbox.ch, 1
 doceamoraviverbem.com, 1
-docemeldoces.com, 1
 dochimera.com, 1
 dochitaceahlau.ro, 1
 dockerbook.com, 0
 dockerm.com, 1
 dockerup.net, 1
 doclassworks.com, 1
 docline.gov, 1
 docloh.de, 1
@@ -11953,17 +11942,16 @@ domainkauf.de, 1
 domainoo.com, 1
 domains.autos, 1
 domains.boats, 1
 domains.google.com, 1
 domains.homes, 1
 domains.motorcycles, 1
 domains.yachts, 1
 domainsilk.com, 1
-domainstaff.com, 1
 domainwatch.me, 1
 domaxpoker.com, 1
 domeconseil.fr, 1
 domein-direct.nl, 1
 domen-reg.ru, 1
 domenic.me, 1
 domesticcleaners.co.uk, 1
 domfee.com, 1
@@ -12038,17 +12026,16 @@ dooby.fr, 1
 dooleylabs.com, 1
 dooleytackaberry.com, 1
 doomoo.com, 1
 doomsworld.com, 1
 doomtech.net, 1
 doomus.me, 1
 doooooops.com, 1
 doop.im, 1
-doopdidoop.com, 1
 door.cards, 1
 doordecor.bg, 1
 doorflow.com, 1
 dopesoft.de, 1
 dopfer-fenstertechnik.de, 1
 doppenpost.nl, 1
 dopply.com, 1
 dopravni-modely.cz, 1
@@ -12116,16 +12103,17 @@ dotphoto.com, 1
 dotplex.com, 1
 dotplex.de, 1
 dotrox.net, 1
 dotshule.ug, 1
 dotsiam.co.th, 1
 dotsiam.com, 1
 dotsiam.in.th, 1
 douai.me, 1
+doubleaste.com, 1
 doubleavineyards.com, 1
 doublefun.net, 1
 doublestat.me, 1
 doubleup.com.au, 1
 doucheba.gs, 0
 dougferris.id.au, 1
 dougley.com, 1
 doujin-domain.cz, 1
@@ -12407,17 +12395,17 @@ dsgvo.name, 1
 dshield.org, 1
 dsm5.com, 1
 dsmjs.com, 1
 dsne.com.mx, 1
 dso-imaging.co.uk, 1
 dso-izlake.si, 1
 dsol.hu, 1
 dsouzamusic.com, 1
-dsrw.org, 0
+dsrw.org, 1
 dssale.com, 1
 dstamou.de, 1
 dsteiner.at, 1
 dstvinstallalberton.co.za, 1
 dstvinstallrandburg.co.za, 1
 dt27.org, 1
 dtbouncycastles.co.uk, 1
 dtdsh.com, 1
@@ -12967,17 +12955,17 @@ eductf.org, 1
 eduid.se, 0
 eduif.nl, 0
 edumundo.nl, 1
 eduroam.no, 1
 eduroam.uy, 1
 edusanjal.com, 1
 edusantorini.com, 1
 eduvpn.no, 1
-eduxpert.in, 1
+eduxpert.in, 0
 edv-bv.de, 1
 edv-kohls.de, 1
 edv-lehrgang.de, 1
 edvgarbe.de, 1
 edvmesstec.de, 1
 edwar.do, 1
 edwards.me.uk, 1
 edwardsnowden.com, 1
@@ -13310,16 +13298,17 @@ elevatoraptitudetest.com, 1
 elexel.ru, 1
 elexprimidor.com, 1
 elfe.de, 1
 elfnon.com, 1
 elfring.eu, 1
 elgalponazo.com.ar, 1
 elglobo.com.mx, 0
 elgosblanc.com, 0
+elguadia.faith, 1
 elhamadimi.com, 1
 elhorizontal.com, 1
 elhossari.com, 1
 elia.cloud, 1
 elian-art.de, 1
 elias-nicolas.com, 1
 eliaskordelakos.com, 1
 elibom.com, 1
@@ -13553,17 +13542,16 @@ endlessvideo.com, 1
 endofnet.org, 1
 endoftenancycleaninglondon.co.uk, 1
 endoftennancycleaning.co.uk, 1
 endohaus.us, 1
 endpointsystems.com, 1
 endspamwith.us, 1
 enduranceday.be, 1
 endzeit-architekten.com, 0
-enelacto.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
@@ -13694,16 +13682,17 @@ epay.bg, 1
 epaygateway.net, 1
 epdeveloperchallenge.com, 1
 ephesusbreeze.com, 1
 epi.one, 1
 epic-vistas.com, 1
 epic-vistas.de, 1
 epicbouncycastlehirenorwich.co.uk, 1
 epicbouncycastles.co.uk, 1
+epicdowney.com, 1
 epicenter.work, 1
 epicenter.works, 1
 epicentre.works, 1
 epichouse.net, 0
 epicinflatables.co.uk, 1
 epickitty.co.uk, 1
 epicpages.com, 1
 epicsecure.de, 1
@@ -14095,17 +14084,16 @@ estate360.co.tz, 1
 estateczech-eu.ru, 1
 estcequejailaflemme.fr, 1
 estcequonmetenprodaujourdhui.info, 1
 esteam.se, 1
 estedafah.com, 1
 esterilizacion-perros.es, 1
 esteticanorte.com.br, 1
 estetista.net, 1
-estetistarimini.it, 1
 estherlew.is, 1
 esthesoleil.jp, 1
 estilopack-loja.com.br, 1
 estoic.net, 1
 estoniantrade.ee, 1
 estonoentraenelexamen.com, 1
 estoqueinformatica.com.br, 1
 estrietoit.com, 0
@@ -14133,17 +14121,16 @@ etccooperative.org, 1
 etch.co, 1
 etd-glasfaser.de, 1
 etech-solution.com, 1
 etech-solution.net, 1
 etech-solutions.com, 1
 etechsolution.net, 1
 eteesheet.com, 1
 etelej.com, 0
-etenendrinken.nu, 1
 eternal-warriors.de, 1
 eternalabyss.int.eu.org, 1
 eternalflame.cn, 1
 eternalsymbols.com, 0
 eternit.roma.it, 1
 etfacta.com, 1
 eth-faucet.net, 1
 eth0.nl, 1
@@ -14180,16 +14167,17 @@ etresmant.es, 1
 etrker.com, 1
 etskinner.com, 1
 etskinner.net, 1
 etudesbibliques.fr, 1
 etudesbibliques.net, 1
 etudesbibliques.org, 1
 etv.cx, 1
 etyd.org, 1
+etzi.myds.me, 1
 eu-darlehen-finanzierung.de, 1
 eu-datenbank.de, 1
 eu-gamers.com, 1
 eu-stellenangebot.de, 1
 euaggelion.blog.br, 1
 euanbarrett.com, 1
 euchre.us, 1
 eucl3d.com, 1
@@ -14429,17 +14417,16 @@ exgaywatch.com, 1
 exgen.io, 1
 exhaledayspa.com.au, 1
 exhalespa.com, 1
 exhibityour.com, 1
 exiahost.com, 1
 exit9wineandliquor.com, 1
 exitooutdoor.com, 1
 exmoe.com, 1
-exnovin.co, 1
 exocen.com, 1
 exon.io, 1
 exoplatform.com, 1
 exordiumconcepts.com, 1
 exoscale.ch, 1
 exoscale.com, 1
 exoten-spezialist.de, 1
 exoticads.com, 1
@@ -14723,16 +14710,17 @@ falbros.com, 1
 falcona.io, 1
 falconfrag.com, 1
 falconvintners.com, 1
 falcoz.co, 1
 faldoria.de, 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
 fallenmystic.com, 1
 fallenspirits.co.uk, 1
 falling.se, 1
@@ -15355,28 +15343,28 @@ fish-hook.ru, 1
 fish2.me, 1
 fishbattle.io, 1
 fishbattle.net, 1
 fishermailbox.net, 1
 fishermansbend.apartments, 1
 fishermansbendcorporation.com.au, 1
 fishermansbendtownhouses.com.au, 1
 fishexport.eu, 1
+fishfinders.info, 1
 fishgen.no, 1
 fishserver.net, 1
 fishtacos.blog, 1
 fistu.la, 1
 fit-4u.ch, 1
 fit-mit-nina.com, 1
 fit-mit-system.eu, 1
 fit365.jp, 1
 fitchannel.com, 1
 fitinclass.com, 1
 fitkram.cz, 1
-fitmeat.at, 1
 fitness-challenge.co.uk, 1
 fitness.gov, 1
 fittelo.cz, 1
 fitzsim.org, 1
 fiuxy.bz, 1
 fiuxy.co, 1
 fiuxy.me, 1
 fiuxy.org, 1
@@ -15436,17 +15424,16 @@ flashgot.net, 1
 flat.io, 1
 flatlandchurch.com, 1
 flatmail.pl, 1
 flatmatehub.com.au, 1
 flatpackmates.co.uk, 1
 flauschig.net, 1
 flavinus.fr, 1
 flaviu.co.uk, 1
-flavo.io, 1
 flavr.be, 1
 flawlesscowboy.xyz, 1
 fleep.io, 1
 fleetcor.at, 1
 fleetcor.ch, 1
 fleetcor.cz, 1
 fleetcor.de, 1
 fleetcor.fr, 1
@@ -15499,17 +15486,16 @@ flinch.io, 1
 fling.dating, 1
 flip.kim, 1
 flipneus.net, 1
 fliptable.org, 1
 flirt-norden.de, 1
 flirtee.net, 1
 flirtfaces.de, 1
 flirtos.de, 1
-flirtycourts.com, 1
 flixhaven.net, 1
 flixports.com, 1
 flmortgagebank.com, 1
 floatationlocations.com, 1
 floaternet.com, 1
 flockbox.club, 1
 flocktofedora.org, 1
 floersheimer-openair.de, 1
@@ -15719,16 +15705,17 @@ foregroundweb.com, 1
 foreign-language-colleges.com, 1
 forellenpark.com, 1
 forento.be, 1
 foresdon.jp, 1
 forestraven.net, 1
 foreverssl.com, 1
 foreversummertime.com, 1
 forewordreviews.com, 1
+forex-plus.com, 1
 forex.ee, 1
 forexchef.de, 1
 forexee.com, 1
 forexsignals7.com, 1
 forextickler.com, 1
 forextimes.ru, 0
 forfunssake.co.uk, 1
 forge-goerger.eu, 1
@@ -15802,17 +15789,16 @@ foto-leitner.com, 1
 foto-leitner.de, 1
 foto-pro.by, 1
 foto-robitsch.at, 1
 foto-roma.ru, 1
 foto.by, 1
 fotoboxvysocina.cz, 1
 fotofaerie.net, 1
 fotoflits.net, 1
-fotografechristha.nl, 1
 fotografiadellalucerossa.com, 1
 fotohome.dk, 1
 fotokomorkomania.pl, 1
 fotoleitner.com, 1
 fotoleitner.de, 1
 fotonjan.com, 1
 fotostravestisbr.com, 1
 fotostudio-leitner.com, 1
@@ -15894,17 +15880,16 @@ franken-lehrmittel.de, 1
 frankenhost.de, 1
 frankenlehrmittel.de, 1
 frankfurt-am-start.de, 1
 frankhaala.com, 1
 frankierfachmann.de, 1
 frankierprofi.de, 1
 frankierstar.de, 1
 frankinteriordesign.co.uk, 1
-frankl.in, 1
 franklinhua.com, 1
 frankmorrow.com, 1
 frankopol-sklep.pl, 1
 franksiler.com, 1
 frankslaughterinsurance.com, 1
 frankwei.xyz, 1
 frankyan.com, 1
 fransallen.com, 1
@@ -16061,17 +16046,16 @@ fresh-networks.net, 1
 fresh.co.il, 1
 freshcode.nl, 1
 freshdesigns.de, 1
 freshdns.nl, 1
 freshempire.gov, 1
 freshislandfish.com, 1
 freshkiss.com.au, 1
 freshmaza.com, 1
-freshmaza.io, 1
 freshmaza.net, 1
 fretscha.com, 1
 frettirnar.is, 1
 fretworksec.com, 1
 friarsonbase.com, 1
 fribourgviking.net, 1
 frickelboxx.de, 1
 frickelmeister.de, 1
@@ -16420,17 +16404,17 @@ g10e.ch, 1
 g1jeu.com, 1
 g1s.cc, 1
 g2links.com, 1
 g2pla.net, 1
 g2ship.com, 1
 g2soft.net, 1
 g3d.ro, 1
 g3dev.ch, 1
-g3rv4.com, 0
+g3rv4.com, 1
 g4w.co, 1
 g6666g.tk, 1
 g8energysolutions.co.uk, 1
 gaasuper6.com, 1
 gaaz.fr, 1
 gabe565.com, 1
 gabeb1920.com, 1
 gabecook.com, 1
@@ -16784,17 +16768,16 @@ geldimblick.de, 1
 geldteveel.eu, 1
 geleenbeekdal.nl, 1
 geleia-real.com, 1
 gelis.ch, 1
 gelodosul.com.br, 1
 gelog-software.de, 0
 geloofindemocratie.nl, 0
 geluidsstudio.com, 1
-gem-indonesia.net, 0
 gem-info.fr, 1
 gemeentemolenwaard.nl, 1
 gemeinsam-ideen-verwirklichen.de, 1
 gemgroups.in, 1
 gemini.com, 1
 gemquery.com, 1
 genchev.io, 1
 gencmedya.com, 1
@@ -17233,17 +17216,16 @@ glenavy.tk, 1
 glenberviegolfclub.com, 1
 glencambria.com, 1
 glencarbide.com, 1
 glencoveny.gov, 1
 glendarraghbouncycastles.co.uk, 1
 glenhuntlyapartments.com.au, 1
 glenshere.com, 1
 glevolution.com, 1
-glicerina.online, 1
 glidingshop.cz, 1
 glidingshop.de, 1
 glidingshop.eu, 1
 glitzerstuecke.de, 1
 glloq.org, 1
 glnpo.gov, 1
 glob-coin.com, 1
 global-adult-webcams.com, 1
@@ -17399,17 +17381,16 @@ gogonano.com, 1
 gogoodyear.eu, 1
 gogroopie.com, 1
 gogroopie.ie, 1
 gogrow.com, 1
 gogsat.com, 1
 gohon.org, 1
 gohongi-katakori.com, 1
 goiaspropaganda.com.br, 1
-goingreen.com.au, 1
 gokhankesici.com, 1
 gokmenguresci.com, 1
 golang.zone, 1
 gold24.ru, 1
 goldclubcasino.com, 1
 goldcoastasian.com, 1
 goldcoasthypnotherapyhypnosis.com.au, 1
 goldcoastphotographycourses.com, 1
@@ -17446,17 +17427,16 @@ gomena.io, 1
 gommista.roma.it, 1
 gondawa.com, 1
 gondelvaartdwarsgracht.nl, 1
 gongjianwei.com, 1
 gongjuhao.com, 1
 gonx.dk, 1
 gonzalesca.gov, 1
 goo.gl, 1
-good-tips.pro, 1
 gooday.life, 1
 gooddomainna.me, 1
 goodenough.nz, 0
 goodfeels.net, 1
 goodhealthtv.com, 1
 goodquote.gq, 1
 goodsex4all.com.br, 1
 goodshepherdmv.com, 1
@@ -17717,17 +17697,16 @@ greenteamtwente.nl, 1
 greenwaylog.net, 1
 greenwithdecor.com, 1
 greer.ru, 1
 greg.red, 1
 gregbrimble.com, 1
 greger.me, 1
 greggsfoundation.org.uk, 1
 gregmartyn.com, 1
-gregmarziomedia.com, 1
 gregmilton.com, 1
 gregmilton.org, 1
 gregmote.com, 1
 grego.pt, 1
 gregoirow.be, 1
 gregorians.org, 1
 gregorkofler.com, 1
 gregory-kramer.fr, 1
@@ -17785,17 +17764,17 @@ griyo.online, 1
 grizzlys.com, 1
 grmp.fr, 1
 groben-itsolutions.de, 1
 grocerybuild.com, 1
 grocock.me.uk, 1
 groenaquasolutions.nl, 1
 groenewoud.me, 1
 groentebesteld.nl, 1
-groenteclub.nl, 1
+groenteclub.nl, 0
 groentefruitzeep.com, 1
 groentefruitzeep.nl, 1
 groepjam-usedcars.be, 1
 grog.pw, 1
 grokker.com, 1
 groklearning.com, 1
 grolimur.ch, 1
 gronau-it-cloud-computing.de, 1
@@ -17894,16 +17873,17 @@ gubagoo.com, 1
 gubagoo.io, 1
 gudangpangan.id, 1
 gudini.net, 1
 guegan.de, 1
 guelo.ch, 1
 guelphhydropool.com, 1
 guendra.dedyn.io, 1
 guenthereder.at, 1
+guenthernoack.de, 1
 guerard.info, 1
 guerrilla.technology, 1
 guesthouse-namaste.com, 1
 guevener.de, 1
 gueze-ardeche.fr, 1
 gueze-sas.fr, 1
 gufen.ga, 1
 guffr.it, 1
@@ -17947,17 +17927,16 @@ gume4you.com, 1
 gumi.ca, 1
 gummibande.noip.me, 0
 gunauc.net, 1
 gunceloyunhileleri.com, 1
 gunhunter.com, 1
 gunwatch.co.uk, 1
 gunworld.com.au, 1
 guochang.xyz, 1
-guoke.com, 1
 guoliang.me, 1
 guozeyu.com, 1
 gupfen.ch, 1
 gurkan.in, 1
 gurmel.ru, 1
 gurochan.ch, 1
 gurpusmaximus.com, 1
 guru-naradi.cz, 1
@@ -18048,17 +18027,16 @@ h3b.nl, 1
 h3x.jp, 0
 h3z.jp, 1
 h404bi.com, 1
 ha-kunamatata.de, 1
 ha3.eu, 1
 ha6.ru, 1
 haarlemsesaxofoonschool.nl, 1
 haavard.me, 1
-haazen.xyz, 1
 habarisoft.com, 1
 habbig.cc, 1
 habbixed.tk, 1
 habbos.es, 1
 habeo.si, 1
 habitat-domotique.fr, 1
 habr.com, 1
 habtium.com, 1
@@ -18620,17 +18598,16 @@ heliosnet.com, 1
 heliosvoting.org, 1
 helix.am, 1
 hell.sh, 1
 hellenicagora.co.uk, 1
 hellersgas.com, 1
 helles-koepfchen.de, 1
 helloacm.com, 1
 hellofilters.com, 1
-hellomouse.cf, 1
 hellomouse.net, 1
 hellomouse.tk, 1
 hellotandem.com, 1
 hellothought.net, 1
 hellsgamers.pw, 1
 hellsh.com, 1
 helmut-a-binser.de, 1
 help.simpletax.ca, 1
@@ -19488,17 +19465,16 @@ humanzee.com, 1
 humass.nl, 1
 humblebee.at, 1
 humblebee.be, 1
 humblebee.bg, 1
 humblebee.ch, 1
 humblebee.co.in, 1
 humblebee.co.uk, 1
 humblebee.com.mx, 1
-humblebee.com.ph, 1
 humblebee.cz, 1
 humblebee.dk, 1
 humblebee.es, 1
 humblebee.eu, 1
 humblebee.foundation, 1
 humblebee.fr, 1
 humblebee.gr, 1
 humblebee.hu, 1
@@ -19531,17 +19507,17 @@ hunqz.com, 1
 hunstoncanoeclub.co.uk, 1
 hunter-read.com, 1
 hunter.io, 1
 hunterjohnson.io, 1
 hunterkehoe.com, 1
 huntexpired.com, 1
 huntingdonbouncers.co.uk, 1
 huntingdonlifesciences.com, 1
-huntshomeinspections.com, 1
+huntshomeinspections.com, 0
 huntsmansecurity.com, 1
 huntsvillecottage.ca, 1
 huongquynh.com, 1
 huonit.com.au, 1
 hup.hu, 1
 hupp.se, 1
 hurd.is, 1
 huren.nl, 1
@@ -19647,17 +19623,17 @@ i-office.com.vn, 1
 i-proswiss.com, 1
 i-red.info, 1
 i-scream.space, 1
 i-sports.cz, 1
 i-stats.net, 1
 i-telligence.de, 1
 i-verbi.it, 1
 i00.eu, 1
-i1314.gdn, 0
+i1314.gdn, 1
 i1place.com, 1
 i2b.ro, 1
 i4m1k0su.com, 1
 i5y.co.uk, 1
 i5y.org, 1
 i66.me, 1
 i879.com, 1
 i95.me, 0
@@ -19680,17 +19656,16 @@ iam.soy, 1
 iambozboz.co.uk, 1
 iamcarrico.com, 1
 iamhansen.xyz, 1
 iaminashittymood.today, 1
 iamjoshellis.com, 1
 iamlbk.com, 1
 iamlzh.com, 1
 iamsoareyou.se, 1
-iamtheib.me, 1
 iamtonyarthur.com, 1
 iamusingtheinter.net, 1
 iamwoodbeard.com, 1
 iandouglasscott.com, 1
 iane-ccs.com, 1
 ianix.com, 1
 ianjmoriarty.com, 1
 ianklug.com, 1
@@ -19745,16 +19720,17 @@ ice.xyz, 1
 icebat.dyndns.org, 1
 iceberg.academy, 1
 icebook.co.uk, 1
 icebound.win, 1
 icecars.net, 1
 icedream.tech, 1
 iceloch.com, 1
 icetiger.eu, 1
+icewoman.net, 1
 ich-hab-die-schnauze-voll-von-der-suche-nach-ner-kurzen-domain.de, 1
 ich-tanke.de, 1
 ichasco.com, 1
 ichbinein.org, 1
 ichbinkeinreh.de, 1
 ichmachdas.net, 1
 ickerseashop.com, 1
 iclart.com, 1
@@ -20141,17 +20117,16 @@ immobilien-badlippspringe.de, 1
 immobilien-in-istanbul.de, 1
 immobilien-wallat.de, 1
 immobilien-zirm.de, 1
 immobilier-nice.fr, 1
 immobilier92.net, 1
 immobiza.com, 0
 immortal.run, 1
 imobile3.com, 1
-imoe.ac.cn, 1
 imokuri123.com, 1
 imoner.com, 1
 imoner.ga, 1
 imouto.my, 0
 imouyang.com, 1
 impact.health.nz, 1
 impacter.eu, 1
 impactfestival.be, 1
@@ -20196,16 +20171,17 @@ imrunner.com, 1
 imrunner.ru, 1
 ims-sargans.ch, 1
 imscompany.com, 1
 imwalking.de, 1
 imwnk.cn, 1
 imydl.com, 1
 imydl.tech, 1
 imyjy.cn, 1
+imyrs.cn, 1
 imyunya.com, 1
 imyz.tw, 1
 in-depthoutdoors.com, 1
 in-flames.com, 1
 in.search.yahoo.com, 0
 in.xero.com, 0
 in10tion.com, 0
 inabox.ro, 1
@@ -20438,17 +20414,16 @@ inksay.com, 1
 inkspire.co.uk, 1
 inkthemes.com, 1
 inkurz.de, 1
 inlabo.de, 1
 inline-sport.cz, 1
 inlink.ee, 1
 inmaps.xyz, 1
 inmatefinancial.com, 1
-inmateintake.com, 1
 inme.ga, 1
 inmobillium.fr, 1
 inmoodforsex.com, 1
 inmusrv.de, 1
 innerfence.com, 1
 innerform.com, 1
 innerlightcrystals.co.uk, 1
 innermostparts.org, 1
@@ -20528,17 +20503,16 @@ instead.com.au, 1
 insteagle.com, 1
 instela.com, 1
 instelikes.com.br, 1
 instics.com, 1
 instinctive.io, 1
 instinctiveads.com, 1
 institut-confucius-montpellier.org, 1
 institutmaupertuis.hopto.org, 1
-institutolancaster.com, 0
 institutulcultural.ro, 1
 instrumart.ru, 0
 insult.es, 1
 insurance, 1
 insurance321.com, 1
 insureon.com, 1
 insurgentsmustdie.com, 1
 int-ext-design.fr, 1
@@ -20602,16 +20576,17 @@ interior-design-colleges.com, 1
 interiorcheapo.com, 1
 interiordesignsconcept.com, 1
 interiorprofesional.com.ar, 1
 interisaudit.com, 1
 interlingvo.biz, 1
 intermax.nl, 1
 intermedinet.nl, 1
 internalkmc.com, 1
+international-arbitration-attorney.com, 1
 international-books.org, 1
 international-nash-day.com, 1
 internationalfashionjobs.com, 1
 internationalschool.it, 1
 internationalschoolnewyork.com, 1
 internationaltalento.it, 1
 internect.co.za, 1
 internet-aukcion.info, 1
@@ -20999,16 +20974,17 @@ isvsecwatch.org, 1
 isyu.xyz, 1
 isz.no, 1
 iszy.me, 1
 it-academy.sk, 1
 it-enthusiasts.tech, 1
 it-faul.de, 1
 it-fernau.com, 1
 it-jobbank.dk, 1
+it-kron.de, 1
 it-maker.eu, 1
 it-rotter.de, 1
 it-schamans.de, 1
 it-seems-to.work, 1
 it-service24.at, 1
 it-service24.ch, 1
 it-service24.com, 1
 it-shamans.de, 1
@@ -21618,17 +21594,16 @@ jessicabenedictus.nl, 0
 jessicahrehor.com, 1
 jesters-court.net, 1
 jesuisadmin.fr, 1
 jet-stream.fr, 1
 jetapi.org, 1
 jetbbs.com, 1
 jetbrains.pw, 1
 jetkittens.co.uk, 1
-jetmirshatri.com, 1
 jetsetboyz.net, 1
 jetsieswerda.nl, 1
 jettlarue.com, 1
 jettravel.com.mt, 1
 jetwhiz.com, 1
 jetzt-elektromobil.de, 1
 jeugdkans.nl, 1
 jeuxetcodes.fr, 1
@@ -21704,17 +21679,16 @@ jinliming.ml, 1
 jino-jossy.appspot.com, 1
 jinshuju.net, 1
 jiogo.com, 1
 jirav.com, 1
 jiripudil.cz, 1
 jirosworld.com, 1
 jisai.net.cn, 1
 jisha.site, 1
-jiveiaktivno.bg, 1
 jixun.moe, 1
 jiyusu.com, 1
 jiyuu-ni.com, 1
 jiyuu-ni.net, 1
 jjj.blog, 1
 jjjconnection.com, 1
 jjlvk.nl, 1
 jjmarketing.co.uk, 1
@@ -22223,17 +22197,16 @@ justice4assange.com, 1
 justin-tech.com, 0
 justinellingwood.com, 1
 justinharrison.ca, 1
 justinho.com, 1
 justinstandring.com, 1
 justmensgloves.com, 1
 justnu.se, 0
 justpaste.it, 1
-justsome.info, 1
 justtalk.site, 1
 justthinktwice.gov, 1
 justupdate.me, 1
 justyy.com, 1
 justzz.xyz, 1
 juszkiewicz.com.pl, 1
 jutlander-netbank.dk, 1
 jutlander.dk, 1
@@ -22259,18 +22232,20 @@ jwjwjw.com, 1
 jwmmarketing.com, 1
 jwnotifier.org, 1
 jwod.gov, 1
 jwolt-lx.com, 1
 jwschuepfheim.ch, 1
 jwsoft.nl, 1
 jxir.de, 1
 jxltom.com, 1
+jxm.in, 1
 jydemarked.dk, 1
 jyggen.com, 1
+jym.fit, 1
 jyoti-fairworks.org, 1
 jzachpearson.com, 1
 jzbk.org, 1
 jzcapital.co, 1
 k-bone.com, 1
 k-homes.net, 1
 k-netz.de, 1
 k-pan.com, 1
@@ -22357,17 +22332,17 @@ kaliaa.fi, 1
 kalian.cz, 1
 kalilinux.tech, 1
 kalkulacka-havarijni.cz, 1
 kall.is, 1
 kallies-net.de, 1
 kalmar.com, 1
 kaloix.de, 1
 kalolina.com, 1
-kalombo.ru, 0
+kalombo.ru, 1
 kalsbouncies.com, 1
 kaltenbrunner.it, 1
 kalterersee.ch, 1
 kalwestelectric.com, 1
 kam-serwis.pl, 1
 kamalame.co, 1
 kamatajisyaku.tokyo.jp, 1
 kamikaichimaru.com, 0
@@ -22776,17 +22751,17 @@ kgnk.ru, 1
 khaledgarbaya.net, 0
 khanovaskola.cz, 1
 khas.co.uk, 1
 khasiatmanfaat.com, 1
 kheshtar.pl, 1
 khetzal.info, 1
 khipu.com, 1
 khlee.net, 1
-khmb.ru, 1
+khmb.ru, 0
 khosla.uk, 1
 khoury-dulla.ch, 1
 khs1994.com, 1
 khudothiswanpark.vn, 1
 kiadoapartman.hu, 1
 kiahoriane.com, 1
 kiaka.co, 1
 kiano.net, 1
@@ -22915,16 +22890,17 @@ kintore.tv, 1
 kiocloud.com, 1
 kionetworks.es, 1
 kipa.at, 1
 kipiradio.com, 1
 kippenbart.gq, 1
 kipriakipita.gr, 1
 kiraboshi.xyz, 1
 kiragameforum.net, 1
+kirainmoe.com, 1
 kiraku.co, 1
 kirbear.com, 1
 kirche-dortmund-ost.de, 1
 kirchen-im-web.de, 0
 kirchengemeinde-markt-erlbach.de, 1
 kircp.com, 1
 kirei.se, 1
 kirig.ph, 1
@@ -22942,16 +22918,17 @@ kirrie.pe.kr, 1
 kirsch-gestaltung.de, 1
 kirschbaum.me, 1
 kirslis.com, 1
 kirstenbos.ca, 1
 kirstin-peters.de, 1
 kirwandigital.com, 1
 kis-toitoidixi.de, 1
 kisallatorvos.hu, 1
+kisalt.im, 1
 kisiselveri.com, 1
 kisma.de, 1
 kissesb.com, 1
 kissesb.net, 1
 kissflow.com, 1
 kissgyms.com, 1
 kisskiss.ch, 1
 kissmycreative.com, 1
@@ -22979,16 +22956,17 @@ kiteschoolzandvoort.nl, 1
 kitsapsolutions.com, 1
 kittmedia.com, 1
 kittpress.com, 1
 kittyhacker101.tk, 1
 kivitelezesbiztositas.hu, 1
 kiwi.com, 1
 kiwi.digital, 1
 kiwi.global, 1
+kiwi.wiki, 1
 kiwico.com, 1
 kiwipayment.com, 1
 kiwipayments.com, 1
 kiwiplace.com, 1
 kix.moe, 1
 kiyotatsu.com, 1
 kj-prince.com, 1
 kj1396.net, 1
@@ -23185,16 +23163,17 @@ koka-shop.de, 1
 kokensupport.com, 1
 koketteriet.se, 1
 kokoiroworks.com, 1
 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
 koldanews.com, 1
 kolin.org, 1
 kolizaskrap.bg, 1
 kolja-engelmann.de, 1
 kolkataflowermall.com, 1
@@ -23409,17 +23388,16 @@ kristiehill.com, 1
 kristikala.nl, 1
 kristinbailey.com, 0
 kristofba.ch, 1
 kristofdv.be, 1
 krizevci.info, 1
 krk-media.pl, 0
 krmeni.cz, 0
 krokedil.se, 1
-krokodent.de, 1
 kromamoveis.com.br, 1
 kromonos.net, 1
 kronaw.it, 1
 krony.de, 1
 kronych.cz, 1
 kroon.email, 1
 kropkait.pl, 1
 krouzkyliduska.cz, 1
@@ -23436,16 +23414,17 @@ krutka.cz, 1
 kruu.de, 1
 kruzhki-s-kartinkami.ru, 1
 kry.no, 1
 kry.se, 1
 kryglik.com, 1
 krypsys.com, 1
 krypt.com, 1
 kryptera.se, 1
+kryptomodkingz.com, 1
 krytykawszystkiego.com, 1
 krytykawszystkiego.pl, 1
 kryx.de, 1
 ks-watch.de, 1
 ks88.com, 1
 kschv-rdeck.de, 1
 kselenia.ee, 1
 ksero.center, 1
@@ -23539,17 +23518,16 @@ kurumi.io, 1
 kuruppa.xyz, 1
 kuschku.de, 1
 kusdaryanto.web.id, 1
 kushtikidsparties.co.uk, 1
 kusochi.eu, 1
 kutinsoft.com, 1
 kutny.cz, 1
 kutsankaplan.com, 1
-kuttler.eu, 1
 kutukupret.com, 1
 kutus.ee, 1
 kuwago.io, 1
 kuzbass-pwl.ru, 1
 kvadratnimeter.si, 1
 kvalita-1a.cz, 1
 kvalitetsaktiepodden.se, 1
 kvalitnitesneni.cz, 1
@@ -24634,17 +24612,16 @@ linext.cn, 1
 linfamilygc.com, 1
 lingerie.com.br, 1
 lingeriesilhouette.com, 1
 lingotaxi.com, 1
 lingting.vip, 1
 linguamilla.com, 1
 linguatrip.com, 0
 lingvo-svoboda.ru, 1
-linherest.tk, 1
 link-sanitizer.com, 1
 link2serve.com, 1
 linkages.org, 1
 linkat4.cz, 1
 linkdr.uk, 1
 linkedinbackground.com, 1
 linkedpipes.com, 1
 linkenheil.org, 1
@@ -25132,27 +25109,27 @@ lorenadumitrascu.ro, 1
 loreofthenorth.com, 1
 loreofthenorth.nl, 1
 lorientlejour.com, 1
 loritaboegl.de, 1
 lormansas.com, 1
 losangelestown.com, 1
 losebellyfat.pro, 1
 losless.fr, 1
-losrascadoresparagatos.com, 1
 losreyesdeldescanso.com.ar, 1
 loss.no, 1
 lost.host, 1
 lost.report, 1
 lostandcash.com, 1
 lostarq.com, 1
 lostingames.de, 1
 lostkeys.co.uk, 1
 lostserver.com, 1
 lostwithdan.com, 1
+loteamentomontereiitu.com.br, 1
 lothlorien.ca, 0
 lotl.ru, 1
 lotn.mobi, 1
 lotn.nl, 1
 lotnonline.com, 1
 lotnonline.nl, 1
 lotro-wiki.com, 1
 lottospielen24.org, 0
@@ -25252,17 +25229,16 @@ ltba.org, 1
 ltecode.com, 1
 ltib.com.au, 1
 ltls.org, 1
 ltn-tom-morel.fr, 1
 ltransferts.com, 1
 lu.search.yahoo.com, 0
 luan.ma, 1
 luav.org, 1
-lubar.me, 1
 lubbockyounglawyers.org, 1
 lublin.toys, 1
 lubomirkazakov.com, 1
 lubot.net, 0
 luc-oberson.ch, 1
 luca.swiss, 1
 lucacastelnuovo.nl, 0
 lucafontana.net, 1
@@ -25538,17 +25514,16 @@ macnetwork.eu, 1
 macnetwork.fr, 1
 macnetwork.net, 1
 maco.org.uk, 1
 maconnerie-dcs.ch, 1
 macosxfilerecovery.com, 1
 macoun.de, 1
 macros.co.jp, 1
 macstore.pe, 1
-mactools.com.co, 1
 mad.ninja, 1
 madae.nl, 1
 madars.org, 0
 madbicicletas.com, 1
 madbin.com, 1
 madbouncycastles.co.uk, 1
 maddi.biz, 1
 maddistonevangelical.co.uk, 1
@@ -25581,17 +25556,16 @@ madtec.de, 1
 madusecurity.com, 1
 mae-berlinistanbul.com, 1
 maedchenflohmarkt.at, 1
 maedchenflohmarkt.de, 1
 maeln.com, 1
 maelstrom-fury.eu, 1
 maelstrom.ninja, 1
 maeplasticsurgery.com, 1
-maerzpa.de, 1
 maestrano.com, 1
 maff.co.uk, 1
 maff.scot, 0
 mafia.network, 1
 mafiaforum.de, 1
 mafiapenguin.club, 1
 mafiasi.de, 1
 magasindejouets.com, 1
@@ -25651,16 +25625,17 @@ mahai.me, 1
 mahatmayoga.org, 1
 mahefa.co.uk, 1
 mahjong-navi.com, 1
 mahjong.org, 1
 mahjongrush.com, 1
 mahrer.net, 1
 maiaimobiliare.ro, 1
 maidoty.net, 1
+maiebanatulfruncea.com, 1
 maijia800.com, 1
 maik-mahlow.de, 1
 maikolfish.it, 1
 mail-de.jp, 1
 mail-rotter.de, 1
 mail-settings.google.com, 1
 mail.com, 1
 mail.de, 1
@@ -25760,17 +25735,16 @@ malik.id, 1
 malikussa.id, 1
 malikussaid.com, 1
 malikzinad.com, 1
 malinator.net, 0
 malinheadview.ie, 1
 maliskovik.si, 1
 maljaars-fotografie.nl, 1
 malkaso.com.ua, 1
-mall.cz, 1
 mall.hr, 1
 mall.hu, 1
 mall.pl, 1
 mall.sk, 1
 mallach.net, 1
 mallhonda.com, 1
 mallner.me, 1
 mallonline.com.br, 1
@@ -26886,17 +26860,17 @@ meric-graphisme.info, 1
 meridianfresno.com, 1
 meridianmetals.com, 1
 meridianstore.com.br, 1
 merimatka.fi, 1
 merkel.me, 1
 merlet.eu, 1
 merlinsoap.com, 1
 merloat.club, 1
-merloat.com, 0
+merloat.com, 1
 merojob.com, 1
 meronberry.jp, 1
 mers.one, 1
 merson.org, 1
 merson.tv, 1
 mertarauh.com, 1
 mertcangokgoz.com, 1
 meruri.com, 1
@@ -27159,16 +27133,17 @@ mikakalathil.ca, 1
 mikakalevi.com, 1
 mikalikes.men, 1
 mike-bland.com, 1
 mike2k.de, 1
 mikebelanger.ca, 1
 mikeblog.site, 1
 mikebutcher.ca, 1
 mikecb.org, 1
+mikedugan.org, 1
 mikegarnett.co.uk, 1
 mikegerwitz.com, 1
 mikeguy.co.uk, 1
 mikehamburg.com, 1
 mikehilldesign.co.uk, 1
 mikekreuzer.com, 1
 mikerichards.photography, 0
 miketabor.com, 1
@@ -27517,17 +27492,16 @@ mizumax.me, 1
 mj420.com, 1
 mjacobson.net, 1
 mjanja.ch, 1
 mjasm.org, 1
 mjec.net, 1
 mjlaurindo.pt, 1
 mjmedia.co.za, 1
 mjmnagy.info, 1
-mjscustomcreations.com.au, 1
 mjt.me.uk, 1
 mk-dizajn.com, 1
 mk89.de, 1
 mkacg.com, 1
 mkaciuba.com, 1
 mkakh.com, 1
 mkakh.xyz, 1
 mkasu.org, 0
@@ -27757,18 +27731,20 @@ momirfarooq.com, 1
 momjoyas.com, 1
 momo0v0.club, 1
 momozeit.de, 1
 momstableonline.com, 1
 momut.org, 1
 momy-genealogie.info, 1
 mon-agenda.org, 0
 mon-partage.fr, 1
+mon-trafic.com, 0
 mon22.ch, 1
 mona-antenna.com, 1
+mona-dress.com, 1
 monachatdeco.com, 1
 monaco-automaten.de, 1
 monad.io, 1
 monakasatmasr.com, 1
 monalisa.wtf, 1
 monalyse.com, 1
 monarchcleanersnc.com, 1
 monbudget.org, 1
@@ -27790,16 +27766,17 @@ moneypark.ch, 1
 moneytoday.se, 1
 mongla168.net, 1
 mongla88.net, 1
 mongolieenfrance.fr, 1
 monicabeckstrom.no, 1
 monique.io, 1
 moniquedekermadec.com, 1
 moniquemunhoz.com.br, 1
+monitman.com, 1
 monitman.solutions, 1
 monitorchain.com, 1
 monitori.ng, 1
 monitoring.kalisz.pl, 1
 monitzer.com, 1
 monix.io, 1
 monkay.de, 1
 monkeybusiness.agency, 1
@@ -28099,16 +28076,17 @@ mrkrabat.de, 1
 mrksk.com, 1
 mrliu.me, 1
 mrmoregame.de, 1
 mrnh.de, 1
 mrnh.tk, 1
 mrning.com, 1
 mrprintables.com, 1
 mrs-labo.jp, 1
+mrs-shop.com, 1
 mrsbairds.com, 0
 mrserge.lv, 1
 mrsk.me, 1
 mrstat.co.uk, 1
 mrtunnel.club, 1
 mruczek.ga, 1
 mruganiepodspacja.pl, 1
 mrv.li, 1
@@ -28426,17 +28404,16 @@ mybboard.pl, 1
 mybeautyjobs.de, 1
 mybicc.org, 1
 myblockchain.cloud, 1
 mybloggedlife.com, 1
 mybodylife.com, 1
 mybon.at, 0
 mybonfire.com, 1
 mybusiness.wien, 1
-mycamda.com, 1
 mycard.moe, 1
 mycareersfuture.sg, 1
 mycieokien.info, 0
 mycinema.pro, 1
 mycircleworks.com, 1
 myclasscam.com, 1
 myclasscam.org, 1
 myclinicalstudybuddy.com, 1
@@ -28454,17 +28431,16 @@ mycreativeartsconsulting.com, 1
 mycreativenook.com, 1
 mycreditcardcenter.com, 1
 mycrypnet.io, 1
 mycrypto.com, 1
 mycrystalgrove.com, 1
 mycuco.it, 1
 mycustomwriting.com, 1
 mydarkstar.net, 1
-mydaywebapp.com, 1
 mydebian.in.ua, 1
 mydentalplan.gr, 1
 mydevolo.com, 1
 mydevolo.de, 1
 mydigitalweek.com, 1
 mydjsongbook.com, 1
 mydmdi.com, 1
 mydna.bio, 1
@@ -28802,17 +28778,16 @@ nagb.org, 1
 nagel-dentaltechnik.de, 1
 nagelfam.com, 1
 naggie.net, 1
 nah.nz, 1
 nah.re, 1
 nahura.com, 1
 nailattitude.ch, 1
 nailchiodo.com, 1
-nailedithomebuilders.com, 1
 nailsalon-aztplus.com, 1
 nailtodayminneapolis.com, 1
 nairobibusinessreview.com, 1
 naive.network, 1
 najany.de, 1
 najany.dk, 1
 najany.fr, 1
 najany.nl, 1
@@ -28891,17 +28866,16 @@ narada.com.ua, 1
 narakenkoland.net, 1
 naralogics.com, 1
 narardetval.se, 1
 narazaka.net, 1
 narduin.xyz, 1
 narenderchopra.com, 1
 narfation.org, 1
 nargileh.nl, 1
-narindal.ch, 1
 narko.space, 1
 narmos.ch, 1
 naro.se, 1
 narodsovety.ru, 1
 naroska.name, 1
 narrativasdigitais.pt, 1
 narrative.network, 1
 narrative.org, 1
@@ -29375,27 +29349,29 @@ neuhaus-city.de, 1
 neurabyte.com, 1
 neurexcellence.com, 1
 neurobiology.com, 1
 neurochip.com, 1
 neurocny.cloud, 1
 neuroethics.com, 1
 neurogroove.info, 1
 neurolab.no, 1
+neuronasdigitales.com, 1
 neuropharmacology.com, 1
 neurotransmitter.net, 1
 neurozentrum-zentralschweiz.ch, 1
 neutralox.com, 0
 neuwal.com, 1
 nevadafiber.net, 1
 never.pet, 1
 nevergreen.io, 1
 nevermore.fi, 1
 neverwetturkey.com, 1
 nevntech.com, 1
+nevolution.me, 1
 nevoxo.com, 1
 new, 1
 new-black-order.com, 1
 new-boiler-prices.co.uk, 1
 new-ms.com, 1
 new-process.ch, 1
 new-process.com, 1
 new-process.de, 1
@@ -29490,17 +29466,16 @@ nextnely.com, 1
 nextnowagency.com, 1
 nextrobotics.de, 1
 nextstep-labs.gr, 1
 nexttv.co.il, 1
 nexus-exit.de, 1
 nexus-vienna.at, 1
 nexusbyte.de, 1
 nexusconnectinternational.eu, 1
-nexuscorporation.in, 1
 nexwebsites.com, 1
 nexxus-sistemas.net.br, 1
 neyer-lorenz.de, 1
 nezrouge-est-vaudois.ch, 1
 nezrouge-geneve.ch, 1
 nf4.net, 1
 nf9q.com, 1
 nfe-elektro.de, 1
@@ -30170,16 +30145,17 @@ nxit.ca, 1
 nxth.io, 1
 nya.as, 1
 nyadora.com, 1
 nyadora.moe, 1
 nyan.it, 1
 nyan.stream, 1
 nyanco.space, 1
 nyanpasu.tv, 1
+nyansparkle.com, 1
 nyantec.com, 1
 nyatane.com, 1
 nybiz.nyc, 1
 nycoyote.org, 1
 nydig.com, 1
 nydnxs.com, 1
 nyghtus.net, 1
 nyhaoyuan.net, 1
@@ -30231,16 +30207,17 @@ oatmealdome.me, 1
 obamalibrary.gov, 1
 obamawhitehouse.gov, 1
 obdolbacca.ru, 1
 oberam.de, 1
 oberhof.co, 1
 oberhofdrinks.com, 1
 oberhofjuice.com, 1
 obermeiers.eu, 1
+oberoi.de, 1
 obesidadlavega.com, 1
 obfuscate.xyz, 1
 obg-global.com, 1
 obitech.de, 1
 object.earth, 1
 objectif-terre.ch, 1
 objekt-textil.ch, 1
 oblast45.ru, 0
@@ -30283,16 +30260,17 @@ 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
 octal.es, 1
 octanio.com, 1
 octarineparrot.com, 1
 octav.name, 0
@@ -30381,31 +30359,31 @@ oguya.ch, 1
 ogyaa.jp, 1
 oh14.de, 1
 ohadsoft.com, 1
 ohai.su, 1
 ohayosoro.me, 1
 ohchouette.com, 1
 ohd.dk, 1
 oheila.com, 1
-ohhdeertrade.com, 1
 ohhere.xyz, 1
 ohiohealthfortune100.com, 1
 ohling.org, 1
 ohlmeier.com, 1
 ohlmeier.net, 1
 ohlmeier.org, 1
 ohmayonnaise.com, 1
 ohne-name.de, 1
 ohnonotme.com, 1
 ohol.se, 1
 ohreally.de, 1
 ohsohairy.co.uk, 1
 ohyooo.com, 1
 oi-wiki.org, 1
+oiaio.cn, 1
 oilfieldinjury.attorney, 1
 oilpaintingsonly.com, 1
 oinky.ddns.net, 1
 oirealtor.com, 1
 oisd.nl, 1
 oita-homes.com, 1
 ojaioliveoil.com, 1
 ojanaho.com, 1
@@ -30511,17 +30489,16 @@ omegathermoproducts.nl, 1
 omeopatiadinamica.it, 1
 omertabeyond.com, 1
 omertabeyond.net, 1
 ometepeislandinfo.com, 1
 omf.link, 1
 omfg.exposed, 1
 omgbouncycastlehire.co.uk, 1
 omi-news.fr, 1
-omifind.com, 1
 omitech.co.uk, 1
 omlmetal.co.jp, 1
 omniaclubs.com, 1
 omniasig.ro, 1
 omniasl.com, 1
 omniatv.com, 1
 omnibot.tv, 1
 omnienviro.com, 0
@@ -30843,17 +30820,17 @@ opus-codium.fr, 1
 oraculum.cz, 1
 orang-utans.com, 1
 orangecomputers.com, 1
 orangefab.asia, 1
 orangefinanse.com.pl, 1
 orangejetpack.com, 1
 orangekey.tk, 1
 orangenbaum.at, 1
-oranges.tokyo, 1
+orangenuts.in, 1
 orangetravel.eu, 1
 orangutan-appeal.org.uk, 1
 orbitdefence.co.uk, 1
 orbu.net, 1
 orca.pet, 1
 orcamoney.com, 1
 orchideenettoyage.com, 1
 orchidlive.com, 1
@@ -30970,17 +30947,16 @@ oswalds.co.uk, 1
 oswaldsmillaudio.com, 1
 oswbouncycastles.co.uk, 1
 osx86spain.com, 1
 osxentwicklerforum.de, 1
 oszri.hu, 1
 otakubox.de, 1
 otakurepublic.com, 1
 otakurumi.de, 1
-otakuyun.com, 1
 otchecker.com, 1
 otellio.com, 1
 otellio.de, 1
 otellio.it, 1
 otherkinforum.com, 1
 oticasaopaulo.com.br, 1
 oticasvisao.net.br, 1
 otinane.eu, 1
@@ -31121,16 +31097,17 @@ ozvolvo.org, 1
 p-fent.ch, 1
 p-pc.de, 1
 p-s-b.com, 1
 p-t.io, 1
 p.ki, 1
 p1984.nl, 0
 p1cn.com, 1
 p1ratrulezzz.me, 1
+p22.co, 1
 p2av.com, 1
 p4chivtac.com, 1
 p5118.com, 1
 p5r.uk, 1
 pa-w.de, 1
 pa.search.yahoo.com, 0
 paarberatung-hn.de, 1
 paardenhulp.nl, 1
@@ -31256,17 +31233,16 @@ pan.digital, 1
 panasca.is, 1
 panascais.co, 1
 panascais.com, 1
 panascais.de, 1
 panascais.eu, 1
 panascais.host, 1
 panascais.io, 1
 panascais.me, 1
-panascais.net, 1
 panascais.pw, 1
 panascais.site, 1
 panascais.tech, 1
 panascais.us, 1
 panaxis.biz, 1
 panaxis.ch, 1
 panaxis.li, 1
 panda-community.com, 1
@@ -31373,16 +31349,17 @@ parisfranceparking.de, 1
 parisfranceparking.fr, 1
 parisfranceparking.nl, 1
 parishome.jp, 1
 parisprovincedemenagements.fr, 1
 parkeren.in, 1
 parkfans.net, 1
 parkhost.eu, 1
 parkinginparis.fr, 1
+parkingpoint.co.uk, 1
 parkrunstats.servehttp.com, 1
 parksubaruoemparts.com, 1
 parkviewmotorcompany.com, 1
 parkwayminyan.org, 1
 parlamento.gub.uy, 1
 parleamonluc.fr, 1
 parleu2016.nl, 1
 parmels.com.br, 1
@@ -31592,16 +31569,17 @@ pavando.com, 1
 pavelfojt.cz, 1
 paveljanda.com, 1
 pavelrebrov.com, 1
 pavelstriz.cz, 1
 pavio.org, 1
 paw.cloud, 1
 paw.pt, 1
 pawel-international.com, 1
+pawelnazaruk.com, 1
 pawelurbanek.com, 1
 pawfriends.org.za, 1
 pawsomebox.co.uk, 1
 pawsr.us, 1
 pawsru.org, 1
 paxerahealth.com, 1
 pay.gov, 1
 pay.ubuntu.com, 1
@@ -31618,17 +31596,17 @@ payment-network.com, 1
 paymentaccuracy.gov, 1
 payments.google.com, 1
 paymerang.com, 1
 paymill.com, 1
 paymill.de, 1
 paymon.tj, 1
 paynet.com.co, 1
 payoff.com, 1
-paypal.com, 0
+paypal.com, 1
 paypaq.com, 1
 paypod.org, 1
 paypro.nl, 0
 payrollhive.com, 1
 paysera.com, 1
 payslipview.com, 1
 payssaintgilles.fr, 1
 paystack.com, 1
@@ -31758,17 +31736,16 @@ pehapkari.cz, 1
 peifi.de, 0
 peippo.at, 1
 peirong.me, 1
 peka.pw, 1
 pekkapleppanen.fi, 1
 pekoe.se, 1
 pelanucto.cz, 1
 pelican.ie, 1
-peliweb.com, 0
 pelletizermill.com, 1
 pelletsprice.com, 1
 pelopogrund.com, 1
 pelopoplot.com, 1
 pelotonimports.com, 1
 pemagrid.org, 1
 pems.gov.au, 1
 penaugustin.com, 1
@@ -31788,17 +31765,16 @@ pennington.io, 1
 pennyparkerpaper.com, 1
 penrithapartments.com.au, 1
 pens.com, 1
 pensacolawinterfest.org, 1
 pensador.com, 1
 pensador.info, 1
 pensioenfonds-ey.nl, 1
 pension-am-alten-waschhaus.de, 1
-pension-waldesruh.de, 1
 pensionpilot.ca, 1
 pensiunealido.ro, 1
 penslabyrinth.com, 1
 pentandra.com, 1
 pentest.blog, 1
 pentest.nl, 1
 pentesterlab.com, 1
 penticton.photography, 1
@@ -32433,17 +32409,16 @@ plaque-funeraire.fr, 1
 plassmann.ws, 1
 plasticsurgeryartist.com, 1
 plasticsurgerynola.com, 1
 plasticsurgeryservices.com, 1
 plastiflex.it, 1
 plastovelehatko.cz, 1
 platformadmin.com, 1
 platinumexpress.com.ar, 1
-platinumpeek.com, 1
 platomania.nl, 1
 platschi.net, 1
 platten-nach-mass.de, 1
 platterlauncher.com, 1
 plattner.club, 1
 play, 1
 play-casino-japan.com, 1
 play-charades.com, 1
@@ -32496,17 +32471,16 @@ plinc.co, 1
 pliosoft.com, 1
 plissee-experte.de, 1
 plitu.de, 1
 plixer.com, 1
 plny.eu, 1
 plob.org, 1
 plochka.bg, 1
 plokko.com, 1
-plomberierenga.com, 1
 plongee-phuket.fr, 1
 ploofer.com, 1
 plot.ly, 1
 plotbubble.com, 1
 ploxel.com, 1
 plr4wp.com, 1
 plsboop.me, 1
 pluga.co, 1
@@ -32574,16 +32548,17 @@ pmklaassen.com, 1
 pmnaish.co.uk, 1
 pmoreau.org, 1
 pmp-art.com, 1
 pmponline.de, 1
 pmsacorp.com, 1
 pmsf.eu, 1
 pmsfdev.com, 1
 pmt-documenten.nl, 1
+pn.id.lv, 1
 pnakosoft.com, 1
 pnakosoft.com.au, 1
 pneu01.fr, 1
 pneu74.fr, 1
 pneuhaus-lemp.ch, 1
 pneumonline.be, 1
 pnimmobilier.ch, 1
 pnmhomecheckup.com, 1
@@ -33587,17 +33562,16 @@ punitsheth.com, 1
 punkapoule.fr, 1
 punkdns.top, 1
 punknews.org, 1
 puntacanalink.com, 1
 punte-juwelier.nl, 1
 pupboss.com, 1
 puppet.pl, 1
 puq.moe, 1
-purahealthyliving.com, 1
 puralps.ch, 1
 puravida-estate.com, 1
 pure-gmbh.com, 1
 purecabo.com, 1
 purefkh.xyz, 1
 pureitsolutionsllp.com, 1
 purelunch.co.uk, 1
 purevapeofficial.com, 1
@@ -33628,17 +33602,17 @@ pusatinkubatorbayi.com, 1
 pushers.com.mx, 1
 pushphp.com, 1
 pushrax.com, 1
 pusichatka.ddns.net, 1
 put.moe, 1
 put.re, 1
 putatara.net, 1
 putman-it.nl, 1
-putney.io, 0
+putney.io, 1
 putomani.rs, 1
 putrock.be, 1
 puurwonengeldrop.nl, 0
 puxlit.net, 1
 puyallupnissanparts.com, 1
 puyblanc.info, 1
 puzz.gg, 1
 puzz.me, 1
@@ -33726,17 +33700,17 @@ qctravelschool.com, 1
 qdabogados.com, 1
 qdon.space, 0
 qedcon.org, 0
 qelectrotech.org, 1
 qetesh.de, 1
 qetic.co.jp, 1
 qewc.com, 1
 qforum.org, 1
-qgblog.org, 0
+qgblog.org, 1
 qgustavor.tk, 1
 qhse-professionals.nl, 1
 qianalysis.com, 1
 qianqiao.me, 1
 qiaohong.org, 1
 qicomidadeverdade.com.br, 1
 qifu.me, 1
 qifu.org.cn, 1
@@ -33847,17 +33821,16 @@ queextensiones.com, 1
 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
 quentinchevre.ch, 1
 queo.com.co, 1
 quera.ir, 1
 querkommentar.de, 1
 query-massage.com, 1
 question.com, 1
 questionable.host, 1
 questsocial.it, 1
@@ -33905,31 +33878,29 @@ qweepi.de, 0
 qwertee.com, 1
 qwerty.work, 1
 qwertyatom100.me, 1
 qwikdash.com, 1
 qwq.moe, 1
 qx.fi, 1
 qx.se, 1
 qxy.ch, 1
-qybot.cc, 1
 r-ay.cn, 1
 r-core.org, 1
 r-cut.fr, 1
 r-rwebdesign.com, 1
 r-t-b.fr, 1
 r0t.co, 1
 r0uzic.net, 1
 r1a.eu, 1
 r1ch.net, 1
 r2d2pc.com, 1
 r33.space, 1
 r3bl.blog, 1
 r3bl.me, 1
-r3nt3r.com, 1
 r3s1stanc3.me, 1
 r40.us, 1
 r6-team.ru, 1
 r7.com.au, 1
 r7h.at, 1
 r811.de, 1
 ra-joergensen.de, 1
 ra-micro-koeln.de, 1
@@ -33937,17 +33908,16 @@ ra-schaal.de, 0
 ra.co.ke, 1
 ra.vc, 1
 ra4wvpn.com, 1
 raah.co, 1
 rabbit.wales, 0
 rabbitfinance.com, 1
 rabica.de, 1
 rabota-x.ru, 0
-rabotaescort.com, 1
 rabynska.eu, 1
 racasdecachorro.org, 1
 raccoltarifiuti.com, 1
 racdek.com, 1
 racdek.nl, 1
 racermaster.xyz, 1
 racesport.nl, 0
 raceviewcycles.com, 1
@@ -34028,17 +33998,17 @@ raidensnakesden.com, 1
 raidensnakesden.net, 1
 raidstone.net, 1
 raiffeisen-kosovo.com, 1
 rail-o-rama.nl, 1
 rail24.nl, 1
 rail360.nl, 1
 railbird.nl, 1
 railgun.ac, 1
-railgun.com.cn, 1
+railgun.com.cn, 0
 railjob.cn, 1
 railorama.nl, 1
 railpassie.nl, 1
 railtoo.com, 1
 railvideo.co.uk, 1
 railvideo.net, 1
 railvideo.nl, 1
 railwaytech.net, 1
@@ -34439,17 +34409,16 @@ redwaterhost.com, 1
 redweek.com, 1
 redwoodpaddle.es, 1
 redwoodpaddle.pt, 1
 redzurl.com, 0
 reed-sensor.com, 1
 reedloden.com, 1
 reedyforkfarm.com, 1
 reegle.com, 1
-reepay.com, 1
 rees-carter.net, 1
 reesmichael1.com, 1
 reeson.at, 1
 reeson.de, 1
 reeson.info, 1
 reeson.org, 1
 reevaappliances.co.uk, 1
 reezer.org, 1
@@ -34480,16 +34449,17 @@ regain.us, 1
 regalcapitalwi.com, 1
 regalosymuestrasgratis.com, 1
 regalpaintingfdl.com, 1
 reganclassics.co.uk, 1
 reganclassics.com, 1
 reganparty.com, 1
 regar42.fr, 0
 regendevices.eu, 1
+regeneo.cz, 1
 regenerapoint.it, 1
 regenerescence.com, 1
 regily.com, 1
 regime-anticellulite.com, 1
 regime-maigrir-vite.com, 1
 regimebonheur.com, 1
 regimecellulite.com, 1
 reginagroffy.com, 1
@@ -34582,17 +34552,17 @@ relaybox.io, 1
 release-monitoring.org, 1
 releasetimes.io, 1
 reliancebank.bank, 1
 reliant3sixty.com, 1
 relocatefeds.gov, 1
 relojeriajoyeria.com, 1
 relojes-online.com, 1
 relojesseiko.es, 1
-relsak.cz, 1
+relsak.cz, 0
 relvan.com, 1
 rem0te.net, 1
 remaimodern.org, 1
 remain.london, 1
 remambo.jp, 1
 remax.at, 1
 remedi.tokyo, 1
 remedionaturales.com, 1
@@ -34944,16 +34914,17 @@ rimeto.io, 1
 rimo.site, 1
 rimorrecherche.nl, 1
 rincon-nsn.gov, 1
 ring.com, 1
 ringingliberty.com, 1
 ringjewellery.co.uk, 1
 rinvex.com, 1
 rio-weimar.de, 1
+rioshop.com.br, 1
 rioxmarketing.com, 1
 rip-sport.cz, 1
 ripaton.fr, 1
 ripmixmake.org, 1
 riqy86.nl, 1
 ris.fi, 1
 risada.nl, 1
 risaphuketproperty.com, 1
@@ -34968,17 +34939,17 @@ riskmitigation.ch, 1
 risparmiare.info, 1
 rissato.com.br, 1
 ristioja.ee, 1
 ristoarea.it, 1
 ristorantefattoamano.eu, 1
 ristorantefattoamano.it, 1
 ristoviitanen.fi, 1
 ristrutturazioneappartamento.roma.it, 1
-rit.space, 1
+rit.space, 0
 rittau.biz, 1
 rittau.org, 1
 ritzlux.com.tw, 1
 rivaforum.de, 1
 rivalsa.cn, 1
 rivastation.de, 1
 riverbanktearooms.co.uk, 1
 riverbendroofingnd.com, 1
@@ -35033,17 +35004,16 @@ rnb-storenbau.ch, 1
 rnbjunk.com, 1
 rngmeme.com, 1
 rnt.cl, 1
 ro.search.yahoo.com, 0
 roadguard.nl, 0
 roadtopgm.com, 1
 roams.es, 1
 roave.com, 1
-rob.uk.com, 1
 rob006.net, 1
 robandjanine.com, 1
 robbertt.com, 0
 robbiecrash.me, 1
 robdavidson.network, 1
 robert-flynn.de, 1
 robertabittle.com, 1
 robertattfield.com, 1
@@ -35129,31 +35099,29 @@ rodarion.pl, 1
 roddis.net, 1
 rodehutskors.net, 1
 rodeobull.biz, 1
 rodeohire.com, 1
 rodeosales.co.uk, 1
 rodevlaggen.nl, 1
 rodichi.net, 1
 rodinnebyvanie.eu, 1
-rodinneodpoledne2018.cz, 1
 rodolfo.gs, 1
 rodomonte.org, 1
 rodrigocarvalho.blog.br, 1
 rody-design.com, 1
 roeckx.be, 1
 roeitijd.nl, 0
 roeleveld.nl, 1
 roelhollander.eu, 1
 roelof.io, 1
 roelsworld.eu, 1
 roemhild.de, 1
 roerstaafjes.nl, 1
 roessner-network-solutions.com, 0
-roffe.nu, 1
 rofl.com.ua, 1
 roflcopter.fr, 1
 rofrank.space, 1
 rogagym.com, 1
 rogeiro.net, 1
 roger101.com, 1
 rogerdat.ovh, 1
 rogerhub.com, 1
@@ -35583,17 +35551,16 @@ ruska-modra.cz, 1
 ruskamodra.cz, 1
 ruskod.net, 1
 rusl.net, 1
 rusmolotok.ru, 1
 russellupevents.co.uk, 1
 russia.dating, 1
 russiaeconomy.org, 1
 russianorthodoxchurch.co.uk, 1
-russpuss.ru, 1
 russt.me, 1
 rust.mn, 1
 rustable.com, 1
 rustikalwallis.ch, 1
 rustralasia.net, 1
 rustyrambles.com, 1
 rusxakep.com, 1
 rutgerschimmel.nl, 1
@@ -35714,16 +35681,17 @@ sacrome.com, 1
 sadbox.es, 1
 sadbox.org, 1
 sadbox.xyz, 1
 sadev.co.za, 1
 sadhawkict.org, 1
 sadiejanehair.com, 1
 sadmansh.com, 1
 sadou.kyoto.jp, 1
+sadsu.com, 1
 saenforcement.agency, 1
 saengsook.com, 1
 saengsuk.com, 1
 safar.sk, 1
 safaritenten.nl, 1
 safcstore.com, 1
 safe.moe, 1
 safe.space, 1
@@ -35788,17 +35756,16 @@ sainetworks.net, 1
 saint-bernard-gouesch.fr, 1
 saint-cyril.com, 1
 saintaardvarkthecarpeted.com, 1
 saintanthonyscorner.com, 1
 sainth.de, 1
 sainthelenas.org, 1
 saintjamestheapostle.org, 1
 saintjohn-bocaraton.com, 1
-saintmichelqud.com, 1
 saintpatrick-norristown.net, 1
 saintw.com, 1
 saipariwar.com, 1
 saiputra.com, 1
 saitrance.com, 1
 saitv.org, 1
 sajamstudija.info, 1
 sajdowski.de, 1
@@ -36776,17 +36743,16 @@ seobutler.com, 1
 seocomposer.com, 1
 seoenmexico.com.mx, 1
 seogeek.nl, 1
 seohackers.fr, 1
 seohochschule.de, 1
 seohouston.com, 1
 seoinc.com, 1
 seoium.com, 1
-seokay.com, 1
 seolib.org, 1
 seomarketing.bg, 1
 seomen.biz, 1
 seon.me, 1
 seoprovider.nl, 1
 seoquake.com, 1
 seoscribe.net, 1
 seosof.com, 1
@@ -36817,17 +36783,16 @@ serenaden.at, 1
 serendeputy.com, 1
 serf.io, 1
 sergeemond.ca, 1
 sergefonville.nl, 1
 sergeyreznikov.com, 1
 sergije-stanic.me, 1
 sergiosantoro.it, 1
 sergiozygmunt.com, 1
-sergivb01.me, 1
 sergos.de, 1
 serialexperiments.co.uk, 1
 serienstream.to, 1
 serigraphs.co.uk, 1
 serinamusic.com, 1
 seriousclimbing.com, 1
 seriouss.am, 1
 sernate.com, 1
@@ -36975,17 +36940,16 @@ sgtsnookums.net, 1
 sgtt.ch, 1
 sgutranscripts.org, 1
 sh-heppelmann.de, 1
 sh-network.de, 1
 sh0rt.in, 1
 sh0rt.zone, 1
 sh0shin.org, 1
 sh4y.com, 1
-shaaaaaaaaaaaaa.com, 1
 shad.waw.pl, 1
 shadesofgrayadr.com, 1
 shadesofgraylaw.com, 1
 shadex.net, 1
 shadigee.org, 1
 shadiku.com, 1
 shadowict.net, 1
 shadowict.tech, 1
@@ -37182,17 +37146,16 @@ shk.im, 1
 shlemenkov.by, 1
 shlmail.info, 1
 shmibbles.me, 1
 shmunky.co.uk, 1
 shobhanayogsadan.com, 1
 shock.ee, 1
 shockercityservices.com, 1
 shodan.io, 1
-shoemuse.com, 1
 shoeracks.uk, 1
 shoestringeventing.co.uk, 1
 shokola.com, 1
 shome.de, 1
 shooter.dog, 1
 shootpooloklahoma.com, 1
 shop-hellsheadbangers.com, 1
 shop-s.net, 1
@@ -37518,18 +37481,16 @@ simon-mueller.de, 1
 simon3k.moe, 1
 simonastallone.com, 1
 simonberard.garden, 1
 simonbondo.dk, 1
 simoncommunity.org.uk, 1
 simoncook.org, 1
 simonfischer.info, 1
 simonhirscher.de, 1
-simonkjellberg.com, 1
-simonkjellberg.se, 1
 simonlyabonnement.nl, 1
 simonmaddox.com, 1
 simonpaarlberg.com, 1
 simonreich.de, 1
 simonschmitt.ch, 1
 simonshine.dk, 1
 simonspeich.ch, 1
 simonsreich.de, 1
@@ -37754,16 +37715,17 @@ skommettiamo.it, 1
 skontakt.cz, 1
 skontorp-enterprise.no, 1
 skortekaas.nl, 0
 skory.us, 1
 skou.dk, 0
 skram.de, 1
 skrimix.tk, 0
 skryptersi.pl, 1
+sksdrivingschool.com.au, 1
 sktan.com, 1
 sktsolution.com, 0
 skuldwyrm.no, 1
 skutry-levne.cz, 1
 skutry.cz, 1
 skwile-cafe.com, 1
 skwitko.com, 1
 sky-aroma.com, 1
@@ -38234,16 +38196,17 @@ solidtuesday.com, 1
 solihullcarnival.co.uk, 1
 solihullinflatables.com, 1
 solihulllionsclub.org.uk, 1
 solipym.net, 1
 solisrey.es, 1
 solit.systems, 1
 solitairenetwork.com, 1
 solmek.co.uk, 1
+solmek.com, 1
 solomisael.com, 1
 solomo.pt, 1
 solonotizie24.it, 1
 solos.im, 1
 solsocog.de, 1
 soluphant.de, 1
 solus-project.com, 1
 solutionhoisthire.com.au, 1
@@ -38444,16 +38407,17 @@ spanda.io, 1
 spanien.guide, 1
 spanjeflydrive.nl, 1
 spanyolul.hu, 1
 spar-ni.co.uk, 1
 sparanoid.com, 1
 sparendirekt.at, 1
 sparkasse.de, 1
 sparkbase.cn, 1
+sparkforautism.org, 1
 sparklatvia.lv, 1
 sparklebastard.com, 1
 sparkresearch.net, 1
 sparkreviewcenter.com, 1
 sparkwood.org, 1
 sparkz.no, 1
 sparprofi.at, 1
 sparta-en.org, 1
@@ -39041,17 +39005,16 @@ stevenski.com, 0
 steventress.com, 1
 steventruesdell.com, 1
 stevenwooding.com, 1
 stevenz.net, 1
 stevenz.science, 1
 stevenz.xyz, 1
 stevesdrivingschooltyneside.com, 1
 stewartswines.com, 1
-stewonet.nl, 1
 stewpolley.com, 1
 steyaert.be, 0
 stforex.com, 0
 stfrancisnaugatuck.org, 1
 stfw.info, 1
 stgabrielstowepa.org, 1
 stgeorgegolfing.com, 1
 stgm.org, 1
@@ -39148,16 +39111,17 @@ stoneagehealth.com.au, 1
 stonedworms.de, 1
 stonefusion.org.uk, 1
 stonehammerhead.org, 1
 stonemain.eu, 1
 stonemanbrasil.com.br, 1
 stony.com, 1
 stonystratford.org, 1
 stopakwardhandshakes.org, 1
+stopbreakupnow.org, 1
 stopbullying.gov, 1
 stopfraud.gov, 0
 stopthethyroidmadness.com, 1
 storageideas.uk, 1
 stordbatlag.no, 1
 store10.de, 0
 storedsafe.com, 1
 storeit.co.uk, 1
@@ -39237,16 +39201,17 @@ strictlyguitar.de, 1
 strictlynormal.com, 1
 strijkshop.be, 1
 stringtoolbox.com, 1
 stringvox.com, 1
 stripe.com, 1
 striped.horse, 1
 strivephysmed.com, 0
 strm.hu, 1
+strming.com, 1
 strobeltobias.de, 1
 strobotti.com, 1
 stroeerdigital.de, 1
 stroginohelp.ru, 1
 strom.family, 1
 stromaci.sk, 1
 stromberger.org, 1
 stromzivota.sk, 1
@@ -39279,16 +39244,17 @@ stucydee.nl, 1
 studenckiemetody.pl, 1
 student-eshop.cz, 1
 student-eshop.sk, 1
 student.andover.edu, 1
 studentfinancecountdown.com, 1
 studentforums.biz, 1
 studentite.bg, 0
 studentloans.gov, 1
+studentpop.com, 1
 studentrightsadvocate.org, 1
 studentse.fr, 1
 studenttenant.com, 1
 studer.su, 1
 studiebegeleiding-haegeman.be, 1
 studiemeter.nl, 1
 studienportal.eu, 1
 studienservice.de, 1
@@ -39699,17 +39665,16 @@ swiss-vanilla.com, 1
 swisscannabis.club, 1
 swissdojo.ch, 1
 swisselement365.com, 1
 swissentreprises.ch, 1
 swissfreshaircan.ch, 1
 swissfreshaircan.com, 1
 swissid.ch, 1
 swisslinux.org, 1
-swisstechassociation.ch, 1
 swisstechtalks.ch, 1
 swissvanilla.ch, 1
 swissvanilla.com, 1
 swisswebhelp.ch, 1
 swissxperts.ch, 1
 switch-trader.com, 1
 switch.moe, 1
 switcheo.exchange, 1
@@ -40087,17 +40052,17 @@ tatara.ne.jp, 1
 tateesq.com, 1
 tatildukkani.com, 1
 tatiloley.com, 1
 tatort-fanpage.de, 1
 tatsidou.gr, 1
 tattoo.dating, 1
 tattvaayoga.com, 1
 tatuantes.com, 1
-taunhanh.us, 0
+taunhanh.us, 1
 tavolaquadrada.com.br, 1
 tavsys.net, 1
 tax-guard.com, 1
 taxaroo.com, 1
 taxi-24std.de, 0
 taxi-chamonix.fr, 1
 taxi-collectif.ch, 1
 taxi-jihlava.cz, 1
@@ -40175,16 +40140,17 @@ teachmeplease.com, 1
 teachmeplease.ru, 1
 teachpeople.org, 1
 teachwithouttears.com, 1
 teahut.net, 1
 team-azerty.com, 1
 team-bbd.com, 1
 team-pancake.eu, 1
 team.house, 1
+team3482.com, 1
 teambeam.at, 1
 teambeam.ch, 1
 teambeam.com, 1
 teambeam.de, 1
 teambition.com, 1
 teambodyproject.com, 1
 teamcombat.com, 1
 teamdaylo.xyz, 1
@@ -40424,17 +40390,17 @@ tenpo-iku.com, 1
 tenpolab.com, 1
 tenseapp.pl, 1
 tenshoku-hanashi.com, 1
 tent.io, 1
 tenta.com, 1
 tentabrowser.com, 1
 tentations-voyages.com, 0
 tenthousandcoffees.com, 1
-tenthpin.com, 1
+tenthpin.com, 0
 tenyx.de, 1
 tenzer.dk, 1
 teoskanta.fi, 1
 tepid.org, 1
 tepitus.de, 1
 teplofom.ru, 1
 teplomash24.ru, 1
 tequilazor.com, 1
@@ -40674,23 +40640,21 @@ thecompany.pl, 1
 theconcordbridge.azurewebsites.net, 1
 thecondobuyers.com, 1
 thecookiejar.me, 1
 thecrazytravel.com, 1
 thecrew-exchange.com, 1
 thecrochetcottage.net, 1
 thecuppacakery.co.uk, 1
 thecuriouscat.net, 1
-thecuriousdev.com, 1
 thecurvyfashionista.com, 1
 thecustomdroid.com, 1
 thedailyupvote.com, 1
 thedark1337.com, 1
 thedarkartsandcrafts.com, 1
-thedebug.life, 1
 thederminstitute.com, 1
 thedevrycommonsbrasil.com, 0
 thediaryofadam.com, 1
 thedisc.nl, 1
 thediscovine.com, 1
 thedocumentrefinery.com, 1
 thedom.site, 1
 thedreamtravelgroup.co.uk, 1
@@ -40850,17 +40814,16 @@ thepb.in, 1
 thepeninsulaires.com, 1
 thepharm.co.nz, 1
 thephonecaseplace.com, 1
 thephp.cc, 1
 thepiabo.ovh, 1
 thepieslicer.com, 1
 thepiratesociety.org, 1
 theplaidpoodle.com, 1
-theplasticsurgerycenterofnashville.com, 1
 theplaydaysbus.co.uk, 1
 theplayspot.co.uk, 1
 theploughharborne.co.uk, 1
 thepoplarswines.com.au, 1
 theposhfudgecompany.co.uk, 1
 thepostoffice.ro, 1
 theprincegame.com, 1
 thepriorybandbsyresham.co.uk, 1
@@ -41108,16 +41071,17 @@ threedpro.me, 1
 threefours.net, 1
 threelions.ch, 1
 threema.ch, 1
 threexxx.ch, 1
 threit.de, 1
 threv.net, 1
 thriftdiving.com, 1
 thrillernyc.com, 1
+thrivesummit.com, 1
 thriveta.com, 1
 thriveweb.com.au, 1
 throttlerz.in, 1
 throughtheglass.photo, 1
 throwaway.link, 1
 throwpass.com, 1
 thues.eu, 1
 thuisverpleging-meerdael.be, 1
@@ -41270,16 +41234,17 @@ timweb.ca, 1
 timysewyn.be, 1
 tina.media, 1
 tinastahlschmidt.de, 1
 tindallriley.co.uk, 1
 tinf15b4.de, 1
 tinfoilsecurity.com, 0
 tinfoleak.com, 1
 tink.network, 1
+tinker.career, 1
 tinkerboard.org, 1
 tinkertry.com, 1
 tinlc.org, 1
 tinte24.de, 1
 tintencenter.com, 1
 tintenfix.net, 1
 tintenfux.de, 1
 tintenland.de, 1
@@ -41493,16 +41458,17 @@ tokinoha.net, 1
 tokintu.com, 1
 tokio.fi, 1
 tokka.com, 1
 tokke.dk, 1
 tokkee.org, 1
 tokky.eu, 1
 tokobungadilampung.com, 1
 tokoindo.top, 1
+tokototech.com, 1
 tokugai.com, 1
 tokumei.co, 1
 tokyo-onkyo.jp, 1
 tokyo-powerstation.com, 1
 tokyo.dating, 1
 tokyobarbershop.com, 1
 tokyomakino.com, 1
 tokyovipper.com, 1
@@ -41529,17 +41495,16 @@ tomaspatera.cz, 1
 tomaspialek.cz, 1
 tomasvecera.cz, 1
 tomasz.com, 1
 tomatenaufdenaugen.de, 1
 tomatis-nantes.com, 1
 tomaw.net, 1
 tomaz.eu, 1
 tombaker.me, 1
-tomberek.info, 1
 tombrossman.com, 1
 tomcort.com, 1
 tomd.ai, 1
 tomend.es, 1
 tomershemesh.me, 1
 tomfisher.eu, 1
 tomharling.co.uk, 1
 tomharling.uk, 1
@@ -41628,16 +41593,17 @@ toomy.ddns.net, 1
 toonpool.com, 1
 toonsburgh.com, 1
 toontown.team, 1
 toontownrewritten.com, 1
 toool.nl, 1
 toool.org, 1
 tooolroc.org, 0
 toot.center, 1
+toothdoc.ca, 1
 tooti.biz, 1
 top-esb.com, 1
 top-obaly.cz, 1
 top-opakowania.pl, 1
 top-solar-info.de, 1
 top10mountainbikes.info, 1
 top5hosting.co.uk, 1
 top9.fr, 1
@@ -41886,16 +41852,17 @@ trafficpixel.tk, 1
 traffixdevices.com, 1
 traficmusik.net, 1
 tragmi.ch, 1
 trailcloud.ink, 1
 trailerparty.com, 1
 trailforks.com, 1
 trainex.org, 1
 trainhornforums.com, 1
+trainhorns.us, 1
 trainiac.com.au, 1
 trainingproviderresults.gov, 1
 trainings-handschuhe-test.de, 1
 trainline.at, 1
 trainline.cn, 1
 trainline.com.br, 1
 trainline.com.pt, 1
 trainline.cz, 1
@@ -42152,16 +42119,17 @@ trpg.wiki, 1
 trs.tn, 1
 trtltravel.com, 1
 trtruijens.com, 1
 tru.ltd, 1
 trucchibellezza.com, 1
 trucchibellezza.it, 1
 truckersmp.com, 1
 truckerswereld.nl, 0
+truckgpsreviews.com, 1
 truckstop-magazin.de, 0
 true-itk.de, 1
 trueassignmenthelp.co.uk, 1
 trueblueessentials.com, 1
 trueinstincts.ca, 1
 truekey.com, 1
 truentumvet.it, 1
 trueproxy.net, 1
@@ -42994,17 +42962,16 @@ usbr.gov, 1
 uscloud.nl, 1
 uscp8.com, 1
 usd.de, 1
 usdoj.gov, 1
 usds.gov, 1
 use.be, 1
 use.ci, 1
 usebean.com, 1
-usedoor.jp, 1
 usedu.us, 1
 user-re.com, 1
 userra.gov, 1
 usetypo3.com, 1
 useyourloaf.com, 1
 usgande.com, 1
 ushandbookapp.com, 1
 ushare.ch, 1
@@ -43060,17 +43027,16 @@ utugnn.ru, 1
 utw.me, 1
 utwente.io, 1
 utzon.net, 1
 uuid.cf, 1
 uuit.nl, 1
 uv.uy, 1
 uvenuse.cz, 1
 uvocorp.com, 1
-uvolejniku.cz, 1
 uwac.co.uk, 0
 uwekoetter.com, 1
 uwelilienthal.de, 1
 uwesander.de, 1
 uwfreelanceopticien.nl, 1
 uwsoftware.be, 1
 uwvloereruit.nl, 1
 uxp-it.nl, 1
@@ -43122,16 +43088,17 @@ vakantienet.nl, 1
 vakuutuskanava.fi, 1
 val-sec.com, 1
 valasi.eu, 1
 valbonne-consulting.com, 1
 valcano-krd.ru, 1
 valcano.ru, 1
 valcardiesel.com, 1
 valecnatechnika.cz, 1
+valek.net, 1
 valenciadevops.me, 1
 valenhub.com, 1
 valenhub.es, 1
 valentin-dederer.de, 1
 valentin-ochs.de, 1
 valentin-sundermann.de, 1
 valentin.ml, 1
 valentinberclaz.com, 1
@@ -43146,16 +43113,17 @@ valesdigital.com, 1
 valiant.finance, 1
 validatis.com, 1
 validator.nu, 1
 validbrands.com, 1
 valika.ee, 1
 valis.sx, 1
 valkohattu.fi, 1
 valkor.pro, 1
+valkova.net, 1
 vallei-veluwe.nl, 1
 valleyautofair.com, 1
 valleyautoloan.com, 1
 valleycode.net, 1
 valleydalecottage.com.au, 1
 valleyshop.ca, 1
 vallutaja.eu, 1
 valokuva-albumi.fi, 1
@@ -43178,17 +43146,16 @@ valueseed.net, 1
 vamosfalardesaude.pt, 1
 vampyrium.com, 0
 vampyrium.net, 0
 van11y.net, 1
 vanagamsanthai.com, 1
 vanagamseeds.com, 1
 vanbinnenuit.nl, 1
 vancityconcerts.com, 1
-vancouvercosmeticsurgery.ca, 1
 vancouverwatowncar.com, 1
 vandalfsen.me, 1
 vandam.io, 1
 vandenbroeck-usedcars.be, 1
 vandeput.be, 1
 vanderbiltcisa.org, 1
 vanderkrieken.org, 1
 vanderkroon.nl, 1
@@ -43544,17 +43511,16 @@ vidbooster.com, 1
 vidcloud.xyz, 1
 vide-dressing.org, 0
 vide-greniers.org, 0
 vide-maisons.org, 0
 videogamesartwork.com, 1
 videokaufmann.at, 1
 videoload.co, 1
 videomail.io, 1
-videorullen.se, 1
 videosdiversosdatv.com, 1
 videoseyredin.net, 1
 videospornogratis.pt, 1
 videosqr.com, 1
 videosxgays.com, 1
 videov.tk, 1
 vidister.de, 1
 viditut.com, 1
@@ -43630,17 +43596,16 @@ villehardouin.fr, 1
 villek.fi, 1
 villekaaria.eu, 1
 villenavedornon.fr, 1
 villenvinkit.com, 1
 villerez.fr, 1
 villesalonen.fi, 1
 villu.ga, 1
 vilog.me, 1
-viltsu.net, 1
 vima.ch, 1
 vimeo.com, 1
 vimeosucks.nyc, 1
 vinagro.sk, 1
 vinahost.vn, 1
 vinarstvimodryhrozen.cz, 1
 vincentcox.com, 0
 vincentpancol.com, 1
@@ -43664,17 +43629,17 @@ vinsetchampagne.fr, 1
 vintagebandfestival.org, 1
 vintagecaskandbarrel.com, 1
 vintagejeeps.net, 1
 vintagemakeupguide.com, 1
 vintageportgifts.co.uk, 1
 vintagesouthernpicks.com, 1
 vintagetrailerbuyers.com, 1
 vintazh.net, 1
-vinticom.ch, 0
+vinticom.ch, 1
 vintock.com, 1
 vinyculture.com, 1
 vinzite.com, 1
 violet-letter.delivery, 1
 violetraven.co.uk, 1
 violin4fun.nl, 1
 vionicbeach.com, 1
 vionicshoes.com, 1
@@ -43817,16 +43782,17 @@ vk4wip.org.au, 1
 vkb-remont.ru, 1
 vkennke.org, 1
 vkino.com, 0
 vkirichenko.name, 1
 vkox.com, 1
 vksportphoto.com, 1
 vkulagin.ru, 1
 vladislavstoyanov.com, 1
+vlakem.net, 1
 vlastimilburian.cz, 1
 vldkn.net, 1
 vleesbesteld.nl, 1
 vleij.com, 1
 vleij.family, 1
 vleij.se, 1
 vliegensvlug.online, 1
 vliegensvlug.services, 1
@@ -44184,17 +44150,16 @@ wanda98.com, 1
 wandelreizen.eu, 1
 wander.al, 1
 wandervoll.ch, 1
 wanderzoom.co, 1
 wandystan.eu, 1
 wane.co, 1
 wangbangyu.cf, 1
 wangbangyu.ga, 1
-wangbangyu.gq, 1
 wangbangyu.ml, 1
 wangbangyu.tk, 1
 wangjiatun.com.tw, 1
 wangjun.me, 1
 wangqiliang.cn, 1
 wangqiliang.com, 1
 wangqiliang.org, 1
 wangql.cn, 1
@@ -44206,17 +44171,16 @@ wangyubao.cn, 1
 wangyue.blog, 1
 wangzuan168.cc, 1
 wanlieyan.com, 1
 wannaridecostarica.com, 1
 wanvi.net, 1
 wanybug.cf, 1
 wanybug.cn, 1
 wanybug.com, 1
-wanybug.ga, 1
 wanybug.gq, 1
 wanybug.tk, 1
 wanzenbug.xyz, 1
 waonui.io, 1
 wapgu.cc, 1
 wapking.co, 1
 warcraftjournal.org, 1
 wardow.com, 1
@@ -45031,30 +44995,28 @@ winbuzzer.com, 1
 wincasinowin.click, 1
 winch-center.de, 1
 winddan.nz, 1
 windelnkaufen24.de, 1
 windhaven.nl, 0
 windholz.us, 1
 windowcleaningexperts.net, 1
 windowslatest.com, 1
-windowsnerd.com, 1
 windowsnoticias.com, 1
 windowwellcovers.com, 1
 windrunner.se, 1
 windscribe.com, 1
 windsock-app.com, 1
 windsorite.ca, 1
 windsorspi.com, 1
 windwoodmedia.com, 1
 windwoodweb.com, 1
 windycitydubfest.com, 1
 wine-tapa.com, 1
 winebid.com, 1
-wineonthewall.com, 1
 wineparis.com, 1
 winepress.org, 1
 wineworksonline.com, 1
 winghill.com, 1
 wingify.com, 1
 wingmin.net, 1
 winhistory-forum.net, 1
 winkelcentrumputten.nl, 1
@@ -45354,16 +45316,17 @@ wp-webagentur.de, 1
 wp6.pw, 1
 wpac.de, 1
 wpandup.org, 1
 wpcanban.com, 1
 wpccu.org, 1
 wpcdn.bid, 1
 wpcharged.nz, 1
 wpcheck.io, 1
+wpdesigner.ir, 1
 wpdirecto.com, 1
 wpdublin.com, 1
 wpenhance.com, 1
 wpexplorer.com, 1
 wpfast.net, 1
 wpformation.com, 1
 wpgoblin.com, 1
 wphelpwithhomework.tk, 1
@@ -45695,17 +45658,16 @@ xerblade.com, 1
 xerhost.de, 1
 xerkus.pro, 1
 xerownia.eu, 1
 xetown.com, 1
 xfce.space, 1
 xfd3.de, 1
 xferion.com, 1
 xfix.pw, 1
-xfrag-networks.com, 1
 xgame.com.tr, 1
 xgclan.com, 1
 xgn.es, 1
 xhadius.de, 1
 xhily.com, 1
 xhmikosr.io, 1
 xho.me, 1
 xia.de, 1
@@ -45975,17 +45937,16 @@ xn--zr9h.cf, 1
 xn--zr9h.ga, 1
 xn--zr9h.ml, 1
 xn--zr9h.tk, 1
 xn5.de, 1
 xnaas.info, 1
 xnet-x.net, 1
 xninja.xyz, 1
 xnode.org, 1
-xntrik.wtf, 1
 xnu.kr, 1
 xo.tc, 1
 xo7.ovh, 1
 xoda.pw, 1
 xolphin.nl, 1
 xombitgames.com, 1
 xombitmusic.com, 1
 xombra.com, 1
@@ -46117,17 +46078,17 @@ yalecleaners.com, 1
 yallamotor.com, 1
 yalook.com, 1
 yama.su, 1
 yamadaya.tv, 1
 yamaken.jp, 1
 yamashita-clinic.org, 1
 yame2.com, 1
 yamilafeinart.de, 1
-yamm.io, 0
+yamm.io, 1
 yanaduday.com, 1
 yanbao.xyz, 1
 yandere.moe, 1
 yangjingwen.cn, 1
 yangmaodang.org, 1
 yanngraf.ch, 1
 yanngraf.com, 1
 yannic.world, 1
@@ -46240,16 +46201,17 @@ yggdar.ga, 1
 ygobbs.com, 1
 yh599.cc, 1
 yhaupenthal.org, 1
 yhb.io, 1
 yhe.me, 1
 yhenke.de, 1
 yhfou.com, 1
 yhndnzj.com, 1
+yhong.me, 1
 yhori.xyz, 1
 yhrd.org, 1
 yhwj.top, 0
 yibaoweilong.top, 1
 yibin0831.com, 1
 yicknam.my, 1
 yiffy.tips, 0
 yiffy.zone, 0
@@ -46630,17 +46592,16 @@ zaptan.info, 0
 zaptan.net, 0
 zaptan.org, 0
 zaptan.us, 0
 zarabiaj.com, 1
 zaratan.fr, 1
 zargescases.co.uk, 1
 zarmarket.org, 1
 zarpo.com.br, 1
-zary.me, 1
 zatsepin.by, 1
 zaufanatrzeciastrona.pl, 1
 zavec.com.ec, 1
 zavetaji.lv, 1
 zawo-electric.de, 1
 zayna.eu, 1
 zbchen.com, 1
 zberger.com, 1
@@ -46687,17 +46648,16 @@ zeilles.nu, 1
 zeitoununiversity.org, 1
 zeitpunkt-kulturmagazin.de, 1
 zeitzer-turngala.de, 1
 zekesnider.com, 1
 zekinteractive.com, 1
 zelezny.uk, 0
 zelfoverstappen.nl, 1
 zelfrijdendeautos.com, 1
-zellari.ru, 1
 zeloz.xyz, 1
 zemlova.cz, 1
 zen-diez.de, 1
 zen-ume.com, 1
 zenchain.com, 1
 zenevents.ro, 1
 zenfusion.fr, 1
 zengdong.ren, 1
@@ -46741,17 +46701,16 @@ zerosync.com, 1
 zerotoone.de, 1
 zerowastesavvy.com, 1
 zerowastesonoma.gov, 1
 zertif.info, 1
 zertitude.com, 1
 zeryn.net, 1
 zespia.tw, 0
 zestylemon.co.uk, 1
-zetamode.com, 1
 zetorzeszow.pl, 0
 zettaplan.ru, 1
 zettlmeissl.de, 1
 zevelev.net, 1
 zewtie.com, 1
 zfast.com.br, 1
 zfg.li, 1
 zfly.me, 1
@@ -46782,17 +46741,17 @@ zhi.ci, 1
 zhikin.com, 1
 zhiku8.com, 1
 zhima.io, 1
 zhitanska.com, 1
 zhl123.com, 1
 zhome.info, 1
 zhongzicili.ws, 1
 zhoujiashu.com, 1
-zhoushuo.me, 1
+zhoushuo.me, 0
 zhoutiancai.cn, 1
 zhovner.com, 1
 zhthings.com, 1
 zhuihoude.com, 1
 zhuji.com, 1
 zhujicaihong.com, 1
 zi.is, 1
 ziegler-family.com, 1
@@ -46927,17 +46886,17 @@ zootime.net, 1
 zootime.org, 1
 zoowiki.us, 1
 zooxdata.com, 1
 zopy.com.br, 1
 zopyx.com, 1
 zor.com, 1
 zorasvobodova.cz, 1
 zorgclustertool.nl, 1
-zorig.ch, 1
+zorig.ch, 0
 zorium.org, 1
 zorntt.fr, 1
 zorz.info, 1
 zotero.org, 1
 zouk.info, 1
 zouyaoji.top, 1
 zozo.com, 1
 zozzle.co.uk, 1
@@ -46980,17 +46939,16 @@ zulu.ro, 1
 zum-baur.de, 1
 zumazar.ru, 1
 zund-app.com, 1
 zunda.cafe, 1
 zundapp529.nl, 1
 zundappachterhoek.nl, 1
 zuolan.me, 0
 zup.me, 1
-zupago.com, 1
 zupago.pe, 1
 zuppy.pm, 1
 zuralski.net, 1
 zurgl.com, 0
 zurret.de, 1
 zusjesvandenbos.nl, 1
 zuviel.space, 1
 zuzumba.es, 1
--- a/testing/mochitest/ssltunnel/ssltunnel.cpp
+++ b/testing/mochitest/ssltunnel/ssltunnel.cpp
@@ -970,18 +970,20 @@ void StartServer(void* data)
 
   // In case the socket is still open in the TIME_WAIT state from a previous
   // instance of ssltunnel we ask to reuse the port.
   PRSocketOptionData socket_option;
   socket_option.option = PR_SockOpt_Reuseaddr;
   socket_option.value.reuse_addr = true;
   PR_SetSocketOption(listen_socket.get(), &socket_option);
 
+  // Explicitly listen on loopback to avoid users getting errors from their
+  // firewalls about ssltunnel needing permission.
   PRNetAddr server_addr;
-  PR_InitializeNetAddr(PR_IpAddrAny, si->listen_port, &server_addr);
+  PR_InitializeNetAddr(PR_IpAddrLoopback, si->listen_port, &server_addr);
   if (PR_Bind(listen_socket.get(), &server_addr) != PR_SUCCESS) {
     LOG_ERROR(("failed to bind socket on port %d: error %d\n", si->listen_port, PR_GetError()));
     SignalShutdown();
     return;
   }
 
   if (PR_Listen(listen_socket.get(), 1) != PR_SUCCESS) {
     LOG_ERROR(("failed to listen on socket\n"));
--- a/toolkit/components/extensions/ExtensionContent.jsm
+++ b/toolkit/components/extensions/ExtensionContent.jsm
@@ -61,16 +61,20 @@ const {
 const {
   BrowserExtensionContent,
   ChildAPIManager,
   Messenger,
 } = ExtensionChild;
 
 XPCOMUtils.defineLazyGetter(this, "console", ExtensionCommon.getConsole);
 
+XPCOMUtils.defineLazyGetter(this, "isContentScriptProcess", () => {
+  return Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT ||
+      !Services.appinfo.browserTabsRemoteAutostart;
+});
 
 var DocumentManager;
 
 const CATEGORY_EXTENSION_SCRIPTS_CONTENT = "webextension-scripts-content";
 
 var apiManager = new class extends SchemaAPIManager {
   constructor() {
     super("content", Schemas);
@@ -373,16 +377,20 @@ class Script {
     }
   }
 
   matchesWindow(window) {
     return this.matcher.matchesWindow(window);
   }
 
   async injectInto(window) {
+    if (!isContentScriptProcess) {
+      return;
+    }
+
     let context = this.extension.getContext(window);
     try {
       if (this.runAt === "document_end") {
         await promiseDocumentReady(window.document);
       } else if (this.runAt === "document_idle") {
         await Promise.race([
           promiseDocumentIdle(window),
           promiseDocumentLoaded(window.document),
--- a/toolkit/components/extensions/test/xpcshell/xpcshell.ini
+++ b/toolkit/components/extensions/test/xpcshell/xpcshell.ini
@@ -48,11 +48,11 @@ tags = webextensions in-process-webexten
 [test_ext_unknown_permissions.js]
 [test_locale_converter.js]
 [test_locale_data.js]
 [test_ext_ipcBlob.js]
 
 [test_ext_runtime_sendMessage_args.js]
 
 [include:xpcshell-common.ini]
-skip-if = os == 'win' # Windows extensions always run OOP
+skip-if = os != 'android' # only android is left without e10s
 [include:xpcshell-content.ini]
-skip-if = os == 'win' # Windows extensions always run OOP
+skip-if = os != 'android' # only android is left without e10s
--- a/toolkit/content/customElements.js
+++ b/toolkit/content/customElements.js
@@ -8,21 +8,64 @@
 
 // This is loaded into chrome windows with the subscript loader. Wrap in
 // a block to prevent accidentally leaking globals onto `window`.
 {
 
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 
+// The listener of DOMContentLoaded must be set on window, rather than
+// document, because the window can go away before the event is fired.
+// In that case, we don't want to initialize anything, otherwise we
+// may be leaking things because they will never be destroyed after.
+let gIsDOMContentLoaded = false;
+const gElementsPendingConnection = new Set();
+window.addEventListener("DOMContentLoaded", () => {
+  gIsDOMContentLoaded = true;
+  for (let element of gElementsPendingConnection) {
+    try {
+      if (element.isConnected) {
+        element.connectedCallback();
+      }
+    } catch (ex) { console.error(ex); }
+  }
+  gElementsPendingConnection.clear();
+}, { once: true, capture: true });
+
 const gXULDOMParser = new DOMParser();
 gXULDOMParser.forceEnableXULXBL();
 
 class MozXULElement extends XULElement {
   /**
+   * Sometimes an element may not want to run connectedCallback logic during
+   * parse. This could be because we don't want to initialize the element before
+   * the element's contents have been fully parsed, or for performance reasons.
+   * If you'd like to opt-in to this, then add this to the beginning of your
+   * `connectedCallback` and `disconnectedCallback`:
+   *
+   *    if (this.delayConnectedCallback()) { return }
+   *
+   * And this at the beginning of your `attributeChangedCallback`
+   *
+   *    if (!this.isConnectedAndReady) { return; }
+   */
+  delayConnectedCallback() {
+    if (gIsDOMContentLoaded) {
+      return false;
+    }
+    gElementsPendingConnection.add(this);
+    return true;
+  }
+
+  get isConnectedAndReady() {
+    return gIsDOMContentLoaded && this.isConnected;
+  }
+
+  /**
    * Allows eager deterministic construction of XUL elements with XBL attached, by
    * parsing an element tree and returning a DOM fragment to be inserted in the
    * document before any of the inner elements is referenced by JavaScript.
    *
    * This process is required instead of calling the createElement method directly
    * because bindings get attached when:
    *
    * 1. the node gets a layout frame constructed, or
--- a/toolkit/content/tests/browser/browser.ini
+++ b/toolkit/content/tests/browser/browser.ini
@@ -106,16 +106,22 @@ skip-if = os == "linux" && !debug # Bug 
 [browser_mediaPlayback.js]
 tags = audiochannel
 [browser_mediaPlayback_mute.js]
 tags = audiochannel
 [browser_mediaPlayback_suspended.js]
 tags = audiochannel
 [browser_mediaPlayback_suspended_multipleAudio.js]
 tags = audiochannel
+[browser_media_wakelock.js]
+support-files =
+  file_video.html
+  file_videoWithoutAudioTrack.html
+  gizmo.mp4
+  gizmo-noaudio.webm
 [browser_mute.js]
 tags = audiochannel
 [browser_mute2.js]
 tags = audiochannel
 [browser_mute_plugIn.js]
 tags = audiochannel
 [browser_mute_webAudio.js]
 tags = audiochannel
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/browser/browser_media_wakelock.js
@@ -0,0 +1,137 @@
+/**
+ * Test whether the wakelock state is correct under different situations. However,
+ * the lock state of power manager doesn't equal to the actual platform lock.
+ * Now we don't have any way to detect whether platform lock is set correctly or
+ * not, but we can at least make sure the specific topic's state in power manager
+ * is correct.
+ */
+"use strict";
+
+const PAGE = "https://example.com/browser/toolkit/content/tests/browser/file_video.html";
+const PAGE2 = "https://example.com/browser/toolkit/content/tests/browser/file_videoWithoutAudioTrack.html";
+const PAGE3 = "https://example.com/browser/toolkit/content/tests/browser/file_mediaPlayback2.html";
+
+const powerManagerService = Cc["@mozilla.org/power/powermanagerservice;1"];
+const powerManager = powerManagerService.getService(Ci.nsIPowerManagerService);
+
+function wakeLockObserved(observeTopic, checkFn) {
+  return new Promise(resolve => {
+    function wakeLockListener() {}
+    wakeLockListener.prototype = {
+      QueryInterface: ChromeUtils.generateQI([Ci.nsIDOMMozWakeLockListener]),
+      callback: (topic, state) => {
+        if (topic == observeTopic && checkFn(state)) {
+          powerManager.removeWakeLockListener(wakeLockListener.prototype);
+          resolve();
+        }
+      },
+    };
+    powerManager.addWakeLockListener(wakeLockListener.prototype);
+  });
+}
+
+function getWakeLockState(topic, needLock, isTabInForeground) {
+  const tabState = isTabInForeground ? "foreground" : "background";
+  const promise = wakeLockObserved(topic, (state) => state == `locked-${tabState}`);
+  return {
+    check: async () => {
+      if (needLock) {
+        await promise;
+        ok(true, `requested '${topic}' wakelock in ${tabState}`);
+      } else {
+        const lockState = powerManager.getWakeLockState(topic);
+        info(`topic=${topic}, state=${lockState}`);
+        ok(lockState == "unlocked", `doesn't request lock for '${topic}'`);
+      }
+    },
+  };
+}
+
+async function waitUntilVideoStarted({muted, volume} = {}) {
+  const video = content.document.getElementById("v");
+  if (!video) {
+    ok(false, "can't get media element!");
+    return;
+  }
+  if (muted) {
+    video.muted = muted;
+  }
+  if (volume !== undefined) {
+    video.volume = volume;
+  }
+  ok(await video.play().then(() => true, () => false),
+     `video started playing.`);
+}
+
+async function test_media_wakelock({description, url, videoAttsParams, lockAudio, lockVideo}) {
+  info(`- start a new test for '${description}' -`);
+  info(`- open new foreground tab -`);
+  const tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser, url);
+  const browser = tab.linkedBrowser;
+
+  let audioWakeLock = getWakeLockState("audio-playing", lockAudio, true);
+  let videoWakeLock = getWakeLockState("video-playing", lockVideo, true);
+
+  info(`- wait for media starting playing -`);
+  await ContentTask.spawn(browser, videoAttsParams, waitUntilVideoStarted);
+  await audioWakeLock.check();
+  await videoWakeLock.check();
+
+  info(`- switch tab to background -`);
+  audioWakeLock = getWakeLockState("audio-playing", lockAudio, false);
+  videoWakeLock = getWakeLockState("video-playing", lockVideo, false);
+  const tab2 = await BrowserTestUtils.openNewForegroundTab(window.gBrowser,
+                                                           "about:blank");
+  await audioWakeLock.check();
+  await videoWakeLock.check();
+
+  info(`- switch tab to foreground again -`);
+  audioWakeLock = getWakeLockState("audio-playing", lockAudio, true);
+  videoWakeLock = getWakeLockState("video-playing", lockVideo, true);
+  await BrowserTestUtils.switchTab(window.gBrowser, tab);
+  await audioWakeLock.check();
+  await videoWakeLock.check();
+
+  info(`- remove tabs -`);
+  BrowserTestUtils.removeTab(tab);
+  BrowserTestUtils.removeTab(tab2);
+}
+
+add_task(async function start_tests() {
+  await test_media_wakelock({
+    description: "playing video",
+    url: PAGE,
+    lockAudio: true,
+    lockVideo: true,
+  });
+  await test_media_wakelock({
+    description: "playing muted video",
+    url: PAGE,
+    videoAttsParams: {
+      muted: true,
+    },
+    lockAudio: false,
+    lockVideo: true,
+  });
+  await test_media_wakelock({
+    description: "playing volume=0 video",
+    url: PAGE,
+    videoAttsParams: {
+      volume: 0.0,
+    },
+    lockAudio: false,
+    lockVideo: true,
+  });
+  await test_media_wakelock({
+    description: "playing video without audio track",
+    url: PAGE2,
+    lockAudio: false,
+    lockVideo: false,
+  });
+  await test_media_wakelock({
+    description: "playing only audio",
+    url: PAGE3,
+    lockAudio: true,
+    lockVideo: false,
+  });
+});
--- a/toolkit/content/tests/browser/file_mediaPlayback2.html
+++ b/toolkit/content/tests/browser/file_mediaPlayback2.html
@@ -3,11 +3,12 @@
 <script type="text/javascript">
 var audio = new Audio();
 audio.oncanplay = function() {
   audio.oncanplay = null;
   audio.play();
 };
 audio.src = "audio.ogg";
 audio.loop = true;
+audio.id = "v";
 document.body.appendChild(audio);
 </script>
 </body>
--- a/toolkit/content/tests/browser/file_video.html
+++ b/toolkit/content/tests/browser/file_video.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html>
 <html>
 <head>
 <title>video</title>
 </head>
 <body>
-<video id="v" src="gizmo.mp4" controls></video>
+<video id="v" src="gizmo.mp4" controls loop></video>
 </body>
-</html>
\ No newline at end of file
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/browser/file_videoWithoutAudioTrack.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>video without audio track</title>
+</head>
+<body>
+<video id="v" src="gizmo-noaudio.webm" controls loop></video>
+</body>
+</html>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9f412cb6e3d8a26ead6205aa7aae6c292fb294b3
GIT binary patch
literal 112663
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%0Dj#F#}cziI!-!fLj>ImUkaE1-ICV^}P
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
M9ROl?<q!7%00c`kC;$Ke
--- a/toolkit/content/tests/chrome/chrome.ini
+++ b/toolkit/content/tests/chrome/chrome.ini
@@ -100,16 +100,17 @@ support-files = bug451540_window.xul
 skip-if = (os == 'mac' && os_version == '10.10') # Unexpectedly perma-passes on OSX 10.10
 [test_bug792324.xul]
 [test_bug1048178.xul]
 skip-if = toolkit == "cocoa"
 [test_button.xul]
 [test_closemenu_attribute.xul]
 [test_contextmenu_list.xul]
 [test_custom_element_base.xul]
+[test_custom_element_delay_connection.xul]
 [test_deck.xul]
 [test_dialogfocus.xul]
 [test_editor_for_input_with_autocomplete.html]
 [test_editor_for_textbox_with_autocomplete.xul]
 [test_findbar.xul]
 subsuite = clipboard
 [test_findbar_entireword.xul]
 [test_findbar_events.xul]
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/chrome/test_custom_element_delay_connection.xul
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+
+<window title="Custom Element Base Delayed Connected"
+  onload="runTests();"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+
+  <!-- test results are displayed in the html:body -->
+  <body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
+
+  <script type="application/javascript"><![CDATA[
+  let nativeDOMContentLoadedFired = false;
+  document.addEventListener("DOMContentLoaded", () => {
+    nativeDOMContentLoadedFired = true;
+  }, { once: true });
+
+  // To test `delayConnectedCallback` and `isConnectedAndReady` we have to run this before
+  // DOMContentLoaded, which is why this is done in a separate script that runs
+  // immediately and not in `runTests`.
+  let delayedConnectionPromise = new Promise(resolve => {
+
+    let numSkippedAttributeChanges = 0;
+    let numDelayedConnections = 0;
+    let numDelayedDisconnections = 0;
+    let finishedWaitingForDOMReady = false;
+
+    // Register this custom element before DOMContentLoaded has fired and before it's parsed in
+    // the markup:
+    customElements.define("delayed-connection", class DelayedConnection extends MozXULElement {
+      static get observedAttributes() { return ["foo"]; }
+      attributeChangedCallback() {
+        ok(!this.isConnectedAndReady,
+           "attributeChangedCallback fires before isConnectedAndReady");
+        ok(!nativeDOMContentLoadedFired,
+           "attributeChangedCallback fires before nativeDOMContentLoadedFired");
+        numSkippedAttributeChanges++;
+      }
+      connectedCallback() {
+        if (this.delayConnectedCallback()) {
+          ok(!finishedWaitingForDOMReady,
+             "connectedCallback with delayConnectedCallback fires before finishedWaitingForDOMReady");
+          ok(!this.isConnectedAndReady,
+             "connectedCallback with delayConnectedCallback fires before isConnectedAndReady");
+          ok(!nativeDOMContentLoadedFired,
+             "connectedCallback with delayConnectedCallback fires before nativeDOMContentLoadedFired");
+          numDelayedConnections++;
+          return;
+        }
+
+        ok(!finishedWaitingForDOMReady,
+           "connectedCallback only fires once when DOM is ready");
+        ok(this.isConnectedAndReady,
+           "isConnectedAndReady during connectedCallback");
+        ok(!nativeDOMContentLoadedFired,
+           "delayed connectedCallback fires before nativeDOMContentLoadedFired");
+
+        is(numSkippedAttributeChanges, 2,
+           "Correct number of skipped attribute changes");
+        is(numDelayedConnections, 2,
+           "Correct number of delayed connections");
+        is(numDelayedDisconnections, 1,
+           "Correct number of delated disconnections");
+
+        finishedWaitingForDOMReady = true;
+        resolve();
+      }
+      disconnectedCallback() {
+        ok(this.delayConnectedCallback(),
+           "disconnectedCallback while DOM not ready");
+        is(numDelayedDisconnections, 0,
+           "disconnectedCallback fired only once");
+        numDelayedDisconnections++;
+      }
+    });
+  });
+
+  // This should be called after the element is parsed below this.
+  function mutateDelayedConnection() {
+    // Fire connectedCallback and attributeChangedCallback twice before DOMContentLoaded
+    // fires. The first connectedCallback is due to the parse and the second due to re-appending.
+    let delayedConnection = document.querySelector("delayed-connection");
+    delayedConnection.setAttribute("foo", "bar");
+    delayedConnection.remove();
+    delayedConnection.setAttribute("foo", "bat");
+    document.documentElement.append(delayedConnection);
+  }
+  ]]>
+  </script>
+
+  <delayed-connection></delayed-connection>
+
+  <!-- test code goes here -->
+  <script type="application/javascript"><![CDATA[
+  SimpleTest.waitForExplicitFinish();
+  mutateDelayedConnection();
+
+  async function runTests() {
+    info("Waiting for delayed connection to fire");
+    ok(nativeDOMContentLoadedFired,
+       "nativeDOMContentLoadedFired is true in runTests");
+    await delayedConnectionPromise;
+    SimpleTest.finish();
+  }
+  ]]>
+  </script>
+</window>
\ No newline at end of file
--- a/toolkit/content/widgets/radio.js
+++ b/toolkit/content/widgets/radio.js
@@ -107,16 +107,20 @@ class MozRadiogroup extends MozBaseContr
         return;
       }
       this.removeAttribute("focused");
       this.focusedItem = null;
     });
   }
 
   connectedCallback() {
+    if (this.delayConnectedCallback()) {
+      return;
+    }
+
     this.init();
     if (!this.value) {
       this.selectedIndex = 0;
     }
   }
 
   init() {
     this._radioChildren = null;